从 PPO 到 DPO、IPO 与 GRPO:RLHF 训练流程与公式推导

17 阅读7分钟

本文整理 RLHF、奖励模型、PPO、GAE 和 DPO 的完整关系,里面会设计很多的公式推导,慎看。

本文为自己利用AI辅助理解RLHF的笔记,记录下来供以后自己查阅。如有错误,欢迎指正!


1. RLHF 的三阶段

经典 RLHF 通常包含:

  1. SFT(监督微调):用“指令—理想回答”训练模型,使它先学会基本的指令跟随能力。
  2. 奖励模型(Reward Model):让模型学习人类在两个回答之间的偏好。
  3. PPO 优化:让策略模型偏向高奖励回答,同时不要过度偏离 SFT 模型。

SFT 的目标可以写成:

LSFT=−∑tlog⁡πθ(yt∣x,y<t)\mathcal L_{\mathrm{SFT}} = -\sum_t\log\pi_\theta(y_t\mid x,y_{<t})

偏好数据通常是:

(x,yw,yl)(x,y_w,y_l)

其中 xx 是 prompt,ywy_w 是 winner(人类偏好的回答),yly_l 是 loser(不偏好的回答)。

这三阶段最后要逼近的理想目标是:

max⁡πEy∼π(⋅∣x)[r(x,y)]−βDKL(π(⋅∣x)∥πref(⋅∣x))\max_\pi \mathbb E_{y\sim\pi(\cdot\mid x)}[r(x,y)] - \beta D_{\mathrm{KL}} \left( \pi(\cdot\mid x)\Vert\pi_{\mathrm{ref}}(\cdot\mid x) \right)

第一项提高奖励,第二项把策略留在参考模型附近。参考模型通常就是 SFT 之后的 πref\pi_{\mathrm{ref}}。β\beta 越大,越不愿意偏离 SFT。后文的 PPO、DPO、IPO、GRPO 都围绕这个目标:PPO 用采样和 clip 去近似它,DPO 使用它的解析解,GRPO 仍在在线采样一侧,但把价值基线换成同一道题的一组奖励。

1.1 DPO 这条路线只做 SFT 和偏好学习

DPO 不训练奖励模型,也不跑 PPO。训练仍然分成两步:

  1. 在「指令—理想回答」上做 SFT,得到一个会按指令生成的策略。
  2. 用这份 SFT 权重初始化待训练策略,并另存一份冻结拷贝作为 πref\pi_{\mathrm{ref}},再在偏好对上做 DPO 或 IPO。

SFT 权重因此同时是策略的起点和参考模型。偏好数据应和 SFT 数据来自相近分布,这样 reference 给 ywy_w、yly_l 的概率才落在策略真正会生成的区域里,后面的 log⁡(πθ/πref)\log(\pi_\theta/\pi_{\mathrm{ref}}) 才有稳定含义。

一条偏好样本就是同一个 prompt 下的两条回答:人更偏好的一条,和较差的一条。SFT 使用的是其中被当作标准答案的那条,它不一定等于偏好对里的 winner。


2. 奖励模型为什么使用 sigmoid 和 log?

奖励模型对一个完整回答输出标量:

rϕ(x,y)r_\phi(x,y)

如果人类偏好 ywy_w 胜过 yly_l,常用 Bradley–Terry 模型表示:

P(yw≻yl∣x)=σ(rϕ(x,yw)−rϕ(x,yl))P(y_w\succ y_l\mid x) = \sigma\left(r_\phi(x,y_w)-r_\phi(x,y_l)\right)

其中 sigmoid 为:

σ(z)=11+e−z\sigma(z)=\frac{1}{1+e^{-z}}

设分数差为:

d=rϕ(x,yw)−rϕ(x,yl)d=r_\phi(x,y_w)-r_\phi(x,y_l)

则:

  • dd 很大时,σ(d)\sigma(d) 接近 1,模型很确信 winner 更好;
  • d=0d=0 时,σ(d)=0.5\sigma(d)=0.5,模型认为两者相同;
  • d<0d<0 时,模型判断与人类偏好相反。

训练时要最大化正确偏好事件的概率。使用深度学习常见的最小化损失形式,就是负对数似然:

LRM=−log⁡σ(rϕ(x,yw)−rϕ(x,yl))\boxed{ \mathcal L_{\mathrm{RM}} = -\log\sigma\left(r_\phi(x,y_w)-r_\phi(x,y_l)\right) }

为什么需要 log?

第一,多条样本的联合概率是连乘:

Pall=∏iPiP_{\mathrm{all}}=\prod_i P_i

取对数以后:

log⁡Pall=∑ilog⁡Pi\log P_{\mathrm{all}}=\sum_i\log P_i

于是可以用普通的 batch 求和来优化。第二,负 log 会重点惩罚“非常自信但判断错误”的样本:

−log⁡(0.01)≈4.61,−log⁡(0.9)≈0.105-\log(0.01)\approx4.61,\qquad -\log(0.9)\approx0.105

这个负对数似然后面会原样出现两次:一次是训练显式奖励模型,一次是 DPO 把 dd 换成隐式奖励差之后的 logistic loss。保守 DPO 则是在这个负对数上对「标签可能标反」做加权,见第 10 节。


3. 奖励模型评价完整回答还是每个 token?

经典 RLHF 中,奖励模型通常对完整回答打一个总分:

RRM=rϕ(x,y1:T)R_{\mathrm{RM}}=r_\phi(x,y_{1:T})

原因是人类标注通常是回答级别的:同一个问题下,回答 A 和回答 B 哪个整体更好,而不是评价每个 token。

奖励模型的网络实现可能在每个位置产生一个标量,但经典做法一般取最后一个有效 token 或 EOS 位置的分数,作为整段回答的 reward。

需要区分:

  • RRMR_{\mathrm{RM}}:奖励模型对完整回答的评分;
  • V(st)V(s_t):value model 对当前位置未来回报的预测;
  • rtPPOr_t^{\mathrm{PPO}}:PPO 使用的 token 级 reward。

