Обучение с подкреплением
Deep Q-Network (DQN)
В 2013 году один алгоритм с одними гиперпараметрами научился играть в 49 разных Atari-игр, в 29 из них - лучше человека. До этого под каждую игру писали отдельный ИИ. DQN стал доказательством, что один агент может освоить разные задачи из пикселей.
- **AlphaGo и AlphaZero** используют архитектурные идеи DQN (deep Q-estimation) в комбинации с Monte Carlo Tree Search - именно так достигается уровень чемпиона мира в го.
- **Рекомендательные системы YouTube** применяют идеи Q-learning для долгосрочной оптимизации удержания: не максимизировать клик прямо сейчас, а максимизировать время сессии.
- **Торговые боты** на криптобиржах используют DQN-подобные агенты для принятия решений buy/sell/hold на основе рыночных данных - replay buffer помогает обучаться на исторических данных.
DQN: deep learning встречает Q-learning
В 2013 году Володимир Мних и коллеги из DeepMind представили работу 'Playing Atari with Deep Reinforcement Learning' на воркшопе NIPS: свёрточная сеть учится играть в Atari из сырых пикселей и одного лишь счёта. В 2015 году полная версия вышла в Nature как 'Human-level control through deep reinforcement learning', достигнув уровня человека или выше в 29 из 49 игр Atari с одной архитектурой и одним набором гиперпараметров. Experience replay и отдельная target network - два стабилизирующих трюка, сделавших обучение нейросетевой Q-функции практичным. Статья открыла эру deep reinforcement learning и напрямую привела к AlphaGo.
Предварительные знания
- Q-learning и обновление Беллмана для Q(s,a)
- Нейросети и backpropagation
- Exploration vs exploitation и epsilon-greedy
- Stochastic gradient descent и функции потерь
Experience Replay
В 2013 году DeepMind обучила агента играть в Atari Breakout лучше человека. Проблема классического Q-learning с нейросетью - обучающие примеры идут один за другим во времени и сильно коррелированы: если агент видит кадр с мячом слева, следующий кадр тоже будет «мяч чуть левее». Градиенты осциллируют, обучение нестабильно.
**Experience Replay** решает это буфером памяти: каждый шаг `(s, a, r, s')` записывается в кольцевой буфер размером 1 000 000 transitions. При каждом обновлении из буфера случайно сэмплируется мини-батч из 32-64 transitions - они независимы и i.i.d., как обычный supervised learning.
Replay buffer также позволяет переиспользовать редкие переходы много раз - данные не выбрасываются сразу после одного использования. DeepMind использовала буфер 1M и начинала обучение только после накопления 50 000 переходов.
Зачем в DQN нужен Experience Replay буфер?
Target Network
Вторая нестабильность классического Q-learning с нейросетью: цель для обучения `r + γ * max Q(s', a')` использует те же веса, что и обновляемая сеть. Цель движется вместе с прогнозом - как стрелять по движущейся мишени. Это создаёт осциллирующие обновления и дивергенцию.
**Target Network** - вторая копия Q-сети с замороженными весами `θ⁻`. Цель считается через неё: `y = r + γ * max Q(s', a'; θ⁻)`. Основная сеть обновляется каждый шаг, целевая - жёсткой заменой весов каждые C шагов (например, C=10 000). Цель стабильна в пределах C шагов.
Альтернатива жёсткой замене - Polyak averaging: `θ⁻ ← τ*θ + (1-τ)*θ⁻` с τ=0.005. Это плавное обновление используется в DDPG и SAC для непрерывных действий.
Как часто в оригинальном DQN (Mnih 2015) обновляется Target Network?
Double DQN
Классический DQN систематически **переоценивает** Q-значения. Причина: `max Q(s', a')` использует одну и ту же сеть и для выбора лучшего действия, и для его оценки. Когда сеть шумная (а она всегда шумная), максимум шумных оценок > ожидаемого истинного максимума - это называется maximization bias.
**Double DQN** (van Hasselt et al., 2015) разделяет выбор и оценку: основная сеть выбирает действие `a* = argmax Q(s', a; θ)`, а целевая сеть оценивает его `Q(s', a*; θ⁻)`. Смещение устраняется, оценки более точные, что улучшает финальную политику.
На Atari играх Double DQN показал улучшение на 41 из 49 игр по сравнению с DQN. Изменение минимальное - одна строчка кода - но эффект существенный. Это один из главных аргументов за Double DQN как базовую линию.
В чём принципиальное отличие Double DQN от DQN при вычислении таргета?
Dueling DQN
Во многих состояниях в Atari выбор конкретного действия почти не влияет на результат - важно просто выжить. Например, в Enduro выбор газа влияет только при наличии машин рядом. Стандартная Q-сеть всё равно должна оценить Q для каждого действия, тратя ёмкость сети на «неважные» решения.
**Dueling DQN** (Wang et al., 2016) декомпозирует Q-функцию: `Q(s,a) = V(s) + A(s,a)`, где V(s) - ценность состояния независимо от действия, A(s,a) - преимущество конкретного действия. Два отдельных потока в нейросети считают V и A, затем объединяются.
Объединение `V + A - mean(A)` (а не просто V+A) важно для идентифицируемости: без вычитания среднего V и A не разделяются однозначно. Это требование вытекает из того, что `sum_a π(a|s) * A(s,a) = 0` по определению advantage.
DQN, Double DQN и Dueling DQN - три принципиально разных алгоритма, каждый требует полной переписки кода
Double DQN - это одна строка изменения в DQN, Dueling - замена последних слоёв сети. Все три часто комбинируют в Rainbow DQN
Rainbow (Hessel et al., 2017) показал, что DQN + Double + Dueling + Prioritized Replay + N-step + Distributional + Noisy Nets дают state-of-the-art на Atari. Все улучшения ортогональны и аддитивны.
Зачем в Dueling DQN из advantage-потока вычитают среднее: `A - mean(A)`?
Ключевые идеи
- **Experience Replay** хранит переходы в буфере и сэмплирует случайные мини-батчи - разрывает временную корреляцию, делает обучение стабильным как supervised learning.
- **Target Network** - замороженная копия Q-сети для вычисления обучающих целей, обновляется каждые C=10 000 шагов - устраняет проблему «движущейся мишени».
- **Double DQN** разделяет выбор лучшего действия (online-сеть) и его оценку (target-сеть) - устраняет maximization bias без дополнительных вычислений.
- **Dueling DQN** разделяет Q-функцию на V(s) + A(s,a) через два потока в нейросети - эффективнее обучается в состояниях, где выбор действия не критичен.
Связанные темы
DQN стоит на фундаменте Q-learning и открывает путь к современным алгоритмам:
- Q-learning и Bellman equation — DQN - это Q-learning с нейросетью вместо таблицы; Experience Replay и Target Network исправляют нестабильность этой замены
- Policy Gradient: REINFORCE — Альтернативный подход - оптимизировать политику напрямую, а не через Q-функцию; Actor-Critic объединяет оба подхода
Вопросы для размышления
- Почему Experience Replay не работает с on-policy алгоритмами (REINFORCE, PPO), но хорошо работает с off-policy (DQN)?
- Что произойдёт с обучением DQN, если частоту обновления Target Network увеличить до каждого шага или уменьшить до раза в миллион шагов?
- Rainbow объединяет 6 улучшений DQN. Если бы нужно было выбрать только одно из них - Prioritized Replay или Dueling - какое принесло бы больше пользы и почему?
Связанные уроки
- rl-06 — Q-Learning - алгоритм, который DQN аппроксимирует сетью
- rl-08 — Policy gradient - альтернативное семейство deep RL
- ml-25-neural-networks — Нейросети аппроксимируют Q-функцию
- ml-49-q-learning — DQN масштабирует табличный Q-learning на большие состояния
- ml-28-optimizers — Оптимизаторы градиента обучают Q-сеть стабильно
- dl-01