Перейти к содержимому
ПереводыИсследователи и авторы

Lil’Log: алгоритмы градиента политики

Конспект большого обзора Лилиан Венг: теорема о градиенте политики с доказательством, REINFORCE и baseline, actor-critic, off-policy и importance sampling, A3C/A2C, TRPO и PPO, а также DDPG, TD3, SAC, IMPALA — что из этого нужно для RLHF и GRPO.

  • Градиент политики (градиент политикиградиент политикиEN policy gradient∇J = E[r · ∇ log π(y|x)] — основа REINFORCE, PPO и GRPO.) оптимизирует саму политику πθ(a∣s)\pi_\theta(a\mid s) градиентным подъёмом по ожидаемой награде, не выбирая действие через arg⁡max⁡Q\arg\max Q. Поэтому он естественно работает с непрерывными и огромными пространствами действий — например, со словарём LLM.
  • Теорема о градиенте политики избавляет от необходимости дифференцировать распределение состояний среды: ∇θJ(θ)=Eπ[Qπ(s,a) ∇θln⁡πθ(a∣s)]\nabla_\theta J(\theta) = \mathbb{E}_\pi\left[Q^\pi(s,a)\,\nabla_\theta \ln \pi_\theta(a\mid s)\right]. Оценка по выборке несмещённая, но очень шумная.
  • Почти вся дальнейшая история — борьба с дисперсией без внесения смещения: baseline и преимущество (преимуществопреимущество (advantage)EN advantageA = r − b или A(s, a) = Q(s, a) − V(s): насколько действие лучше среднего в этой ситуации.), критик (актор-критикактор-критик (actor-critic)EN actor-criticДве сети — актор (политика) и критик (оценка V); критик даёт актору оценку преимущества.), GAE.
  • Вторая линия — устойчивость шага: TRPO ограничивает KL между старой и новой политикой, PPO делает то же проще — обрезкой отношения вероятностей.
  • Третья линия — эффективность по данным: off-policy обучение с importance sampling, буфер опыта, детерминированные политики (DDPG, TD3), максимизация энтропии (SAC), масштабирование (A3C, IMPALA с V-trace).
  • В конце Венг собирает общие принципы: уменьшать дисперсию, не переоценивать ценность, ограничивать сдвиг политики, подумать дважды, делить ли сеть между актором и критиком.

Пост — справочник, а не учебник: читайте его после урока 6.0.3 «Actor-critic, GAE и PPO полностью», когда REINFORCE, baseline и PPO вы уже реализовали руками. Тогда обзор покажет, где эти алгоритмы стоят среди остальных.

Для новичка обязательно: обозначения, теорема о градиенте политики (сам вывод — по желанию), REINFORCE, actor-critic, off-policy градиент, TRPO и PPO. Это прямой фундамент 6.3.1 «Основы RL для LLM» и 6.3.2 «RLHF — reward model и PPO», а через них — GRPO (6.4). Можно пропустить при первом чтении: DPG, DDPG, D4PG, MADDPG, ACER, ACKTR, SVPG — это алгоритмы для роботов и непрерывного управления, в обучении LLM они почти не встречаются.

Обозначения у Венг такие же, как в курсе: GtG_t — дисконтированная отдача, VπV^\pi, QπQ^\pi, A=Q−VA = Q - V, γ\gamma — коэффициент дисконтирования. Детерминированную политику она обозначает μ(s)\mu(s), чтобы не путать со стохастической π(a∣s)\pi(a\mid s).

Венг начинает со справочной таблицы обозначений и сразу формулирует цель: найти параметры θ\theta, при которых ожидаемая награда максимальна,

J(θ)=∑sdπ(s) Vπ(s)=∑sdπ(s)∑aπθ(a∣s) Qπ(s,a),J(\theta) = \sum_{s} d^\pi(s)\, V^\pi(s) = \sum_{s} d^\pi(s) \sum_{a} \pi_\theta(a\mid s)\, Q^\pi(s,a),

где dπ(s)d^\pi(s) — стационарное распределение состояний: как часто агент, долго действуя по политике, оказывается в состоянии ss. Читаем формулу так: «средняя ценность состояний, взвешенная тем, насколько часто мы в них бываем».

