На пути к естественному интеллекту

в 22:25, , рубрики: computer vision, data mining, machine learning, Блог компании JUG.ru Group, машинное обучение, обработка изображений

Machine Learning с каждым днём становится всё больше. Кажется, что любая компания, у которой есть хотя бы пять сотрудников, хочет себе разработать или купить решение на машинном обучении. Считать овец, считать свёклу, считать покупателей, считать товар. Либо прогнозировать всё то же самое.
image
Формула проста: если цена внедрения ниже, чем ты платишь охраннику — ставь управляемый шлагбаум. Потери от бездельников выше стоимости внедрения биометрической системы учёта времени — внедряй. «Эксперт» берёт взятки за контроль качества продукта? Продублируй его системой контроля качества.
Далеко не всегда можно оценить стоимость разработки. Но зачастую хватает даже порядка, чтобы начать работы и привлечь инвесторов.
Но статья, скорее, не про это. Статья про специалистов по машинному обучению. Про бум специальности, про то, какие люди начинают приходить, как из единого, общего массива специалистов начинают вырисовываться профессии, про то, как сейчас решать ML-задачи.

Disclaimer. Когда-то, 10 лет назад я начинал свою сознательную жизнь именно как разработчик Computer Vision (CV), а не более общего Machine Learning. Так что фокус статьи сдвинут в эту сторону.

До 2012 года нейронных сетей в современном понимании не существовало. В CV было несколько работающих алгоритмов, которые решали определенные задачи с помощью нейронных сетей. Но их можно было решить и более простыми методами плюс минус с той же точностью.
В классическом Data Science нейронные сети иногда использовали, но не часто. В принципе, и сейчас вы скорее наткнётесь на решения, использующие Boosting — алгоритмы (1,2) для топовых решений, почти всех побед в Kaggle.
Лет 10 назад, чтобы заниматься распознаванием изображений, нужно было знать много (фурье/вейвлет-теорию, статистику, морфологию, десятки методов, таких как SIFT/HOG/Haar и т. д.). И даже если вы это знали, то далеко не факт, что решение, которое вы сделали, заработает. Алгоритмы были очень неустойчивы, качество плыло. Подход мог принципиально не работать. Производительности не хватало. Реально из 10 задач всего 1-2 имели пристойное решение.
Тогда CV было прерогативой небольших исследовательских групп, их решения попадали в продакшн в единичных случаях.
За 6-10 лет всё несколько изменилось. Сначала появились данные, теперь появились алгоритмы, чтобы работать с этими данными. Объявления о том, что требуются специалисты по ML висят на каждом гараже. Но откуда берутся специалисты? Что их порождает и в чём они разбираются?

Классика

Здесь обычно следует рассказ о том, что в институтах ничему не учат. Программы устарели, всё вырождается и т. д. Мне так не кажется. Я знаю кучу вузов, которые стабильно выпускают специалистов, разбирающихся в ML. Это могут быть кафедры (например, на Физтехе десятки кафедр, где ML — основной инструмент). Это могут быть хорошие доп. курсы. Это могут быть курсы в основной программе (говорят, что в Вышке хорошо учат). Часто встречаются научные руководители, которые подстёгивают интерес к ML-методам. В СколТехе есть адекватные лаборатории, но далеко не все. Ужасных примеров хватало.
Очень большим плюсом университетов является то, что человек, который закончил университет, зачастую понимает базовые вещи: «дифференцируемость», «свёртка», «спектр», и т. д. Данные понятия не нужны в повседневной работе с машинным обучением, но могут понадобиться в исследовательской деятельности, в допиливании существующих алгоритмов.
Тут есть несколько ключевых моментов:

  1. Реальный опыт работы прямо на месте учёбы даёт только Физтех со своими кафедрами + Вышка с сильными исследованиями и руководителями. А опыт работы очень важен. Без него вы не будете понимать значимость и сложность сбора базы, обёрток для использования, и т. д. Единственный шанс получить опыт работы в институте без разумной кафедры — это устроиться куда-то на работу (но тут вероятность того, что вас примут в инновационную фирму мала) либо пройти интернатуру в какой-нибудь крутой компании. Слышал, что последнее очень распространено в Нижнем Новгороде, где хороших фирм, занимающихся ML и CV, с десяток.
  2. Человек, который считает, что корочка в институте ему что-то даёт — никому не нужен. Даёт только список проектов, над которыми он работал. Будь то в институте, на работе, на Kaggle, на практике и т. д.

А вот дальше облом. Людей, которые реально готовы совершенствоваться и развиваться, в институтах очень мало. А тех, кто готов, стараются оторвать разные компании и под разные задачи. С выпуска того же Физтеха от силы человек 10-30 может серьёзно уйти в ML.

Модерн

