Hi!

Почти год назад издатель Packt связался со мной с предложением написать практическую книгу о современном глубоком обучении с подкреплением. Для меня, как для энтузиаста-самоучки Deep RL, это было немного пугающее решение, но после некоторых колебаний я согласился, оптимистично думая, что «это будет забавный опыт».

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

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

И напоследок: ТАДА! Вышла книга Практическое занятие по глубокому обучению с подкреплением.

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

Когда три года назад я начал экспериментировать с полем RL, у вас были следующие источники информации:

Возможно, я что-то упустил, но вот самые важные источники информации выглядели так. Все они очень далеки от практики:

  • Книга Саттона и Барто, также известная как «Книга RL», дает только теоретические основы данной области.
  • Статьи публикуются почти каждый день, но также очень редко содержат ссылки на реальный код. Только формулы и алгоритмы. Если повезет, даются гиперпараметры.
  • Курс Дэвида Сильвера преподавался в UCL в 2015 году и дает очень хороший обзор методов и интуиции, стоящих за ними, но, опять же, теория преобладает над практикой.

В то же время я был очарован статьей DeepMind (Нейронная сеть может научиться играть в Atari из пикселей! ВАУ!) И у меня возникло ощущение, что за этой холодной теорией скрывается много практической ценности. Итак, я потратил много времени на изучение теории, реализацию различных методов и их отладку. Как вы можете догадаться, это не очень простой процесс, так как вы можете потратить пару недель на настройку метода и, наконец, обнаружить, что ваша реализация неверна (или, что еще хуже, вы неправильно поняли формулу). Я не говорю, что такой способ обучения - пустая трата времени, на самом деле я считаю, что это самый надежный способ познакомиться с чем-то. Но на это уходит уйма времени.

Два года спустя, когда я начал писать, моим основным намерением было дать основательную практическую информацию о методах RL тому, кто знакомится с этой увлекательной областью, как и я в прошлом :).

Теперь немного о книге. Основная ориентация - практика, и в книге делается попытка ограничить количество теории и формул до минимума. Он включает ключевые формулы, но никаких доказательств не приводится, а интуитивное понимание происходящего привлекает гораздо больше внимания, чем строгость.

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

В книге есть масса примеров разной сложности, начиная с очень простых (метод CrossEntropy в среде CartPole имеет ~ 100 строк Python) и заканчивая проектами среднего размера, такими как AlphGo Zero или RL agent, торгующий акциями. Пример кода есть на github, а всего он содержит более 14 тысяч строк кода Python.

Всего существует 18 глав, охватывающих наиболее важные аспекты современного Deep RL:

  • Глава 1: знакомит с моделью обучения с подкреплением, показывает, чем она отличается от контролируемого и неконтролируемого обучения, содержит центральную математическую модель RL: Марковские процессы принятия решений (MDP). MDP вводятся поэтапно, начиная с цепей Маркова, которые преобразуются в процессы вознаграждения Маркова путем добавления вознаграждения, и, наконец, вводятся полные процессы принятия решений Маркова путем добавления действий агента к изображению.
  • Глава 2: охватывает OpenAI Gym, объединяющий API для RL, предоставляющий множество сред, включая Atari, классические задачи, такие как CartPole, проблемы непрерывного управления и другие.
  • Глава 3: краткий обзор PyTorch API. Эта глава не должна быть полным учебным курсом по DL, но дает больше объединяющей основы для последующих глав. Если вы использовали другой набор инструментов для глубокого обучения, он должен предоставить вам хорошее введение в элегантную модель PyTorch, чтобы понять примеры из следующих глав. В конце главы простой GAN будет обучен генерировать и различать скриншоты Atari из разных игр.
  • Глава 4: охватывает один из простейших, но, тем не менее, довольно мощный метод: CrossEntropy. В этой главе первая сеть обучается решать среду CartPole.
  • Глава 5: с этой главы начинается часть 2 книги, посвященная методу семейства Value Iteration. В главе 5 рассматривается простой случай табличного обучения с использованием уравнения Беллмана для решения среды FrozenLake.
  • Глава 6: В этой главе DQN вводится для решения игры Atari. Архитектура агента такая же, как в знаменитой статье DeepMind.
  • Глава 7: охватывает несколько современных расширений DQN для повышения стабильности и производительности базового DQN. Эта глава следует методам из Rainbow: Объединение улучшений в Deep RL и реализует их все, объясняя их идеи и интуицию. Рассматриваемые методы: N-шаговое DQN, двойное DQN, шумные сети, приоритетный буфер воспроизведения, дуэльный DQN и категориальный DQN. Наконец, все вышеперечисленные методы объединены в единый код, как это сделано в радужной бумаге.
  • Глава 8: представляет собой первый в книге проект среднего размера, демонстрирующий практический аспект RL применительно к реальным проблемам. В этой главе агент по торговле акциями обучается с использованием DQN.
  • Глава 9. Эта глава открывает часть 3 книги, посвященную семейству методов Policy Gradient. В этой главе представлены методы PG, их сильные и слабые стороны по сравнению с уже знакомыми методами итерации значений. Первый метод из семейства - REINFORCE.
  • Глава 10: описывает, как бороться с одной из наиболее серьезных проблем RL: отклонением градиента политики. После экспериментов с базовыми уровнями PG вводится метод «Критик-актер».
  • Глава 11: рассказывает о способах распараллеливания Actor-Critic на современном оборудовании. Реализованы два метода: параллелизм сэмплов и градиентный параллелизм.
  • Глава 12: второй практический пример, посвященный задачам, связанным с НЛП. В этой главе простой чат-бот обучается с использованием методов RL на Cornell Movie-Dialogs Corpus.
  • Глава 13: еще один практический пример, посвященный веб-автоматизации с использованием MiniWoB в качестве платформы. К сожалению, OpenAI отказался от MiniWoB, поэтому трудно найти информацию о нем (здесь и здесь, некоторые остатки). Но идея MiniWoB великолепна, поэтому в этой главе я покажу, как его настроить и научить агента решать некоторые проблемы. Записи людей также включены в процесс обучения, чтобы увеличить скорость обучения и производительность агента (но для этого потребовалось немного взлома VNC).
  • Глава 14: начало последней части 4 книги, в которой описаны более сложные методы и приемы. Глава 14 посвящена проблемам непрерывного управления и охватывает методы A3C, DDPG и D4PG для решения нескольких сред PyBullet.
  • Глава 15: подробнее рассказывает о проблемах непрерывного управления и знакомит с техникой Trust Region в методах TRPO, PPO и ACKTR.
  • Глава 16: посвящена методам без градиентов (или черных ящиков) в RL, которые должны быть более масштабируемой альтернативой методам DQN и PG. Стратегии эволюции и генетические алгоритмы реализованы для решения нескольких задач непрерывного управления.
  • Глава 17: описывает подходы к RL, основанные на моделях, и попытку DeepMind преодолеть разрыв между методами, не основанными на моделях, и методами, основанными на моделях. В главе реализован агент I2A для решения игры Breakout с использованием воображения.
  • Глава 18: последняя глава книги посвящена методу AlphaGo Zero, который применяется к игре Connect4. Затем последний агент используется в телеграмм-боте для проверки результата человеком.

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