Почему не обойтись методами на основе ценности (Q-learning из урока 6.0.2)? Там улучшение политики — это arg⁡max⁡aQ(s,a)\arg\max_a Q(s,a), то есть перебор всех действий. Для непрерывных действий (угол поворота руля) или для 150 тысяч токенов словаря это либо невозможно, либо дорого. Градиент политики просто сдвигает θ\theta туда, где награда растёт.

Трудность: JJ зависит от θ\theta двумя путями — через выбор действий (это мы знаем) и через распределение состояний dπd^\pi (а это зависит от неизвестной среды). Теорема говорит, что второй путь можно не дифференцировать:

∇θJ(θ)∝∑sdπ(s)∑aQπ(s,a) ∇θπθ(a∣s)=Eπ[Qπ(s,a) ∇θln⁡πθ(a∣s)].\nabla_\theta J(\theta) \propto \sum_s d^\pi(s) \sum_a Q^\pi(s,a)\, \nabla_\theta \pi_\theta(a\mid s) = \mathbb{E}_\pi\big[Q^\pi(s,a)\,\nabla_\theta \ln \pi_\theta(a\mid s)\big].

Последний переход — тот же «трюк с логарифмом», что в уроке 6.3.1: ∇π=π⋅∇ln⁡π\nabla \pi = \pi \cdot \nabla \ln \pi, и сумма с весами π\pi становится математическим ожиданием, которое можно оценивать по выборке.

Венг приводит полное доказательство по книге Саттона и Барто (разд. 13.1). Его идея на словах: распишите ∇Vπ(s)\nabla V^\pi(s) через QπQ^\pi и уравнение Беллмана; получится рекурсия, где ∇Vπ\nabla V^\pi следующего состояния снова выражается через то же правило. Развернув рекурсию до бесконечности, вы получаете сумму по всем состояниям, взвешенную вероятностями до них дойти за kk шагов, — а нормированная, эта сумма и есть dπ(s)d^\pi(s). Коэффициент пропорциональности в эпизодической задаче — средняя длина эпизода.

Главный вывод раздела: «ванильный» градиент политики не смещён, но имеет большую дисперсию, и следующие алгоритмы в основном уменьшают дисперсию, не добавляя смещения. В конце раздела Венг даёт общую форму из статьи о GAE (Schulman и др., 2016): вместо QπQ^\pi в формулу можно подставлять полную отдачу, отдачу после шага, её же минус baseline, QQ, преимущество AA или TD-ошибку — все варианты дают тот же градиент в среднем.

Монте-Карло-версия: сыграть эпизод, посчитать отдачу GtG_t для каждого шага и сдвинуть параметры: θ←θ+α γtGt ∇θln⁡πθ(At∣St)\theta \leftarrow \theta + \alpha\, \gamma^t G_t\, \nabla_\theta \ln \pi_\theta(A_t\mid S_t). Работает, потому что E[Gt∣St,At]=Qπ(St,At)\mathbb{E}[G_t\mid S_t, A_t] = Q^\pi(S_t, A_t).

Популярная доработка — вычесть из GtG_t baseline, например V(s)V(s): получится преимущество A=Q−VA = Q - V. Ожидание градиента не меняется, а дисперсия падает. Насколько сильно — видно в нашем примере ниже.

Раз уж ценность помогает уменьшать дисперсию, её стоит учить вместе с политикой. Критик обновляет параметры ww функции ценности (QwQ_w или VwV_w) по TD-ошибке δt=rt+γQw(s′,a′)−Qw(s,a)\delta_t = r_t + \gamma Q_w(s', a') - Q_w(s,a). Актор обновляет θ\theta в направлении, которое подсказывает критик: θ←θ+αθQw(s,a) ∇θln⁡πθ(a∣s)\theta \leftarrow \theta + \alpha_\theta Q_w(s,a)\,\nabla_\theta \ln \pi_\theta(a\mid s). У них два разных learning rate.

flowchart LR
ENV["Среда"] -->|"состояние s, награда r"| A["Актор π_θ"]
A -->|"действие a"| ENV
ENV -->|"s, a, r, s′"| C["Критик V_w или Q_w"]
C -->|"TD-ошибка δ или преимущество A"| A
Схема actor-critic: критик оценивает, актор меняет политику в сторону, которую тот подсказывает.

