EssayAI
Блог
Блог
Математика и алгоритмы

Алгоритм policy gradient: как обучают стратегию напрямую

20 июня 2026Время чтения: 7 минут
#policy gradient#REINFORCE#обучение с подкреплением#градиент стратегии#машинное обучение
Алгоритм policy gradient: как обучают стратегию напрямую

Алгоритм policy gradient - это семейство методов обучения с подкреплением, где агент учится сразу параметризованной стратегии πθ(as)\pi_\theta(a \mid s), а не функции ценности. Вместо того чтобы оценивать «насколько хорошо состояние», мы напрямую сдвигаем параметры θ\theta в сторону действий, которые принесли больше награды. Ниже разберём теорему о градиенте, формулу REINFORCE и роль baseline, а интерактивный расчёт ниже покажет, как скорость обучения и базовая линия влияют на сходимость.

Что оптимизирует policy gradient

Цель агента - максимизировать ожидаемую суммарную награду по траекториям τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \dots), которые порождает текущая стратегия:

J(θ)=Eτπθ[t=0Tγtrt].J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \gamma^t r_t \right].

Здесь πθ\pi_\theta - параметризованная стратегия (обычно нейросеть с softmax-выходом для дискретных действий или гауссовой головой для непрерывных), γ[0,1]\gamma \in [0, 1] - коэффициент дисконтирования, а rtr_t - награда на шаге tt. Параметр θ\theta - это веса политики. Идея метода в том, чтобы посчитать градиент θJ(θ)\nabla_\theta J(\theta) и сделать шаг градиентного подъёма: θθ+αθJ(θ)\theta \leftarrow \theta + \alpha \nabla_\theta J(\theta).

Сложность в том, что распределение траекторий само зависит от θ\theta - менять параметры значит менять и то, по чему берётся матожидание. Именно эту проблему решает теорема о градиенте стратегии.

Схема policy gradient: стратегия порождает траекторию, награда формирует градиент, параметры сдвигаются в сторону выгодных действий
Схема policy gradient: стратегия порождает траекторию, награда формирует градиент, параметры сдвигаются в сторону выгодных действий

Теорема о градиенте и трюк с log-производной

Прямое дифференцирование J(θ)J(\theta) упирается в зависимость распределения от θ\theta. Спасает тождество log-производной (log-derivative trick): для любой плотности θpθ(x)=pθ(x)θlogpθ(x)\nabla_\theta p_\theta(x) = p_\theta(x) \nabla_\theta \log p_\theta(x). Применив его к вероятности траектории, получаем теорему о градиенте стратегии:

θJ(θ)=Eτπθ[t=0Tθlogπθ(atst)Rt],\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t \mid s_t) \, R_t \right],

где Rt=k=tTγktrkR_t = \sum_{k=t}^{T} \gamma^{k-t} r_k - отдача (return) с момента tt. Ключевое наблюдение: динамика среды p(st+1st,at)p(s_{t+1} \mid s_t, a_t) от θ\theta не зависит и из градиента выпадает. Поэтому модель среды знать не нужно - это и делает метод безмодельным (model-free).

Смысл формулы интуитивно прост. Множитель θlogπθ(atst)\nabla_\theta \log \pi_\theta(a_t \mid s_t) показывает, в какую сторону подкрутить θ\theta, чтобы повысить вероятность выбранного действия. Множитель RtR_t - это вес: если за действием последовала большая отдача, шаг в его сторону делается крупным; если отдача мала или отрицательна - вероятность действия снижается. Близкая по духу идея напрямую двигаться по антиградиенту цели разобрана в материале про метод сопряжённых градиентов.

Формула REINFORCE: оценка градиента по выборке

Матожидание в теореме посчитать точно нельзя - его оценивают по выборке траекторий методом Монте-Карло. Прогнали NN эпизодов текущей стратегией, усреднили - получили несмещённую оценку градиента. Это и есть алгоритм REINFORCE (Уильямс, 1992):

θJ(θ)1Ni=1Nt=0Tθlogπθ(atisti)Rti.\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t^i \mid s_t^i) \, R_t^i.

Один цикл алгоритма выглядит так:

  1. Сыграть эпизод (или batch эпизодов) текущей стратегией πθ\pi_\theta, сохранив все пары «состояние-действие» и награды.
  2. Посчитать отдачи RtR_t для каждого шага.
  3. Накопить градиент tθlogπθ(atst)Rt\sum_t \nabla_\theta \log \pi_\theta(a_t \mid s_t) R_t.
  4. Сделать шаг подъёма θθ+αθJ\theta \leftarrow \theta + \alpha \nabla_\theta J.

REINFORCE концептуально прост и работает «из коробки», но у него высокая дисперсия оценки: отдача RtR_t - это сумма случайных наград, и от эпизода к эпизоду она сильно прыгает. Высокая дисперсия означает шумные градиенты и медленную, неустойчивую сходимость. Главный инструмент борьбы с этим - baseline.

Baseline: как снизить дисперсию без смещения

Идея baseline в том, чтобы вычитать из отдачи опорное значение b(st)b(s_t), не зависящее от выбранного действия:

θJ(θ)=E[tθlogπθ(atst)(Rtb(st))].\nabla_\theta J(\theta) = \mathbb{E} \left[ \sum_{t} \nabla_\theta \log \pi_\theta(a_t \mid s_t) \, \big( R_t - b(s_t) \big) \right].

Почему вычитание baseline не вносит смещения? Потому что Eaπ[θlogπθ(as)b(s)]=b(s)θaπθ(as)=b(s)θ1=0\mathbb{E}_{a \sim \pi}[\nabla_\theta \log \pi_\theta(a \mid s) \, b(s)] = b(s) \nabla_\theta \sum_a \pi_\theta(a \mid s) = b(s) \nabla_\theta 1 = 0. Любая функция, не зависящая от действия, в матожидании даёт ноль - оценка остаётся несмещённой, а вот её дисперсию правильно подобранный baseline заметно уменьшает.