PPO 中每个 token 仍然有训练信号,来源包括每个 token 的 KL 惩罚、EOS 位置的完整回答奖励、value model 的价值预测,以及 GAE 对未来信号的传播。因此“PPO 有 token 级训练信号”不等于“经典奖励模型直接评价每个 token”。

若要评价中间推理步骤,可以训练 Process Reward Model(过程奖励模型),但那是扩展设置。GRPO 的过程监督使用的就是这种步骤奖励,再把后续步骤的分数累加到当前 token,见第 12 节。DPO 不走这条路:它直接在完整回答的 log⁡π(y∣x)\log\pi(y\mid x) 上比较 winner 和 loser。


4. PPO 的理论目标和实际 actor loss

带 KL 正则的理想 RLHF 目标是:

max⁡πEy∼π(⋅∣x)[r(x,y)]−βDKL(π(⋅∣x)∥πref(⋅∣x))\max_\pi \mathbb E_{y\sim\pi(\cdot\mid x)}[r(x,y)] - \beta D_{\mathrm{KL}} \left( \pi(\cdot\mid x)\Vert\pi_{\mathrm{ref}}(\cdot\mid x) \right)

这个式子定义了想要的策略,但它不是 PPO 实现中直接反向传播的 actor loss。

PPO 用旧策略采样数据,并计算 advantage A^t\hat A_t。定义新旧策略概率比:

ρt(θ)=πθ(at∣st)πθold(at∣st)\rho_t(\theta) = \frac{\pi_\theta(a_t\mid s_t)} {\pi_{\theta_{\mathrm{old}}}(a_t\mid s_t)}

实际最大化 clipped surrogate:

LPPOclip=Et[min⁡(ρt(θ)A^t, clip⁡(ρt(θ),1−ϵ,1+ϵ)A^t)]L_{\mathrm{PPO}}^{\mathrm{clip}} = \mathbb E_t\left[ \min\left( \rho_t(\theta)\hat A_t,\, \operatorname{clip} (\rho_t(\theta),1-\epsilon,1+\epsilon)\hat A_t \right) \right]

因为代码中的优化器通常做梯度下降,所以 actor loss 常写为该目标的负值。

A^t>0\hat A_t>0 时,这个 token 比预期好,概率比被限制在 1+ϵ1+\epsilon 以内。A^t<0\hat A_t<0 时,概率比被限制在 1−ϵ1-\epsilon 以上。两种情形都是在限制单次更新离开 πθold\pi_{\theta_{\mathrm{old}}} 的幅度。ϵ\epsilon 的常见取值是 0.20.2。GRPO 使用同一个 clip,换掉的是 A^t\hat A_t 的算法,不是这段 surrogate。

在许多 RLHF 实现中,KL 项先被加入 reward:

rttotal=rtRM−β[log⁡πold(at∣st)−log⁡πref(at∣st)]r_t^{\mathrm{total}} = r_t^{\mathrm{RM}} - \beta \left[ \log\pi_{\mathrm{old}}(a_t\mid s_t) - \log\pi_{\mathrm{ref}}(a_t\mid s_t) \right]

然后用 rttotalr_t^{\mathrm{total}} 计算 GAE,最终进入 PPO actor loss。因此要区分:

  • KL 正则化目标:理论上希望解决的 RL 问题;
  • PPO clipped actor loss:稳定求解这个问题的一种实际算法目标。

rtRMr_t^{\mathrm{RM}} 通常只在 EOS(或最后一个有效 token)非零,其余位置为 0。KL 项每个 token 都有。策略在某个 token 上比 reference 更自信时,括号里的差为正,减项为负,这一 token 的即时奖励下降。

一次 PPO-RLHF 更新要同时放得下的模型通常是四个:正在更新的策略、value model、冻结的奖励模型、冻结的参考模型。旧策略的 log-prob 可以在采样时存下来,不必一直占着一份完整拷贝。DPO 把这份清单收成策略加冻结参考模型;GRPO 去掉 value model,保留策略、参考模型和打分器。


5. GAE:如何把最终奖励传给每个 token?

优势函数定义为:

A(st,at)=Q(st,at)−V(st)A(s_t,a_t)=Q(s_t,a_t)-V(s_t)

它表示当前动作的实际结果比当前状态下的正常预期好多少。

一步 TD 误差为:

δt=rt+γV(st+1)−V(st)\delta_t = r_t+\gamma V(s_{t+1})-V(s_t)

GAE 的递推式为:

A^t=δt+γλA^t+1\boxed{ \hat A_t = \delta_t+\gamma\lambda\hat A_{t+1} }

展开为:

A^t=δt+γλδt+1+(γλ)2δt+2+⋯\hat A_t = \delta_t + \gamma\lambda\delta_{t+1} + (\gamma\lambda)^2\delta_{t+2} +\cdots
  • λ=0\lambda=0:只看一步,方差低但偏差大;
  • λ\lambda 接近 1:使用更多未来信息,接近 Monte Carlo,偏差小但方差大。

在 RLHF 中,完整回答的奖励常在 EOS 位置出现。GAE 从回答末尾向前递推,把最终表现传播到前面的 token。

实现通常是:

gae = 0
for t = T ... 0:
    delta = reward[t] + gamma * value[t+1] - value[t]
    gae = delta + gamma * lambda * gae
    advantage[t] = gae

value model 拟合的是回报目标,常见写法是让 V(st)V(s_t) 靠近 V(st)+A^tV(s_t)+\hat A_t。它回答「写到这里,后面大概还值多少」。奖励模型回答「这句写完了有多好」。两个网络的监督信号不同,不能互相替代。GRPO 的做法是:不再学习 V(st)V(s_t),而用同一 prompt 下一组采样奖励的均值充当这个基线。那是第 12 节的起点。