Что такое ML? Это, скорее, наука или ремесло? Мне кажется, что граница в данной деятельности зыбка как нигде. Золото сейчас рассыпано на поверхности. Можно быть крутым геологом и предсказывать месторождения, где копать, зарабатывая миллионы, если докопать. А можно неплохо существовать, собирая рассыпанное по поверхности.
Есть замечательные российские примеры Prism и N-Tech, где компании начались практически из единичных моделей, вокруг которых был построен весь бизнес.
Иногда на Kaggle можно выиграть, не обладая фундаментальными знаниями, а просто выбрав удачную модельку или заметив косяк организаторов.
Знаешь Python и английский на уровне школы? Вперёд! Потратить 2-3 недели на прослушивание курсов на Coursera. Есть замечательные курсы от Яндекса, от Физтеха и т. д. Выучить Keras|PyTorch|TensorFlow — ещё неделя. И ты можешь общаться на одном языке с ML-исследователями.
Только вот опять проблема. Знаний недостаточно. Повезти, конечно, может. Вряд ли такой человек решит серьёзную задачу. Обычно он берёт последнюю модельку, про которую слышал, и пробует. Может покрутить 2-3 параметра. Только вот вероятность того, что он выберет правильную модельку не высока. Тут нужно знать бэкграунд и подборку статей за последние пару лет.
А тем более переработать модель, отработать входы-выходы классическими алгоритмами, заметить багу, понять границы применимости.

Олдфаги

Модерн — это хорошо. И вдвойне хорошо, когда в ML переходит человек из смежной профессии. Сначала ощущения как от пересаживания с автоматической коробки на механическую. Но потом выравнивается. Будучи специалистом в CV/Радиолокации/Байесовской теории, несложно понять, как всё это применять к машинному обучению.
В самом начале были люди, которые пришли в современные нейронные сети из несовременных нейронных сетей. Многие из них стали известными. Вот что значит оказаться в нужный момент в нужном месте! ;)
Кстати, сейчас переток в ML почти прекратился. Года 2 назад каждый пытался читать книжки/разобраться/найти хорошее место работы. А сейчас таких единицы. Те кто не успел раньше.

Комьюнити

Пару лет назад я услышал забавную фразу: «Россия — страна товариществ». Ещё с царских времён в России были популярны клубы по интересам. Кружки, товарищества, семинары и т. д.
Циолковского с товарищами — это же был тот же самый кружек по интересам.
Работает это до сих пор. Это и «самое большое в Европе» (со слов организаторов) сообщество ODS. Регулярные тренировки и лекции от Яндекс, и сообщества, существующие только онлайн, например, тут.
Конечно, не стоит забывать о reddit.
Основной профит таких сообществ — можно в реальном времени задавать вопросы, анализировать свои ошибки, делиться экспириенсом. Народ кидает интересные подборки статей, делится своими достижениями.
Ну и да, конференции.

Что из этого выходит и как это помогает

Важным моментом является польза для общества и бизнеса. Чем может вообще заниматься специалист по Machine Learning? Недавно на Хабре была забавная статья про программистов. И в целом, классификация подходит, но с некоторой коррекцией в сторону экстремальных перегибов.
В-первую очередь есть звёзды ML-сетей. Они придумывают новые архитектуры, пишут статьи, экспериментируют. К сожалению, пользы в практических задачах от них мало. Годы работы могут породить 1-2 удачные идеи. Зачастую побочных и не всегда завязанных на основную задачу. При этом делать стандартную задачу им может быстро наскучить. С другой стороны, именно они двигают край науки. Без их разработок невозможно получать качественно новый результат. В России я натыкался на единицы таких людей. Тут мало кто любит финансировать именно научные разработки. Люди иногда пытаются делать что-то новое на энтузиазме. Но тут нужны ресурсы, те же кластеры видеокарт.
Во-вторых, линейные программисты. Сюда попадают все ресёрчеры с отсутствием фантазии и шила в попе. Зачастую они хорошо знают сети, понимают математику, знают фреймворки. Но такие люди работают не от цели, а от задачи. Потратить ночь, но значительно подтянуть результат — не про них. Они часто ограничиваются готовой архитектурой и 1-2 правками, если начальник не скажет сидеть и пробовать.
Но если сидеть и пробовать, то надо давать им целый список задач. Линейный программист, у которого есть не связанная с ML задача, зачастую самодостаточен. Сделать базу данных со стандартными входами-выходами можно без особого напряжения воображения. А вот обучить сетку на редкую задачу — нет. При этом:

  1. 70% возникающих задач не требуют сложных сеток и архитектур. Найти собаку на камере можно, взяв готовые сетки за полдня.
  2. Таких программистов большинство. Кто-то же должен работать!
  3. Через стадию линейного программиста проходят все, кто ещё не набрал достаточно опыта. Без опыта в 1-2 года слишком непонятно, что происходит вокруг.

