# Как ИИ от DeepMind научился играть в Atari: разбор классической статьи от Янника Килчера

Источник: https://www.youtube.com/watch?v=rFwQDDbYTm4
Канал: Yannic Kilcher
Опубликовано: 26.07.2020

---

В 2013 году компания DeepMind опубликовала фундаментальную работу «Playing Atari with Deep Reinforcement Learning», которая перевернула представление об обучении с подкреплением и дала мощный толчок развитию современного искусственного интеллекта. Популярный исследователь и блогер Янник Килчер (Yannic Kilcher) подробно разобрал этот классический труд, объяснив, как простой свёрточной нейросети удалось освоить аркадные видеоигры без ручной настройки признаков. Этот детальный разбор позволяет проследить истоки революции в области Deep RL и оценить элегантность инженерных решений, которые сегодня стали индустриальным стандартом.

## 🕹️ Новая эра обучения с подкреплением: от марковских процессов к сырым пикселям
[[JUMP:0:00]]

До выхода этой статьи обучение с подкреплением (Reinforcement Learning) оставалось довольно специфической и изолированной областью математики, завязанной на концепции марковских процессов принятия решений (MDP). Существовавшие тогда алгоритмы либо не справлялись с комплексными задачами, либо критически зависели от ручного проектирования признаков (hand-engineered features), когда инженеры сами объясняли алгоритму, где находятся объекты на экране. Команда исследователей под руководством Владимира Мниха (Volodymyr Mnih) совершила прорыв, объединив силу глубоких свёрточных нейросетей с обучением с подкреплением. 

Авторы представили первую в истории модель глубокого обучения, способную успешно осваивать стратегии управления напрямую из высокоразмерных сенсорных данных. В качестве испытательного полигона использовалась среда Arcade Learning Environment (ALE), включающая в себя классические игры для консоли Atari 2600. Архитектура системы управляла виртуальным джойстиком, который в каждой игре имел фиксированный набор действий — от 16 до 20 вариантов движений и нажатий кнопок. При этом на вход алгоритму подавались исключительно сырые пиксели игрового экрана размером примерно 180 на 150 точек.

Главная сложность такой конфигурации заключается в фундаментальной проблеме обучения с подкреплением — проблеме распределения наград (credit assignment problem). В классическом цикле взаимодействия агент совершает действие в среде, получает новое наблюдение (кадр игры) и награду. Однако игровой процесс может длиться тысячи шагов, а значимая награда (например, очко за выбитый блок в Breakout или забитый гол в Pong) приходит крайне редко. По мнению Янника Килчера, научить сеть сопоставлять редкую отложенную награду с конкретными пикселями на экране, полученными сотни шагов назад, на тот момент казалось чем-то невероятным.

## 🧠 Математика функции Q и архитектурная концепция DQN
[[JUMP:7:05]]

Разработанный алгоритм Deep Q-Network (DQN) применили к семи разным играм Atari с абсолютно одинаковыми гиперпараметрами и архитектурой. Сеть обучалась для каждой игры отдельно, но отсутствие необходимости тонкой настройки под каждую конкретную среду доказало, что Deep RL может выступать в роли универсального механизма обучения.

В основе вычислений лежит концепция максимизации суммы будущих наград с учётом фактора дисконтирования ($\gamma$), который определяет ценность немедленного выигрыша по сравнению с отложенным. Янник Килчер противопоставляет подход Q-learning методам градиента стратегий (Policy Gradient). Если методы градиента стратегий обучают нейросеть напрямую выбирать действие для конкретного состояния (сводя задачу к подобию классификации), то Q-learning фокусируется на поиске так называемой функции ценности $Q(s, a)$.

Функция $Q(s, a)$ прогнозирует суммарную награду, которую агент получит до самого конца игрового эпизода, если он находится в состоянии $s$ и выберет действие $a$. Обладая идеальной функцией Q, агенту достаточно на каждом шаге опрашивать систему обо всех возможных действиях и выбирать то, у которого прогнозируемый результат максимален. Это позволяет алгоритму смотреть далеко вперёд и не попадаться в «жадные ловушки», когда сиюминутная высокая награда оборачивается неизбежным проигрышем в последующих ходах.

Оригинальное инженерное изящество DQN заключается в оптимизации вычислений:

* **Наивный подход:** подавать в нейросеть состояние и одно действие, получая на выходе одно число Q. Это требовало бы совершать столько проходов через сеть (forward passes), сколько действий доступно агенту.
* **Решение DeepMind:** подавать на вход сети только состояние (изображение), а на выходном слое генерировать вектор значений Q сразу для всех возможных действий в игре. Нейросеть фактически выступает в роли общего кодировщика, переводящего пиксели в латентное пространство, где оценивается полезность каждого доступного шага.

## 🔄 Алгоритм обучения и стабилизация через Replay Buffer
[[JUMP:19:55]]

Процесс обучения базируется на рекуррентном уравнении Белльмана. Нынешняя оценка функции Q для текущего состояния должна быть равна фактически полученной награде на текущем шаге плюс максимальная оценка Q для следующего состояния, в которое перейдёт игра. Обучение сети превращается в задачу минимизации среднеквадратичной ошибки ($L_2$ loss) между текущим предсказанием сети и таргетом, который «бутстрапится» (вычисляется) с помощью этой же самой нейросети.

Янник Килчер обращает внимание на исторический нюанс: в тексте статьи 2013 года авторы подробно расписали математический градиент функции потерь. По ироничному замечанию ведущего, сегодня никто так не делает — исследователи просто закидывают код в условный TensorFlow или PyTorch и вызывают автоматическое дифференцирование.

