Что изучать будущему ML-инженеру?

Привет! Это Коля, и уже три года я работаю ML-инженером.

Все началось с того, что я работал в вебе и страшно устал от рутинных задач, связанных с разработкой пользовательских интерфейсов. Мне захотелось большего интеллектуального вызова. Как и многие, я слышал о машинном обучении, но не представлял себе, с чего начать и какой объем знаний потребуется. Но очень хотел попробовать.

   

Первые шаги: построение фундамента

Мой знакомый ML-щик сказал, что первая и главная задача — освоить базовые математические концепции. Сюда входят линейная алгебра, вероятности и статистика. Без этих знаний понимание более сложных алгоритмов и моделей было бы невозможным. Конечно, я когда-то изучал это в университете, но так потом особо этими знаниями не воспользовался.

  

Здесь мне помогла книга «Глубокое обучение» Иана Гудфеллоу, Йошуа Бенджио и Аарона Курвилля.

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

Также многие советовали книгу «Грокаем глубокое обучение» от Эндрю Траска, но она показалась мне недостаточно понятной, поэтому я пока ее отложил.

   

Погружение в программирование и алгоритмы

Следующий шаг — изучение языка программирования Python. Конечно, я раньше писал на Python, но для ML потребовались более глубокие знания.

Основное внимание уделил таким библиотекам, как NumPy, Pandas, и, конечно, TensorFlow и PyTorch.

Дальше я почувствовал необходимость включения практики в обучение. Курс Machine Learning от Stanford University на Coursera был создан давным давно одним из основателей сервиса — Andrew Ng. Кажется, сейчас он один из самых популярных и его рекомендуют ничуть не меньше моей «математической Библии».

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

Экспериментирование с данными

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

И на этом этапе я пересмотрел десятки самых разных курсов. Но, увы, их было так много не от того, что я увлекся темой, а потому что они были не слишком понятные. В итоге от себя лично я могу порекомендовать серию курсов «Data Analyst Nanodegree» на Udacity.

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

Построение и обучение моделей

Дальше отступать стало некуда — пришло время для построения собственных моделей.

  

И вот тут, казалось бы, должно было все-таки прийти время для «Грокаем глубокое обучение» от Эндрю Траска, но я свернул немного в сторону — к книге «Грокаем алгоритмы» от Адитья Бхаргава

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

   

А когда у меня появилось достаточно знаний, я решил участвовать в настоящих проектах. 

Мне очень помогла платформа Kaggle

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

Постоянное обучение и развитие: курсы и сертификаты

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

Мне помогают курсы, например, сейчас я прохожу DeepLearning.AI на Coursera. И у меня еще большой список того, на что стоит обратить внимание :)

   

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