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. Специалист по нагрузке/по кластерам. Развернуть модели достаточно сложно. Это требует правильной архитектуры железа/выстраивания потоков данных и настройки железяк. Реально такие специалисты нужны в нескольких организациях в России — Яндекс, Mail.ru, Вконтакте, и т. д. Очень высокая специфика, нужно хорошо понимать и в 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-мира.

Комментарии (18)


  1. UndeadDragon
    11.10.2017 02:35
    +4

    Выучить ...TensorFlow — ещё неделя.

    Ну TF без высокоуровневых врапперов за неделю — это сильно. Что-то на уровне С++ за 24 часа или даже выше.
    Но это не придирка, просто бросилось в глаза. Освоить Keras и PyTorch это не тоже самое, что освоить чистый TF.

    А так статья классная! Впервые вижу мнение человека, который был задолго до хайпа в области, это было интересно.


    1. ZlodeiBaal Автор
      11.10.2017 03:13
      +2

      Спасибо!
      Ну, тут что значит «выучить». Научиться запускать сетку и несколько примеров. В том же Caffe это можно делать вообще из bash + текстовый редактор файла сети. Да и в TF не сложнее.
      Плюс на tf таки питоновская обёртка есть.
      Многим людям хватает этого чтобы сказать «я знаю TF».


      1. UndeadDragon
        11.10.2017 11:14

        Ну я просто под «выучить» обычно все-таки подразумеваю, что я хотя бы минимальные изменения смогу внести в готовый код. В случае TF это может вылиться в совсем нетривиальные бубны — что-то добавить в Tensorboard например, или добавить пару своих метрик. Вот к примеру Tensorboard, вывести туда confusion matrix у меня вышло только через картинку и потратив немало времени :) Хотя казалось бы задача простейшая, опытному человеку на 2 строки кода (в обычном питон-стиле, без TF).
        И поэтому до состояния «нормально гоняю сети и легко вношу небольшие изменения для своих исследований в модели\процессе тренировки» изучение TF на мой взгляд занимает куда больше времени.
        Но я конечно не спорю, скорее интересно было узнать, как другие относятся к сложности этого фреймворка, т.к. по мне он без оберток для бывшего разработчика очень тяжел из-за своих концепций.
        То, что сейчас люди через час изучения видеолекции себе новый скилл записывают — это в курсе. Мир у нас такой становится, поверхностный.


    1. deksden
      11.10.2017 09:01

      TF реализован на С++. А вот клиентская библиотека самая продвинутая у него — на питоне. Что считать «чистым TF»?


      Или я что то путаю?


      1. UndeadDragon
        11.10.2017 11:08

        Ну я под чистым подразумевал просто без врапперов (slim, TFLearn, тысячи их (с) ).


        1. deksden
          11.10.2017 11:32

          Страничка www.tensorflow.org/api_docs намекает, что API на питоне — это #1, остальное (даже С++) — это немного не дотягивает. Так что — самое хардкорное и полноценное использование TF — это задействовать API через питон. Впрочем, не суть важно


          1. UndeadDragon
            11.10.2017 12:41

            Я про это использование и говорил, да.


          1. Dark_Daiver
            11.10.2017 18:14

            Тут термин «враппер» используется не в смысле «питон обертка над С++ кодом», а в смысле «набор классов для быстрого создания нейросети (Keras/TFLearn) над computational graph фреймворком (Tensorflow)»


  1. dreka5
    11.10.2017 09:52
    +5

    На пути к естественному интеллекту встаёт несколько вопросов.
    нейросеть, как я понимать — фактически строит какую то модель и выдаёт набор агрегированным статистических данных. и что бы данные были более корректными их кормит специально обученный человек ( специальное едой ).

    1. но если данные хорошо формализуются ( номер авто, количество темных пятен в крови...)- то это одно, а если данные формально толком не описать то насколько качественной получится статистика?
    2. пример из жизни.
    есть автодороги. надо получить качественный граф дорог.
    алгоритм по спутнику нашёл пути. построил подобие графа дорог. формально всё выглядит неплохо.
    Но вот работать с полученной выборкой не получится. качество графа дорог будет таким, что либо в нём где то будут дырки, или он будет избыточным и тормозным. в итоге всё равно придётся делать формальную модел==граф дорог полуручным способом. что бы можно было решать NP полную задачу про коммивояжера.
    3. пробежав по макушкам статей складывается ощущение, что присутсвуют попытки выдать старый годный алгоритм за результат работы ML. сколько в нейросететях хайпа?
    4. где можно почитать о траблах с нейросеткам?


  1. Arseny_Info
    11.10.2017 12:34
    +2

    В пункте про специализацию не хватает «рядового гребца», который будет делать простейшую модель и интегрировать ее в существующие бэкенды компании. Для этого не нужен высокий рейтинг на Kaggle или знание всех последних статей про модные архитектуры, нужно быть нормальным программистом и сколько-нибудь понимать базовые нюансы ML (на уровне понимания Rules of ML).

    Ну и про запуск и понимание простых сетей за 1-2 недели — это преуменьшение; это скорее месяцы.


    1. ZlodeiBaal Автор
      11.10.2017 12:50
      +2

      Ресёрчер, на мой взгляд, включает в себя и тех кто разрабатывает простые модельки, тех кто разрабатывает сложные и тех кто делает исследования. Пунктом выше по сути идёт классификация того что он может делать и каким быть.
      Я согласен, что есть сети которые сложно понять до уровня повторения и обучить за 1-2 недели, те же ubernet|mtcnn. Но даже их можно запустить за пару дней/потестить и начать ориентироваться в том как они устроены.
      Когда я в первый раз применял какой-то AlexNet, году в 2014 где-то, при этом запускал его без видеокарты, на каком-то странном фреймворке (tinycnn(?)), то никакой особой сложности сделать это за 2 вечера и получить хороший результат по моим данным у меня тогда не вызвало.
      Наверное для людей без базового знания программирования, математики — это будет сложно. Но всё же, мне кажется, что 1-2 недели — это реальный срок.


  1. safinaskar
    11.10.2017 17:33
    -3

    Терминологию линейных программистов, дельцов и т. д. вы взяли из готовой статьи на хабре или гиктаймс. Поставьте ссылку, плз


    1. ZlodeiBaal Автор
      11.10.2017 17:38
      +1

      Чукча не читатель, чукча писатель?


      1. safinaskar
        11.10.2017 20:40
        +1

        Ой, сорян :)


  1. dagen
    11.10.2017 20:32

    Сразу скажу, что совсем ничего не знаю про эту область. Но зацепила одна фраза:

    До 2012 года нейронных сетей в современном понимании не существовало.
    Я примерно 10-11 лет назад зачитывался нейронными сетями (тогда как раз в универе хайп по этому поводу поднялся), в т.ч. про неокогнитрон, удивляясь, как давно эта схема была предложена и какая она умная в смысле computer vision (точнее так в статьях/книгах писали. Максимум, что я сам делал — многослойный перцептрон). А что означает, что до 2012 года нейронных сетей в современном понимании не существовало? Имелось ввиду как раз появление инструментов для работы?


    1. ZlodeiBaal Автор
      11.10.2017 22:59

      1) Инструменты. Точнее возможность запуска на видюхах адекватная. Это где-то 10 год.
      2) Победа в крупном конкурсе была 2012 для свёрточных архитектур. Ровно после этого всё резко начало двигаться и развиваться.


    1. Vasyutka
      11.10.2017 23:00

      да, Вы правы. Неокогнитрон, Лекун добавил обратное распросранение к сверточным, функции активации подобрали, набили руку и вот в 2012 уже почти мейнстрим.


  1. noonv
    12.10.2017 15:26
    +1

    Отличная статья! Спасибо!