В-третьих, это дельцы. Для них нейронные сети — это настоящий прииск. Людей, которые могут взять задачу от формирования базы и до продакшна, практически нет. Нужно знать не только все актуальные статьи, но и понимать логику существующих бизнес-процессов, понимать, как совмещается эта логика с машинным обучением. И самое главное — объяснять заказчику, как работает ML и как применить его в проекте. И почему ему оно не нужно. Сейчас существуют десятки, если не сотни самодостаточных групп из 1-10 разработчиков, которые аутсорсят задачи очень крупному бизнесу. Даже видел сайты-агрегаторы для них.
Ну и, естественно, пассажиры. ML никто не понимает. Если ты красиво заливаешь, то можешь рассчитывать на хорошие позиции. А красиво заливать — просто. Всего месяц чтения статей. Самую эпичную историю слышал вчера. Один из топ-20 банков России решил сделать себе подразделение машинного обучения. Нанял туда одного человека. Весь опыт человека ограничивался просмотром курсов на Coursera. Нельзя забывать, что в ряде ситуаций “пассажиров” не отличить от начинающих ML-ресёрчеров. Нужно тщательно спрашивать про опыт и про персональное участие, не ведясь на оптимистичные посулы вида: “да тут можно просто U-net забацать”! Если у вас свой бизнес + понимание того, что нужно сделать — таких товарищей просто отсечь. Устройте перекрёстный допрос с пристрастием на тему методов, которые использовал кандидат, того почему эти методы применимы в вашей задаче и как это можно сделать другими способами.

Специализации

Забавно, но ML уже имеет чёткий список специализаций. Причём мне кажется, что в ближайшие годы они будут сильно углубляться и их число вырастет:

  1. Самая популярная специализация — ресёрчер. Обычно нанимают именно на эту позицию. Тестировать/проверять/придумывать новые модельки.
    • Исследователь может витать в облаках и пробовать делать концептуальные вещи — тогда важен список публикаций и начитанность
    • А может заниматься тюнингом сеточек, проверкой архитектур. Тогда важнее рейтинг на Kaggle
  2. Специалист по нагрузке/по кластерам. Развернуть модели достаточно сложно. Это требует правильной архитектуры железа/выстраивания потоков данных и настройки железяк. Реально такие специалисты нужны в нескольких организациях в России — Яндекс, Мэйл, Вконтакте, и т. д. Очень высокая специфика, нужно хорошо понимать и в ML, и в том, на чём это ML работает.
  3. Специалист по миниатюризации. Сейчас сетки работают и на мобильниках, и на RPi, и на Jetson. Правильный выбор устройства, правильное портирование модели на него, правильное использование памяти, настройка процессорно-GPU-взаимодействия. Всё это специфика. Даже, наверное, телефоны стоило бы вынести в отдельный пункт. Там всё совсем сложно из-за избытка архитектур и сложности портирования. И да, есть уже когорта сетей, таких как MobileNet|SqeezeNet, которые обеспечивают производительность.
  4. Специалист по сбору базы. 90% времени в задачах ML — это сбор базы. И чем лучше вы понимаете, как её собрать, тем лучше будет база и тем качественнее решение. Хорошее решение начинается с единообразия и порядка.

Если вы захотите собрать базу, сделать по ней ресёрч, а потом внедрить результаты и на кластерах, и на мобильниках, то либо вам нужен человек-оркестр, либо огромная команда. Оптимальным же будет являться какой-то промежуточный пункт.
При этом не забывайте самого главного! Зачастую сделать полурабочую модель прототипа можно за один день!

Резюмируя

  • Порог входа в ML сейчас предельно низкий. Уже за 1-2 недели можно научиться запускать простые модельки, обучать свои сетки и понимать что там происходит.
  • ML-решения для бизнеса обычно очень далеки от «запустить модельку за 1-2 дня». Тут нужно не только ориентироваться в современных статьях, но и иметь некоторый опыт с высоты которого можно оценить их применимость
  • ML невероятно глубок. Открытия появляются каждый день. Никто не знает, в начале мы пути, или уже вычерпали текущий колодец
  • Стать ML-специалистом можно огромным количеством способов. Но только одно обязательно — опыт. Нельзя быть теоретиком машинного обучения не запуская пяток сеток в день.
  • ML уже достаточно взрослая специальность — а следовательно есть специализация. Пробуйте это учитывать когда наймете специалиста в свою компанию.

Ах да! Если хотите познакомиться с тем, как все эти специальности устроены, понять кто есть кто в мире машинного обучения, подёргать за бороду специалистов из Яндекса и Mail.ru, то это можно сделать на конференции SmartData 2017. Организаторы смогли собрать в одном месте на мой взгляд очень разношёрстные доклады, которые проливают свет на различные уголки ML-мира.

Автор: Мальцев Антон

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js