Обучение с подкреплением
Actor-Critic: A2C, A3C
REINFORCE работает, но его градиенты шумят как радио без антенны - каждое действие получает одинаковый сигнал, хотя одни шаги были умными, другие случайными. Actor-Critic вводит двух игроков: Actor принимает решения, Critic оценивает их качество. Вместе они сходятся там, где REINFORCE топчется на месте.
- **OpenAI Five** (Dota 2) использовала вариант A3C с тысячами параллельных сред
- **A2C** - базовая линия в современных RL фреймворках (Stable-Baselines3, CleanRL)
- **GAE** используется в PPO, TRPO и большинстве современных actor-critic алгоритмов
- **Entropy bonus** - стандартный компонент во всех policy gradient методах
От Барто-Саттона-Андерсона к A3C
Идея actor-critic восходит к 1983 году, когда Эндрю Барто, Ричард Саттон и Чарльз Андерсон опубликовали работу «Neuronlike adaptive elements that can solve difficult learning control problems», обучив задачу балансировки шеста отдельным управляющим элементом (actor) и адаптивным критиком (critic). Архитектура оставалась в основном академической до 2016 года, когда Володимир Мних с коллегами из DeepMind опубликовали «Asynchronous Methods for Deep Reinforcement Learning» и представили A3C - множество actor-learner в параллельных средах, которые декоррелируют опыт без replay buffer. A2C - синхронный вариант: он ждёт все workers перед одним батчевым обновлением и обычно не уступает A3C, оставаясь проще и эффективнее на GPU.
Предварительные знания
Advantage Function: почему одной reward недостаточно
В REINFORCE градиент взвешивается суммарной наградой G_t - это громко, но шумно. Каждое действие в эпизоде получает одинаковый вес G_t, хотя одни шаги были умными, другие - случайными. Сигнал «хорошо» приходит, но не говорит, **какое именно действие** его принесло.
**Advantage function** решает эту проблему: вместо абсолютной награды она измеряет, **насколько действие лучше среднего** в данном состоянии. A(s, a) = Q(s, a) - V(s). Если агент и так ожидал получить +5, а получил +7, advantage = +2. Это намного информативнее, чем просто +7.
**Baseline trick:** V(s) выступает как baseline - вычитая его, мы не меняем ожидание градиента, но сильно снижаем его дисперсию. Это математически доказуемо: любой baseline, не зависящий от действия, не смещает оценку градиента.
Advantage A(s,a) = Q(s,a) - V(s). Если A > 0, это означает:
Параллельное обучение в A3C
Одна из главных проблем RL - **сильная корреляция между последовательными переходами**. Если агент изучает одну и ту же задачу линейно, все его experiences похожи друг на друга - нейросеть переобучается под локальный паттерн и теряет общность.
**A3C (Asynchronous Advantage Actor-Critic)** - ответ DeepMind в 2016 году: запустить N независимых агентов в N параллельных копиях среды. Каждый worker асинхронно собирает опыт и вычисляет градиенты, обновляя **глобальную** сеть. Корреляция разрушается автоматически - разные среды дают разный опыт.
**A2C** - синхронная версия A3C. Все workers собирают один батч одновременно, затем модель обновляется один раз. Проще в реализации, нет race conditions, эффективнее на GPU. На практике часто не уступает A3C по качеству.
| Параметр | A2C (синхронный) | A3C (асинхронный) |
|---|---|---|
| Workers | Ждут друг друга | Обновляют независимо |
| GPU efficiency | Высокая (единый батч) | Ниже (мелкие апдейты) |
| Реализация | Проще | Сложнее (race conditions) |
| Скорость сбора | Ограничена медленным | Быстрее на CPU-средах |
Главная причина использовать несколько параллельных сред в A3C/A2C:
GAE: Generalized Advantage Estimation
При оценке advantage есть дилемма: 1-step TD даёт маленькую дисперсию, но смещённую оценку (Critic может ошибаться). Monte Carlo даёт несмещённую оценку, но с огромной дисперсией. **GAE** (Schulman et al., 2015) - взвешенная сумма TD-ошибок разных горизонтов, управляемая одним параметром lambda.
GAE с lambda=0 эквивалентен:
Entropy Bonus для exploration
Actor-Critic без дополнительных мер склонен к **преждевременной сходимости**: агент находит неплохое решение и перестаёт исследовать. Вероятности действий коллапсируют к детерминированной политике, и агент может застрять в локальном оптимуме. Entropy bonus - простой и мощный способ это предотвратить.
Энтропия H(pi(s)) = -sum pi(a|s) * log pi(a|s) максимальна при равномерном распределении и равна нулю при детерминированной политике. Добавляя её к суммарной функции потерь, агент штрафуется за излишнюю уверенность и вынужден продолжать исследование.
**Подбор entropy_coef:** слишком большое значение - политика остаётся случайной и не сходится; слишком маленькое - коллапсирует в детерминированную политику. Значение 0.01 - разумная отправная точка. В PPO entropy_coef часто уменьшают с течением обучения (annealing).
Что происходит при слишком большом entropy_coef?
Actor-Critic: A2C, A3C
- Advantage A(s,a) = Q(s,a) - V(s) снижает дисперсию градиентов без смещения
- A3C: N асинхронных workers обновляют глобальную модель, разрушая корреляцию переходов
- A2C: синхронная версия A3C, проще и эффективнее на GPU
- GAE с параметром lambda контролирует bias-variance tradeoff между 1-step TD и Monte Carlo
- Entropy bonus -H(pi) поддерживает exploration, препятствует коллапсу политики
- Полная loss A2C = L_actor + c_v * L_critic - c_e * H(pi)
Связанные темы
Actor-Critic - фундамент современных RL алгоритмов. PPO, SAC, TD3 строятся поверх этих идей.
- Policy Gradient и REINFORCE — Базис, который Actor-Critic улучшает по дисперсии
- PPO: Proximal Policy Optimization — Следующий шаг: стабилизация Actor-Critic через clipped objective
- Deep Q-Networks — Альтернативный подход: только Critic, без явного Actor
Вопросы для размышления
- Почему вычитание baseline V(s) не смещает оценку градиента, но снижает дисперсию?
- В чём принципиальное алгоритмическое отличие A2C от A3C - не техническое?
- Как GAE с lambda=0.95 ведёт себя при очень длинных эпизодах (1000+ шагов)?
Связанные уроки
- rl-08 — Actor-Critic улучшает оценку REINFORCE
- rl-10 — PPO - это клиппированный стабилизированный actor-critic
- ml-50-policy-gradient — Та же теория policy gradient в ML-треке
- prob-08-variance — Baseline критика снижает дисперсию градиента
- ml-25-neural-networks — Actor и critic - две нейросети
- prob-01-intro