Как изучать машинное обучение?
Меня часто спрашивают: как лучше всего изучать нейронные сети? Что почитать по нейронным сетям? Есть множество курсов, которые обещают обучить вас нейронным сетям почти с нуля. По моему мнению, для новичка такой подход может дать только поверхностные знания и вряд ли поможет развить навыки применения этих знаний в реальных задачах. Перед тем как изучать глубокое обучение и современные нейронные сети, необходимо качественно изучить классическое машинное обучение! Почему именно так?
Потому, что качественное изучение основ машинного обучения даст вам систематизированные знания и понимание основополагающих принципов данной области. А это, в свою очередь, даст вам следующие преимущества:
- Вы сможете легко применять более простые подходы там, где нейронные сети просто не нужны, вместо того, чтобы каждый раз палить из пушки по воробьям.
- Вы сможете быстрее изучать другие области и алгоритмы машинного обучения. Например бустинг, который в некоторых задачах может даже превосходить нейронные сети.
- Вы будете более широко смотреть на машинное обучение. В лучшем случае, вы сможете самостоятельно улучшать модели и алгоритмы.
- Вы лучше поймете глубокое обучение и нейронные сети и сможете лучше систематизировать свои знания в этой области.
- Вы сможете применять классические модели машинного обучения вместе с глубокими нейронными сетями.
Я предлагаю новичкам изучать машинное обучение примерно в следующей последовательности.
Изучите или вспомните математику
Повторите основы матана. Не сильно увлекайтесь тройными и эллиптическими интегралами, рядами, дифференциальными уравнениями. Повторите понятия частных производных, градиента функции, непрерывности, монотонности, выпуклости, гладкости, областей определения и значения, локальных и глобальных экстремумов, седловых точек.
Изучите или вспомните линейную алгебру. Не требуется становиться в этой области экспертом с ученой степенью, но вам необходимо знать и понимать основные понятия: вектор, матрица, действия над векторами и матрицами, единичная матрица, векторные пространства, нормализация, факторизация, сингулярное разложение и т.д.
Мне очень нравится книга Гилберта Стрэнга Introduction to Linear Algebra. Но вы можете взять и более короткую книгу.
Приведите в порядок свои знания в статистике и теории вероятностей. Не обязательно защищать диссертацию по статистическим методам. Изучите основы: случайные события, случайные величины, вероятность, распределение, основные виды распределений (нормальное, экспоненциальное, равномерное, логнормальное и т.д.), плотность вероятности, корреляция, ковариация, выборка, дисперсия, ошибка выборки, условная вероятность, теорема Байеса, метод наименьших квадратов.
Мне нравится книга Think Stats: Exploratory Data Analysis. Она написана для разработчиков, содержит примеры кода на Python. Объясняет простым английским языком основные теоретические понятия и одновременно позволяет изучить библиотеки NumPy, SciPy, pandas, matplotlib и StatsModels. Первые 10 глав покрывают все необходимые темы. Кроме того, эта книга официально находится в свободном доступе.
Изучив эти разделы математики вы не только заложите прочный фундамент для освоения машинного обучения, но и прокачаете свой мозг, и получите знания, которые можно использовать практически в любой области от страхования до квантовой механики.
Изучите основы машинного обучения
Начните с понятия машинного обучение. Изучите какие бывают типы машинного обучения: с учителем, без учителя, с частичным привлечением учителя, с подкреплением. Узнайте какие бывают задачи машинного обучения: классификация, регрессия, кластеризация и т.д.
Изучите линейную регрессию и метод градиентного спуска. Разберитесь с понятиями “модель машинного обучения” и “алгоритм машинного обучения”. Изучите понятие функции ошибки и принципы валидации моделей машинного обучения. Разберитесь со стохастическим градиентным спуском.
Изучите логистическую регрессию, бинарную и многоклассовую классификацию. Усвойте понятия переобучения и недообучения, F1-score, стратегии валидации, K-Fold валидацию, основные методы регуляризации. Разберитесь с каким-нибудь продвинутым методом оптимизации, например BFGS.
Изучите парочку более сложных моделей машинного обучения для классификации. Например, наивный байесовский классификатор и машины опорных векторов. Разберитесь с понятием “feature engineering”. Усвойте No free lunch theorem.
Изучите основы нейронных сетей: нейрон, функции активации, слой, алгоритм обратного распространения ошибки, перцептрон.
Разберитесь с обучением без учителя: кластеризация, уменьшение размерности данных, метод k-средних, метод главных компонент (PCA), анализ независимых компонент (ICA), поиск выбросов и аномалий в данных.
По последовательности и ясности изложения материала мне очень нравится курс Andrew Ng Machine learning. Но минус этого курса в том, что в нем не рассматриваются конкретные инструменты машинного обучения, которые сейчас используются на практике.
Поэтому я рекомендую также изучать библиотеку scikit-learn. Она достаточно популярна на сегодняшний день, реализует основные модели классического машинного обучения. На официальном сайте есть множество туториалов. Также можно изучать ее по первой части книги Hands-On Machine Learning with Scikit-Learn and TensorFlow.
Переходите к глубокому машинному обучению
Сегодня это развивающаяся область, поэтому ни в одной книге вы не получите полный обзор всех значительных достижений в теории глубокого обучения. Но, в любом случае, необходимо начать с основ: глубокие нейронные сети прямого распространения, сверточные нейронные сети, проблема исчезающего градиента, ReLU, градиентный спуск с моментом, рекуррентные нейронные сети, LSTM и т.д.
Для изучения теории глубокого обучения рекомендую замечательную книгу Айана Гудфеллоу и соавторов: Deep Learning.
Для овладения практическими навыками необходимо изучить какой-нибудь Deep Learning фреймворк. Проще всего начать с фреймворков-конструкторов, например Keras. Затем можно переходить к более низкоуровневым фреймворкам, например Tensorflow. Можно изучать его по второй части книги Hands-On Machine Learning with Scikit-Learn and TensorFlow. Также есть отличная специализация из 5 видео-курсов Deep Learning от Andrew Ng. Затем можно переходить к изучению более продвинутых и специализированных вещей.
Заключение
По моему мнению, именно описанный выше подход позволит получить систематизированные знания и развить навыки применения этих знаний в реальных задачах. Возможно, я упустил какие-нибудь темы. Также я допускаю, что у другого опытного специалиста может быть отличное от моего мнение по поводу того, как правильно изучать машинное обучение. Если у вас есть какие-либо ремарки или вопросы, добро пожаловать в комментарии.