Всем привет. Сегодняшняя статья будет интересна тем, кто хочет стать ML‑разработчиком. Последние три года я собирал материалы на эту тему (естественно, проверяя все на себе). Это не просто сухая выжимка из книг, курсов и статей, а личный опыт, основанный на задачах, которые я решаю ежедневно.

Меня зовут Агеев Александр, сейчас я ML‑разработчик в команде SOICA. Из других интересных проектов в прошлом — робототехника (детекция и сегментация продуктов питания), исследования мозговой активности ЭЭГ, автоматизации сети хлебозаводов Москвы, разработка алгоритмов в приложении для подсчета ударов мяча и распознавания скелета человека, исследование и применение больших LLM‑моделей, расшифровка аудио и транскрибация текста, а также EyeTracking (подсчет числа открытия и закрытия глаз).

Предыстория автора

Я учился в электротехническом университете в Петербурге. И мне ужасно не нравилось программирование и все, что с ним было связано. Нам читали C++ три семестра и ассемблер, который никто в группе благополучно не понимал. Зато я любил математику (но о ней позже). На третьем курсе университета увлекся написанием статей (строго теоретических!) в области искусственного интеллекта и нейронных сетей, да так, что диплом тоже был про нейросети. Тема в тот момент была для меня сложной, плюс я не до конца осознавал дальнейшую применимость этих технологий. Первый рабочий опыт не был связан с ИТ. Спустя два года я понял, что мне по‑настоящему интересен AI и нейронки, поэтому начал самостоятельно прокачивать свои знания.

Освоение основ программирования

Первое — это базовая работа с Python.

В этом мне помог Stepik и курсы:

Параллельно с изучением питона я прошел курс по SQL: «Интерактивный тренажер по SQL». Правда, на собеседованиях вопросы по SQL задавали только в начале пути поиска работы и крайне редко — примерно в 10% случаев.

На базовое понимание Python и SQL у меня ушло около 4 месяцев ежедневной работы по 3–4 часа в день, 5–6 дней в неделю.

Изучение математики

Математика очень важна. Она не используется в ежедневной работе, но является фундаментальным знанием. Я считаю, что не стоит даже пытаться заниматься ИИ без математики.

Какие области точно нужно знать:

  1. Линейная алгебра. Все, что связано с матрицами, разложением матриц, работа с пространствами. Тензоры.

  2. Математический анализ. Функции, производные, экстремумы — это важно непосредственно для обучения самих нейронных сетей.

  3. Теория вероятности и статистика. Условная вероятность, теорема Байеса, различные распределения и их оценки, критерии Согласия.

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

Для восполнения пробелов по математике я рекомендую пройти видеокурсы от преподавателей МГУ — тут есть различные темы. И читать соответствующие книги.

Базовые знания в ML

Следующий этап изучения — классическое машинное обучение. Здесь я советую освоить книгу «Python и машинное обучение» Себастьяна Рашка. Есть много книг, которые так или иначе пробуют объяснять одни и те же вещи, но написаны с разной степенью понятности — мне подошел Рашка.

На это обучение у меня ушло около 7 месяцев. Но стоит отметить, что я занимался 6–8 часов в день последние 3 месяца.

Выбор специализации

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

  • Классическое машинное обучение — если метишь в сферы, где много цифр и нужно строить прогнозы: возврат кредита в банках, покупательская способность в ритейле, статистика в соцсетях и т. п.. Мне кажется, что это единственная специализация из всех тут перечисленных, где после обучения можно сразу пробовать искать работу.

  • Компьютерное зрение — любая видеоаналитика: подсчет людей по камере видеонаблюдения, анализ их поведения, подсчет товаров на конвейере, распознавание лиц, детекция и сегментация любых предметов, трекинг. Также есть большой пласт задач в области генеративных моделей (генерация фото/видео), задачи с 3D‑моделированием. Я пошел именно этим путем, считаю, что здесь много работы и есть спрос на сотрудников, а конкуренция меньше, чем в классическом машинном обучении.

  • Аудио — от умных колонок до софта, где требуется работа по расшифровке текста. Достаточно высокий порог входа для специалистов.

  • NLP — все, что связано с текстом и его обработкой. Важный момент — работа с большими мультимодальными моделями требует большого количества ресурсов ноутбука (а арендовать сервер поиграться с моделями достаточно затратное удовольствие, если ты джун).

  • Обучение с подкреплением — тренировка агентов в определенной среде: выигрыши роботом в шахматы, го, обучение роботов ходить и не спотыкаться или выполнять какие‑то самостоятельные действия. Мало вакансий на рынке труда, плюс такие разработки ведутся только в крупных компаниях. Для входа в ML — не лучший выбор.

