Регулярно на Пикабу вижу посты-жалобы «денег нет, работодатели — козлы». Для тех, кто любит просто ныть и на самом деле ничего менять не планирует — сразу пролистывайте, пост не для вас.
Я хочу поделиться своим личным опытом, ссылками и книгами, которые изучал, чтобы стать ML-разработчиком. Если вы не считаете, что айтишники — это «проклятые смузиеды», и рассматриваете для себя работу в данной сфере, то велком.
Предупреждаю сразу: придется много пахать, нет гарантий ни быстрого трудоустройства, ни высокой зарплаты на старте, да и от *удаков на работе это тоже не убережет. Но даст крепкую базу, благодаря которой вы сможете начать свою карьеру. Как говорится, дорогу осилит идущий.
Сначала лирическое отступление: 5 лет назад я размышлял на тему «кем я хочу стать, когда вырасту». К этому моменту закончил электротехнический универ в Питере. Там нам читали программирование (C++ три семестра и ассемблер), которое мне ужасно не нравилось. Зато на третьем курсе я увлекся математикой, интересовался ИИ и нейросетями, хотя в тот момент я плохо понимал их дальнейшую применимость. После универа работал по профессии, не связанной с ИТ, и спустя два года я понял, что все-таки AI и нейронки — крутая штука, поэтому надо прокачиваться в эту сторону. Около года заняло самообучение и я получил первую работу джуном в стартапе за 35к (да-да, никаких золотых гор). Но мне нравилось то, чем я занимаюсь, и я продолжил углублять свои знания, сменил несколько мест работы. Сегодня я senior NLP-разработчик в международной команде в ЮАР, на зарплату не жалуюсь.
По пути я набил ряд шишек, перелопатил кучу книг и курсов. В сегодняшнем посте дам ссылки на те из них, что были действительно полезными и понятными. Все курсы — бесплатные, требуется только время и упорство. Оговорюсь — я описываю только то, что требуется джуну, для более высоких позиций знания, естественно, должны быть гораздо глубже.
Основы программирования
AI и нейронки = Python. Тут есть и другие языки, но Python — это база. На Степике мне понравились следующие курсы:
«Поколение Python»: курс для начинающих
«Поколение Python»: курс для продвинутых
Python: основы и применение (тут бывают странные задачи, на некоторых можно застрять, поэтому советую пропускать их, чтобы вернуться позднее)
Помимо Python пригодятся знания SQL:
Интерактивный тренажер по SQL — для общего погружения в тему
Практическое владение языком SQL — для решения практических задачек
У всех свои темпы обучения, но имхо реально освоить на 4 месяца, если заниматься 3-4 часа в день 5-6 дней в неделю.
Математика
Если вы совсем на «вы» с математикой, то порадовать мне вас нечем. Ряд областей являются фундаментальным знанием, без них стать ML-разработчиком невозможно.
Пробегусь по минимальным требованиям:
Линейная алгебра: матрицы и их разложения, работа с пространствами, тензоры.
Математический анализ: функции, производные, экстремумы.
Теория вероятности и статистика: условная вероятность, теорема Байеса, различные распределения и их оценки, критерии Согласия.
Чтобы был больший стимул разбираться с математикой, поясню: все эти разделы помогают понять, как нейросети устроены изнутри, плюс вопросы по этим разделам есть на собесах. А еще математическая база позволит читать научные статьи, что пригодится в дальнейшем.
Для погружения в математику есть великолепные курсы от преподавателей МГУ, которые оптимально подкреплять чтением профильных книг, коих великое множество. У меня есть подборка, если вы хотите, чтобы я их вам кинул — пишите в лс, все пришлю.
Основы ML
На мой взгляд, лучшая книга — «Python и машинное обучение», авторы Себастьян Рашка и Мирджалили Вахид. Безусловно, полно и других книг, но тут вы ознакомитесь с всеобъемлющим и пошаговым руководством-справочником. Обратите внимание: данная книга встречается в версиях, отпечатанных в цвете и в ч/б, рекомендую выбрать именно цветное издание, иначе глаза сломаете на коде и графиках.
Изучение ML-базы у меня заняло 7 месяцев, но я занимался много — по 6 часов в день.
Специализация
Поскольку в AI много направлений (как в медицине — есть окулисты, лоры, хирурги и тд), то советую выбрать для себя что-то одно, на чем вы сфокусируетесь. Далее опишу варианты в порядке усложнения получения работы джуном:
Классическое машинное обучение
Работа с табличными данными: прогнозирование спроса, оценка кредитных рисков, аналитика пользовательского поведения, обработка опросов и статистики. Самый низкий порог входа для джунов.
Видеоаналитика — распознавание объектов и действий на изображениях и видео: подсчет людей в кадре, распознавание номеров, контроль на производстве. Есть смежные задачи — генерация изображений, видео, 3D-реконструкция. Кстати, я стартанул именно с этого, т.к. счел, что конкуренция ниже, чем в классическом ML, а вакансий много.
Распознавание речи, диалоговые системы, голосовые ассистенты, улучшение качества аудио. Сейчас это направление набирает популярность.
Анализ и генерация текстов: от чат-ботов до систем поиска, перевода, резюмирования и генерации контента. Для джунов сложность в том, что работа с языковыми или мультимодальными моделями требует значительных вычислительных ресурсов, то есть требует аренды серверов, что дорого.
5. Обучение с подкреплением
Обучение агентов действовать в средах: игры, роботы, автоматизация решений. С научной точки зрения это, конечно, очень интересно, но вакансий мало и они встречаются только в больших технологических компаниях. Имхо — это не для джунов.
После выбора направления возьмите хорошую профильную книгу и проработайте ее как полноценный учебный курс. Все примеры и задания выполняйте в Google Colab — это онлайн-среда с доступом к GPU, где можно писать и запускать код без установки локальных программ.
Вопросы на собеседованиях
Python: базовые принципы работы с памятью, основы ООП, как работает GIL, применение декораторов и lambda, типы коллекций, анализ сложности алгоритмов.
Машинное обучение: обязательно знать метрики, классические модели, их математику и различие ошибок первого/второго рода.
Linux и Docker: встречаются редко, но полезно знать команды и логику работы.
PyTor-ch: не всегда спрашивают, но знание основ — плюс при работе с DL.
Я накидал вопросы крупными мазками, но вообще они зависят от вашей специализации. Поэтому советую изучать актуальные вакансии и требования в них, фиксировать информацию в таблице — так вы поймете, насколько соответствуете и чего не хватает.
Pet-проект
Считаю, что пет-проект — это маст хэв для джунов. Реальных-то достижений у вас пока нет, поэтому простенькое приложение с базовой логикой, которое стабильно работает, покажет, что вы в состоянии довести идею до реализации и понимаете «код-модель-деплой».
Советы и дополнительные темы для изучения
Ведите свою базу знаний (конспекты), выделяя ключевые моменты, чтобы материал был структурирован. Это очень пригодится, чтобы быстро найти и освежить то, что вы подзабыли, а также при подготовке к собеседованиям.
Учите английский — основные материалы, научные статьи, документация и курсы выходят именно на английском. Позднее энтузиасты переводят на русских, но не всегда хорошо и часто не в полном объеме.
Освойте Убунту, поставив рядом с виндой. Почти все, что связано с ML, заточено именно под линукс. На старте это может быть не очевидно, но потом вы оцените необходимость работы с линуксом.
Вникайте в железо — видеокарты, характеристики, производительность и ценник. На сосебах тоже пригодится — любят спросить, какие ресурсы требуются для запуска модели или проекта.
Освойте фреймворк для создания API (Django, FastAPI или Flask). Так вы сможете упаковать модель в сервис, чтобы она была доступна для использования извне — вишенка на вашем pet-проекте и реальная польза в работе.
На этом, пожалуй, все. Если я не отбил желание погрузиться в тему разработки, то приглашаю в мой телеграм-канал, который я регулярно веду как раз в помощь джунам в сфере ML.