partially unsupervised – Telegram
partially unsupervised
9.41K subscribers
26 photos
2 files
198 links
@arsenyinfo пишет про software engineering и machine learning
Download Telegram
Одна из самых важных вещей в профессиональном развитии - поработать с фанатиками. Правильный фанатик должен (1) обладать достаточно глубокими знаниями в некоторой нише, (2) быть нетерпимым к посредственной, по его меркам, работе.

Такой фанатик может быть неприятным человеком, а его критерии абсолютно неадекватны в текущем контексте. Зато через его придирки можно очень быстро научиться хотя бы базовым приемам (80 на 20, как обычно) и составить свое представление о том, что такое хорошо и что такое плохо. Необязательно делать быстродействие вашего кода религией, но поработать с человеком, который стремится любой ценой оптимизировать все сколько-нибудь заметные в профайлере функции - очень полезно.

Так что если у вас есть коллега, который придирается к каждой строчке в код ревью, хуесосит тех, кто не понимает физический смысл Гессиана, возмущается несоблюдением канонов скрама или упорно критикует то, что вы считаете продуктовой стратегией - радуйтесь и извлекайте из этого выгоду.

А вот если ваши коллеги - скучные посредственности, неготовые выставить планку повыше хоть в чем-нибудь, постарайтесь не задерживаться в такой команде. Деградация - бессердечная сука.
👍3🔥1
Если вы жалуетесь на высокое и постоянно растущее количество сущностей (будь то новые фреймворки на гитхабе или deep learning статьи на arxiv.org) в нашей условно интеллектуальной профессии, знайте, что вы серьезно опоздали с этими жалобами.

“Уже в 1600 г. Уильям Гильберт жаловался, что интеллектуалы должны ориентироваться в «столь обширном океане книг, которые смущают и утомляют умы занимающихся наукой»” - Дэвид Вуттон, “Изобретение науки. Новая история научной революции”
Большинство статей "топ 10 технологий 2010-ых" или "что нас ждет в 2020-ых" - неинтересный кликбейт, да еще и отражающий значительный bias автора.

В противоположность, статья https://habr.com/ru/post/481844/ выглядит максимально объективной и здравой, без перегибов типа "Мы на пороге сильного ИИ" и "AI winter is coming".
Если новогодние каникулы окончательно вам наскучили, предлагаю такое странное развлечение: программирование на татарском https://github.com/minteemer/ElanTele/blob/master/example.et
Хороший текст о самоидентификации через работу.

Я не согласен ровно с одним тезисом: "нормальный человек не может себя ассоциировать с тем, что он делает на этой работе" - почему бы и нет, иногда получается. Только надо понимать, насколько эта самоидентификация через работу твоя собственная, а насколько - результат пропаганды на тему we're making world a better place.

И, как говорят в ML тусовочке, остерегайтесь оверфита (т.е. диверсифицируйте источники эндорфинов). Чем больше себя вы идентифицируете с модным стартапом, который "помогает миллионам людей…", тем сильнее может ебануть в один не самый прекрасный день.
👍1
Пока в Москве шутят про то что стало трудно дышать из-за запаха выгоревших миллениалов, на западе уже во всю тревожатся за психическое здоровье людей из тех-индустрии. Болезни на фоне стресса, депрессия и участившиеся самоубийства - чего только нет. Я в своём кругу друзей и знакомых совсем тяжелых случаев не видел пока, но замечаю, что все чаще люди задают вопрос «а чем я вообще занимаюсь?».

Считаю, что вопрос этот правильный, и что основная проблема психического здоровья в тех-индустрии не в росте требований и отвественности (есть места и потребовательнее), а в том, что нормальный человек не может себя ассоциировать с тем, что он делает на этой работе. А пытается.

Ежедневный поиск продакт маркет фита, написание кода по запросу какой-то обезьяны, организация очередного конкурса по перетягиванию каната на лугу за МКАДОМ, борьба за доли процентов в метриках, погоня за партнерствами и интеграциями - не характеризуют и не описывают вас как человека, не отвечают на вопрос «кто я» и, уж тем более, «зачем».

Если вы, допустим, занимаетесь платежками и считаете, что вы ПОМОГАЕТЕ МИЛЛИОНАМ ЛЮДЕЙ УДОБНЕЕ СОВЕРШАТЬ ПОКУПКИ ОНЛАЕН, то сэкономьте себе время и не читайте дальше. Увидимся лет через 10 у невролога.