REINFORCE и простой actor-critic — on-policy (on-policyon-policy (обучение на данных текущей политики)EN on-policyПротивоположность — off-policy, обучение на данных другой политики.): данные собирает та же политика, которую учим. Off-policy (off-policyoff-policy (обучение на данных другой политики)EN off-policyПолитика, которую учим, отличается от той, что собирала данные. Пример — Q-learning; в PPO и GRPO — поправка π/π_old.) позволяет переиспользовать старые траектории (буфер опыта) и исследовать другой, «поведенческой» политикой β(a∣s)\beta(a\mid s). Цена — поправочный множитель (выборка по значимостивыборка по значимости (importance sampling)EN importance samplingПеревзвешивание сэмплов старой политики отношением π_new / π_old — основа PPO.):

∇θJ(θ)≈Eβ[πθ(a∣s)β(a∣s) Qπ(s,a) ∇θln⁡πθ(a∣s)].\nabla_\theta J(\theta) \approx \mathbb{E}_\beta\Big[\frac{\pi_\theta(a\mid s)}{\beta(a\mid s)}\, Q^\pi(s,a)\, \nabla_\theta \ln \pi_\theta(a\mid s)\Big].

Строго говоря, при дифференцировании появляется ещё слагаемое с ∇θQπ\nabla_\theta Q^\pi, которое считать очень трудно; Венг ссылается на работу Degris, White и Sutton (2012), где показано, что его можно отбросить и всё равно гарантировать улучшение политики. Это отношение вероятностей πθ/πold\pi_\theta / \pi_{\text{old}} вы потом увидите в PPO и GRPO.

A3C (Mnih и др., 2016) — много параллельных потоков-акторов, каждый со своей копией параметров; они копят градиенты по нескольким шагам и асинхронно отправляют их в общие параметры. Критик учит VwV_w по среднеквадратичной ошибке (Gt−Vw(s))2(G_t - V_w(s))^2, и VwV_w служит baseline. A2C — синхронный вариант: координатор ждёт всех акторов, и следующая итерация начинается с одной и той же политики. По данным OpenAI, A2C лучше загружает GPU и работает не хуже A3C.

4. Детерминированные политики: DPG, DDPG, D4PG, MADDPG, TD3

Заголовок раздела «4. Детерминированные политики: DPG, DDPG, D4PG, MADDPG, TD3»

Здесь политика выдаёт одно действие a=μθ(s)a = \mu_\theta(s), а градиент идёт по цепному правилу через критика: ∇θJ=E[∇aQμ(s,a) ∇θμθ(s)∣a=μθ(s)]\nabla_\theta J = \mathbb{E}\big[\nabla_a Q^\mu(s,a)\, \nabla_\theta \mu_\theta(s)\big|_{a=\mu_\theta(s)}\big]. Плюс — не нужен importance sampling (нет интеграла по действиям); минус — нет встроенного исследования, поэтому к действию добавляют шум.

  • DDPG (Lillicrap и др., 2015) соединяет DPG с приёмами DQN: буфер опыта и медленно обновляемые целевые сети (θ′←τθ+(1−τ)θ′\theta' \leftarrow \tau\theta + (1-\tau)\theta', τ≪1\tau \ll 1), плюс batch norm для признаков разной физической природы.
  • D4PG — распределительный критик (учит распределение отдачи, а не среднее), NN-шаговые цели, много акторов, приоритетный буфер.
  • MADDPG — для нескольких агентов: централизованный критик видит действия всех, а акторы действуют по своим локальным наблюдениям; ансамбли политик снижают дисперсию.
  • TD3 (Fujimoto и др., 2018) борется с переоценкой ценности: берёт минимум из двух критиков, обновляет политику реже критика и добавляет обрезанный шум к действию в цели («сглаживание целевой политики»).

TRPO (Schulman и др., 2015) максимизирует «суррогатную» цель с importance sampling относительно старой политики, E[πθπθoldA^]\mathbb{E}\big[\tfrac{\pi_\theta}{\pi_{\theta_\text{old}}}\hat A\big], при жёстком ограничении «доверительной области» Es[DKL(πθold∥πθ)]≤δ\mathbb{E}_s\big[D_\text{KL}(\pi_{\theta_\text{old}} \Vert \pi_\theta)\big] \le \delta. Обещание — монотонное улучшение; цена — сложная оптимизация второго порядка.

