λLLM Wiki

Derivation: From Policy Gradient to PPO

本页把 PPO 的 clipped 目标函数从最原始的 策略梯度定理(Policy Gradient Theorem) 一步步推出来,并顺带推出 价值函数 与 GAE 的闭式表达。需要先阅读 ppo 了解记号。

1. 策略梯度定理

目标是最大化期望累积回报:

J(θ)=Eτπθ[R(τ)],R(τ)=t=0TγtrtJ(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)],\quad R(\tau) = \sum_{t=0}^T \gamma^t r_t

θ\theta 求梯度:

θJ(θ)=θP(τθ)R(τ)dτ=θP(τθ)R(τ)dτ\nabla_\theta J(\theta) = \nabla_\theta \int P(\tau|\theta) R(\tau)\, d\tau = \int \nabla_\theta P(\tau|\theta)\, R(\tau)\, d\tau

利用 对数导数恒等式(log-derivative trick) θP(τθ)=P(τθ)θlogP(τθ)\nabla_\theta P(\tau|\theta) = P(\tau|\theta)\,\nabla_\theta \log P(\tau|\theta)

θJ(θ)=Eτπθ[θlogP(τθ)R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\big[\nabla_\theta \log P(\tau|\theta)\cdot R(\tau)\big]

再把轨迹概率分解:

P(τθ)=ρ0(s0)t=0Tπθ(atst)p(st+1st,at)P(\tau|\theta) = \rho_0(s_0)\prod_{t=0}^T \pi_\theta(a_t|s_t)\cdot p(s_{t+1}|s_t, a_t)

只有 πθ\pi_\theta 依赖 θ\theta,所以 θlogP(τθ)=t=0Tθlogπθ(atst)\nabla_\theta \log P(\tau|\theta) = \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t)。代回:

θJ(θ)=Eτπθ[t=0Tθlogπθ(atst)R(τ)]\boxed{\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\bigg[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t)\cdot R(\tau)\bigg]}

2. REINFORCE

把期望替换为有限样本平均得到 REINFORCE 估计量:

g^=1Ni=1Nt=0Tiθlogπθ(at(i)st(i))R(τ(i))\hat{g} = \frac{1}{N}\sum_{i=1}^N\sum_{t=0}^{T_i} \nabla_\theta \log \pi_\theta(a_t^{(i)}|s_t^{(i)})\cdot R(\tau^{(i)})

这是无偏的,但方差极大——每个时间步的梯度都乘以整条轨迹的回报,而整条回报受环境随机性、策略随机性共同影响。

3. 方差减小之一:rewards-to-go

当前时间步 tt 的决策只能影响 tt 及之后的 reward,所以把 R(τ)R(\tau) 替换成 ttγttrt\sum_{t'\ge t}\gamma^{t'-t}r_{t'} 并不改变期望,但能降低方差:

θJ(θ)=Eτπθ[t=0Tθlogπθ(atst)G^t],G^t=t=tTγttrt\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\bigg[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t)\cdot \hat{G}_t\bigg],\quad \hat{G}_t = \sum_{t'=t}^T \gamma^{t'-t} r_{t'}

这就是 causality/rewards-to-go 优化,等价于忽略过去的 reward(因为过去 reward 不依赖当前动作)。

4. 方差减小之二:baseline

对任意只依赖 sts_t 的函数 b(st)b(s_t)

Eatπθ[θlogπθ(atst)b(st)]=b(st)θπθ(atst)dat=1=0\mathbb{E}_{a_t \sim \pi_\theta}[\nabla_\theta \log \pi_\theta(a_t|s_t)\cdot b(s_t)] = b(s_t)\, \nabla_\theta\underbrace{\int \pi_\theta(a_t|s_t)\, da_t}_{=1} = 0

所以在 policy gradient 里减去任意与动作无关的 baseline 不改变期望

θJ(θ)=E[t=0Tθlogπθ(atst)(G^tb(st))]\nabla_\theta J(\theta) = \mathbb{E}\bigg[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t)\cdot (\hat{G}_t - b(s_t))\bigg]

