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

本文整理 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}) LSFT=−t∑logπθ(yt∣x,y<t)

偏好数据通常是:
(x,yw,yl) (x,y_w,y_l) (x,yw,yl)

其中 xx x 是 prompt, yw y_w yw 是 winner(人类偏好的回答), yl y_l yl 是 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) πmaxEy∼π(⋅∣x)r(x,y)−βDKL(π(⋅∣x)∥πref(⋅∣x))

第一项提高奖励,第二项把策略留在参考模型附近。参考模型通常就是 SFT 之后的 πref \pi_{\mathrm{ref}} π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}} πref,再在偏好对上做 DPO 或 IPO。

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

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


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

奖励模型对一个完整回答输出标量:
rϕ(x,y) r_\phi(x,y) rϕ(x,y)

如果人类偏好 yw y_w yw 胜过 yl y_l yl,常用 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) P(yw≻yl∣x)=σ(rϕ(x,yw)−rϕ(x,yl))

其中 sigmoid 为:
σ(z)= 11+e−z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1

设分数差为:
d=rϕ(x,yw)−rϕ(x,yl) d=r_\phi(x,y_w)-r_\phi(x,y_l) d=rϕ(x,yw)−rϕ(x,yl)

则:

  • dd d 很大时, σ(d)\sigma(d) σ(d) 接近 1,模型很确信 winner 更好;
  • d=0d=0 d=0 时, σ(d)=0.5\sigma(d)=0.5 σ(d)=0.5,模型认为两者相同;
  • d<0d<0 d<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) } LRM=−logσ(rϕ(x,yw)−rϕ(x,yl))

为什么需要 log?

第一,多条样本的联合概率是连乘:
Pall =∏iPi P_{\mathrm{all}}=\prod_i P_i Pall=i∏Pi

取对数以后:
log⁡ Pall =∑ilog⁡Pi \log P_{\mathrm{all}}=\sum_i\log P_i logPall=i∑logPi

于是可以用普通的 batch 求和来优化。第二,负 log 会重点惩罚"非常自信但判断错误"的样本:
−log⁡(0.01)≈4.61,−log⁡(0.9)≈0.105-\log(0.01)\approx4.61,\qquad -\log(0.9)\approx0.105 −log(0.01)≈4.61,−log(0.9)≈0.105

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


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

经典 RLHF 中,奖励模型通常对完整回答打一个总分:
RRM =rϕ(x, y1:T ) R_{\mathrm{RM}}=r_\phi(x,y_{1:T}) RRM=rϕ(x,y1:T)

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

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

需要区分:

  • RRM R_{\mathrm{RM}} RRM:奖励模型对完整回答的评分;
  • V(st) V(s_t) V(st):value model 对当前位置未来回报的预测;
  • rtPPO r_t^{\mathrm{PPO}} rtPPO: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) logπ(y∣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) πmaxEy∼π(⋅∣x)r(x,y)−βDKL(π(⋅∣x)∥πref(⋅∣x))

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

PPO 用旧策略采样数据,并计算 advantage A^t \hat A_t 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)} ρt(θ)=πθold(at∣st)πθ(at∣st)

实际最大化 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 LPPOclip=Etmin(ρt(θ)A\^t,clip(ρt(θ),1−ϵ,1+ϵ)A\^t)

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

A^t >0 \hat A_t>0 A^t>0 时,这个 token 比预期好,概率比被限制在 1+ϵ1+\epsilon 1+ϵ 以内。 A^t <0 \hat A_t<0 A^t<0 时,概率比被限制在 1−ϵ1-\epsilon 1−ϵ 以上。两种情形都是在限制单次更新离开 π θold \pi_{\theta_{\mathrm{old}}} πθold 的幅度。 ϵ\epsilon ϵ 的常见取值是 0.20.2 0.2。GRPO 使用同一个 clip,换掉的是 A^t \hat A_t 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 rttotal=rtRM−βlogπold(at∣st)−logπref(at∣st)

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

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

rtRM r_t^{\mathrm{RM}} rtRM 通常只在 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) A(st,at)=Q(st,at)−V(st)

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

一步 TD 误差为:
δt=rt+γV( st+1 )−V(st) \delta_t = r_t+\gamma V(s_{t+1})-V(s_t) δt=rt+γV(st+1)−V(st)