Создание своего проекта

Чтобы как‑то выделиться на фоне других, сделай небольшой проект в той области, которая интересна. Это важная составляющая успешного резюме. Если ты джун, который не видел ни одного проекта, — это твое спасение. Наличие идеи, понимание применимости методов, умение писать код, используя структуры данных, а также отдавать это в мир — большое умение джуна. Приложение может быть совсем простое, с примитивной логикой, но, если ты используешь какую‑то сеть из коробки, она приемлемо работает на твоем демостенде и это можно показать (например, через докер‑контейнер), это сильно повысит твои шансы на интервью.

Дополнительные советы

  1. Поставь себе Ubuntu рядом с Windows. Большинство вещей, которыми я занимался, так или иначе требуют ОС Linux, поэтому с ним обязательно нужно уметь работать.

  2. Начни заниматься английским. Английский нужен 100%, так как большинство статей первоначально выходит на английском, а только потом, с течением какого‑то времени, их переводят энтузиасты.

  3. Когда выбрал специализацию, возьми книгу по направлению и начни проходить ее как курс. Есть задание — выполни его в google collab (это очень удобная среда с возможностью ГПУ для проведения минимальных тестов кода).

  4. Начни смотреть про железо. Какие есть на рынке видеокарты, их стоимость, возможности и мощность. Такие знания еще и любят проверять на собеседованиях: меня очень часто просили оценить, сколько потребуется железа для того или иного проекта (или сетки).

  5. Разберись с фреймворком Django / FastApi / Flask. Это необходимо, чтобы ты мог писать API для использования твоей готовой модели.

  6. Разберись с GIT и Docker. Первое позволяет тебе сохранять прогресс работы, второе — упаковывает и изолирует твое «приложение» в отдельный микросервис.

Мой опыт собеседований на примере специализации на компьютерном зрении

Первое касание с работодателем — отбор HR. Скорее всего зададут вопросы по опыту работы (или учебы), базовые вопросы по теории, иногда высылают тестовое задание. Далее, если ты проходишь первый этап отбора, попадаешь на техническое интервью. Оно обычно длится час‑полтора. Собеседует либо разработчик, либо глава подразделения, либо все вместе. Бывало, что собеседования проводили 5 человек.

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

Что спрашивали:

  1. Pyton. Как устроена память, ООП, GIL, декораторы, лямбда‑функции, структуры данных, вычислительная сложность и скорость алгоритмов.

  2. Машинное обучение. Метрики (обязательно). Классические алгоритмы, математическая составляющая алгоритмов. Ошибки первого и второго рода.

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

  4. Секция математики (все разделы сразу).

  5. Железо.

  6. Иногда — OpenCV. Библиотека для обработки изображений.

  7. Крайне редко — Linux.

  8. Крайне редко — Pytorch. Это фреймворк для работы с нейронными сетями.

  9. Совсем редко — Docker.

Для разных ML‑специализаций вопросы на собеседованиях немного отличаются. Поэтому можно использовать такой подход — изучить вакансии, собрать требования в них, рассортировать по частотности и важности и проверять соответствие своих знаний требованиям.

Жизнь после трудоустройства

Дальше начнется самое интересное и сложное, потому что мало уметь обращаться с моделями, необходимо уметь правильно интегрировать их в общую систему. Здесь потребуется огромный пласт знаний в области оптимизации нейронных сетей (квантование, прунинг и тд), перевод какой‑то части на С++ и многое другое.


В завершении этой статьи хочу сказать что все не так страшно, как кажется, и стать ML‑разработчиком возможно, если тебе искренне нравится то, что ты делаешь. ML‑разработка — это большое число исследований и регулярные провалы гипотез. Специфику моей работы можно сравнить с прохождением через лабиринт, где спустя долгое время ты можешь вернуться на старт, чтобы начать поиск нового пути решения. Постоянное изучение нового и радость от каждой успешно выполненной нетривиальной задачи не дают отчаяться в этой работе.

Спасибо всем, кто дочитал, если у вас есть вопросы — задавайте, буду рад на них ответить.

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


  1. Ilirium
    30.07.2024 09:10
    +1

    Извините, но статью не читал. Заглавная картинка – у меня ровно наоборот. Data Scentist/ML Engineer/ CV Engineer больше 5 лет.