最佳 baseline 在均方意义下是 b(st)=E[G^tst]b^*(s_t) = \mathbb{E}[\hat{G}_t|s_t]——这正是 价值函数 Vπ(st)V^\pi(s_t)。用 VπV^\pi 做 baseline,G^tVπ(st)\hat{G}_t - V^\pi(s_t) 就是 优势(advantage) Aπ(st,at)=Qπ(st,at)Vπ(st)A^\pi(s_t, a_t) = Q^\pi(s_t, a_t) - V^\pi(s_t) 的 Monte Carlo 估计。

得到:

θJ(θ)=E[t=0Tθlogπθ(atst)A^t]\nabla_\theta J(\theta) = \mathbb{E}\bigg[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t)\cdot \hat{A}_t\bigg]

5. GAE 的推导

朴素做法 A^t=G^tV(st)\hat{A}_t = \hat{G}_t - V(s_t) 是无偏的但方差高;一步 TD 残差 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) 方差低但有 bias(因为 VV 是近似的)。GAE 把两者做指数加权平均。

先定义 kk-step advantage 估计:

A^t(k)=V(st)+rt+γrt+1++γk1rt+k1+γkV(st+k)\hat{A}_t^{(k)} = -V(s_t) + r_t + \gamma r_{t+1} + \cdots + \gamma^{k-1} r_{t+k-1} + \gamma^k V(s_{t+k})

一个代数事实:A^t(k)=l=0k1γlδt+l\hat{A}_t^{(k)} = \sum_{l=0}^{k-1}\gamma^l\delta_{t+l},其中 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)。验证:

l=0k1γlδt+l=l=0k1γl(rt+l+γV(st+l+1)V(st+l))\sum_{l=0}^{k-1}\gamma^l\delta_{t+l} = \sum_{l=0}^{k-1}\gamma^l\big(r_{t+l} + \gamma V(s_{t+l+1}) - V(s_{t+l})\big)

展开后相邻项 γl+1V(st+l+1)γl+1V(st+l+1)\gamma^{l+1} V(s_{t+l+1}) - \gamma^{l+1}V(s_{t+l+1}) 互相消去,只剩首末项 V(st)+γkV(st+k)-V(s_t) + \gamma^k V(s_{t+k}) 加上 rt+lr_{t+l} 的加权和,恰好就是 A^t(k)\hat{A}_t^{(k)}

接着做指数加权:

A^tGAE(γ,λ)=(1λ)k=1λk1A^t(k)\hat{A}_t^{GAE(\gamma,\lambda)} = (1-\lambda)\sum_{k=1}^\infty \lambda^{k-1}\hat{A}_t^{(k)}

代入 A^t(k)=l=0k1γlδt+l\hat{A}_t^{(k)} = \sum_{l=0}^{k-1}\gamma^l\delta_{t+l} 并交换求和顺序:

A^tGAE(γ,λ)=(1λ)l=0γlδt+lk=l+1λk1=(1λ)l=0γlδt+lλl1λ\hat{A}_t^{GAE(\gamma,\lambda)} = (1-\lambda)\sum_{l=0}^\infty \gamma^l\delta_{t+l}\sum_{k=l+1}^\infty \lambda^{k-1} = (1-\lambda)\sum_{l=0}^\infty \gamma^l\delta_{t+l}\cdot \frac{\lambda^l}{1-\lambda}

得到闭式:

A^tGAE(γ,λ)=l=0(γλ)lδt+l\boxed{\hat{A}_t^{GAE(\gamma,\lambda)} = \sum_{l=0}^\infty (\gamma\lambda)^l\delta_{t+l}}

两个极端:

  • λ=0\lambda = 0A^t=δt\hat{A}_t = \delta_t,纯一步 TD。
  • λ=1\lambda = 1A^t=l0γlrt+lV(st)\hat{A}_t = \sum_{l\ge 0}\gamma^l r_{t+l} - V(s_t),纯 Monte Carlo residual。

实现时用递推 A^t=δt+γλA^t+1\hat{A}_t = \delta_t + \gamma\lambda \hat{A}_{t+1},反向扫描一条轨迹 O(T)O(T) 得到所有 A^t\hat{A}_t