GAE 的递推式为:
A^t =δt+γλ A^t+1 \boxed{ \hat A_t = \delta_t+\gamma\lambda\hat A_{t+1} } A^t=δt+γλ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 A^t=δt+γλδt+1+(γλ)2δt+2+⋯

  • λ=0\lambda=0 λ=0:只看一步,方差低但偏差大;
  • λ\lambda λ 接近 1:使用更多未来信息,接近 Monte Carlo,偏差小但方差大。

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

实现通常是:

text 复制代码
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) 靠近 V(st)+ A^t V(s_t)+\hat A_t V(st)+A^t。它回答「写到这里,后面大概还值多少」。奖励模型回答「这句写完了有多好」。两个网络的监督信号不同,不能互相替代。GRPO 的做法是:不再学习 V(st) V(s_t) V(st),而用同一 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 Ea∼pf(a)=Ea∼qq(a)p(a)f(a)

PPO 的样本来自旧策略 q= πold q=\pi_{\mathrm{old}} q=πold,但希望估计新策略 p=πθ p=\pi_\theta p=πθ 下的目标,因此:
E a∼πθ A(s,a)= E a∼ π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 Ea∼πθA(s,a)=Ea∼πoldπold(a∣s)πθ(a∣s)A(s,a)

这就是 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(θ)=πold(at∣st)πθ(at∣st)

它也可以写成:
ρ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) ρt(θ)=exp(logπθ(at∣st)−logπold(at∣st))

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

python 复制代码
ratio = torch.exp(new_logp - old_logp)

对语言模型:
st=(x, y<t ),at=yt s_t=(x,y_{<t}),\qquad a_t=y_t st=(x,y<t),at=yt

也就是状态为 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)} πold(τ)πθ(τ)=t=1∏Tπold(at∣st)πθ(at∣st)

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

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


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

固定 prompt xx x,记:
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) p(y)=π(y∣x),q(y)=πref(y∣x),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 pmaxy∑p(y)r(y)−βy∑p(y)logq(y)p(y)

并满足:
∑yp(y)=1,p(y)≥0 \sum_y p(y)=1,\qquad p(y)\ge0 y∑p(y)=1,p(y)≥0

构造拉格朗日函数:
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) L=y∑p(y)r(y)−βy∑p(y)logq(y)p(y)+α(y∑p(y)−1)

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

对 p(y)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 ∂p(y)∂L=r(y)−β(logq(y)p(y)+1)+α

令导数为 0:
r(y)−β (log⁡ p(y)q(y) +1) +α=0r(y) - \beta\left(\log\frac{p(y)}{q(y)}+1\right) + \alpha=0 r(y)−β(logq(y)p(y)+1)+α=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) p(y)=q(y)exp(βr(y))exp(βα−1)

最后一项与具体的 yy y 无关,由归一化条件吸收进 Z(x)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) Z(x)=y′∑πref(y′∣x)exp(βr(x,y′))

最终:
π∗(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) } π∗(y∣x)=Z(x)1πref(y∣x)exp(βr(x,y))

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

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

上面从「与 yy y 无关」直接跳到了 Z(x)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 y∑p(y)=exp(βα−1)y∑q(y)exp(βr(y))=1

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

代回 p(y)p(y) p(y) 就是上面的最优策略。 α\alpha α 不再出现在最终式子里。后面比较同一 prompt 下的两个回答时,连 Z(x)Z(x) Z(x) 也会消掉,所以训练时既不用估计 α\alpha α,也不用估计 Z(x)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) logq(y)p(y)=βr(y)+βα−1=βr(y)−logZ(x)

也就是
r(y)=βlog⁡ p(y)q(y) +βlog⁡Z(x)r(y) = \beta\log\frac{p(y)}{q(y)}+\beta\log Z(x) r(y)=βlogq(y)p(y)+βlogZ(x)


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

这里的 yy y 是完整回答序列 ,不是单个 token。对固定 prompt xx x,所有可能完整回答组成集合 Y\mathcal Y Y:
∑y∈Y π(y∣x)=1 \sum_{y\in\mathcal Y}\pi(y\mid x)=1 y∈Y∑π(y∣x)=1

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

单个生成位置的词表归一化是另一件事:
∑v∈V π(v∣x, y<t )=1 \sum_{v\in\mathcal V} \pi(v\mid x,y_{<t})=1 v∈V∑π(v∣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}) π(y∣x)=t=1∏Tπ(yt∣x,y<t)

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

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

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

python 复制代码
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}) ∑tlogπ(yt∣x,y<t),与 log⁡π(y∣x)\log\pi(y\mid x) logπ(y∣x) 一致。若改成按 token 平均,损失比较的就不再是完整回答的概率,Bradley--Terry 那一步的代入不再成立。和式的尺度随回答长度变化,长度偏差要在数据和评估里单独看。

