Обучение с подкреплением

Policy Gradient: REINFORCE, Actor-Critic, PPO

2019 год. OpenAI Five обыграла чемпионов мира по Dota 2 со счётом 2:0. За 10 дней агент прошёл путь в 180 лет человеческой игры. Секрет - не Q-таблица, не перебор. Policy gradient: прямая оптимизация стратегии. Тот же алгоритм (PPO) потом стал двигателем RLHF - именно так ChatGPT учился отвечать по-человечески.

  • RLHF в ChatGPT, GPT-4, Claude: PPO оптимизирует LLM по reward model, обученной на human preferences
  • OpenAI Five (Dota 2), AlphaStar (StarCraft II): масштабный policy gradient с self-play в многоагентных средах
  • Робототехника (OpenAI Dactyl, Boston Dynamics): непрерывное управление суставами - то, где DQN буксует
  • Рекомендательные системы: policy gradient оптимизирует долгосрочное вовлечение пользователя, а не только click-through rate

От бихевиоризма до GPT: 30 лет policy gradient

Williams (1992) вывел REINFORCE из правила Хебба и психологических экспериментов с подкреплением. Алгоритм работал, но был слишком нестабилен для сложных задач. Schulman et al. (2015) придумали TRPO - теоретически оптимальный способ ограничить шаг через trust region. Сложная математика, дорогие вычисления. Через два года Schulman, Wolski и коллеги выпустили PPO - тот же результат через простой clipping, без сопряжённых градиентов. Реализация умещается в 50 строк PyTorch. Через 5 лет этот алгоритм стал стандартом обучения LLM через human feedback.

Policy gradient - мост между теорией оптимизации и обучением с подкреплением. PPO сегодня - де-факто стандарт RLHF для всех крупных языковых моделей

Предварительные знания

  • Gradient descent и chain rule
  • Value functions V(s), Q(s,a) и advantage A(s,a)
  • Математическое ожидание и log-derivative trick
  • Dynamic programming как model-based baseline
  • Bellman Equations
  • Dynamic Programming в RL
  • Gradient descent

Теорема о градиенте политики

2019 год. OpenAI Five - пять нейросетей против чемпионов мира по Dota 2. За 10 дней агент сыграл эквивалент 180 лет человеческого игрового опыта. Победил со счётом 2:0. Двигатель этой машины - **policy gradient**. Не таблица Q-значений, не перебор состояний. Прямая оптимизация политики через градиентный подъём по ожидаемой награде.

Value-based методы (Q-learning, DQN) строят функцию, которая оценивает каждое действие числом. Затем выбирают максимум. Это работает, когда действий конечное число - скажем, 18 кнопок на джойстике Atari. Но представим робота-манипулятора: 7 суставов, каждый вращается от -180 до +180 градусов. Пространство действий - непрерывный 7-мерный куб. Взять argmax по этому кубу - задача оптимизации сложнее самого обучения.

Policy gradient обходит эту проблему радикально. Политика $\pi_\theta(a \mid s)$ - это сразу вероятностное распределение над действиями, параметризованное нейросетью с весами $\theta$. Цель - максимизировать ожидаемую суммарную награду $J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)]$, где $\tau$ - траектория. Берём градиент $J$ по $\theta$ и делаем шаг вверх по нему.

Смысл интуитивно прост: если траектория принесла высокую награду - увеличиваем вероятность всех действий в ней. Если низкую - уменьшаем. Математика log-derivative trick гарантирует, что это именно градиент ожидаемой награды, а не приближение.

Log-derivative trick (он же REINFORCE trick, likelihood ratio gradient) - один из самых мощных инструментов в вероятностном машинном обучении. Он используется не только в RL, но и в вариационных автоэнкодерах (VAE), и в RLHF-обучении LLM - везде, где нужно брать градиент по параметрам распределения.

Почему value-based методы (DQN) неприменимы напрямую для роботов с непрерывным управлением?

DQN выбирает действие как argmax_a Q(s,a). Когда действие - непрерывный вектор, это внутренняя задача оптимизации. Policy gradient обходит это, параметризуя распределение над действиями напрямую.

REINFORCE и проблема высокой дисперсии

Williams, 1992. Один из первых практических алгоритмов policy gradient, который до сих пор преподают во всех курсах по RL. Алгоритм лаконичен: запустить эпизод, собрать траекторию, посчитать возврат от каждого шага, обновить параметры. Но у него есть ахиллесова пята - **дисперсия**.

Строка `returns = (returns - returns.mean())` - не случайный трюк. Это **baseline subtraction**. Без него дисперсия градиента огромна: разные траектории в одном состоянии дают совершенно разные обновления. Обучение нестабильно - особенно в длинных эпизодах, где одно случайное действие в начале может испортить всю траекторию.

Оптимальный baseline - это $V^\pi(s)$, value-функция текущей политики. Разность $R(\tau) - V^\pi(s_t)$ называется **advantage** $A^\pi(s_t, a_t)$: насколько данное действие лучше среднего в этом состоянии. Advantage положительный - действие хорошее, поднимаем его вероятность. Отрицательный - плохое, снижаем.

REINFORCE медленный - значит он устаревший и неприменимый

REINFORCE - основа для понимания всего семейства policy gradient, включая PPO и RLHF

Каждый современный алгоритм (A2C, PPO, SAC) решает проблему дисперсии REINFORCE по-своему. Без понимания базового алгоритма остальные - чёрные ящики. ChatGPT обучался через PPO, который напрямую вырастает из идей REINFORCE плюс baseline.