В какой-то момент тех-индустрия стала, по сути, работой на заводе. А мы, техножрецы её, стали пролетариатом. Порог входа низкий. Чтобы получить работу достаточно просто иметь температуру тела в районе 36 градусов. Если в начале ХХ века твой дед шел из деревни (где ему не дали работать) на завод, то теперь ты идешь из университета (где тебе не объяснили разницу между фундаментальной и прикладной наукой) в ВЫСОКОТЕХНОЛОГИЧНУЮ отрасль.

При этом, работа-то не хуже других. Нормальная работа. И деньги зарабатывать важно и хорошо. Просто иногда ты, юзернейм, перестаешь верить трескотне об изменении мира при помощи технологий (к созданию которых ты и отношения-то не имеешь). И в такие моменты ты понимаешь, что, в лучшем случае, ты просто пытаешься заработать еще немножко денег для хозяина. А чаще всего - ты просто на сборочной линии гайки крутишь. И что твое реальное будущее, если повезет и здоровье позволит, это еще какое-то время продолжать зарабатывать деньги для хозяина, или продолжать крутить гайки на сборочной линии. Кому хочешь тошно станет.

И тут мне вспоминается один мой товарищ финансист. Задолго до самовозгорания миллениалов, еще где-то в 2005-м, он использовал прием, который тогда мне казался просто забавной причудой. Большую часть времени он занимался финансовой стороной слияний-поглощений и прочих больших проектов, занимая директорские и C-level позиции в банках. А в свободные часы (а с такой работой, скорее, минуты) он писал рассказы. И даже умудрился пару лет отучиться в Горьковском литинституте. На тот момент он ни одной строчки не опубликовал. Так вот. Везде, кроме деловых встреч, он представлялся ПИСАТЕЛЕМ. Когда было хорошее настроение - говорил еще что он «немецкий писатель». Тогда, 15 лет назад, это было просто забавно. Я еще тогда думал, что может быть это проявление скромности, или способ избежать неловкости в компании, где других банкиров нет. А теперь понимаю что это гениальный механизм сохранения психического здоровья. Потому что не может нормальный человек ассоциировать себя с экселем, нормой прибыли и прочей ебитдой. Сколько бы денег не приносила работа по найму, если у тебя есть страсть или мечта, хотя бы микроскопическая, в которой ты никак не преуспел - намного полезнее для здоровья ассоциировать себя с ней.

В самом деле, не считал же молодой Эйнштейн себя клерком патентного бюро, а Цой - кочегаром.
👍3👎1🔥1
У меня есть порочная слабость - люблю мельком подглядывать в чужие ноутбуки в публичных местах и смотреть, кто чем занимается. Как раз недавно судьба перебрасывала меня в другое полушарие транзитом через два бизнес-зала в аэропортах, дав возможность слегка подсматривать за успешными людьми.

Датасет такой: из 10+ работавших наблюдаемых (тех, кто не работал, а смотрел ютуб, я сразу исключил из выборки), никто не программировал даже близко (т.е. не рыскал по stackoverflow и не читал arxiv). Писали документы в ворде, крутили таблички в экселе, ковырялись в емейлах и powerpoint-презентациях с логотипами компаний большой четверки.

Те, кто идет писать софт, следуя сугубо меркантильному духу, могут делать выводы самостоятельно.
👍2
В мире компьютерного зрения часто бывает так, что нейросеть превосходит тебя [в конкретной узкой задаче] - например, уверенно находит объект в углу маленькой темной картинки, даже если это не было главной целью обучения. К этому быстро привыкаешь.