为什么 Z(x)Z(x) Z(x) 只依赖 xx 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) Z(x)=y′∑πref(y′∣x)exp(βr(x,y′))

固定 xx x 后,这是对所有候选回答求和得到的一个数; y′y' y′ 只是求和变量,不是当前正在评价的某个回答。因此,无论计算 y1 y_1 y1 还是 y2 y_2 y2 的概率,分母都是同一个 Z(x)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) r(x,y)=βlogπ∗(y∣x)−logπref(y∣x)+βlogZ(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} r(x,yw)−r(x,yl)=β−logπref(yw∣x)π∗(yw∣x)logπref(yl∣x)π∗(yl∣x)

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


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) P(yw≻yl∣x)=σ(r(x,yw)−r(x,yl))

把上面的隐式 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) Pθ(yw≻yl∣x)=σ(βlogπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x))

最大化偏好数据的对数似然,得到标准 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) } LDPO=−logσ(βlogπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x))

定义隐式 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 r~θ(x,y)=βlogπθ(y∣x)−logπref(y∣x)

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

也就是让模型相对于 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)} hθ=logπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x)

则 LDPO =−log⁡σ(βhθ) \mathcal L_{\mathrm{DPO}}=-\log\sigma(\beta h_\theta) LDPO=−logσ(βhθ),并且
r~θ (x,yw)− r~θ (x,yl)=βhθ \tilde r_\theta(x,y_w)-\tilde r_\theta(x,y_l)=\beta h_\theta r~θ(x,yw)−r~θ(x,yl)=βhθ

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

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

只看一条样本,令 u=βhθ u=\beta h_\theta u=βhθ,
L(u)=−log⁡σ(u)\mathcal L(u)=-\log\sigma(u) L(u)=−logσ(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θ∂L=∂u∂Lβ=−β(1−σ(βhθ))

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

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

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

python 复制代码
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) πref(yw∣x)=πref(yl∣x),这一对回答在参考分布下概率相同。此时
hθ=log⁡πθ(yw∣x)−log⁡πθ(yl∣x) h_\theta=\log\pi_\theta(y_w\mid x)-\log\pi_\theta(y_l\mid x) hθ=logπθ(yw∣x)−logπθ(yl∣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) rchosen=r~θ(x,yw),rrejected=r~θ(x,yl)

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

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


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

偏好标注会错。保守 DPO 假定一条配对以概率 ε\varepsilon ε 被标反,以概率 1−ε1-\varepsilon 1−ε 方向正确。 ε\varepsilon ε 取在 (0,0.5)(0,0.5) (0,0.5), ε=0\varepsilon=0 ε=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) } LcDPO=−(1−ε)logσ(βhθ)−εlogσ(−βhθ)

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

10.1 最优点是有限间隔

对 hθ h_\theta hθ 求导。利用
∂∂h log⁡σ(βh)=β(1−σ(βh)) \frac{\partial}{\partial h}\log\sigma(\beta h)=\beta\big(1-\sigma(\beta h)\big) ∂h∂logσ(βh)=β(1−σ(βh))
∂∂h log⁡σ(−βh)=−β σ(βh) \frac{\partial}{\partial h}\log\sigma(-\beta h)=-\beta\,\sigma(\beta h) ∂h∂logσ(−βh)=−βσ(βh)

第二式用到 1−σ(−βh)=σ(βh)1-\sigma(-\beta h)=\sigma(\beta h) 1−σ(−βh)=σ(β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) ∂hθ∂LcDPO=−β(1−ε)(1−σ(βhθ))+βεσ(βhθ)

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

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

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


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

IPO 换掉 Bradley--Terry 的对数似然,把 hθ h_\theta hθ 回归到一个常数。下面就是论文里的平方形式,参考实现直接对 hθ h_\theta hθ 做回归:
LIPO = (hθ− 12β ) 2 \boxed{ \mathcal L_{\mathrm{IPO}} = \left(h_\theta-\frac{1}{2\beta}\right)^2 } LIPO=(hθ−2β1)2

python 复制代码
losses = (logits - 1 / (2 * beta)) ** 2

平方在 hθ=1/(2β) h_\theta=1/(2\beta) hθ=1/(2β) 处取最小值。梯度
∂ LIPO ∂hθ =2 (hθ− 12β ) \frac{\partial\mathcal L_{\mathrm{IPO}}}{\partial h_\theta} = 2\left(h_\theta-\frac{1}{2\beta}\right) ∂hθ∂LIPO=2(hθ−2β1)

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