6. 重要性采样与离线目标

到目前为止的所有推导都是同策略的——样本必须由当前策略 πθ\pi_\theta 采样。但每次只用一次梯度就扔掉 rollout 数据太浪费。PPO 的做法是用重要性采样(importance sampling) 让同一批旧策略采集的轨迹可以重复用:

Eaπθ[f(a)]=Eaπθold[πθ(a)πθold(a)f(a)]\mathbb{E}_{a \sim \pi_\theta}[f(a)] = \mathbb{E}_{a \sim \pi_{\theta_\text{old}}}\bigg[\frac{\pi_\theta(a)}{\pi_{\theta_\text{old}}(a)}f(a)\bigg]

把这个恒等式应用到 policy gradient 并做一阶近似(把 θlogπθ\nabla_\theta \log \pi_\theta 替换为 θπθ/πθold\nabla_\theta \pi_\theta / \pi_{\theta_\text{old}}),得到 surrogate objective

LIS(θ)=E(s,a)πθold[πθ(as)πθold(as)A^(s,a)]L^{\text{IS}}(\theta) = \mathbb{E}_{(s,a)\sim\pi_{\theta_\text{old}}}\bigg[\frac{\pi_\theta(a|s)}{\pi_{\theta_\text{old}}(a|s)}\hat{A}(s, a)\bigg]

把概率比记作 rt(θ)=πθ(atst)/πθold(atst)r_t(\theta) = \pi_\theta(a_t|s_t)/\pi_{\theta_\text{old}}(a_t|s_t)。注意 θLISθ=θold\nabla_\theta L^{\text{IS}}|_{\theta = \theta_\text{old}} 恰好等于 policy gradient,所以这是一阶正确的。

7. TRPO 的 KL 约束

重要性采样的代价是:θ\theta 偏离 θold\theta_\text{old} 越远,rt(θ)r_t(\theta) 的方差越大,surrogate 与真实 J(θ)J(\theta) 的差距也越大。TRPO 的解决办法是加一个硬约束

maxθ LIS(θ)s.t.Es[DKL(πθold(s)πθ(s))]δ\max_\theta\ L^\text{IS}(\theta)\quad \text{s.t.}\quad \mathbb{E}_s[D_\text{KL}(\pi_{\theta_\text{old}}(\cdot|s)\,\|\,\pi_\theta(\cdot|s))] \le \delta

TRPO 证明了这个约束保证了策略单调改进。代价是要解一个约束优化问题,需要共轭梯度 + 二阶求解,实现复杂。

8. PPO-Clip 的一阶近似

PPO 想在不求二阶梯度的前提下达到类似效果。关键观察是:只要限制 rt(θ)r_t(\theta) 不偏离 1 太远,就近似于限制 KL 不偏离 0 太远(因为两者一阶一致)。但直接裁剪 rt(θ)r_t(\theta) 会让梯度在裁剪点不连续。PPO 的技巧是对目标函数而不是对概率比做裁剪

