Эссе о разработке игр, мышлении и книгах

Погружение в глубокое обучение: MIT 6.S191

Мои заметки о погружении в глубокое обучение:

Отмучавшись с матаном, я решил, что времени на основательное разбирательство со всем машинным обучением уйдёт слишком много — надо срезать углы.

Поэтому следующей целью выбрал курс MIT 6.S191: Introduction to Deep Learning.

Потому что MIT и по темам лекций видно широкое покрытие темы.

Курсом очень доволен.

Сложные вещи излагаются доступно и кратко:

  • Из матана потребовалось только знание chain rule — правила нахождения производной композиции функции. И то — опционально.
  • Из линейной алгебры — базовые операции над матрицами и векторами.
  • Из теории вероятностей — базовые знания.

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

На прохождение потребовалось 6 дней:

  • 3 дня по 2 лекции и лабораторной работе;
  • 2 дня на подробное разбирательство со сделанными лабами: пройтись внимательно по каждой строчке кода, покрутить параметры;
  • день на оставшиеся лекции.

Лекции лежат на youtube, задания и решения лаб на github. Курсу несколько лет, каждый год записывают новые версии лекций. Можно посмотреть динамику изменения предметной области :-)

Курс затрагивает следующие темы:

  • Введение в нейронные сети: нейрон, перцептрон, etc.
  • RNN — Recurrent Neural Networks — моделирование последовательностей.
  • CNN — Convolutional Neural Networks, GAN — Generative Adversarial Networks —  обработка и генерация изображений.
  • Разные типы обучения: supervised, unsupervised, reinforcement.
  • Борьбу с предвзятостью моделей из-за искажений данных и/или алгоритмов. Классический пример: модель определяет чернокожих как преступников, потому что в обучающей выборке большинство преступников было с чёрной кожей.

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

Раскрыта важность топологии данных, архитектуры сетей. Есть примеры нетривиальных (как мне, дилетанту, кажется) архитектурных решений.

Рассматриваемые примеры сетей, конечно, не rocket science, но и не классические экземпляры из туториалов «мамкиных датасаентистов».

Недостатки тоже есть:

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

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