6. PPO 的概率比来自重要性采样吗?

是的。重要性采样的一般恒等式是:

Ea∼p[f(a)]=Ea∼q[p(a)q(a)f(a)]\mathbb E_{a\sim p}[f(a)] = \mathbb E_{a\sim q} \left[ \frac{p(a)}{q(a)}f(a) \right]

PPO 的样本来自旧策略 q=πoldq=\pi_{\mathrm{old}},但希望估计新策略 p=πθp=\pi_\theta 下的目标,因此:

Ea∼πθ[A(s,a)]=Ea∼πold[πθ(a∣s)πold(a∣s)A(s,a)]\mathbb E_{a\sim\pi_\theta}[A(s,a)] = \mathbb E_{a\sim\pi_{\mathrm{old}}} \left[ \frac{\pi_\theta(a\mid s)} {\pi_{\mathrm{old}}(a\mid s)} A(s,a) \right]

这就是 PPO 概率比的来源:

ρt(θ)=πθ(at∣st)πold(at∣st)\rho_t(\theta) = \frac{\pi_\theta(a_t\mid s_t)} {\pi_{\mathrm{old}}(a_t\mid s_t)}

它也可以写成:

ρt(θ)=exp⁡(log⁡πθ(at∣st)−log⁡πold(at∣st))\rho_t(\theta) = \exp\left( \log\pi_\theta(a_t\mid s_t) - \log\pi_{\mathrm{old}}(a_t\mid s_t) \right)

指数形式只是代数变形,实际实现中使用 log-prob 更数值稳定:

ratio = torch.exp(new_logp - old_logp)

对语言模型:

st=(x,y<t),at=yts_t=(x,y_{<t}),\qquad a_t=y_t

也就是状态为 prompt 加上已生成 token,动作为下一个 token。

严格的完整轨迹重要性比值是:

πθ(τ)πold(τ)=∏t=1Tπθ(at∣st)πold(at∣st)\frac{\pi_\theta(\tau)}{\pi_{\mathrm{old}}(\tau)} = \prod_{t=1}^{T} \frac{\pi_\theta(a_t\mid s_t)} {\pi_{\mathrm{old}}(a_t\mid s_t)}

但长序列连乘会产生很高的方差,因此 PPO 使用单步 ratio 加 advantage,并用 clipping 限制更新幅度。

DPO 不出现这个比值。它的数据是离线偏好对,损失直接写在 πθ\pi_\theta 与 πref\pi_{\mathrm{ref}} 的对数概率上,没有「用旧策略样本估计新策略期望」这一步。GRPO 仍然在线采样,因此保留 ρi,t\rho_{i,t} 和 clip,见第 12 节。


7. DPO 的最优策略如何求出来?

固定 prompt xx,记:

p(y)=π(y∣x),q(y)=πref(y∣x),r(y)=r(x,y)p(y)=\pi(y\mid x),\qquad q(y)=\pi_{\mathrm{ref}}(y\mid x),\qquad r(y)=r(x,y)

考虑带 KL 正则的目标:

max⁡p[∑yp(y)r(y)−β∑yp(y)log⁡p(y)q(y)]\max_p \left[ \sum_y p(y)r(y) - \beta\sum_y p(y)\log\frac{p(y)}{q(y)} \right]

并满足:

∑yp(y)=1,p(y)≥0\sum_y p(y)=1,\qquad p(y)\ge0

构造拉格朗日函数:

L=∑yp(y)r(y)−β∑yp(y)log⁡p(y)q(y)+α(∑yp(y)−1)\mathcal L = \sum_y p(y)r(y) - \beta\sum_y p(y)\log\frac{p(y)}{q(y)} + \alpha\left(\sum_y p(y)-1\right)

注意这里的 α\alpha 是拉格朗日乘子,与 GAE 中的符号没有关系。

对 p(y)p(y) 求导:

∂L∂p(y)=r(y)−β(log⁡p(y)q(y)+1)+α\frac{\partial\mathcal L}{\partial p(y)} = r(y) - \beta\left(\log\frac{p(y)}{q(y)}+1\right) + \alpha

令导数为 0:

r(y)−β(log⁡p(y)q(y)+1)+α=0r(y) - \beta\left(\log\frac{p(y)}{q(y)}+1\right) + \alpha=0

整理并取指数:

p(y)=q(y)exp⁡(r(y)β)exp⁡(αβ−1)p(y) = q(y)\exp\left(\frac{r(y)}{\beta}\right) \exp\left(\frac{\alpha}{\beta}-1\right)

最后一项与具体的 yy 无关,由归一化条件吸收进 Z(x)Z(x):