Алгоритм является беспрецедентно «свободным от модели» (model-free) — сеть ничего не знает о физике или правилах игры, вся логика зашита внутри весов. Обучение происходит в режиме off-policy (вне стратегии) с использованием $\epsilon$-жадной ($\epsilon$-greedy) стратегии исследования. С вероятностью $1-\epsilon$ модель выбирает наилучшее с её точки зрения действие, а с вероятностью $\epsilon$ совершает случайный шаг, чтобы изучать новые паттерны и избегать преждевременной стагнации.

Однако ключевым фактором успеха всей системы стал так называемый буфер воспроизведения опыта (Experience Replay Buffer). В процессе игры последовательные кадры видеопотока невероятно сильно коррелируют между собой. Если обучать нейросеть прямо по ходу получения кадров, то мини-батчи данных будут лишены разнообразия, что полностью ломает базовое математическое допущение о независимости и одинаковой распределённости (i.i.d.) обучающих выборок.

Решение проблемы выглядит следующим образом:

1. Все переходы агента (состояние, действие, награда, новое состояние) записываются в огромный буфер памяти фиксированного объёма.
2. При достижении лимита новые воспоминания начинают вытеснять самые старые.
3. Для проведения градиентного спуска алгоритм случайным образом извлекает мини-батчи из этого буфера. 
4. Благодаря случайной выборке данные декоррелируются, и сеть может эффективно обучаться на стабильном подмножестве опыта, прогоняя некоторые важные моменты по несколько раз.

## 🛠️ Пошаговый технический туториал: пайплайн данных и архитектура сети
[[JUMP:28:32]]

Для практической реализации dqn-агента авторы разработали строгую последовательность предобработки сырых данных и компактную конфигурацию нейросети. Пайплайн обработки каждого кадра состоит из фиксированных шагов.

### Шаг 1: Предобработка сенсорного ввода
Сырые RGB-кадры из эмулятора Atari подвергаются понижению разрешения и трансформации. Итоговое изображение сжимается до фиксированного размера 84 на 84 пикселя и переводится в градации серого.

### Шаг 2: Формирование временного стека
Одиночный кадр не даёт понимания динамики (например, невозможно определить, в какую сторону летит мяч в Pong). Поэтому авторы объединяют (конкатенируют) 4 последовательных кадра в один стек. Таким образом, единичным «состоянием» на входе в сеть является тензор размерностью 84x84x4. Этот приём также нивелирует проблему мерцания текстур, которая была характерна для старых консолей Atari.

### Шаг 3: Проход через свёрточную архитектуру
Обработанный стек кадров подаётся на вход нейросети, которая по современным меркам выглядит миниатюрной, но содержит классические слои того времени:

* **Первый свёрточный слой:** 16 фильтров размером 8x8 со страйдом (шагом свёртки) 4. Активация — ReLU.
* **Второй свёрточный слой:** 32 фильтра размером 4x4 со страйдом 2. Активация — ReLU.
* **Полносвязный слой (Dense):** 256 скрытых нейронов с активацией ReLU.
* **Выходной слой:** Полносвязный линейный слой без функции активации, количество выходов которого строго равно числу доступных действий в конкретной игре (от 4 до 18).

Янник Килчер подчёркивает, что в архитектуре полностью отсутствует операция Max Pooling, что было смелым решением для 2013 года. Фильтры слоёв — по моде тех лет (вдохновлённой AlexNet) — достаточно крупные, тогда как современные тренды компьютерного зрения диктуют использование мелких фильтров (например, 3x3), но в гораздо более глубоких сетях.

## 📊 Триумф над человеком и ограничения долгосрочного планирования
[[JUMP:33:45]]

Эффективность обучения авторы подтвердили экспериментально. Хотя показатель средней награды за сессию демонстрировал сильную зашумленность, график средней оценки Q-значений для выбранных действий стабильно и плавно рос вверх, что свидетельствовало о корректной сходимости алгоритма.

Особый интерес вызывает исследовательский эксперимент DeepMind по визуализации динамики предсказаний Q-функции в процессе игры. Внимательный анализ показал явную корреляцию между происходящим на экране и математической уверенностью сети:

* При появлении нового врага на экране кривая Q-значений резко устремляется вверх — сеть моментально распознаёт потенциал получения будущих очков, хотя выстрел ещё даже не произведён.
* В момент, когда выпущенный агентом снаряд летит в цель, функция удерживает высокое значение.
* Сразу после уничтожения врага график резко падает вниз — цепочка триггеров завершена, оперативных источников награды на экране больше нет, и сеть переходит в режим ожидания новых целей.

В итоговом сравнении DQN превзошла все существовавшие академические подходы в 6 из 7 протестированных игр. Предыдущие алгоритмы использовали специализированные детекторы объектов или выделенные цветовые каналы под конкретные элементы игры, что делало сравнение даже не совсем честным по отношению к DQN, работавшей на «чистых» пикселях. Более того, в трёх играх искусственный интеллект превзошёл результаты эксперта-человека. 

Сеть научилась филигранным паттернам. В игре Breakout она самостоятельно открыла знаменитую тактику «прокапывания туннеля»: dqn-агент пробивал брешь в крайнем ряду кубиков и запускал мяч за верхнюю границу стены, где тот хаотично отскакивал без участия игрока, принося колоссальное количество очков. Компьютер идеально реализовывал микроконтроль, требующий предельной точности движений.

Тем не менее, игры, требующие долгосрочного стратегического планирования, выявили уязвимость алгоритма. В средах, где награда разделена долгими периодами бесплодных поисков, DQN пасовала перед человеком. По утверждению Янника Килчера, эта проблема глубокого обучения с подкреплением остаётся актуальной и дискуссионной по сей день, а современные алгоритмы вроде Go-Explore до сих пор вызывают ожесточённые споры в научном сообществе.