November 18, 2023

Вкатываемся в Machine Learning с нуля за ноль рублей: что, где, в какой последовательности изучить

Всем доброго времени суток. Я давно обещала выложить сюда подробный гайд на тему того, как можно изучать Machine Learning самостоятельно, не тратя деньги на платные курсы, и, наконец, выполняю свое обещание. Надеюсь, этот гайд станет подсказкой, которая поможет найти правильное направление новичкам, которые хотят погрузиться в нашу область.

Небольшое предисловие

Для начала напомню следующее: мир машинного обучения и анализа данных многообразен. Внутри него есть целый ряд специализаций, которые требуют разных навыков. Все советы из этой статьи являются частным мнением одного человека - с математическим бэкграундом и опытом работы только в левой колонке Рис.1 (Machine Learning Engineer и Machine Learning Researcher; сейчас я работаю Старшим Академическим Консультантом в Huawei, что, по сути, также близко ко второму варианту). Поэтому путь, указанный в данной статье, является лишь одним из возможных и больше ориентирован также в сторону той же левой колонки. Люди с другим бэкграундом и опытом работы могут иметь другое мнение на то, чему нужно учиться для успешных занятий ML (Machine Learning) или DS (Data Science) и предложить другой путь изучения данных областей, и это нормально.

Рис.1 ( источник картинки - доклад Алексея Натёкина, который можно посмотреть тут: https://www.youtube.com/watch?v=lDkTNURDIaY . DevOps в данном контексте можно было бы заменить на новомодный термин MLOps, но я не стала портить картинку исправлениями. Доклад очень хорошо раскладывает всё по полочкам и настоятельно рекомендуется к просмотру всем новичкам.)

Например, есть вот такой альтернативный гайд о том, как стать Data Scientist от автора, у которого больше опыта работы именно с данными - https://vas3k.club/post/9904/ (у меня взгляд со стороны ML, а у него - со стороны DS). Единственный недостаток руководства: оно было написано давно, и многие ссылки на ресурсы, к сожалению, погибли.

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


Рис. 2. Приблизительная схема нашего пути в ML.

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

Дальнейшая структура статьи будет следовать этим шагам.


1. Предварительные знания

Итак, для того, чтобы понимать, как работают алгоритмы машинного обучения и в дальнейшем быть способными писать какой-то программный код с их использованием, нам понадобится освоить следующие области:

Рис. 3 - база, на которой держится машинное обучение.

1.1. Математика

Самые минимальные знания по основам линейной алгебры и мат. анализа, которые нужны для того, чтобы можно было начать смотреть и немного понимать некоторые учебные материалы про работу нейросетей, можно получить, посмотрев по четыре первых видео из следующих плейлистов известного 3blue1brown:

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

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

1.1.1. Линейная алгебра

Два варианта курсов для освоения Линейной алгебры:

  • Более быстрый вариант, для тех, кто уже изучал математику в ВУЗе и хочет повторить:
    https://stepik.org/course/2461
    Главный минус - в курсе не хватает секции про собственные значения, которые используются в алгоритмах понижения размерности (PCA). Эту тему можно повторить, посмотрев конец плейлиста 3blue1brown с предыдущей страницы.
  • Более подробный вариант, может быть доступнее для тех, кто раньше не изучал предмет:
    https://www.khanacademy.org/math/linear-algebra

Также не забываем продолжать просмотр плейлиста 3blue1brown Essence of Linear Algebra.

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

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

1.1.2. Математический анализ

Два варианта для освоения Математического Анализа:

Также не забываем продолжать просмотр плейлиста 3blue1brown Essence of Calculus.

Главное тут - дойти до раздела "производная сложной функции". Если соединить это знание с линейной алгеброй, этого, в принципе, достаточно для понимания смысла обучения ML моделей, в том числе для понимания алгоритма обратного распространения ошибки (backpropagation). Изучать интегралы не обязательно для понимания большей части того машинного обучения, что используется на практике. Поэтому с ними достаточно поверхностно ознакомиться по видео 3blue1brown, а более подробное изучение отложить на время, и вернуться при необходимости.

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

1.1.3. Основы математической статистики

К этой теме можно подступиться, начав с изучения вот такого сайта с демонстрациями, чтобы постепенно войти в тему:

https://seeing-theory.brown.edu/basic-probability/index.html

А потом перейти к какому-нибудь более серьезному курсу с упражнениями, например:

https://stepik.org/course/326/syllabus

Но тут надо отметить, что этот курс сложный, и полностью его проходить не обязательно. Максимально полезен первый модуль и упражнения к нему; в модулях 2-3 желательно просмотреть хотя бы лекции, чтобы понимать, о чем речь. Дальнейшее прохождение можно отложить, просто запомнив названия тем на будущее. Если на следующих этапах поймете, что вам необходимо пройти эти темы - вернетесь к курсу обратно.

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

Тем не менее, всем специализациям из ML и DS полезно знать самые базовые основы - что такое мат.ожидание, дисперсия, что такое распределение, выборка, что такое статистическая значимость. Для последнего желательно понять в общих чертах и то, что такое доверительный интервал. Без этого будет очень трудно по науке оценить результат работы алгоритмов машинного обучения и протестировать гипотезы насчет данных.

1.1.4. ЧТО ДЕЛАТЬ, ЕСЛИ НИЧЕГО НЕ ПОНЯТНО

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

Пример бесплатного мини-курса, в котором можно восполнить некоторые пробелы:

https://practicum.yandex.ru/math-foundations/ , а также понять, какие именно разделы математики вызывают трудности (в рекламу платных курсов рядом с ним, заходить, естественно, не обязательно).

В случае, если этого курса тоже будет недостаточно - можно поискать другие курсы на https://www.khanacademy.org/ и https://stepik.org/ , ища по названию тех разделов математики, которые даются с особенным трудом.

1.2. Программирование

Я условно разделила секцию “Программирование” на две части - "Основы языка" и "Основы Алгоритмов и Структур Данных", но на самом деле, основы алгоритмов и структур данных часто изучаются совместно с языком.

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

1.2.1. Python

Рис. 4. Наш лучший друг.

Вот на какой бесплатный курс по Python я советую обратить внимание в первую очередь:

https://stepik.org/course/512

Здесь не только рассказывается про программирование на Python, но и про такие важные темы, как работа с API, скачивание и парсинг html, json etc - это как раз то, что часто используют в работе любители машинного обучения и анализа данных.

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

https://stepik.org/course/67 , а потом вернуться к курсу выше.

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

Например, есть вот такой курс в двух частях:

https://stepik.org/course/58852 , https://stepik.org/course/68343 .

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

В конечном итоге, мы хотим добиться знаний:

  • Основных конструкций и ключевых слов (keywords) языка Python - без этого мы не сможем писать свой код и понимать чужой;
  • Основных механик языка (например, как происходит присваивание по ссылке и копирование) - чтобы понимать на базовом уровне, что происходит под капотом и, как следствие, уметь понимать и исправлять ошибки при написании кода;
  • Основ объектно-ориентированного программирования - чтобы умело пользоваться ML-библиотеками и создавать свои собственные ML-модели.

И напоследок, еще один, дополнительный учебный материал по Python. Его важные особенности - наличие разделов “установка инструментов” и “Jupyter Notebook”. Эти разделы очень важны для практической работы, но не до конца покрыты курсами, указанными выше. Поэтому этот учебный материал послужит отличным дополнением к всему вышеперечисленному.

1.2.2. C++

Рис.5. Наш второй друг - тот самый, который вечно влипает в неприятности.

Кроме Python, в области машинного обучения можно встретить использование и других языков программирования, в частности, C++. Этот язык нужен довольно небольшому числу ML-специалистов - в основном разработчикам (Developer), которые работают с высокопроизводительным продакшн-кодом, хотят иметь совместимость с каким-то уже написанным кодом или нуждаются в работе с особым оборудованием (например, с какими-то промышленными устройствами). Кроме того, изучать его намного сложнее, чем Python. Поэтому тратьте время на этот язык только если вы точно уверены в том, что это ваш вариант.

В качестве первого пособия по этому языку я предлагаю книгу Б. Страуструпа "Язык программирования С++". По-хорошему книга, конечно, платная, но в реальности ее несложно можно найти и скачать в интернете бесплатно. Если что-то непонятно, можно обращаться к аналогичному пособию по языку С (без плюсиков) - обычно все непонятное приходит именно оттуда.

После изучения этой книги и основ алгоритмов и структур данных (см. следующую часть презентации) можно посмотреть курс:

https://stepik.org/course/153

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

1.2.3. SQL

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

https://stepik.org/course/63054

Однако, на этапе получения предварительных знаний глубоко изучать SQL рано. Для начала можно просто познакомиться с тем, что такое базы данных и узнать простейшие примеры работы с ними. Сделать это можно, например, полистав такую забавную книжку с картинками, как “Занимательное программирование. Базы данных. Манга”, которую также можно найти бесплатно в интернете.
Ну, а серьезно тренироваться в SQL имеет смысл только тогда, когда будете точно уверены, что хотите пойти податься на вакансию, где требуется работа с SQL (он нужен не везде) и займетесь подготовкой к такой вакансии. Об этом еще будет сказано немного в разделе 4.

1.2.4. Другие языки, используемые в машинном обучении

Конечно, в мире машинного обучения можно встретить и другие языки. Например, язык R - его используют для анализа данных, особенно много в нем встроенных инструментов для применения аппарата математической статистики. Язык не является мейнстримом, так что если не уверены в том, что он вам нужен, с изучением можно не спешить. Также иногда в пайплайнах для обработки данных и в продакшн-коде используют Java. Если не уверены, что он вам нужен, изучать также не обязательно.

Те языки, что я перечислила, покрывают, пожалуй, 99% вакансий, связанных с ML/DS. В стандартном сценарии нам для начала достаточно изучить только Python, а потом переходить к алгоритмам и структурам данных.

1.2.5. Алгоритмы и структуры данных

Большинству специалистов в Machine Learning и Data Science достаточно знать лишь основы этих тем. Посмотреть на эти основы я рекомендую в следующих источниках:

  • https://stepik.org/course/1547 -
    изучить модуль “Базовые структуры данных”, чтобы узнать про наиболее часто используемые структуры данных.
  • https://stepik.org/course/217 -
    изучить модуль “Введение: теория и задачи”, чтобы посмотреть простые примеры алгоритмических задач и узнать что такое сложность алгоритма.

Дальше первых модулей изучать эти курсы на начальном этапе не нужно. Продолжить изучение рекомендуется либо если вы будете точно уверены, что хотите углубиться в разработку (Development), либо перед собеседованиями. А еще изучать эти модули можно параллельно с изучением ML-алгоритмов.

Еще один занятный способ знакомиться с базовыми алгоритмами и структурами данных - приложение “Алгоритмы. Понятные и анимированные” на Android (ссылка открывается либо с ПК с VPN, либо со смартфона).

Приложение представляет собой набор демонстраций к классическим алгоритмам и структурам данных. К сожалению, некоторые демонстрации доступны только платно, но большая часть бесплатная. Приятно смотреть эти демонстрации по дороге на работу или учебу как дополнительный материал к основным занятиям. Я рекомендую в первую очередь просмотреть разделы “структуры данных” и “поиск” (в списках и графах).


2. Классическое машинное обучение

Итак, в первой части статьи мы узнали, как получить предварительную базу по математике и программированию и теперь можем приступить к самому машинному обучению.

Для начала поясню, что понимается в данной статье под терминами “классическое” и “глубокое” машинное обучение (в разных источниках эти термины могут использоваться по-разному).

  1. Под “глубоким обучением” (Deep Learning, DL) понимается все, что связано с глубокими нейросетями.
  2. Под “классическим машинным обучением” (Classic Machine Learning, Classic ML) понимается большая часть остальных, “неглубоких” обучающихся алгоритмов и примыкающие к ним методы математической статистики.Рис.6. Используемая в статье терминология.

Примеры классических ML-алгоритмов и методов:

  • Линейная и логистическая регрессия
  • Другие “неглубокие” модели - решающие деревья, SVM, …
  • Ансамбли (Random Forest, XGBoost, …)
  • Методы понижения размерности (PCA, t-SNE, UMAP, …)
  • и многое другое

Примеры глубоких нейросетей:

  • Глубокие сверточные сети (VGG-16, AlexNet, ResNet, …)
  • Диффузионные модели (Stable Diffusion, DALLE-2, …)
  • Трансформерные архитектуры (Transformer, ViT, T5, BERT, GPT, ChatGPT, …)
  • и другие.

Конечно, сейчас в фокусе внимания находятся глубокие нейросети, но для хорошего понимания их работы нужно сначала разобраться хотя бы в основах классического ML. Кроме того, не редкость, когда одному и тому же специалисту для решения рабочей задачи нужно использовать и классический ML (например, для анализа данных и решения задачи в первом приближении), и глубокие нейросети (для более точного решения).

Начать "мягкое вхождение" в тему классического машинного обучения можно с помощью интерактивных демонстраций, включающих основные классические алгоритмы -

И видео про основы работы глубоких нейросетей от 3blue1brown -

После этого (или параллельно с этим) следует приступить к более серьезным материалам.

Хорошую теоретическую базу в мире машинного обучения могут дать лекции К.В.Воронцова. Вот версия 2019 года:

https://www.youtube.com/playlist?list=PLJOzdkh8T5krxc4HsHbB8g8f0hu7973fK

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

Обзор курса, включая ссылки на доп.материалы, можно найти на machinelearning.ru .

Плюсы курса:

  • Строгое изложение материала
  • Дает очень крепкую теоретическую базу

Минусы курса:

  • Высокий порог вхождения - нужно очень хорошо знать математику, желательно на уровне первых двух курсов мехмата/физтеха.
  • Не хватает практических заданий.

Если не хватает математической подготовки для освоения лекций Воронцова, можно обратить внимание на менее нагруженный теорией курс, например:

https://stepik.org/course/4852/

Большим плюсом этого курса является то, что в нем рассказаны основы того, как пользоваться важными ML библиотеками - Numpy, Pandas, Scikit-learn + даются практические задания с их использованием. Курс содержит более простые (но при этом, конечно, менее строгие) объяснения самых важных моделей и концепций, о которых рассказано в лекциях Воронцова.

Еще один вариант маленького курса по основам ML и классическим ML-алгоритмам:

https://stepik.org/course/8057/

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


3. Глубокое машинное обучение

3.1. Основные материалы

Есть курсы, содержащие одновременно рассказ и про основы ML, и про классическое, и про глубокое машинное обучение. Самый известный курс такого типа - специализация на Coursera от Andrew Ng:

https://www.coursera.org/specializations/machine-learning-introduction

Плюсы курса:

  • Охвачен очень широкий спектр тем, обо всем понемногу
  • Andrew Ng - хороший преподаватель, понятно излагает материал
  • Рассказано про библиотеки Numpy, Pandas, Scikit-learn
  • Даются напоминания самых важных элементов лин.алгебры, мат.анализа

Минусы курса:

  • Изложение не очень глубокое, очень мало теории
  • Для объяснения нейросетей используется библиотека TensorFlow, которая является не самой простой в изучении и постепенно теряет популярность
  • Бесплатными являются только лекции, а практические упражнения доступны только платно. 😡😡😡

Теперь к курсам, сконцентрированным на глубоком обучении.

Один из самых известных в русскоязычном сегменте курс по глубокому обучению - курс Deep Learning от МФТИ. Этот курс разбит на два семестра.

  • Первый семестр существует в “базовом” и “продвинутом” вариантах. По спектру охватываемых тем он похож на курс Andrew Ng, только более подробный, с акцентом на глубокое обучение и, конечно же, с бесплатными практическими заданиями. В курсе даются основы библиотек Numpy, Pandas, Scikit-learn, PyTorch.
  • Второй семестр посвящен исключительно глубокому обучению. Описывается постановка задач, решаемых глубокими нейросетями, рассматриваются архитектуры, используемые для работы с изображениями, текстом и звуком.

Курс перезапускается каждый год, поэтому на платформе Stepik можно увидеть много версий этого курса разных лет. Чтобы не запутать, приведу ссылки только на последние версии:

1 семестр:

2 семестр:

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

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

Курс также разбит на две части, но не по семестрам, а по спектру тем.

  • Часть 1: https://stepik.org/course/50352 посвящена задачам компьютерного зрения (Computer Vision, CV) и архитектурам нейросетей, предназначенных для их решения
  • Часть 2: https://stepik.org/course/54098 посвящена задачам обработки естественного языка (Natural Language Processing, NLP) и архитектурам для работы с ним.

В этом курсе также есть практические задания с использованием ML-библиотек, что очень удобно и полезно.

3.2. Дополнительные материалы

Здесь я приведу другие, полезные или просто забавные учебные материалы и видео, связанные с Deep Learning, которые можно изучать параллельно с предложенными выше.

  1. Посложнее:
  • https://mlcourse.ai/book/index.html - интерактивный курс-сборник материалов по основам ML, классическому ML и анализу данных с большим количеством заданий и ссылок на другие материалы.
  • https://www.youtube.com/playlist?list=PLWnsVgP6CzadI4-FT2Po4wsEK7MHCIQ-d - цикл лекций на более продвинутые темы из области обработки естественного языка (Natural Language Processing).
  • https://fleuret.org/public/lbdl.pdf - маленькая книжка с основами теории Machine Learning и Deep Learning в “карманном” формате. Может быть удобно использовать ее для повторения или в дополнение к более основательным курсам.
  • https://www.youtube.com/@hse-cs-lectures/videos - дистанционные курсы от ВШЭ по Deep Learning.
  1. Попроще - чтобы немного расслабиться:
  • https://www.deeplearning.ai/courses/generative-ai-for-everyone/ - крошечный курс от Andrew Ng про то, как пользоваться современными генеративными моделями наподобие ChatGPT и как, в общих чертах, они устроены.
  • Two Minute Papers - красочные демонстрации работы нейросетей из последних научных статей с нужными объяснениями, чтобы было примерно понятно, что к чему. Сами статьи в деталях не разбираются. Полезно, чтобы наглядно посмотреть, на что способны современные алгоритмы и быть в курсе современных достижений Deep Learning.
  • CodeWizer , AI Warehouse - демонстрации работы алгоритмов машинного обучения с подкреплением, в основном на основе глубоких (и не очень) нейросетей. Можно поразвлекаться, посмотрев на приключения самообучающихся агентов в разных ситуациях.

3.3. Если все же хочется пройти платный курс по Deep Learning...

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

Если вы видите курс “по нейросетям”, который стоит несколько десятков тысяч рублей и более, а в рекламе присутствует сочетание следующих аспектов:

  • Попытки выставить огромную цену не такой уж огромной с помощью маркетинговых уловок;
  • Заверения, что “английский язык, математику и программирование знать не нужно”;
  • Обещания быстрого результата за короткое время (“напиши девять нейросетей за три дня” и т.д.);
  • Обещания огромных зарплат (от 150к) сразу после прохождения курса;
  • “Гарантия” того, что любой человек поймет курс за отведенный срок;
  • “Гарантия” трудоустройства -

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

На самом деле:

  • Для разных специализаций в мире ML требуется несколько разный бэкграунд, но для большинства этих специализаций, особенно высокооплачиваемых и особенно включающих разработку своих собственных нейросетей, хотя бы на каком-то базовом уровне математику, программирование и какую-никакую теорию машинного обучения изучить все равно придется.
  • Совсем без математики и программирования вам будет доступен лишь очень ограниченный круг задач - например, промпт-инжиниринг или создание простых, шаблонных приложений с вызовом нейросетей по API.
  • Даже если повезет и удастся получить хорошую работу, не обладая хорошей базой, то чтобы расти на этой работе дальше (или хотя бы просто удержаться на ней), потом все равно придется возвращаться к учебе и подучивать необходимый теоретический минимум.
  • Зарплаты больше 100к на первой работе лучше не ждать. Большая зарплата прямо со старта - это либо удача, либо результат наличия необычного таланта, топового образования, побед в соревнованиях и/или топового портфолио. Если этого нет, то лучше уменьшить ожидания и приготовиться к тому, что зарплата станет большой только через несколько месяцев работы.
  • “Гарантия трудоустройства” не означает, что вам понравится та работа, на которую вас “трудоустроят”. С большой вероятностью эта “работа” будет на самом деле заключаться в “преподавании” на том же курсе либо будет являться низкооплачиваемой стажировкой.

Если какой-то платный курс из рекламы все-таки понравился, то перед покупкой стоит хотя бы спросить мнение об этом курсе у независимых специалистов по ML / DS / DL (инженеров, разработчиков, исследователей, преподавателей ВУЗов), у которых нет мотивации завышать ценность курса. Найти их (и не только их, но и просто товарищей по учебе) можно, например, в профессиональных сообществах наподобие Better Data Community .


4. Инструменты для конкретной роли (вакансии)

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

Очень часто в описаниях к вакансиям по ML и DS требуют знать такие инструменты:

  • Основы командной строки Linux
  • GIT
  • SQL

Я сама осваивала это и многое другое несколько лет назад на курсах с сайта

https://www.codecademy.com/ ,

но сейчас, к сожалению, там почти всё ушло под общий paywall: за доступ ко всем курсам одновременно, включая перечисленные темы, придется платить 17 - 30$ в месяц. А раз цель данного текста - рассказать про обучение ровно за ноль рублей, давайте рассмотрим те альтернативы, которые остались бесплатными и по сей день.

В целом отмечу, что на сайте Udacity есть много курсов хорошего качества разной степени платности на английском языке. Многое можно изучить за ноль рублей, просто без сопровождения, не делая учебные проекты (или делая их самостоятельно, без проверки) и не получая платный сертификат.


5. Поиск работы

Теперь к самому поиску работы.

5.1. CV / резюме

Поиск работы, разумеется, начинается с составления CV / резюме. В интернете много противоречивых рекомендаций о том, как его составить, но я рекомендую прислушиваться в первую очередь к HR, работающим в FAANG, потому что большинство остальных компаний берут с FAANG пример во многих аспектах найма.

Например, отличные рекомендации даны в видео от Google:

https://www.youtube.com/watch?v=BYUy1yvjHxE

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

Некоторые дополнительные рекомендации насчет того, что можно написать в CV, особенно в разделах про опыт, если у вас пока нет опыта работы в области ML / DS:

  • Если вы уже работали по любой другой IT-специальности (например, любая работа аналитиком, разработчиком и т.п.), нужно обязательно указать этот опыт. Если такого опыта слишком много и он не помещается в CV полностью, то отбираете самый релевантный. То же самое если вы работали на любой работе, связанной со знаниями математики - даже если это просто работа учителем.
  • Если вы занимали призовые места в абсолютно любых соревнованиях, в том числе олимпиадах и хакатонах, хоть как-то связанных с математикой, программированием или самим ML / DS, это также будет плюсом для вашего CV.
  • Если вы делали любые учебные проекты, связанные с программированием или, тем более, ML / DS, в ВУЗе или на курсах, также нужно написать про это и дать ссылку на github (см. курс про git) с проектом, если сохранился код (с честным уточнением, что проект был именно учебный).
  • Если вы писали научные или научно-популярные статьи, как-то связанные с математикой или программированием, это также следует отобразить в CV.
  • Если у вас есть хоть какой-то рейтинг на любом сайте, где решаются задачи по программированию либо ML / DS, это также можно упомянуть (про такие сайты будет рассказано ниже дополнительно).
  • Если ничего из перечисленного выше не имеется, либо если вам кажется, что этого все равно мало для хорошего CV, то желательно не полениться и сделать новый учебный проект. А затем, разумеется, создать репозиторий на github, запушить туда этот проект и написать про него в своём CV со ссылкой.
  • Если никаких оригинальных идей для учебного ML-проекта нет, можно просто взять любое свежее соревнование на https://www.kaggle.com/ и начать его решать, а потом приличным образом оформить ваше решение и выложить на github в качестве такого проекта.
  • Разумеется, ваше решение реально должно содержать какие-то ваши мысли и отображать ваш подход к задаче, а не просто быть копипастой чужого решения.
  • Если есть знакомый, разбирающийся в ML / DS, желательно также проконсультироваться с ним или с ней по вопросу, того, достойно ли выглядит ваш код, прежде чем его выкладывать.
  • Это можно делать независимо от того, займет ли ваше решение хорошее место в рейтинге или нет - главное, чтобы работало лучше бейзлайна и было понятным и читаемым.
  • Если задачи на Kaggle кажутся слишком сложными, можно начать с того, чтобы решать задачи по программированию попроще с других сайтов (о чем пойдет речь несколькими слайдами ниже). Также очень полезно разбирать чужие решения, чтобы разобраться, как вообще решаются такие соревнования.

После составления резюме на английском рекомендуется прогнать его через сервис https://www.grammarly.com/ (из России открывается только через VPN), чтобы удалить наиболее очевидные грамматические ошибки. Ну а после того, как резюме будет готово, крайне желательно показать его знакомым с состоявшейся карьерой в ML / DS либо знакомым HR и спросить, что можно подкорректировать. Если таких знакомых нет, то можно сходить в любую телеграм-группу, где сидят любители машинного обучения и задать этот вопрос там.

На рис. 7 изображен пример того, как может выглядеть CV для entry-level specialist в ML / DS на одну страницу, найденный на просторах интернета. Это CV не принадлежит реальному человеку, но оно полезно как пример более современного шаблона и с разделом Projects.

Рис. 7. Примерный шаблон CV.

Есть и минусы в этом примере: слишком маленький и плотный текст, а также не всегда понятные формулировки. Этот пример рекомендуется использовать для вдохновения, учитывая, что на его основе можно сделать что-то свое, еще лучше. Много бесплатных шаблонов для CV, кстати, есть в обычных Google Docs: https://docs.google.com/ .

5.2. Где искать вакансии

  • Для поиска работы в России неплохо подходит старый добрый https://hh.ru/ .
  • Более универсальный инструмент, с помощью которого можно искать работу и в России, и в других странах - это соц.сеть https://www.linkedin.com/ (из России открывается только с помощью VPN). Базовую информацию о том, как сделать хорошую страницу на LinkedIn и как пользоваться им для поиска работы, легко найти в интернете. Например: https://habr.com/ru/articles/653691/ .
  • Много вопросов, связанных с поиском работы за рубежом, рассматривается в чате https://t.me/relocate_it . Там можно найти разборы резюме, учебные материалы для изучения английского, информацию по вакансиям и пр.

5.3. Как готовиться к собеседованию

Итак, допустим, вы разослали свое резюме на ряд вакансий, которые вам понравились, и по одной из них вернулся ответ с приглашением на собеседование (чаще всего, процент таких ответов невелик, и это является нормальным). А может быть, какому-то HR просто понравилась ваша страница в LinkedIn или на hh, и он прислал приглашение по своей инициативе.

Как же теперь подготовиться к собеседованию?

Самая главная книга, которая может помочь в подготовке к собеседованию, называется “Cracking The Coding Interview” от Gayle Laakmann McDowell. Найти ее бесплатно в формате pdf очень легко, просто введя в гугл “Cracking The Coding Interview pdf”.

На самом деле книга платная, поэтому не забудьте после скачивания pdf для бесплатного ознакомления и последующего устройства на работу (где у вас, наконец-то, появится больше чем ноль рублей!) её обязательно купить: https://www.crackingthecodinginterview.com/ . 😇😇😇

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

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

https://pramp.com/

Я выделяю этот ресурс как самый полезный ресурс для подготовки к собеседованиям, который когда-либо встречала.

Суть в том, что вы назначаете тренировочное собеседование на выбранную тему (см. следующий слайд) на определенное время, вам присылают ссылку с материалами для подготовки, а потом вас подключают в это время к случайному собеседнику в режиме 1-to-1, и вы проходите тренировочное собеседование по очереди: сначала вы собеседуете его, а потом он вас. Как ни странно, больше половины собеседников в среднем оказываются адекватными, и поэтому это реально работает.

Рис. 8. Примеры тем, на которые можно проходить тренировочные собеседования на pramp.com.

Несколько замечаний насчет pramp.com :

  • При случайных собеседованиях вас будут ставить в пару с людьми из самых разных стран, поэтому собеседование нужно будет проходить по-английски. Скажу сразу, что если вы не живете в англоязычной стране, то поначалу может быть очень тяжело и стыдно из-за того, что вам будет трудно выражать на английском свои мысли. Этот стыд необходимо преодолеть с помощью тренировок. Чем больше тренируетесь, тем лучше разговариваете и тем меньше стесняетесь. Очень многие люди проходили через это и справились с этим.
  • Скорее всего, вам будут ставить низкие оценки за ваши ответы на mock interview - особенно поначалу. Это совершенно нормально. Ни в коем случае нельзя бросать тренировочные интервью из-за этого. Просто учитывайте замечания и двигайтесь дальше.
  • На pramp.com также есть также вариант попрактиковаться в собеседованиях с другом на любом языке, хоть на русском (“Practice with a friend”). С этого можно начать перед тем, как перейти к тренировочным собеседованиям с незнакомцами.
  • Если вам непонятно, чего от вас ждут на этих Mock Interview, можно начать с того, чтобы посмотреть пример того, как проходят алгоритмические интервью: https://www.youtube.com/watch?v=XKu_SEDAykw (от Google, на английском).
    Или вот пример того, как может проходить интервью по ML System Design:
    https://www.youtube.com/watch?v=sK_7v3mEQJU (на русском).
    Конечно, на YouTube много и других примеров - и на русском, и на английском. Советую ориентироваться на примеры от HR и инженеров из крупных компаний, так как там процесс найма наиболее отлажен.

Если у вас плохо получаются алгоритмические собеседования даже после чтения и решения упражнений из Cracking The Code Interview и практики на сайте pramp, есть множество сайтов, где можно сосредоточиться на отработке практики решения задач с таких собеседований и других похожих, например:

Более разнообразные упражнения (т.е. не только на алгоритмы) можно найти на:

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

Впрочем, полностью замыкаться только на решении задач с https://leetcode.com/ и https://www.kaggle.com/ не стоит. При поиске работы не менее важно уделять время и другим вещам: следить за состоянием ваших страниц на hh.ru и linkedin.com, регулярно мониторить вакансии и отсылать на них резюме, подучивать те навыки, которых вам пока что не достает и работать над ошибками, которые вы делаете на тренировочных и реальных интервью.

В общем-то весь процесс заключается в том, что вы делаете все эти вещи в цикле до тех пор, пока работа не находится.

5.4. ЧТО ДЕЛАТЬ ЕСЛИ НЕ ЗОВУТ НА СОБЕСЕДОВАНИЕ

Иногда у новичков возникает такая проблема, что на job interview их попросту не приглашают. В этом случае нужно не стесняться задавать вопросы в проф.сообществах насчет того, что не так с вашим CV и вашими страницами на hh.ru и linkedin.com, обрабатывать эту обратную связь и вылизывать свое CV и свои страницы до тех пор, пока они не начнут нравиться HR, а также продолжать работать над учебными проектами, о которых вы потом напишете на LinkedIn и добавите в свое CV.

Скорее всего, придется отправить свое CV на десятки вакансий, прежде чем придет хоть один ответ, а потом собеседование провалится, и нужно будет рассылать CV снова. В общем, придется набраться терпения и готовиться набивать шишки: поиск первой (и даже не первой) работы в этой области обычно занимает от пары месяцев до полугода и иногда даже больше.

5.5 Дополнительная информация про поиск работы

Больше информации про поиск работы конкретно в области ML / DS можно узнать в профессиональных сообществах наподобие уже упомянутого https://t.me/betterdatacommunity , а также https://singularis.ai/ . Ссылки на вакансии в этих сообществах также появляются.
У последнего, правда, постоянно ломается пригласительная ссылка (“Join community”). Новую можно спросить, например, в чате канала “Сиолошная” ( https://t.me/seeallochnaya ) - https://t.me/+hZypDuYNYIQ0NDIy , который и сам можно рассматривать как небольшое профессиональное сообщество.

Отдельно отмечу следующую замечательную методичку:

https://btseytlin.github.io/intro.html

про поиск работы в ML/DS и переговоры при приеме на работу, намного более подробную, чем мой гайд, от Senior ML Researcher, живущего и работающего на данный момент в Португалии. Крайне рекомендую её к ознакомлению!


Послесловие

Как вы уже, наверное, поняли, самостоятельный путь в Machine Learning / Data Science с нуля далеко не прост и требует большого количества времени и терпения. Скажу честно - на то, чтобы дойти до получения работы в Machine Learning / Data Science с полного нуля ("не умею программировать, не знаю математику"), я бы закладывала года три. На то, чтобы дойти до получения работы с уровня "ноль в ML, но знаю либо программирование, либо математику" - года полтора-два, "ноль в ML, но знаю и программирование, и математику" - год. Хотя, конечно, надо заметить, что всё это является лишь прикидкой, и, возможно, если у вас хорошая обучаемость, то получится освоить все нужные знания и побыстрее. Кроме того, бывает, что людям везёт и они попадают на работу ещё до того, как освоят нужные компетенции, а потом уже доучиваются в процессе, так что отчаиваться определенно не стоит.

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

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

Отзывы и замечания к моему гайду можете оставлять в моем канале Telegram под любым постом: https://t.me/tech_priestess , постараюсь ответить. Также отмечу, что гайд является компиляцией небольших pdf-ок с примерно тем же содержанием, ссылки на которые можно найти здесь - https://t.me/tech_priestess/838 . Может, кому-нибудь будет удобнее читать в таком формате.

Удачи и да хранит вас Омниссия на пути обучения и поиска работы за ноль рублей!