PPO (Schulman и др., 2017) получает похожий эффект первым порядком. Обозначим r(θ)=πθ(a∣s)/πθold(a∣s)r(\theta) = \pi_\theta(a\mid s) / \pi_{\theta_\text{old}}(a\mid s) и ограничим его интервалом [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon]:

JCLIP(θ)=E[min⁡(r(θ)A^, clip(r(θ),1−ϵ,1+ϵ) A^)].J^\text{CLIP}(\theta) = \mathbb{E}\Big[\min\big(r(\theta)\hat A,\ \mathrm{clip}(r(\theta), 1-\epsilon, 1+\epsilon)\,\hat A\big)\Big].

Минимум из двух слагаемых убирает стимул уводить политику далеко ради большей награды. Если актор и критик делят сеть, к цели добавляют ошибку ценности −c1(Vθ(s)−Vtarget)2-c_1(V_\theta(s) - V_\text{target})^2 и бонус энтропии +c2H+c_2 H. Пример с числами: при ϵ=0,2\epsilon = 0{,}2 и положительном преимуществе A^=2\hat A = 2 рост rr с 1 до 1,5 даст в цели не 1,5⋅2=31{,}5 \cdot 2 = 3, а 1,2⋅2=2,41{,}2 \cdot 2 = 2{,}4: дальше 1,2 тянуть вероятность действия бесполезно.

Венг добавляет более позднее наблюдение Hsu и др. (2020): у стандартного PPO есть три режима отказа (нестабильность при нулевой награде вне ограниченной области в непрерывных действиях; застревание на неоптимальном действии при редких больших наградах в дискретных; чувствительность к инициализации). Помогают дискретизация действий или бета-распределение вместо гауссова и KL-регуляризация вместо обрезки.

PPG (Cobbe и др., 2020) разводит обучение политики и ценности по фазам: в фазе политики — обычный PPO, во вспомогательной — учится ценность, а KL к старой политике («клонирование поведения») не даёт политике уехать. Ценность переносит гораздо больше повторных проходов по данным (6 эпох против 1), и эффективность по данным заметно растёт.

6. Off-policy actor-critic и энтропия: ACER, ACKTR, SAC, SVPG, IMPALA

Заголовок раздела «6. Off-policy actor-critic и энтропия: ACER, ACKTR, SAC, SVPG, IMPALA»
  • ACER — off-policy версия A3C: оценка Retrace, обрезанные веса importance sampling с поправкой смещения и эффективное ограничение доверительной области.
  • ACKTR — шаг натурального градиента через приближение K-FAC (кронекеровская факторизация матрицы Фишера); Венг включает его для полноты и в детали не идёт.
  • SAC (Haarnoja и др., 2018) — максимизация энтропии: к награде добавляется α H(π(⋅∣s))\alpha\,\mathcal{H}(\pi(\cdot\mid s)). Политика должна быть как можно случайнее, оставаясь успешной: она лучше исследует и сохраняет несколько почти одинаково хороших стратегий. Отдельный раздел — автоматическая подстройка «температуры» α\alpha под целевую энтропию.
  • SVPG — популяция политик, обновляемых методом Stein variational gradient descent: одно слагаемое тянет частицы к областям высокой награды, другое расталкивает их друг от друга ради разнообразия.
  • IMPALA (Espeholt и др., 2018) разделяет «действующих» и «учащихся»: много акторов генерируют опыт слегка устаревшей политикой, один learner учится на всём. Расхождение исправляет V-trace — nn-шаговая цель с обрезанными весами importance sampling ρi=min⁡(ρˉ,π/μ)\rho_i = \min(\bar\rho, \pi/\mu) и cj=min⁡(cˉ,π/μ)c_j = \min(\bar c, \pi/\mu).

Связь с LLM: та же проблема «данные собраны чуть устаревшей политикой» есть в асинхронном RL для языковых моделей, и решается она тем же — обрезанными отношениями вероятностей (урок 6.4.3).

Венг сводит обзор к списку приёмов, повторяющихся почти во всех алгоритмах. Пересказ:

