Эпоха 3 · Взрыв deep learning · 2013

18 DQN (Atari)

Playing Atari with Deep Reinforcement Learning · Mnih и др. · DeepMind · NIPS workshop
🟥 читать целиком~45–60 миноригинал ↗
Суть за 20 секунд. Первая deep-RL модель, учащая политику прямо из пикселей: Q-learning с нейросетью + два стабилизатора (experience replay и target network). Одна архитектура выучила 7 игр Atari без подгонки. Запустила глубокий RL и путь к AlphaGo.

Контекст

RL умел учить агентов в маленьких/ручных пространствах состояний. DeepMind учит играть в Atari прямо из ПИКСЕЛЕЙ, без ручных признаков — соединяя Q-learning с глубокой сетью.

Идея и механизм

Функцию ценности Q(s, a) (ожидаемая будущая награда за действие a в состоянии s) аппроксимирует свёрточная сеть: вход — несколько последних кадров экрана, выход — Q по каждому действию, агент берёт argmax Q. Два приёма, без которых обучение разваливалось: experience replay (буфер переходов, случайный сэмпл → разрывает корреляцию соседних кадров) и target network (замороженная копия для вычисления целей → устойчивость).

обучение с подкреплением Уравнение Беллмана и почему нужна target-сеть

Оптимальная Q-функция удовлетворяет уравнению Беллмана: ценность сейчас = награда + дисконтированная лучшая ценность дальше:

Q*(s, a) = E[r + γ · maxa′ Q*(s′, a′)]

DQN приближает Q* сетью Qθ, минимизируя temporal-difference ошибку — расхождение левой и правой частей:

L(θ) = E[(r + γ maxa′ Qθ⁻(s′, a′) − Qθ(s, a))²]

Тонкость: Q стоит и в цели, и в предсказании. Если цель считать той же обучаемой сетью, она «убегает» на каждом шаге — обучение гонится за движущейся мишенью и расходится. Target network Qθ⁻ — замороженная копия, обновляемая редко, — фиксирует мишень и стабилизирует процесс.

PyTorch TD-лосс DQN с target-сетью
import torch

def dqn_loss(batch, Q, Q_target, gamma=0.99):
    s, a, r, s2, done = batch
    q = Q(s).gather(1, a)                       # Q(s, a)
    with torch.no_grad():
        target = r + gamma * Q_target(s2).max(1).values * (1 - done)
    return ((q.squeeze() - target) ** 2).mean() # temporal-difference ошибка
агент (Q-сеть) среда (Atari) действие r, s′ replay buffer сэмпл обновление θ target Q (θ⁻)
Опыт идёт в буфер; обучение берёт случайные переходы (разрывая корреляции), а цель считает замороженная target-сеть (стабильность).
Аналогия. Учиться стрелять по мишени, которая сама двигается синхронно с вашим прицелом, — безнадёжно: куда наводишь, туда она и уезжает. Target network — это «зафиксировать мишень на минуту», пристреляться, потом сдвинуть. А replay buffer — тренироваться не только по последнему выстрелу, а перемешивая записи прошлых попыток, чтобы не зацикливаться на текущей серии.

Почему это важно

Запустила глубокий RL: одна сеть с одними гиперпараметрами выучила 7 игр из сырых пикселей, в нескольких — на уровне/выше человека. Прямая линия к AlphaGo (#29) и к RL-части RLHF (#44). Показала, что DL + RL дают агентов, учащихся восприятию и контролю end-to-end.

Связи

← опирается на9. LeNet / CNN

«Глаза» агента — свёрточная сеть, читающая экран. DQN — это CNN-восприятие, надстроенное Q-learning-целью; без зрелых CNN обучение из пикселей было бы невозможно.

→ ведёт к29. AlphaGo

DQN доказал, что deep RL работает на восприятии и контроле. AlphaGo берёт ту же связку «глубокие сети + RL» и добавляет поиск (MCTS), чтобы взять го — следующая ступень программы DeepMind.

→ ведёт к33. PPO

DQN — value-based RL (учим Q, действие = argmax). PPO — policy-based (учим политику напрямую), стабильнее для непрерывных действий и больших политик. Именно policy-gradient (PPO) станет движком RLHF, но обе ветви растут из того самого успеха deep RL, начатого DQN.

Вопросы пытливого ума

Почему RL так нестабилен по сравнению с supervised-обучением?

Сходятся три беды («deadly triad»): (1) bootstrapping — цель берётся из собственных оценок сети; (2) аппроксимация функции; (3) off-policy данные. Плюс распределение данных нестационарно — меняется политика, меняются и встречаемые состояния. Replay и target network гасят часть проблем, но RL остаётся капризнее, чем обучение с фиксированной разметкой.

DQN играет из пикселей — это шаг к общему ИИ?

И да, и нет. Впечатляет общность: одна архитектура осилила много разных игр без подгонки. Но это узко: модель учится каждой игре заново, не переносит навык, и крайне неэффективна по данным (миллионы кадров на игру). Это важная веха программы deep RL, но до «общего» агента далеко — и сэмпл-эффективность остаётся болью RL.

Q-learning переоценивает ценности — это известная проблема, при чём тут DQN?

Оператор max в цели систематически завышает Q (берём максимум по зашумлённым оценкам → смещение вверх). DQN этим страдает; лечение — Double DQN: выбирать действие одной сетью, а оценивать — другой (target), разрывая совместное смещение выбора и оценки. Хороший пример, как тонкая статистическая деталь (max смещён) портит обучение.

Что читать в оригинале

Короткий — читать целиком; обратите внимание на experience replay и target network: это общие паттерны стабилизации, которые потом всплывают во всём deep RL.