Привет, Хабр! Меня зовут Ефим, я MLOps-инженер в Selectel. В прошлом был автоматизатором, ML-инженером, дата-аналитиком и дата-инженером — и уже несколько лет падаю в пропасть машинного обучения и Data Science. Это буквально необъятная сфера, в которой почти нет ориентиров. Основная проблема в том, что разделов математики довольно много и все они, на первый взгляд, нужны в том же машинном обучении.
В этой статье делюсь полезными материалами, которые помогут найти и заполнить теоретические и практические проблемы и основательно подойти к своему профессиональному развитию. Добро пожаловать под кат!
Используйте навигацию, если не хотите читать текст полностью:
→ Почему машинное обучение — это сложно
→ Нейронные сети
→ Выстраиваем работу с ML
→ Машинное обучение
→ Основы статистики, все части
→ Анализ данных в R, все части
→ Введение в математический анализ
→ Теория вероятностей — наука о случайности, все части
→ Курсы и гайды на Kaggle
→ Платформа DataCamp
→ Платформа Dataquest
→ Платформа Jovian
→ Канал StatQuest with Josh Starmer
→ Блог Machine Learning Mastery
Почему машинное обучение — это сложно
Для начала хотелось бы напомнить, почему одним курсом по машинному обучению и Data Science не обойтись.
Сфер применения машинного обучения много: от рекомендательных движков в музыкальных приложениях, до оценки благонадежности кредитуемого (aka задача кредитного скоринга). Спрос на специалистов, разбирающихся в предметной области и способных грамотно применять методы ML, постоянно растет.
В начале пути кажется, что создать собственный сервис просто: в сети есть открытые высокоуровневые библиотеки вроде PyTorch, TensorFlow, ONNX и других инструментов. Тем не менее, в силу специфики области возникает огромное количество вопросов и даже понимание «основ» машинного обучения не избавляет от подводных камней — а их может быть много. Постараюсь это показать.
Представьте ситуацию. Вы — начинающий специалист. И вам нужно некое портфолио, чтобы продемонстрировать потенциальному работодателю свои навыки и знания. Кроме того, их нужно где-то приобрести и поддерживать в актуальном состоянии.
Вы решили, что будете разрабатывать свой ML-сервис для распознавания лиц. Допустим, он будет построен на базе сверточных нейронных сетей и вы уже разобрались с формальной постановкой задачи (подозреваю, что там некоторым образом всплывут термины вроде Face Recognition и Face Identification). Предположим, что вы даже уже определились с выбором нужных инструментов — например Python, PyTorch и PyTorch Lighting. Какие вопросы могут возникнуть?
- Есть ли примеры кода для выбранных задач или нужно будет имплементировать архитектуру сети с нуля?
- Если примеры кода есть, достаточно ли будет Transfer Learning или придется прикручивать Fine Tuning для моделей?
- В случае Fine Tuning какой набор данных нужен для создания проекта?
- Если своих данных нет, откуда их можно взять?
И это лишь часть вопросов, с которыми можно столкнуться на этапе создания, казалось бы, простого сервиса. Могут появиться задачи, связанные вовсе не с данными, а с работой модели.
- Как разработать кастомную функцию потерь или функцию активации?
- Можно ли как-то осознанно выбрать гиперпараметры модели?
- На что вообще эти гиперпараметры влияют, есть ли рамки для каждого из них?
- Что делать, если возникла ошибка с размерностью входного слоя?
- Как имплементировать SOTA-архитектуру?
- Как интерпретировать полученные результаты?
До сих пор это лишь часть проблем, с которыми можно столкнуться из-за незнания математического аппарата. Например, есть параметр momentum. Это один из гиперпараметров, применяемых в обучении нейронной сети с использованием одной из вариаций стохастического градиентного спуска Adam (Adaptive Moment estimation). Чтобы просто понять, зачем этот параметр там нужен, нужно как минимум знать, что такое градиент. Это предполагает знание элементов математического анализа и концепции взвешенной суммы.
Машинное обучение — это о математике
Давайте разберем один из сценариев в прошлом разделе: начинающему ML-инженеру нужно самостоятельно имплементировать SOTA-архитектуру на готовом фреймворке.
В рамках задачи разработчику нужно будет самостоятельно расписать все слои SOTA и понять, как они между собой связаны — а это уже, как минимум, линейная алгебра и, возможно, тензорный анализ. На этом пункте многие скажут: «Очевидно, что ML-инженер должен знать эти дисциплины» — и будут правы.
Теория без практики мертва, но практика без теории слепа. Неважно, как вы изучаете: сверху вниз или снизу вверх, от общего к частному или от частного к общему — важно найти для себя некую точку баланса. Вот, как взаимосвязи в Data Science вижу я:
Теперь посмотрим, какие же ресурсы и курсы можно пошерстить, чтобы погрузиться в этот dependency hell.
Введение в Data Science и машинное обучение
Хороший курс для тех, кто только-только начинает вливаться в Data Science и машинное обучение. Простой, без академического снобизма и тонны громоздких терминов.
Лектор Анатолий Карпов рассказывает о наиболее популярных и надежных инструментах, которые применяют в различных компаниях при решении коммерческих задач. При этом в курсе есть достаточный минимум погружения в технические детали. Для меня этот курс был полезен тем, что помог структурировать уже имеющиеся знания и посмотреть на знакомые технологии под другим углом.
Источник → курс доступен по ссылке.
Нейронные сети
Этот курс дает возможность разобраться в устройстве оптимизаторов и даже написать свою версию. В курсе хорошо преподнесены вводные по линейной алгебре и имплементация метода обратного распространения ошибки на NumPy.
Курс особенно полезен для тех, у кого есть «база», новичкам его рекомендовать не могу.
Источник → изучайте нейронные сети по ссылке.
Выстраиваем работу с ML
Недавно мы с коллегами запустили курс «Выстраиваем работу с ML». В нем собрали полезные материалы для компаний, которые внедряют машинное обучение в рабочие процессы. Подробно рассмотрели концепцию MLOps — дисциплину, направленную на унификацию процессов разработки и развертывания ML-систем. Также рассмотрели отдельные инструменты для работы с ML-моделями и подробно осветили понятие платформы обработки данных.
Источник → узнайте больше о ML по ссылке.
Машинное обучение
Это исключительно вводный курс, который скорее заинтересует, чем сделает из вас специалиста. Бережно и аккуратно рассказывает о базовых сущностях, которые лежат в основе математического аппарата машинного обучения. Поэтому курс особенно полезен для специалистов смежных направлений — например, техническим писателям.
Источник → курс доступен по ссылке.
Основы статистики, все части
Один из лучших курсов для «осторожного» погружения в работу статистических критериев, теорию формирования выборок и прочего.
Лектор Анатолий Карпов объясняет, из чего состоит критерий Стьюдента, в чем смысл центральной предельной теоремы, зачем нужно A/B-тестирование и другие вещи. Я бы сказал, этот курс полезен всем, потому что учит трезво оценивать реальность, осмыслять происходящие в ней события и случайные процессы.
Источник → первая часть доступна по ссылке.
Во второй части курса «Основы статистики» уже больше критериев и деталей.
Источник → вторая часть доступна по ссылке.
Третья часть курса еще сильнее погружает в вопросы линейной регрессии. Обсуждаются мультиколлинеарность, гетероскедастичность и другие проблемы, с которыми можно столкнуться в процессе построения регрессионных и классификационных моделей.
Источник → третья часть доступна по ссылке.
Анализ данных в R, все части
Говоря о курсах по основам статистики, имеет смысл упомянуть и курс по анализу данных в R. Поскольку все примеры, иллюстрирующие идеи и концепции из статистики, демонстрируются именно на этом языке.
Первая часть курса не распыляется и покрывает только часть тем — знакомство с синтаксисом, работу с датасетами и их визуализацию. Но этого вполне достаточно, чтобы влиться в язык и погрузиться в более сложные темы вроде RSpark.
Источник → первая часть доступна по ссылке.
Вторая часть логически развивает материал первой. В ней более пристально расписаны способы, как шерудить данные (преимущественно табличные), отрисовывать их и строить отчеты с помощью R Markdown.
Трудно сказать, насколько вам пригодится материал из этой части. Но если вы решили, что тематика языка R вам близка, то с помощью курса можете закрепить полученные знания.
Источник → вторая часть доступна по ссылке.
Введение в математический анализ
Не проходил курс полностью, но есть одна вещь, из-за которой готов его рекомендовать — это задачи. Почти в самом начале наткнулся на пример, который вогнал меня в ступор.
Решил задачу только со 117 попытки. ???? Не делайте так: лучше пропускать подобные задачи и идти по курсу дальше. Это позволит изучить его до конца и лучше понять, где используются пределы в машинном обучении.
Источник → проходите курс по ссылке.
Теория вероятностей — наука о случайности, все части
Этот курс оставил дыру в моем сердце… Я выполнил верно практически все задания, но стоило дать слабину на единственном разделе — и прощай, пройденный на 100% курс. Так или иначе, первая часть очень достойная и подойдет даже тем, кто уже знаком с теорией вероятностей.
Источник → первая часть доступна по ссылке.
Вторая часть гораздо интересней и без шуток. Она погружает читателя в борелевскую сигма-алгебру, процессы Бернулли и Пуассона, многомерные и условные непрерывные распределения. Надо ли изучать эти темы на старте? Точно нет. Стоит ли отложить этот курс и вернуться к нему позже? Да, безусловно!
Это по-настоящему полезный курс: машинное обучение буквально «сквозит» условными распределениями и понимание этой математической конструкции может сильно помочь в освоении сложного материала.
Источник → вторая часть доступна по ссылке.
Курсы и гайды на Kaggle
С пониманием таких вещей как permutation importance, partial dependence, SHapley Additive exPlanations (SHAP) и другим мне помог именно курс на Kaggle — Machine Learning Explainability.
Все курсы Kaggle встроены в интерфейс платформы, сопровождаются листингами с кодом и подробными комментариями. После теоретического блока можно поэкспериментировать с кодом, что достаточно удобно.
Источник → все курсы и гайды доступны по ссылке.
Платформа DataCamp
Платформа напоминает что-то вроде судоку или сканворда. Практическая польза от этой платформы в том, что можно набить руку на написании однотипных блоков кода. Так, можно запомнить, например, как считать абсолютную разницу двух столбцов в библиотеке Pandas или критерий Стьюдента в SciPy. Можно ли всё это сделать без подобной платформы? Конечно. Но если у вас есть желание обернуть это все в околоигровую форму, можно воспользоваться подобной платформой.
Источник → в «судоку» можно поиграть по ссылке.
Платформа Dataquest
Это примерно такой же сканворд, как и DataCamp. Но значительная часть курсов на Dataquest платная. Можно, конечно, идти по программе курса и просто гуглить материалы самостоятельно, но тогда вы лишите себя главного плюса этой платформы — визуализации результатов и прокаченных навыков. Другой вопрос, а нужно ли оно вам?
Источник → курсы доступны по ссылке.
Платформа Jovian
Уже довольно сложно найти что-то новое или оригинальное в экспоненциально возрастающем количестве курсов. Если вы хотите найти гайд по конкретной теме, попробуйте это сделать на Jovian. Это хорошая платформа-обучалка с акцентом в сторону Jupyter Notebook. Мне особенно приглянулись курсы по Deep Learning, Machine Learning и Natural Language Processing. Большая часть материалов на Jovian бесплатна.
Источник → подключайтесь по ссылке.
Канал StatQuest with Josh Starmer
В своё время я получил массу удовольствия от просмотра видео на канале StatQuest with Josh Starmer. Автор классно объясняет математические модели и методы — например, как работают случайные леса, логистическая регрессия, статистические тесты и другое. Особенно рекомендую видео о том, что там BAM!!!
Источник → на канал можно попасть по этой ссылке.
Возможно, эти тексты тоже вас заинтересуют:
→ Бот из машины. Как инженеру сократить время на диагностику дисков
→ Знакомство с частотными фильтрами. Часть 1: как спроектировать и немного схитрить
→ 5 полезных и просто занимательных проектов на Raspberry Pi начала весны 2023 года
Блог Machine Learning Mastery
В этом блоге можно найти массу примеров кода с разными фреймворками и полезные статьи. Довольно интересный материал, на который я недавно наткнулся, посвящен Loss-функциям в PyTorch. Рекомендую курс тем, кто хочет узнать больше деталей из привычной разработки нейронных сетей.
Источник → читайте блог по ссылке.
Заключение
Как вы поняли, образовательных ресурсов много. И чтобы стать специалистом, нужно основательно подойти к их изучению, а также следить за новыми технологиями в мире машинного обучения и Data Science. Кстати, с последним мы помогаем в нашем Telegram-сообществе «MLечный путь». Там мы публикуем еженедельные дайджесты по DataOps и MLOps, обсуждаем проблемы и лучшие практики организации production ML-сервисов, а также обмениваемся опытом. Присоединяйтесь к более 700 специалистам, развивающим ML- и Data-направления в российских и зарубежных компаниях.
А какие источники для погружения в Data Science и ML знаете вы? Поделитесь своими вариантами в комментариях.
Комментарии (12)
Elena-314
00.00.0000 00:00+3спасибо за признание, что решили задачу только со 117 попытки. Стало любопытно, какой же там ответ)
feanoref Автор
00.00.0000 00:00+4На самом деле там задача-то не очень сложная))
Просто правда нужно было пропустить ее и идти дальше))
Если бы я так сделал, то сэкономил бы себе много времени, сил и нервов))
luckyenough64
00.00.0000 00:00+1Порекомендовал бы чисто от себя курсы на Coursera от IBM по DataScience, вполне себе очень даже неплохой!
feanoref Автор
00.00.0000 00:00+1Ну да, тоже норм вариант))
На ютюбчике у IBM тоже есть небольшая подборка по AI Essentials.
Можно начать с нее, а потом пойти на их специализацию на Coursera.
T968
А почему не указали численные методы, исследование операций?
Например исследования Рунге и Кутта в том числе про рост ошибки вычислений или про интерполяцию и экстраполяцию. Тот же симплекс метод, позволяющий очень хорошо оптимизировать и т.д. А ряды Тейлора? Преобразование Адамара, Фурье спектр?
Или теоремы про вычеты конформной функции или...
Да тут нет и половины того, что нужно для правильного прикладывания математики к реальности
feanoref Автор
Доброго времени суток!
Для правильного прикладывания математики к реальности здесь нет вообще очень много чего, поскольку "правильное прикладывание математики к реальности" - довольно широкая тема.
Тема данной статьи была немного более узкой и конкретной.
Если у вас есть ссылки на бесплатные и толковые курсы/статьи/книги/лекции/прочие материалы на обозначенные вами темы, поделитесь ими пожалуйста, я с удовольствием с ними ознакомлюсь!)))
T968
Это не про широту исследования. Одна из работ Рунге и Кутта была про точность вычислений. Т.е. на каждом шаге вычислений накапливается ошибка и еë нужно знать. Сейчас точность чисел в ЭВМ весьма приличная, но и шагов много, гораздо больше. Разрядов меньше - скорость больше - точность хуже.
И вот этот простой аспект, очень узкий никак и нигде не ни на каких курсах не изучается.
Это как пример узкого очень вопроса, но таких узких так много, что в совокупности они шире самого курса.
Я уж не стану вспоминать, что использование float тоже чревато, если не понимать форму хранения.
spirit1984
Я согласен с такими опасениями. Но важно понимать, что современные инструменты DataScience позволяют избежать ошибок, даже не особо разбираясь в вопросе. К слову, вот отличная статья о том, что каждый DataScientist должен знать о вопросе, который Вы затронули - https://diybigdata.net/2016/07/data-science-and-floating-point-arithmetic/ - и там прямо указывается, что в том же Питоне есть средства коррекции этих ошибок встроенные. В кишках numpy/scikit/pandas не копался, но ЕМНИП там это тоже встроено по умолчанию. Поэтому данная тема особо прям на курсах и не изучается.
feanoref Автор
"Одна из работ" - какая именно?)) Поделитесь пожалуйста или хотя бы скажите название работы, чтобы можно было ее найти и почитать.
Тема действительно довольно интересная и я пока что не сталкивался с ней в курсах, имеющихся в свободном доступе.
Можно, конечно, посмотреть лекцию типа вот такой, но круто было бы почитать первоисточник.
T968
Первоисточник вряд ли найду сейчас.
Это по памяти, я точно помню лекцию, где определяли разрядность расчетов, десятичных!!, так как Рунге и Кутта считали еще на арифмометрах.