和保守 DPO 并排放:

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

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

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


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

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

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

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

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

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

把它代进第 4 节的 clipped surrogate。第 ii i 条回答的第 tt t 个 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})} ρi,t(θ)=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)

DeepSeekMath 的目标是在组内、再在 token 上平均,并把 KL 留在每个 token 的损失里:
JGRPO (θ)=E1G ∑i=1G 1 ∣oi∣ ∑t=1 ∣oi∣ ( min⁡( ρi,t A\^i , clip⁡( ρi,t ,1−ϵ,1+ϵ) A\^i ) −β  DKL (πθ(⋅∣q, oi,\ \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,\ \end{aligned} JGRPO(θ)=EG1i=1∑G∣oi∣1t=1∑∣oi∣(min(ρi,tA\^i,clip(ρi,t,1−ϵ,1+ϵ)A\^i)−βDKL(πθ(⋅∣q,oi,\

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

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

1/∣oi∣ 1/|o_i| 1/∣oi∣ 把一条回答的贡献变成 token 平均。 A^i \hat A_i A^i 沿 token 为常数时,长回答和短回答各自先在内部平均,再按回答等权进入组平均。若去掉 1/∣oi∣ 1/|o_i| 1/∣oi∣,改为把所有 token 加总,长回答会占更多梯度。后面的工作讨论过「除以长度」和「除以标准差」会改变长短回答、不同难度题目的梯度权重。奖励已经是 0/10/1 0/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 D KL=πθ(ot∣⋅)πref(ot∣⋅)−logπθ(ot∣⋅)πref(ot∣⋅)−1

它估计的是 KL(πθ ∥  πref ) \mathrm{KL}(\pi_\theta\,\|\,\pi_{\mathrm{ref}}) KL(πθ∥πref)。记 u= πref /πθ u=\pi_{\mathrm{ref}}/\pi_\theta u=πref/πθ,在 πθ \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πθu=∑πθ⋅πθπref=∑π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πθ−logu=Eπθlogπθ−logπref=DKL(πθ∥π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}}) Eπθu−logu−1=1+DKL(πθ∥πref)−1=DKL(πθ∥πref)

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

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

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

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

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 估计} 同一 prompt 采样 G 条→规则或 RM 打分→组内标准化得到 A^i→ρi,t 与 clip→减去 token 上的 KL 估计

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


13. PPO、DPO 与 GRPO 的关系

PPO-RLHF DPO
训练显式奖励模型 不训练独立奖励模型
在线采样回答 直接使用离线偏好对
RM 对回答评分 人类偏好直接提供 winner/loser
KL reward 加入 token reward reference 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} 采样→RM 打分→KL reward→GAE→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} chosen/rejected→policy/reference log-prob→隐式 reward 差→logistic loss

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

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

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

按数据形态选择:

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

三条路共同要看的是策略离开 SFT 的程度。PPO 看写进 rttotal r_t^{\mathrm{total}} rttotal 的 KL,DPO 看 r~θ \tilde r_\theta r~θ 的绝对值,GRPO 看 token 上的 D^KL \widehat{D}_{\mathrm{KL}} D 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。
相关推荐
alonglong1 小时前
三个跨平台的 shell 编码陷阱:零宽字符、locale 与 bash 版本差异
人工智能
老牛日常随笔1 小时前
74B 塞进 24GB:NVIDIA 新开源模型,把本地智能体的门槛砍了一刀
人工智能·ai
QinHsiu1 小时前
ChatGPT还在写作文,Jev已开始做选择题:快193倍、便宜445倍,硅谷集体杀入“第二赛道”
人工智能
y = xⁿ1 小时前
分享一下自己总结的RAG评测流程
人工智能·python
ADark1 小时前
FDE 入门 · 11|数据那一摊:项目卡死的地方通常在这儿
人工智能·agent
每日商业生活1 小时前
个人开发者希望将创意开发为产品,推荐选择哪些低门槛的 AI 和云服务?
人工智能
橘饴1 小时前
当我给 AI Agent 装上记忆:第二轮 SRC 实验全记录
人工智能
sorry3551 小时前
从零实现 nanoGPT(六):完善训练流程,实现模型评估与断点续训
人工智能
派小心.1 小时前
网站统计多域名数据隔离配置
大数据·数据库·人工智能·小程序·数据分析