Z(x)=∑y′πref(y′∣x)exp⁡(r(x,y′)β)Z(x) = \sum_{y'} \pi_{\mathrm{ref}}(y'\mid x) \exp\left(\frac{r(x,y')}{\beta}\right)

最终:

π∗(y∣x)=1Z(x)πref(y∣x)exp⁡(r(x,y)β)\boxed{ \pi^*(y\mid x) = \frac{1}{Z(x)} \pi_{\mathrm{ref}}(y\mid x) \exp\left(\frac{r(x,y)}{\beta}\right) }

它可以理解为:reference 概率乘以奖励带来的指数加权。

7.1 拉格朗日乘子怎样被 Z(x)Z(x) 吸收

上面从「与 yy 无关」直接跳到了 Z(x)Z(x)。把归一化代回去,这一步可以写完整。由

∑yp(y)=exp⁡(αβ−1)∑yq(y)exp⁡(r(y)β)=1\sum_y p(y) = \exp\left(\frac{\alpha}{\beta}-1\right) \sum_y q(y)\exp\left(\frac{r(y)}{\beta}\right) = 1

得到

exp⁡(αβ−1)=1Z(x)\exp\left(\frac{\alpha}{\beta}-1\right) = \frac{1}{Z(x)}

代回 p(y)p(y) 就是上面的最优策略。α\alpha 不再出现在最终式子里。后面比较同一 prompt 下的两个回答时,连 Z(x)Z(x) 也会消掉,所以训练时既不用估计 α\alpha,也不用估计 Z(x)Z(x)。

再把对数写开,便于和第 8 节对接:

log⁡p(y)q(y)=r(y)β+αβ−1=r(y)β−log⁡Z(x)\log\frac{p(y)}{q(y)} = \frac{r(y)}{\beta}+\frac{\alpha}{\beta}-1 = \frac{r(y)}{\beta}-\log Z(x)

也就是

r(y)=βlog⁡p(y)q(y)+βlog⁡Z(x)r(y) = \beta\log\frac{p(y)}{q(y)}+\beta\log Z(x)

8. DPO 推导中的 y 和 Z(x)

这里的 yy 是完整回答序列,不是单个 token。对固定 prompt xx,所有可能完整回答组成集合 Y\mathcal Y:

∑y∈Yπ(y∣x)=1\sum_{y\in\mathcal Y}\pi(y\mid x)=1

这表示所有可能回答的概率加起来等于 1,而不是某一个回答的概率等于 1。

单个生成位置的词表归一化是另一件事:

∑v∈Vπ(v∣x,y<t)=1\sum_{v\in\mathcal V} \pi(v\mid x,y_{<t})=1

完整回答概率由 token 概率相乘得到:

π(y∣x)=∏t=1Tπ(yt∣x,y<t)\pi(y\mid x) = \prod_{t=1}^{T} \pi(y_t\mid x,y_{<t})

因此:

log⁡π(y∣x)=∑t=1Tlog⁡π(yt∣x,y<t)\log\pi(y\mid x) = \sum_{t=1}^{T} \log\pi(y_t\mid x,y_{<t})

DPO 实现中计算的就是完整回答的 log-prob,只不过由回答中各个 token 的 log-prob 累加而来。

因果语言模型的参考实现先把 logits 与 labels 错开一位,再取标签 token 的 log-softmax。prompt 位置不参与损失,只累加回答 token:

labels = labels[:, 1:].clone()
logits = logits[:, :-1, :]
loss_mask = (labels != -100)          # prompt 位置标成 -100,不计入
per_token_logps = torch.gather(
    logits.log_softmax(-1), dim=2, index=labels.unsqueeze(2)
).squeeze(2)
# 返回求和,对应 log π(y|x),而不是按 token 平均
logp = (per_token_logps * loss_mask).sum(-1)

这个和就是 ∑tlog⁡π(yt∣x,y<t)\sum_t\log\pi(y_t\mid x,y_{<t}),与 log⁡π(y∣x)\log\pi(y\mid x) 一致。若改成按 token 平均,损失比较的就不再是完整回答的概率,Bradley–Terry 那一步的代入不再成立。和式的尺度随回答长度变化,长度偏差要在数据和评估里单独看。

为什么 Z(x)Z(x) 只依赖 xx?因为:

Z(x)=∑y′πref(y′∣x)exp⁡(r(x,y′)β)Z(x) = \sum_{y'} \pi_{\mathrm{ref}}(y'\mid x) \exp\left(\frac{r(x,y')}{\beta}\right)

固定 xx 后,这是对所有候选回答求和得到的一个数;y′y' 只是求和变量,不是当前正在评价的某个回答。因此,无论计算 y1y_1 还是 y2y_2 的概率,分母都是同一个 Z(x)Z(x)。

从最优策略式得到:

r(x,y)=β[log⁡π∗(y∣x)−log⁡πref(y∣x)]+βlog⁡Z(x)r(x,y) = \beta \left[ \log\pi^*(y\mid x) - \log\pi_{\mathrm{ref}}(y\mid x) \right] + \beta\log Z(x)

对同一个 prompt 下的 winner 和 loser 相减:

r(x,yw)−r(x,yl)=β[log⁡π∗(yw∣x)πref(yw∣x)−log⁡π∗(yl∣x)πref(yl∣x)]\begin{aligned} r(x,y_w)-r(x,y_l) = \beta\Bigg[ &\log\frac{\pi^*(y_w\mid x)} {\pi_{\mathrm{ref}}(y_w\mid x)} \\ -&\log\frac{\pi^*(y_l\mid x)} {\pi_{\mathrm{ref}}(y_l\mid x)} \Bigg] \end{aligned}

因为两者的 βlog⁡Z(x)\beta\log Z(x) 相同,所以抵消了。如果 winner 和 loser 来自不同 prompt,Z(x1)Z(x_1) 与 Z(x2)Z(x_2) 不同,就不能直接抵消。


9. DPO Loss 的最终形式

奖励模型的偏好概率为:

P(yw≻yl∣x)=σ(r(x,yw)−r(x,yl))P(y_w\succ y_l\mid x) = \sigma\left(r(x,y_w)-r(x,y_l)\right)

把上面的隐式 reward 代入,并用待训练策略 πθ\pi_\theta 替代未知的最优策略 π∗\pi^*:

Pθ(yw≻yl∣x)=σ(β[log⁡πθ(yw∣x)πref(yw∣x)−log⁡πθ(yl∣x)πref(yl∣x)])P_\theta(y_w\succ y_l\mid x) = \sigma\left( \beta \left[ \log\frac{\pi_\theta(y_w\mid x)} {\pi_{\mathrm{ref}}(y_w\mid x)} - \log\frac{\pi_\theta(y_l\mid x)} {\pi_{\mathrm{ref}}(y_l\mid x)} \right] \right)

最大化偏好数据的对数似然,得到标准 DPO loss:

LDPO=−log⁡σ(β[log⁡πθ(yw∣x)πref(yw∣x)−log⁡πθ(yl∣x)πref(yl∣x)])\boxed{ \mathcal L_{\mathrm{DPO}} = -\log\sigma\left( \beta \left[ \log\frac{\pi_\theta(y_w\mid x)} {\pi_{\mathrm{ref}}(y_w\mid x)} - \log\frac{\pi_\theta(y_l\mid x)} {\pi_{\mathrm{ref}}(y_l\mid x)} \right] \right) }

定义隐式 reward:

r~θ(x,y)=β[log⁡πθ(y∣x)−log⁡πref(y∣x)]\tilde r_\theta(x,y) = \beta \left[ \log\pi_\theta(y\mid x) - \log\pi_{\mathrm{ref}}(y\mid x) \right]

DPO 希望:

r~θ(x,yw)>r~θ(x,yl)\tilde r_\theta(x,y_w) > \tilde r_\theta(x,y_l)

也就是让模型相对于 reference 更偏向 winner,并压低 loser。

把括号里的差记成

hθ=log⁡πθ(yw∣x)πref(yw∣x)−log⁡πθ(yl∣x)πref(yl∣x)h_\theta = \log\frac{\pi_\theta(y_w\mid x)}{\pi_{\mathrm{ref}}(y_w\mid x)} - \log\frac{\pi_\theta(y_l\mid x)}{\pi_{\mathrm{ref}}(y_l\mid x)}

则 LDPO=−log⁡σ(βhθ)\mathcal L_{\mathrm{DPO}}=-\log\sigma(\beta h_\theta),并且

r~θ(x,yw)−r~θ(x,yl)=βhθ\tilde r_\theta(x,y_w)-\tilde r_\theta(x,y_l)=\beta h_\theta

β\beta 越低,策略越不在意 reference,这与 KL 正则目标一致。DPO 论文和参考实现里,常用起点是 0.10.1 到 0.50.5。不同代码对 β\beta 的具体定义可能存在符号约定差异。阅读实现时,应以实际 loss 公式和 KL 项定义为准。

9.1 DPO 的梯度为什么把 hθh_\theta 往 +∞+\infty 推

只看一条样本,令 u=βhθu=\beta h_\theta,

L(u)=−log⁡σ(u)\mathcal L(u)=-\log\sigma(u)
∂L∂hθ=∂L∂uβ=−β(1−σ(βhθ))\frac{\partial\mathcal L}{\partial h_\theta} = \frac{\partial\mathcal L}{\partial u}\beta = -\beta\big(1-\sigma(\beta h_\theta)\big)

只要 βhθ\beta h_\theta 有限,1−σ(βhθ)>01-\sigma(\beta h_\theta)>0,梯度为负,梯度下降就继续增大 hθh_\theta。hθ→+∞h_\theta\to+\infty 时梯度才趋于 0。因此在 Bradley–Terry 把偏好当成确定事件时,DPO 没有一个有限的目标间隔,只是越自信梯度越小。第 10 节的保守 DPO 和第 11 节的 IPO,都是在这个 hθh_\theta 上给出一个有限的最优点。

9.2 同一个 hθh_\theta,对应三条损失

DPO 的参考实现先算出 hθh_\theta,再按损失形式分支。下面的 logits 就是 hθh_\theta:

pi_logratios = policy_chosen_logps - policy_rejected_logps
ref_logratios = reference_chosen_logps - reference_rejected_logps
logits = pi_logratios - ref_logratios  # 这就是 h_θ

if ipo:
    losses = (logits - 1 / (2 * beta)) ** 2
else:
    # epsilon = 0 时就是 DPO;epsilon > 0 时是保守 DPO
    losses = (
        -F.logsigmoid(beta * logits) * (1 - epsilon)
        - F.logsigmoid(-beta * logits) * epsilon
    )

还有一种可选写法:把 reference 的对数概率差设为 0,相当于假定 πref(yw∣x)=πref(yl∣x)\pi_{\mathrm{ref}}(y_w\mid x)=\pi_{\mathrm{ref}}(y_l\mid x),这一对回答在参考分布下概率相同。此时

hθ=log⁡πθ(yw∣x)−log⁡πθ(yl∣x)h_\theta=\log\pi_\theta(y_w\mid x)-\log\pi_\theta(y_l\mid x)

KL 锚点只剩「两条回答谁的概率更大」,不再比较它们各自相对 SFT 移动了多少。参考实现把这种写法称为均匀参考,一般只在消融时使用。

训练日志里记录的 reward 就是隐式奖励,它不参与反向传播:

rchosen=r~θ(x,yw),rrejected=r~θ(x,yl)r_{\mathrm{chosen}}=\tilde r_\theta(x,y_w),\qquad r_{\mathrm{rejected}}=\tilde r_\theta(x,y_l)

准确率是 r~θ(x,yw)>r~θ(x,yl)\tilde r_\theta(x,y_w)>\tilde r_\theta(x,y_l),margin 是两者之差 βhθ\beta h_\theta。准确率上升且 margin 变大,表示偏好被拉开。若两边的隐式奖励一起上升、准确率不动,变化来自整段 log-prob 的共同漂移,偏好差没有变。

和公式直接对应的还有两点。chosen 与 rejected 可以垫到同一长度后拼成一次前向,同时得到两条 log-prob。reference 就是冻住的 SFT 模型,前向不建梯度,参数不进优化器。


10. 保守 DPO:给 Bradley–Terry 加上标反概率

偏好标注会错。保守 DPO 假定一条配对以概率 ε\varepsilon 被标反,以概率 1−ε1-\varepsilon 方向正确。ε\varepsilon 取在 (0,0.5)(0,0.5),ε=0\varepsilon=0 就是第 9 节的 DPO。损失是两个负对数似然的加权,而不是在 sigmoid 里面先把概率混合再取一次 log:

LcDPO=−(1−ε)log⁡σ(βhθ)−εlog⁡σ(−βhθ)\boxed{ \mathcal L_{\mathrm{cDPO}} = -(1-\varepsilon)\log\sigma(\beta h_\theta) - \varepsilon\log\sigma(-\beta h_\theta) }

ε=0\varepsilon=0 时第二项消失,回到 LDPO\mathcal L_{\mathrm{DPO}}。

10.1 最优点是有限间隔

对 hθh_\theta 求导。利用

∂∂hlog⁡σ(βh)=β(1−σ(βh))\frac{\partial}{\partial h}\log\sigma(\beta h)=\beta\big(1-\sigma(\beta h)\big)
∂∂hlog⁡σ(−βh)=−β σ(βh)\frac{\partial}{\partial h}\log\sigma(-\beta h)=-\beta\,\sigma(\beta h)

第二式用到 1−σ(−βh)=σ(βh)1-\sigma(-\beta h)=\sigma(\beta h)。于是

∂LcDPO∂hθ=−β(1−ε)(1−σ(βhθ))+βε σ(βhθ)\frac{\partial\mathcal L_{\mathrm{cDPO}}}{\partial h_\theta} = -\beta(1-\varepsilon)\big(1-\sigma(\beta h_\theta)\big) + \beta\varepsilon\,\sigma(\beta h_\theta)

令梯度为 0:

(1−ε)(1−σ(βhθ))=ε σ(βhθ)(1-\varepsilon)\big(1-\sigma(\beta h_\theta)\big) = \varepsilon\,\sigma(\beta h_\theta)
1−ε=σ(βhθ)1-\varepsilon = \sigma(\beta h_\theta)
hθ∗=1βlog⁡1−εε\boxed{ h_\theta^{*} = \frac{1}{\beta}\log\frac{1-\varepsilon}{\varepsilon} }

ε=0.1\varepsilon=0.1 时,(1−ε)/ε=9(1-\varepsilon)/\varepsilon=9,log⁡9≈2.20\log 9\approx 2.20,目标是 βhθ≈2.20\beta h_\theta\approx 2.20,而不是把 hθh_\theta 推到无穷。ε→0\varepsilon\to 0 时 log⁡((1−ε)/ε)→+∞\log((1-\varepsilon)/\varepsilon)\to+\infty,退化回 DPO 的无限间隔。ε=0.5\varepsilon=0.5 时目标间隔为 0,最优是 πθ\pi_\theta 在这一对上相对 reference 不做区分。

因此 ε\varepsilon 有两层含义:它是标注被标反的比例,也决定了隐式奖励差停在多大。实践里常从 0.10.1 附近试起,再按数据集的噪声调整。ε\varepsilon 越大,偏好准确率的上限越低,策略也越不容易把某一条回答的概率推到极端。


11. IPO:把同一个 hθh_\theta 回归到常数

IPO 换掉 Bradley–Terry 的对数似然,把 hθh_\theta 回归到一个常数。下面就是论文里的平方形式,参考实现直接对 hθh_\theta 做回归:

LIPO=(hθ−12β)2\boxed{ \mathcal L_{\mathrm{IPO}} = \left(h_\theta-\frac{1}{2\beta}\right)^2 }
losses = (logits - 1 / (2 * beta)) ** 2

平方在 hθ=1/(2β)h_\theta=1/(2\beta) 处取最小值。梯度

∂LIPO∂hθ=2(hθ−12β)\frac{\partial\mathcal L_{\mathrm{IPO}}}{\partial h_\theta} = 2\left(h_\theta-\frac{1}{2\beta}\right)

hθh_\theta 小于目标时梯度为负,梯度下降把它拉大;hθh_\theta 超过目标时梯度为正,梯度下降把它拉回。DPO 的梯度在 hθh_\theta 增大时只是变小,不会把过大的间隔推回去。IPO 会。

和保守 DPO 并排放:

损失关于 hθh_\theta 的最优点β\beta 在式子里的位置
DPOhθ→+∞h_\theta\to+\infty(梯度趋于 0)乘在 hθh_\theta 上,进入 sigmoid
保守 DPO1βlog⁡1−εε\dfrac{1}{\beta}\log\dfrac{1-\varepsilon}{\varepsilon}同样乘在 hθh_\theta 上,最优点还依赖 ε\varepsilon
IPO12β\dfrac{1}{2\beta}出现在回归目标里,不乘进 sigmoid

三份损失共用第 9.2 节的 hθh_\theta。IPO 的 β\beta 与 DPO 的 β\beta 都是温度,数值不能照搬:DPO 里 0.10.1 到 0.50.5 是 logit 的缩放,IPO 里 1/(2β)1/(2\beta) 是要拟合的间隔。两边都要求 β>0\beta>0。

IPO 论文把这类平方损失放在一个更一般的偏好优化框架里,用恒等映射得到上面的目标间隔,从而在偏好被当成近乎确定时,避免 Bradley–Terry 似然把 π(yl∣x)\pi(y_l\mid x) 压向 0。参考实现使用的就是这个恒等映射下的平方形式。


12. GRPO:用组内相对优势替换 GAE

DPO、保守 DPO 和 IPO 使用事先收集的 (x,yw,yl)(x,y_w,y_l),没有在线采样,也没有 ρt\rho_t 和 A^t\hat A_t。数学、代码和带标准答案的推理题里,奖励常常要等回答写完才能判定。这类任务回到第 4 节的在线目标,但第 5 节的 V(st)V(s_t) 本身就要占将近一份策略的显存,并且要在方差很大的回报上单独拟合。

GRPO(Group Relative Policy Optimization)保留 PPO 的概率比和 clip,把优势从 GAE 换成同一道题上一组采样的相对奖励。DeepSeekMath 提出这组公式,DeepSeek-R1 在可验证奖励上沿用它。

12.1 从 PPO 的优势定义替换基线

第 5 节写成 A=Q−VA=Q-V。结果监督下,一条回答的回报就是结尾的标量奖励 rir_i,QQ 用这条采样的 rir_i 估计。若能对同一个 prompt 采样 GG 条 {o1,…,oG}\{o_1,\ldots,o_G\},得到 {r1,…,rG}\{r_1,\ldots,r_G\},则 VV 可以用组内均值估计,再除以组内标准差,把不同题目的奖励尺度对齐:

A^i=ri−mean(r1,…,rG)std(r1,…,rG)\boxed{ \hat A_i = \frac{r_i-\mathrm{mean}(r_1,\ldots,r_G)} {\mathrm{std}(r_1,\ldots,r_G)} }

结果监督下,回答 ii 里每个 token 共用这一个 A^i\hat A_i。一组奖励若是 1,0,1,01,0,1,0,均值 0.50.5,标准差 0.50.5,优势就是 +1,−1,+1,−1+1,-1,+1,-1。组内奖励完全相同(全对或全错)时分子为 0,这次更新的优势为 0。

把它代进第 4 节的 clipped surrogate。第 ii 条回答的第 tt 个 token 仍使用重要性采样比值

ρi,t(θ)=πθ(oi,t∣q,oi,<t)πθold(oi,t∣q,oi,<t)\rho_{i,t}(\theta) = \frac{\pi_\theta(o_{i,t}\mid q,o_{i,<t})} {\pi_{\theta_{\mathrm{old}}}(o_{i,t}\mid q,o_{i,<t})}

DeepSeekMath 的目标是在组内、再在 token 上平均,并把 KL 留在每个 token 的损失里:

JGRPO(θ)=E[1G∑i=1G1∣oi∣∑t=1∣oi∣(min⁡(ρi,tA^i, clip⁡(ρi,t,1−ϵ,1+ϵ)A^i)−β DKL(πθ(⋅∣q,oi,<t) ∥ πref(⋅∣q,oi,<t)))]\begin{aligned} \mathcal J_{\mathrm{GRPO}}(\theta) = \mathbb E\Bigg[ \frac{1}{G}\sum_{i=1}^{G} \frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \Big( &\min\big( \rho_{i,t}\hat A_i,\, \operatorname{clip}(\rho_{i,t},1-\epsilon,1+\epsilon)\hat A_i \big) \\ &-\beta\, D_{\mathrm{KL}}(\pi_\theta(\cdot\mid q,o_{i,<t})\,\|\,\pi_{\mathrm{ref}}(\cdot\mid q,o_{i,<t})) \Big) \Bigg] \end{aligned}

和 PPO-RLHF 并列时,变的是基线与 KL 的位置:

  • PPO 的 A^t\hat A_t 来自 δt+γλA^t+1\delta_t+\gamma\lambda\hat A_{t+1},KL 先减进 rttotalr_t^{\mathrm{total}},再通过 GAE 传播;
  • GRPO 的 A^i\hat A_i 来自组内标准化奖励,clip 与 ρi,t\rho_{i,t} 仍是第 4、6 节的那两个式子,KL 单独加在 token 损失上。

1/∣oi∣1/|o_i| 把一条回答的贡献变成 token 平均。A^i\hat A_i 沿 token 为常数时,长回答和短回答各自先在内部平均,再按回答等权进入组平均。若去掉 1/∣oi∣1/|o_i|,改为把所有 token 加总,长回答会占更多梯度。后面的工作讨论过「除以长度」和「除以标准差」会改变长短回答、不同难度题目的梯度权重。奖励已经是 0/10/1、题目之间尺度一致时,这两种归一化都应和「只减组内均值」做对照,而不是默认无害。

12.2 token 上的 KL 估计

GRPO 论文在采样 token 上使用

D^KL=πref(ot∣⋅)πθ(ot∣⋅)−log⁡πref(ot∣⋅)πθ(ot∣⋅)−1\widehat{D}_{\mathrm{KL}} = \frac{\pi_{\mathrm{ref}}(o_t\mid\cdot)}{\pi_\theta(o_t\mid\cdot)} - \log\frac{\pi_{\mathrm{ref}}(o_t\mid\cdot)}{\pi_\theta(o_t\mid\cdot)} -1

它估计的是 KL(πθ ∥ πref)\mathrm{KL}(\pi_\theta\,\|\,\pi_{\mathrm{ref}})。记 u=πref/πθu=\pi_{\mathrm{ref}}/\pi_\theta,在 πθ\pi_\theta 下取期望:

Eπθ[u]=∑πθ⋅πrefπθ=∑πref=1\mathbb E_{\pi_\theta}[u] = \sum \pi_\theta\cdot\frac{\pi_{\mathrm{ref}}}{\pi_\theta} = \sum\pi_{\mathrm{ref}} = 1
Eπθ ⁣[−log⁡u]=Eπθ ⁣[log⁡πθ−log⁡πref]=DKL(πθ ∥ πref)\mathbb E_{\pi_\theta}\!\left[-\log u\right] = \mathbb E_{\pi_\theta}\!\left[\log\pi_\theta-\log\pi_{\mathrm{ref}}\right] = D_{\mathrm{KL}}(\pi_\theta\,\|\,\pi_{\mathrm{ref}})

因此

Eπθ[u−log⁡u−1]=1+DKL(πθ ∥ πref)−1=DKL(πθ ∥ πref)\mathbb E_{\pi_\theta}[u-\log u-1] = 1+D_{\mathrm{KL}}(\pi_\theta\,\|\,\pi_{\mathrm{ref}})-1 = D_{\mathrm{KL}}(\pi_\theta\,\|\,\pi_{\mathrm{ref}})

PPO-RLHF 更常见的是第 4 节那个 log⁡πold−log⁡πref\log\pi_{\mathrm{old}}-\log\pi_{\mathrm{ref}},直接从奖励里减去。两个式子都在惩罚离开 πref\pi_{\mathrm{ref}},估计量和放进损失的位置不同。不同代码库对 β\beta 的具体定义可能存在符号约定差异。阅读实现时,应以实际 loss 公式和 KL 项定义为准。

12.3 过程监督:把步骤奖励累加到 token

第 3 节说过,过程奖励模型评价的是中间步骤,不是整段一个分数。GRPO 的过程监督把回答 ii 的步骤奖励记为 riindex(j)r_i^{\mathrm{index}(j)},先在组内全部步骤上做与结果监督相同的减均值、除标准差,得到 r~iindex(j)\tilde r_i^{\mathrm{index}(j)}。位置 tt 的优势是它之后各步标准化奖励之和:

A^i,t=∑index(j)≥tr~iindex(j)\hat A_{i,t} = \sum_{\mathrm{index}(j)\ge t}\tilde r_i^{\mathrm{index}(j)}

结果监督是这个式子的特例:整段只有一个奖励,于是每个 tt 都等于同一个 A^i\hat A_i。过程监督把信用分配到步骤,仍然不训练 V(st)V(s_t)。

GRPO 的链是:

同一 prompt 采样 G 条→规则或 RM 打分→组内标准化得到 A^i→ρi,t 与 clip→减去 token 上的 KL 估计\text{同一 prompt 采样 } G \text{ 条} \rightarrow \text{规则或 RM 打分} \rightarrow \text{组内标准化得到 }\hat A_i \rightarrow \rho_{i,t}\text{ 与 clip} \rightarrow \text{减去 token 上的 KL 估计}

它仍用旧策略采样,是 near-on-policy。组大小 GG 变小,均值和标准差更噪;GG 变大,每个 prompt 的采样成本线性增加。推理训练里常见的是一道题采样几条到几十条,由显存决定。


13. PPO、DPO 与 GRPO 的关系

PPO-RLHFDPO
训练显式奖励模型不训练独立奖励模型
在线采样回答直接使用离线偏好对
RM 对回答评分人类偏好直接提供 winner/loser
KL reward 加入 token rewardreference log-prob 进入隐式 reward
需要 critic 和 GAE不需要 critic 和 GAE
使用 PPO ratio 和 clipping使用 sigmoid preference loss
典型 on-policy 优化类似监督学习的 minibatch 优化

PPO 的链条是:

采样→RM 打分→KL reward→GAE→PPO actor loss\text{采样} \rightarrow \text{RM 打分} \rightarrow \text{KL reward} \rightarrow \text{GAE} \rightarrow \text{PPO actor loss}

DPO 的链条是:

chosen/rejected→policy/reference log-prob→隐式 reward 差→logistic loss\text{chosen/rejected} \rightarrow \text{policy/reference log-prob} \rightarrow \text{隐式 reward 差} \rightarrow \text{logistic loss}

因此,DPO 绕过了显式奖励模型、在线采样、critic、GAE 和 PPO clipping,但它仍然建立在 KL 正则化 RLHF 目标的解析解之上。

把 IPO、保守 DPO 和 GRPO 放进同一张表:

PPO-RLHFDPO保守 DPOIPOGRPO
数据在线采样离线偏好对离线偏好对离线偏好对每个 xx 采样一组
奖励显式 rϕr_\phi隐式 r~θ\tilde r_\theta同 DPO同 DPO 的 hθh_\theta规则或 rϕr_\phi,再组内标准化
优势GAE不使用不使用不使用A^i\hat A_i,组内均值和标准差
实际损失− LPPOclip-\,L_{\mathrm{PPO}}^{\mathrm{clip}}−log⁡σ(βhθ)-\log\sigma(\beta h_\theta)两个方向的加权 NLL(hθ−12β)2\big(h_\theta-\frac{1}{2\beta}\big)^2clip(ρi,tA^i)(\rho_{i,t}\hat A_i) 减去 KL
hθh_\theta 的最优点由奖励和 KL 在采样中平衡推向 +∞+\infty1βlog⁡1−εε\frac{1}{\beta}\log\frac{1-\varepsilon}{\varepsilon}12β\frac{1}{2\beta}不定义 hθh_\theta
训练时的模型策略、value、RM、reference策略、reference策略、reference策略、reference策略、reference、打分器

按数据形态选择:

  • 已经有离线偏好对时,用 DPO。标注噪声明显时,用保守 DPO 的 ε\varepsilon,或改用 IPO 的平方间隔。先看 chosen 是否稳定地高于 rejected,以及两者隐式奖励的差,再看生成是否变短、变空,或复读偏好集里的套话。
  • 奖励必须等生成结束才能计算、又能对同一题采样多条时,用 GRPO。组内全对或全错的题优势为 0,采样条数和过滤方式决定有多少题真正产生梯度。
  • 需要在线采样,并且要用学习到的 V(st)V(s_t) 做逐 token 信用分配时,用 PPO-RLHF。它的链条就是第 4、5 节那条。

三条路共同要看的是策略离开 SFT 的程度。PPO 看写进 rttotalr_t^{\mathrm{total}} 的 KL,DPO 看 r~θ\tilde r_\theta 的绝对值,GRPO 看 token 上的 D^KL\widehat{D}_{\mathrm{KL}}。损失或奖励变好、回答变差时,先看这项,再看偏好差或组内优势有没有真正拉开。


参考

  • Ouyang et al. Training language models to follow instructions with human feedback. 2022. InstructGPT:SFT、奖励模型、PPO。
  • Stiennon et al. Learning to Summarize from Human Feedback. 2020.
  • Schulman et al. Proximal Policy Optimization Algorithms. 2017.
  • Schulman et al. High-Dimensional Continuous Control Using Generalized Advantage Estimation. 2016.
  • Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023. arXiv:2305.18290。第 9 节的 DPO 损失对应其 Eq. 7。
  • Mitchell. A Note on DPO with Noisy Preferences & Relationship to IPO. 2023. cdpo.pdf。第 10 节的保守 DPO 对应其 Eq. 3。
  • Azar et al. A General Theoretical Paradigm to Understand Learning from Human Preferences. 2023. arXiv:2310.12036。第 11 节的 IPO 对应 v2 的 Eq. 17。
  • Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. GRPO。
  • DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. 2025。