LCLIP(θ)=E^t[min(rt(θ)A^t, clip(rt(θ),1ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \hat{\mathbb{E}}_t\big[\min\big(r_t(\theta)\hat{A}_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t\big)\big]

为什么是 min,不是 max 或直接取 clip

A^t>0\hat{A}_t > 0 的情形分段讨论:

rt(θ)r_t(\theta) 的范围rtA^tr_t \hat{A}_tclip(rt,1ϵ,1+ϵ)A^t\text{clip}(r_t, 1-\epsilon, 1+\epsilon)\hat{A}_tmin\min 结果
rt<1ϵr_t < 1-\epsilonrtA^tr_t\hat{A}_t(1ϵ)A^t(1-\epsilon)\hat{A}_trtA^tr_t\hat{A}_t(更小)
1ϵrt1+ϵ1-\epsilon \le r_t \le 1+\epsilonrtA^tr_t\hat{A}_trtA^tr_t\hat{A}_trtA^tr_t\hat{A}_t
rt>1+ϵr_t > 1+\epsilonrtA^tr_t\hat{A}_t(更大)(1+ϵ)A^t(1+\epsilon)\hat{A}_t(1+ϵ)A^t(1+\epsilon)\hat{A}_t

A^t<0\hat{A}_t < 0 的情形对称:

rt(θ)r_t(\theta) 的范围rtA^tr_t \hat{A}_tclip(rt,1ϵ,1+ϵ)A^t\text{clip}(r_t, 1-\epsilon, 1+\epsilon)\hat{A}_tmin\min 结果
rt<1ϵr_t < 1-\epsilonrtA^tr_t\hat{A}_t(更大)(1ϵ)A^t(1-\epsilon)\hat{A}_t(1ϵ)A^t(1-\epsilon)\hat{A}_t
1ϵrt1+ϵ1-\epsilon \le r_t \le 1+\epsilonrtA^tr_t\hat{A}_trtA^tr_t\hat{A}_trtA^tr_t\hat{A}_t
rt>1+ϵr_t > 1+\epsilonrtA^tr_t\hat{A}_t(1+ϵ)A^t(1+\epsilon)\hat{A}_t(更大)rtA^tr_t\hat{A}_t(更小)

综合两种情形:

  • A^t>0\hat{A}_t > 0rt>1+ϵr_t > 1+\epsilon:clip 生效,梯度变 0——阻止继续提高概率。
  • A^t>0\hat{A}_t > 0rt<1ϵr_t < 1-\epsilon:clip 不生效,梯度继续推 rtr_t 上升——允许恢复。
  • A^t<0\hat{A}_t < 0rt<1ϵr_t < 1-\epsilon:clip 生效,梯度变 0——阻止继续降低概率。
  • A^t<0\hat{A}_t < 0rt>1+ϵr_t > 1+\epsilon:clip 不生效,梯度继续推 rtr_t 下降——允许恢复。

直观解释:min 让 loss 始终取 “clip 之后” 与 “clip 之前” 两者中更悲观(对优化更不利)的那个

  • 当策略已经朝坏方向(advantage 变差)走得太远时,min 取 unclipped 的大损失,允许梯度把它拉回来。
  • 当策略朝好方向(advantage 变好)走到超出 clip 范围时,min 取 clipped 的小收益,阻止它继续过冲。

这就是”悲观下界”的含义:clip 只阻止”超过 trust region 的奖励”,从不阻止”把策略拉回 trust region 的惩罚”

9. 与 PPO 完整损失的关系

上述推导给出的是策略损失 LCLIPL^{CLIP}。实际训练时还要加上:

  • c1LVF(ϕ)=c1(Vϕ(st)Vttarg)2-c_1 L^{VF}(\phi) = -c_1 (V_\phi(s_t) - V_t^\text{targ})^2:让 value model 回归到 advantage 目标,详见 value-model
  • +c2S[πθ](st)=c2aπθ(ast)logπθ(ast)+c_2 S[\pi_\theta](s_t) = -c_2 \sum_a \pi_\theta(a|s_t)\log\pi_\theta(a|s_t):策略熵作为探索奖励。

合起来就是 ppo 主页上的 LCLIP+VF+SL^{CLIP+VF+S}

10. 从这里到 GRPO

GRPO 所做的就是去掉 VϕV_\phi:不再学习 value model,而是对同一个 prompt 采样 GG 条 response,用组内 reward 的均值与标准差做 baseline。这相当于把上面第 4 节的 b(st)=Vπ(st)b(s_t) = V^\pi(s_t) 换成 b(q)=mean(r)b(q) = \text{mean}(\mathbf{r}),而 advantage 的方差归一化通过组内 std 实现。

由于 baseline 只依赖 prompt qq 而不依赖 action,梯度仍然无偏;组内 GG 足够大时 mean(r)\text{mean}(\mathbf{r}) 就是 Eoπθ[r(q,o)q]\mathbb{E}_{o\sim\pi_\theta}[r(q, o)|q] 的高精度 Monte Carlo 估计,与 VπV^\pi 的作用等价。GRPO 的代价是每个 prompt 必须采样多条 response;收益是扔掉 critic 带来的显存与训练开销。

Comments