Зачем в REINFORCE нормализовать returns (вычитать среднее, делить на std)?

Вычитание среднего - простая форма baseline. По теореме о policy gradient, любой baseline b(s), не зависящий от действий, не вносит bias в оценку градиента. Но подобранный baseline (близкий к V(s)) резко снижает дисперсию - меньше эпизодов нужно для надёжной оценки градиента.

Actor-Critic и PPO

Решение проблемы дисперсии REINFORCE напрашивается само: не ждать конца эпизода, чтобы оценить return - научить **вторую сеть** предсказывать value прямо во время эпизода. Так рождается **Actor-Critic**: actor - это политика $\pi_\theta$, critic - оценщик $V_\phi(s)$. Actor принимает решения. Critic судит их качество после каждого шага.

Advantage оценивается через TD error: $A(s_t, a_t) \approx r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)$. Не нужно ждать конца эпизода - шаг за шагом, немедленная обратная связь. Именно это делает A2C и A3C эффективными: 16-64 параллельных актора собирают опыт одновременно, critic учится на всём потоке данных.

Но есть новая проблема. Обновляя политику через gradient step, легко сделать слишком большой шаг. Новая политика кардинально отличается от старой, на данных которой считался градиент. Данные уже неактуальны - estimate advantage может быть неверным для новой политики. Обучение дестабилизируется. Это называют **policy collapse**.

PPO - алгоритм, стоящий за RLHF-этапом обучения GPT-3.5, GPT-4 и почти всех современных instruction-following LLM. Схема: SFT (supervised fine-tuning), затем reward model обучается по human preferences, затем PPO оптимизирует LLM по сигналу reward model. Параметр $\varepsilon = 0.2$ - инженерный компромисс: слишком мало - медленное обучение, слишком много - дестабилизация.

PPO в RLHF: почему именно он

InstructGPT (Ouyang et al., 2022) пробовали несколько алгоритмов для RLHF. PPO победил по совокупности: стабильность при огромной модели, возможность использовать minibatch updates с несколькими эпохами на одном батче данных (критично при дорогом human feedback), встроенная защита от reward hacking через clipping. TRPO теоретически лучше, но слишком сложен при 175B параметрах.

  • REINFORCE — Монте-Карло оценка return, высокая дисперсия, работает только на полных эпизодах. Хорош для понимания, плох на практике в длинных задачах.
  • Actor-Critic (A2C/A3C) — TD-оценка advantage, онлайн обновления каждый шаг, параллельные акторы. Быстрее REINFORCE, но нестабилен при больших шагах обучения.
  • PPO — Clipped surrogate objective ограничивает размер обновления политики. Стабилен, эффективен по данным (несколько эпох на батч), используется в RLHF для обучения ChatGPT.

Зачем PPO обрезает (clip) probability ratio r_t = pi_new/pi_old?

Без clipping gradient step может изменить политику настолько сильно, что старые advantage-оценки перестают быть актуальными. Clip в [1-eps, 1+eps] гарантирует, что новая политика не слишком далеко от старой - данные остаются валидными для нескольких эпох на одном батче.

Policy Gradient в экосистеме RL

Policy gradient методы занимают особую нишу: они работают там, где value-based методы буксуют, и лежат в основе современного RLHF.

  • Value-based RL (DQN) — Контраст: DQN неприменим в непрерывных действиях, policy gradient - универсален
  • Actor-Critic расширения — A2C, A3C - прямые наследники базового Actor-Critic
  • PPO в продакшне — Proximal Policy Optimization - практическое развитие с clipping
  • RLHF и LLM — PPO используется для обучения ChatGPT через человеческую обратную связь
  • Градиентный спуск — Математическая основа: policy gradient - это SGD по пространству политик

Policy Gradient: ключевые идеи

  • Policy gradient напрямую оптимизирует политику pi(a|s) - не нужно аппроксимировать value как промежуточный шаг
  • Log-derivative trick: grad(E[R]) = E[R * grad(log pi)] - градиент ожидаемой награды оценивается через сэмплирование
  • Высокая дисперсия REINFORCE снижается через baseline subtraction; оптимальный baseline - V(s)
  • Actor-Critic: actor обновляет политику, critic оценивает advantage через TD - нет нужды ждать конца эпизода
  • PPO стабилизирует обучение через clipping probability ratio в [1-eps, 1+eps]; eps=0.2 - практический стандарт
  • PPO - двигатель RLHF: через него ChatGPT, GPT-4 и Claude обучались следовать инструкциям

Вопросы для размышления

  • Policy gradient увеличивает вероятность действий с высокой наградой. Но что если высокая награда была случайной? Как алгоритм это обнаруживает со временем?
  • PPO ограничивает шаг изменения политики. Чем это принципиально отличается от просто уменьшения learning rate в SGD?

Связанные уроки

  • rl-06 — TD-learning лежит в основе critic в Actor-Critic архитектурах
  • rl-07 — DQN - value-based альтернатива; policy gradient решает то, что DQN не может
  • rl-09 — A2C и A3C - прямое развитие Actor-Critic с параллельными агентами
  • rl-10 — PPO - практическая стабилизация policy gradient, основа RLHF
  • ml-09-gradient-descent — Градиентный спуск - математическая основа policy gradient
  • prob-01-intro
Policy Gradient: REINFORCE, Actor-Critic, PPO

0

1

Войти