Резидентская программа Яндекса, или Как опытному бэкендеру стать ML-инженером
Яндекс открывает резидентскую программу по машинному обучению для опытных бэкенд-разработчиков. Если вы много писали на C++/Python и хотите применить эти знания в ML — то мы научим вас заниматься практическими исследованиями и выделим опытных кураторов. Вы поработаете над ключевыми сервисами Яндекса и получите навыки в таких областях, как линейные модели и градиентный бустинг, рекомендательные системы, нейросети для анализа изображений, текста и звука. Ещё вы узнаете, как правильно оценивать свои модели с помощью метрик в офлайне и онлайне.
Продолжительность программы — один год, в течение которого участники будут работать в управлении машинного интеллекта и исследований Яндекса, а также посещать лекции и семинары. Участие оплачивается и предполагает полную занятость: 40 часов в неделю, начиная с 1 июля этого года. Приём заявок уже открыт и продлится до 1 мая.
А теперь подробнее — о том, какую аудиторию мы ждём, каким будет рабочий процесс и в целом, как бэкенд-специалисту переключиться на карьеру в ML.
Направленность
Residency Programs есть у многих компаний, включая, например, Google и Facebook. В основном они нацелены на специалистов младшего и среднего уровня, которые пробуют шагнуть в сторону ML-исследований. Наша программа — для другой аудитории. Мы приглашаем бэкенд-разработчиков, которые уже приобрели достаточно опыта и точно знают, что в своих компетенциях им нужно сдвигаться в сторону ML, получить практические навыки — а не навыки учёного — в решении промышленных задач машинного обучения. Это не значит, что мы не поддерживаем молодых исследователей. Для них мы организовали отдельную программу — премию имени Ильи Сегаловича, которая тоже позволяет поработать в Яндексе.
Где резиденту предстоит работать
Мы в управлении машинного интеллекта и исследований сами разрабатываем идеи проектов. Основной источник вдохновения — научная литература, статьи, тренды сообщества исследователей. Я и мои коллеги анализируем прочитанное, смотрим, как можно улучшить или расширить методы, предложенные учёными. При этом каждый из нас учитывает свою область знаний и интересов, формулирует задачу исходя из направлений, которые считает важными. На стыке результатов внешних исследований и собственных компетенций обычно и рождается идея проекта.
Такая система хороша тем, что во многом решает технологические задачи сервисов Яндекса ещё до их возникновения. Когда перед сервисом встаёт проблема, его представители приходят к нам, чтобы, скорее всего, взять уже подготовленные нами технологии, которые остаётся только правильно применить в продукте. Если же что-то не готово — мы, по крайней мере, быстро вспомним, откуда можно «начать копать», в каких статьях искать решение. Как известно, научный подход — это стоять на плечах гигантов.
Что предстоит делать
В Яндексе — и даже конкретно в нашем управлении — развиваются все актуальные направления ML. Наша задача — улучшать качество самых разнообразных продуктов, и это служит стимулом проверять всё новое. К тому же регулярно появляются новые сервисы. Так что в лекционной программе есть все ключевые (хорошо себя зарекомендовавшие) направления машинного обучения в промышленной разработке. При составлении моей части курса я использовал опыт преподавания в Школе анализа данных, а также материалы и наработки других преподавателей ШАДа. Знаю, что коллеги делали так же.
В первые месяцы обучение по программе курса будет составлять примерно 30% вашего рабочего времени, затем — около 10%. Однако важно понимать, что работа с самими ML-моделями продолжит занимать примерно вчетверо меньше, чем все сопутствующие процессы. К ним относится подготовка бэкенда, получение данных, написание pipeline для их предобработки, оптимизация кода, адаптация под специфическое железо и т. д. ML-инженер — это, если хотите, fullstack-разработчик (только с больши́м уклоном в машинное обучение), способный решить задачу от начала и до конца. Даже с готовой моделью наверняка потребуется проделать ещё ряд действий: распараллелить её выполнение по нескольким машинам, подготовить реализацию в виде ручки, библиотеки или компоненты самого сервиса.
Выбор студента
Если у вас сложилось впечатление, что в ML-инженеры лучше идти, сначала поработав разработчиком бэкенда, — это не так. Поступить в тот же ШАД без реального опыта разработки сервисов, обучиться и стать крайне востребованным на рынке — отличный вариант. Многие специалисты в Яндексе оказались на нынешних позициях именно таким путём. Если же какая-нибудь компания готова предложить вам работу в области ML сразу после института — вероятно, тоже стоит принять предложение. Постарайтесь попасть в хорошую команду к опытному наставнику и приготовьтесь много учиться.
Что обычно мешает заняться ML
Если бэкендер стремится стать ML-инженером, он — без учёта резидентской программы — может выбрать из двух направлений развития.
Во-первых — обучиться в рамках какой-нибудь образовательного курса. Уроки на Coursera приблизят вас к пониманию базовых методик, но чтобы погрузиться в профессию в достаточной степени, необходимо уделить ей гораздо больше времени. Например, окончить ШАД. В разные годы в ШАДе было разное число курсов непосредственно по машинному обучению — в среднем, около восьми. Каждый из них действительно важен и полезен, в том числе по мнению выпускников.
Во-вторых, можно поучаствовать в боевых проектах, где требуется реализовать тот или иной ML-алгоритм. Однако на рынке IT-разработки таких проектов очень мало: в большинстве задач машинное обучение не используется. Даже в банках, которые активно изучают связанные с ML возможности, анализом данных занимаются единицы. Если вам не удалось присоединиться к одной из подобных команд, остаётся либо завести свой собственный проект (где, скорее всего, дедлайны вы будете ставить себе сами, а это имеет мало общего с боевыми продакшен-задачами), либо начать соревноваться на Kaggle.
Действительно, объединиться с другими участниками сообщества и пробовать себя в конкурсах сравнительно несложно — особенно если подкрепить свои навыки тренировками и упомянутыми курсами на Coursera. У каждого конкурса есть дедлайн — он будет служить для вас стимулом и готовить к похожей системе в IT-компаниях. Это хороший путь — который, впрочем, тоже немного оторван от реальных процессов. На Kaggle вам дают предобработанные, пусть и не всегда идеальные данные; не предлагают думать о вкладе в продукт; а самое главное — не требуют решений, подходящих для продакшена. Ваши алгоритмы, вероятно, окажутся работоспособны и будут обладать высокой точностью, но ваши модели и код будут похожи на сшитого из разных частей Франкенштейна — в боевом проекте вся эта конструкция будет работать слишком медленно, тяжело обновляться и расширяться (например, языковые и голосовые алгоритмы всегда частично переписываются по мере развития языка). Компании заинтересованы в том, чтобы перечисленную работу могли проделать не только вы сами (понятно, что вам как автору решения это по силам), но и кто угодно из коллег. Про разницу между спортивным и промышленным программированием сказано много, и Kaggle воспитывает именно «спортсменов» — пусть и делает это очень хорошо, позволяя приобрести часть опыта.
Я описал две возможные линии развития — обучение через образовательные программы и обучение «в бою», например на Kaggle. Резидентская программа является сочетанием этих двух способов. Вас ждут лекции и семинары уровня ШАДа, а также действительно боевые проекты.