ПринципГде встречаетсяГде у нас в курсе
уменьшать дисперсию, не смещая оценкуbaseline, преимущество, GAE6.0.3, 6.3.1
off-policy ради исследования и эффективности по даннымACER, DDPG, SAC, IMPALA6.0.2 (Q-learning, буфер)
буфер опыта и медленные целевые сетиDQN, DDPG, TD36.0.2
регуляризация энтропиейA3C, PPO, SAC6.0.3; коллапс энтропии — 6.4.3
ограничивать расхождение старой и новой политикиTRPO, PPO, PPG6.3.2, 6.4.1
не переоценивать ценностьTD3 (минимум из двух критиков)—
подумать, делить ли сеть актора и критикаPPG6.3.2: отдельный критик — одна из «четырёх моделей»

Проверьте главный тезис поста — baseline уменьшает дисперсию и не ломает обучение — на трёхрукой задаче о бандите. Код на NumPy, работает за секунду:

import numpy as np
def reinforce(use_baseline, seed, steps=2000, lr=0.01):
rng = np.random.default_rng(seed)
true_means = np.array([10.0, 10.5, 9.5]) # средние награды трёх «рычагов»; лучший — второй
theta = np.zeros(3) # логиты политики: π(a) = softmax(θ)
baseline, early_grads = 0.0, []
for t in range(steps):
pi = np.exp(theta - theta.max()); pi /= pi.sum()
a = rng.choice(3, p=pi) # действуем по текущей политике
r = true_means[a] + rng.normal(0, 1) # шумная награда
grad_logp = -pi.copy(); grad_logp[a] += 1 # ∇θ log π(a) = one_hot(a) − π
weight = r - baseline if use_baseline else r
g = weight * grad_logp # оценка градиента REINFORCE по одному шагу
if t < 200:
early_grads.append(g)
theta += lr * g # градиентный ПОДЪЁМ: награду максимизируем
baseline += 0.05 * (r - baseline) # бегущее среднее награды
var = np.array(early_grads).var(axis=0).sum()
return pi, var
for use_baseline in [False, True]:
for seed in range(3):
pi, var = reinforce(use_baseline, seed)
print(f"baseline={use_baseline!s:5} seed={seed}: π={pi.round(2)}, дисперсия={var:.1f}")

Ожидаемый вывод:

baseline=False seed=0: π=[0.04 0.95 0.01], дисперсия=61.7
baseline=False seed=1: π=[0.97 0.01 0.01], дисперсия=50.6
baseline=False seed=2: π=[0.81 0.15 0.04], дисперсия=64.1
baseline=True seed=0: π=[0.04 0.93 0.03], дисперсия=4.3
baseline=True seed=1: π=[0.06 0.91 0.03], дисперсия=4.1
baseline=True seed=2: π=[0.05 0.93 0.02], дисперсия=4.0

Без baseline все награды около 10, и любой выбранный рычаг «поощряется» — какой из них победит, решает случай (в двух запусках из трёх политика сошлась к худшему рычагу). С baseline дисперсия градиента падает примерно в 15 раз, и все три запуска находят лучший рычаг. Дальше:

  1. Замените постоянный baseline на V(s)V(s) — и вы получите actor-critic (для бандита состояние одно, так что это то же бегущее среднее).
  2. Добавьте к обновлению обрезку r(θ)r(\theta) из PPO и несколько эпох на одном батче — так устроен цикл обучения в уроке 6.0.3.
  3. Пройдите практику уроков 6.0.3 и 6.3.1, держа пост открытым как справочник по формулам.
ENRU
policy gradient (theorem)градиент политики (теорема о нём)
stationary distributionстационарное распределение
return, discount factorотдача, коэффициент дисконтирования
baseline, advantagebaseline (базовая линия), преимущество
actor, criticактор, критик
on-policy / off-policyon-policy / off-policy (по своей / по чужой политике)
behavior policy, target policyповеденческая политика, целевая политика
importance weightвес важности (importance sampling)
trust regionдоверительная область
clipped surrogate objectiveобрезанная суррогатная цель (PPO)
deterministic policyдетерминированная политика
experience replay, target networkбуфер опыта, целевая сеть
maximum entropy RL, temperatureRL с максимизацией энтропии, температура
overestimation biasсмещение переоценки
natural gradientнатуральный градиент