Самый частый выбор - оценка функции ценности b(s)=V(s)b(s) = V(s), среднее ожидаемое возвращение из состояния. Тогда вместо «голой» отдачи в формуле появляется преимущество (advantage) At=RtV(st)A_t = R_t - V(s_t): насколько выбранное действие оказалось лучше среднего. Этот переход - мостик к методам actor-critic, где политика (actor) учится по advantage, а отдельная сеть (critic) оценивает V(s)V(s).

Сравнение градиента без baseline и с baseline: вычитание опорного уровня сжимает разброс шагов вокруг истинного направления
Сравнение градиента без baseline и с baseline: вычитание опорного уровня сжимает разброс шагов вокруг истинного направления

Дискретные и непрерывные действия

Вид θlogπθ(as)\nabla_\theta \log \pi_\theta(a \mid s) зависит от того, как параметризована стратегия.

Для дискретных действий берут softmax по логитам hθ(s,a)h_\theta(s, a):

πθ(as)=ehθ(s,a)aehθ(s,a).\pi_\theta(a \mid s) = \frac{e^{h_\theta(s, a)}}{\sum_{a'} e^{h_\theta(s, a')}}.

Тогда θlogπθ(as)=θhθ(s,a)aπθ(as)θhθ(s,a)\nabla_\theta \log \pi_\theta(a \mid s) = \nabla_\theta h_\theta(s, a) - \sum_{a'} \pi_\theta(a' \mid s) \nabla_\theta h_\theta(s, a') - разность градиента логита выбранного действия и среднего по политике. Именно эта модель используется в интерактивном расчёте выше.

Для непрерывных действий берут гауссову политику aN(μθ(s),σθ2(s))a \sim \mathcal{N}(\mu_\theta(s), \sigma_\theta^2(s)), и log-плотность даёт явный градиент по μ\mu и σ\sigma. Это позволяет применять policy gradient к управлению роботами и физическим системам, где действие - вещественный вектор сил или моментов.

Связь со стохастическим градиентным подъёмом

По сути policy gradient - это стохастический градиентный подъём по J(θ)J(\theta), где честный градиент заменён несмещённой выборочной оценкой. Отсюда наследуются все привычные нюансы: выбор скорости обучения α\alpha, чувствительность к масштабу награды, риск застрять в локальном оптимуме стратегии. Слишком большой α\alpha - и политика «перепрыгивает» хорошее решение, обновления раскачиваются; слишком малый - обучение ползёт. Нормализация наград и advantage в пределах batch помогает удержать масштаб шага стабильным независимо от того, какие абсолютные значения наград выдаёт среда.

Частые ошибки

  • Путают знак шага. Policy gradient - это градиентный подъём (максимизируем награду): θθ+αθJ\theta \leftarrow \theta + \alpha \nabla_\theta J. Если использовать автоград фреймворка, минимизирующего loss, нужно подавать loss со знаком минус: tlogπθ(atst)Rt-\sum_t \log \pi_\theta(a_t \mid s_t) R_t.
  • Считают baseline зависящим от действия. Если bb зависит от ata_t, вычитание вносит смещение и теорема ломается. Baseline должен зависеть только от состояния sts_t (или быть константой).
  • Забывают про дисперсию. Запускают чистый REINFORCE без baseline и нормализации и удивляются, что сходимость рваная. Высокая дисперсия - врождённое свойство метода, без её снижения обучение крайне шумное.
  • Дисконтируют отдачу неправильно. В RtR_t суммируются награды начиная с шага tt, а не вся отдача эпизода для каждого шага - иначе ранние действия получают незаслуженный кредит за поздние награды.
  • Переиспользуют старые траектории. REINFORCE - on-policy: градиент верен только для данных, собранных текущей стратегией. После шага по θ\theta старые эпизоды уже не дают несмещённую оценку.

FAQ

Чем policy gradient отличается от Q-learning? Q-learning учит функцию ценности действий Q(s,a)Q(s, a) и выводит стратегию косвенно (жадно по QQ). Policy gradient оптимизирует параметры стратегии напрямую. Это даёт естественную работу с непрерывными действиями и стохастическими политиками, но ценой большей дисперсии и обучения on-policy.

Почему вообще работает трюк с log-производной? Он переписывает θpθ=pθθlogpθ\nabla_\theta p_\theta = p_\theta \nabla_\theta \log p_\theta, что превращает градиент распределения в матожидание под тем же распределением. Благодаря этому градиент цели становится выборочно оцениваемым: достаточно играть эпизоды текущей стратегией и усреднять.

REINFORCE и policy gradient - это одно и то же? Не совсем. Policy gradient - общий принцип (теорема о градиенте стратегии). REINFORCE - конкретный Монте-Карло алгоритм, оценивающий этот градиент по полным эпизодам. Actor-critic, PPO, TRPO - тоже policy gradient методы, но с другими оценками градиента и ограничениями на шаг.

Коротко

Алгоритм policy gradient оптимизирует параметризованную стратегию πθ\pi_\theta напрямую через градиентный подъём по ожидаемой награде. Теорема о градиенте и трюк с log-производной превращают θJ\nabla_\theta J в матожидание E[θlogπθ(as)R]\mathbb{E}[\nabla_\theta \log \pi_\theta(a \mid s) R], которое REINFORCE оценивает по выборке эпизодов. Главная проблема - высокая дисперсия оценки; её снижают вычитанием baseline, не зависящего от действия, что и ведёт к advantage-формулировке и методам actor-critic.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также