Но к тому, что IDE окажется значительно умнее меня, я оказался не готов. Довелось мне влезть в код на некоем малознакомом мне вычурном JVM-языке (знаете, такой, в котором */*-:|-+> может оказаться не только валидным, но и идиоматичным кодом). Вынужден признать: в итоге почти всю работу делала IDE, а я в основном перебирал три-четыре хоткея.
На моем любимом сабреддите CS Career Questions недавно появился пост с многообещающим названием "How do I manage a senior dev who writes junior quality code and wont listen to feedback?". Суть поста проста: очередной программист пришел на старый проект, охуел от свалившейся кодовой базы и начал ныть, что кругом дураки. Т.к. я недавно тоже влез в сложный код, мне близка сама ситуация, а вот этот конкретный повод для нытья - не очень.

Человекам свойственно принимать все непривычное в штыки, считать его чуждым. Лирическое отступление: лет восемь назад я был в баре с коллегой из Парижа (да, у меня была крайне сложная работа!). Коллега говорил по-английски с жутким акцентом, периодически вставляя французские словечки в наивной надежде, что это поможет его понимать. Эта почти французская речь несомненно относилась к категории чуждого для бравого парня за соседним столиком, и после какого-то стакана он пришел к нам с предъявами вида "ты че, француз бля? ща мой кореш поблюет, и мы вам ебальники бля бить будем!" (спойлер: ни один ебальник не пострадал).

Конечно, этот пример суть гипербола. Но суть та же: просто человек остро реагирует на непривычное. Вернемся к программированию: новый для человека код без контекста (а исторический контекст быстро не уловить) иногда вызывает фрустрацию и разные отчасти деструктивные желания от "переписать все к черту" до "надо бы сделать так, чтобы этого тупицу уволили".

А ведь на самом деле этот плохой, с точки зрения новичка код, плох только субъективно. Что-то действительно не очень, что-то - вкусовщина, что-то - отличные решения, требующие больше контекста. И без этого самого контекста отличать агнцов от козлищ не получится. Потому мораль такая: если ты пришел в проект, и у тебя горит жопа, не спеши устраивать революцию, работай спокойно, вникни поглубже, подумай дважды. Революция подождет какое-то время.

Все это более или менее актуально не только для программирования, но и для всей нашей индустрии - легко могу представить себе похожую историю, например, про маркетинг.
🔥1
Обнаружен стартап про гороскопы с машинлернингом и хаскелем внутри.

Если бы Маяковский жил лет на 100 позже, он вполне мог бы написать:
«я бы haskell выучил только за то,
чтоб хуярить на нем гороскопы».
😁1
Навыки, которыми хорошо козырять перед людьми на data science конференциях:
- всеми правдами и неправдами улучшать метрику на kaggle соревнованиях;
- реализовывать архитектуры и трюки из статей 2019 2020 года;
- обучать GANы и делать клоны thispersondoesnotexist.com;
- добиваться 100% загрузки множества видеокарт.

Навыки, которые на самом деле нужны ML инженеру в обычной работе:
- декомпозировать задачи;
- добывать больше новых данных и обеспечивать чистоту существующих;
- локализовывать сложновоспроизводимые проблемы и разбираться в их причинах всеми доступными инструментами от дебаггера до полного перебора безумных гипотез;
- писать тесты, которые действительно ловят баги, а не просто занимают время на CI сервере.

Навыки, которые есть у тебя:
- ...

Навыки, которые есть у меня:
- пиздеть в интернете.
Machine Learning in Python: Main developments and technology trends in data science, machine learning, and artificial intelligence

Обзорная статья про нынешнее положение дел в машинном обучении; кажется, что уровень детализации отлично подойдет пролетариям гребцам прагматичным инженерам, которые делают какие-то штуки своими руками и не очень подойдет тем, кто предпочитает рассуждать про то, как AI трансформирует общество или, напротив, сразу спускаться на уровень конкретных формул.
Я мало знаю про алготрейдинг. Кажется, что это область для действительно умных или излишне самоуверенных, я ни к одной категории себя не отношу, потому особенно не интересуюсь. Но эта статья мне понравилась: просто и задорно объясняет, почему мамкины трейдеры, которые прошли краткий курс по машинному обучению, обречены на провал. Ссылкой можно тыкать всем четким пацанчикам, которые вздумали наебать систему и заработать на форексе и прочих бинарных опционах.

Для кликабельности приведу цитату:

Хотя искусственные нейронные сети и не являются «электронной моделью человеческого мозга», некоторые свойства «разума» они все же проявляют. В основном это «лень» и «хитрость». Причем одновременно. И это не последствия зарождающегося в паре сотен «нейронов» самосознания. Это последствия того, что за популистским термином «обучение» на самом деле кроется термин «оптимизация».
Почему надо делиться наработками, даже если кажется, что в них нет ничего нового и интересного.
Forwarded from In Silico
У людей, которые что-то сделали, периодически возникает необходимость об этом рассказать — в статье, презентации, в обычном человеческом разговоре. В этот момент у них часто можно наблюдать любопытные симптомы своеобразного синдрома самозванца: они считают, что в их работе нет ровным счётом ничего интересного, сделать её мог вообще кто угодно, а поэтому зачем, собственно, о ней рассказывать? Лучше и не рассказывать вовсе.

На эту тему я хотел привести пару поучительных примеров. Это важные и очень известные научные статьи, оказавшие значительное влияние как минимум на мою жизнь, в которых при этом не делается вообще никаких открытий, да и в принципе их, действительно, мог бы написать «кто угодно».

1. Fabrizio Sebastiani. Machine Learning in Automated Text Categorization, 2002 год. Важнейшая работа для тех, кто занимался классификацией текстов в нулевых. Работа обзорная, из неё можно узнать: какие встречаются постановки задач и наборы данных; какие известны методы; каким образом эти методы исследуются, какие метрики являются общепринятыми; каковы результаты сравнения всех этих методов на известных наборах данных; какие основные работы по теме написаны, что нужно читать дальше, если хочется углубиться.
2. Christopher J.C. Burges. From RankNet to LambdaRank to LambdaMART: An Overview, 2010 год. А это — одна из важных работ для тех, кто занимается обучением ранжированию. Тут излагается теория, лежащая в основе знаменитых алгоритмов; некоторые алгоритмические трюки для ускорения вычислений; причины, по которым эти алгоритмы можно считать эффективными.

Что нового изобрели авторы в этих работах? Ничего! Полезны ли эти работы? Разумеется!

Время, потраченное на доскональное разбирательство в теме и структурирование понимания является тем временем, которое экономится для потенциального читателя. Это — та самая дополнительная польза, которую хочет читатель получить, и её сложно переоценить. Думаю, многие периодически сталкиваются с какими-то неизвестными им доселе областями, в которых есть ворох подлежащих изучению артефактов, и в такой ситуации хороший обзор может оказаться настоящим спасением.

Поэтому делитесь своими знаниями, добытыми долгим трудом. Если вы «всего лишь» потратили кучу времени на то, чтобы что-то понять — вы можете сэкономить эту кучу времени другим людям, если поделитесь результатами своих изысканий. Не страшно, что в процессе вы не изобрели ничего, что сами считали бы новым или прорывным. Иногда даже простое знание о том, что определённый способ что-то сделать сработал, очень помогает.

Алексей Шаграев
👍2🔥1
Впервые за последние N месяцев работы мне понадобилась математика, которой не учат в школе: заменил несколько последовательных арифметических действий на свертку.

Как после этого можно всерьез утверждать, что ML инженерам можно не знать математику?
15 лет назад мы с пацанами по соседству потратили месяц и все карманные деньги, чтобы соединить три компьютера из одного подъезда. Благодаря этому, мы могли скачивать друг у друга такие ценные файлы, как, например, смешные видеоролики. Это казалось практически чудом - раньше, чтобы пополнить свою коллекцию, нужно было доставать из компьютера жесткий диск и идти в гости. Отдельной заботой был ответ на сложный вопрос "а места на диске хватит?".

Сейчас, лежа на кровати в Калифорнии, я захожу по SSH на компьютер в Беларуси через сервер в Орегоне, который тысячами скачивает видео с нескольких CDNов и складывает на копеечный жесткий диск, чтобы потом скормить нейросети. И этот пайплайн вовсе не кажется удивительным: запустить это все - задача примерно того же уровня сложности, как приготовление завтрака.

Примерно такие сравнения приходят на ум, когда кто-то начинает канючить "в этих ваших кампьюктерах никакого прогресса".
👍1
В эфире снова моя любимая рубрика "Критика нейросетей". На этот раз под раздачу попали сервисы по колоризации, увеличение разрешения и подобным улучшениям картинки.

Основная претензия: восстановленное изображение зачастую не соответствует оригиналу. В первом же примере несколько сервисов пытается нафантазировать цвет автомобиля, получается плохо. Остальные примеры про то же самое: чуда не происходит.

Важный нюанс, которому в статье уделено недостаточно, как мне кажется, внимания: дело не в технологии, а в продуктах на ее основе и их маркетинге.

Нейросети, конечно, не при чем. Каждый, кто занимался задачей колоризации или хотя бы думал о ней больше 10 минут, понимает, что идеальное решение невозможно, исходя из самой постановки задачи. Об этом писали еще в донейросетевую эпоху:

Automatic image colorization consists in adding colors to a new greyscale image without any user intervention. The problem, stated like this, is ill-posed, in the sense that one cannot guess the colors to assign to a greyscale image without any prior knowledge. Indeed, many objects can have different colors: not only artificial, plastic objects can have random colors, but natural objects like tree leaves can have various nuances of green and turn brown during autumn, without a significant change of shape.

Automatic Image Colorization via Multimodal Predictions, 2008 год. Наверняка писали и раньше, но мне лень искать глубже.

Иными словами:
- проблема действительно существует;
- она актуальна для редкого меньшинства случаев, для большинства консьюмерских приложений все ок;
- ее суть не в решении, будь то нейросети или еще какая-то магия, а в самой постановке задачи;
- маркетинг, выставляющий такие сервисы как что-то волшебно всемогущее, непрофессионален и, действительно, местами даже неэтичен.
На небе только и разговоров, что о коронавирусе…

COVID-19 стал идеальной темой для всяких праздных разговоров - за обедом, на вечеринке, в чатике друзей. У темы есть множество ответвлений - можно поговорить о политике (действительно ли авторитарные режимы лучше справляются с карантином?), об экономике (рынки волатильны, фабрики частично простаивают), о работе из дома и многом другом.

Но если вы настоящий нерд, и вместо обсуждения политики хотите вникнуть во что-нибудь по-настоящему задротское, вот вам пара ссылок:
- свежий обзорный курс по вирусологии, судя по полутора лекциям, которые я успел посмотреть, не требует особых предварительных знаний.
- DeepMind публикует свои результаты предсказания структуры вируса при помощи свежего AlphaFold (тот же Alpha-, что и в AlphaGo, например)

А если вы не любите всякую заумь, зато предпочитаете мыслить глобально, то наверняка уже читали Coronavirus: The Black Swan of 2020 от Sequoia Capital.
🔥1
Наконец-то дочитал Code Complete by Steve McConnell. Эта книга входит в кучу списков с пафосными заголовками типа Top N Books Every Software Engineer Should Have Read. Забегая вперед: думаю, что не зря.

На чтение ушло добрых полгода. По трем причинам: книга большая, не особенно захватывающая, если не сказать, что местами занудная, и, наконец, я ее читал преимущественно в поездах и самолетах.

Книга написана в 1993, хоть и значительно дополнена перед вторым изданием (2004 год). Это накладывает определенный отпечаток: книги про программирование обычно лежат на спектре от “вечная классика, будет актуальна еще долго” (например, Introduction to Algorithms Кормена и компании) до “устаревает после выхода новой мажорной версии хипстерского фреймворка”. Code Complete - книга про хорошие software engineering практики, потому она лежит где-то на середине этого спектра. Как следствие, кое-что уже слегка устарело по нынешней моде.

Некоторые идеи кажутся банальностями за авторством Капитана Очевидность. Некоторые главы хочется вызывают ощущение “дед опять забыл выпить таблетки” (например, долгие витиеватые рассуждения, что в современных языках лучше не использовать goto, но иногда все-таки можно). Кстати, о языках: в примерах используется C++, Java и Visual Basic (!) - я даже забыл о существовании последнего. И несмотря на это, в оставшемся материале много актуального по сей день - о проектировании, тулинге, тестировании, дебаггинге и т.п.

Строго рекомендую тем, кто ощущает себя недостаточно крутым в составлении правильных абстракций, хочет обзавестись парочкой полезных привычек или знает, что коллеги явно не любят читать ваш код.
👍1
Едва ли что-то бесит в околопрограммировании сильнее, чем ожидание внутри итерации. В этом контексте итерации - это не спринты или какие-нибудь деливери циклы, а именно итерации внутри одной технической задачи: написал что-нибудь, запустил, посмотрел результат, что-нибудь пофиксил, и так далее.

Эта проблема актуальна во многих задачах, просто ждать приходится разного: компиляции, прогона тестов, сборки docker образа, агрегации датасета, обучения модели... И самое коварное время ожидания - не какие-нибудь дни и недели, а часы.

Если приходится ждать минуты, это неприятно, но терпимо - как раз можно отвлечься на чатики, сходить за кофе, размяться и так далее.

Если регулярно приходится ждать дни или недели, понятно, что терпеть это невозможно, и приходится перестраивать под это процесс. У меня такое бывало только с обучением нейросетей на больших датасетах, и адаптировать процесс не очень сложно: сначала дебажишься на малом сабсете, ловишь мелкие баги, запускаешь эксперимент и с чистой совестью переключаешься на следующую большую задачу; через неделю можно будет посмотреть результат.

А вот средние задачи, которые занимают несколько часов, убивают всю продуктивность. Их нельзя полностью "выгрузить из памяти", чтобы вернуться через неделю, нельзя и просто переждать, бездельничая. Приходится переключать на другую задачу, и как только более или менее в нее погружаешься, выныривать обратно. Так и проходят день за днем: вроде бы работал все время, и ни в чем не продвинулся.
💯1