本文整理 RLHF、奖励模型、PPO、GAE 和 DPO 的完整关系,里面会设计很多的公式推导,慎看。
本文为自己利用AI辅助理解RLHF的笔记,记录下来供以后自己查阅。如有错误,欢迎指正!
1. RLHF 的三阶段
经典 RLHF 通常包含:
- SFT(监督微调):用"指令---理想回答"训练模型,使它先学会基本的指令跟随能力。
- 奖励模型(Reward Model):让模型学习人类在两个回答之间的偏好。
- PPO 优化:让策略模型偏向高奖励回答,同时不要过度偏离 SFT 模型。
SFT 的目标可以写成:
LSFT=−t∑logπθ(yt∣x,y<t)
偏好数据通常是:
(x,yw,yl)
其中 x 是 prompt, yw 是 winner(人类偏好的回答), yl 是 loser(不偏好的回答)。
这三阶段最后要逼近的理想目标是:
πmaxEy∼π(⋅∣x)r(x,y)−βDKL(π(⋅∣x)∥πref(⋅∣x))
第一项提高奖励,第二项把策略留在参考模型附近。参考模型通常就是 SFT 之后的 πref。 β 越大,越不愿意偏离 SFT。后文的 PPO、DPO、IPO、GRPO 都围绕这个目标:PPO 用采样和 clip 去近似它,DPO 使用它的解析解,GRPO 仍在在线采样一侧,但把价值基线换成同一道题的一组奖励。
1.1 DPO 这条路线只做 SFT 和偏好学习
DPO 不训练奖励模型,也不跑 PPO。训练仍然分成两步:
- 在「指令---理想回答」上做 SFT,得到一个会按指令生成的策略。
- 用这份 SFT 权重初始化待训练策略,并另存一份冻结拷贝作为 πref,再在偏好对上做 DPO 或 IPO。
SFT 权重因此同时是策略的起点和参考模型。偏好数据应和 SFT 数据来自相近分布,这样 reference 给 yw、 yl 的概率才落在策略真正会生成的区域里,后面的 log(πθ/πref) 才有稳定含义。
一条偏好样本就是同一个 prompt 下的两条回答:人更偏好的一条,和较差的一条。SFT 使用的是其中被当作标准答案的那条,它不一定等于偏好对里的 winner。
2. 奖励模型为什么使用 sigmoid 和 log?
奖励模型对一个完整回答输出标量:
rϕ(x,y)
如果人类偏好 yw 胜过 yl,常用 Bradley--Terry 模型表示:
P(yw≻yl∣x)=σ(rϕ(x,yw)−rϕ(x,yl))
其中 sigmoid 为:
σ(z)=1+e−z1
设分数差为:
d=rϕ(x,yw)−rϕ(x,yl)
则:
- d 很大时, σ(d) 接近 1,模型很确信 winner 更好;
- d=0 时, σ(d)=0.5,模型认为两者相同;
- d<0 时,模型判断与人类偏好相反。
训练时要最大化正确偏好事件的概率。使用深度学习常见的最小化损失形式,就是负对数似然:
LRM=−logσ(rϕ(x,yw)−rϕ(x,yl))
为什么需要 log?
第一,多条样本的联合概率是连乘:
Pall=i∏Pi
取对数以后:
logPall=i∑logPi
于是可以用普通的 batch 求和来优化。第二,负 log 会重点惩罚"非常自信但判断错误"的样本:
−log(0.01)≈4.61,−log(0.9)≈0.105
这个负对数似然后面会原样出现两次:一次是训练显式奖励模型,一次是 DPO 把 d 换成隐式奖励差之后的 logistic loss。保守 DPO 则是在这个负对数上对「标签可能标反」做加权,见第 10 节。
3. 奖励模型评价完整回答还是每个 token?
经典 RLHF 中,奖励模型通常对完整回答打一个总分:
RRM=rϕ(x,y1:T)
原因是人类标注通常是回答级别的:同一个问题下,回答 A 和回答 B 哪个整体更好,而不是评价每个 token。
奖励模型的网络实现可能在每个位置产生一个标量,但经典做法一般取最后一个有效 token 或 EOS 位置的分数,作为整段回答的 reward。
需要区分:
- RRM:奖励模型对完整回答的评分;
- V(st):value model 对当前位置未来回报的预测;
- 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) 上比较 winner 和 loser。
4. PPO 的理论目标和实际 actor loss
带 KL 正则的理想 RLHF 目标是:
πmaxEy∼π(⋅∣x)r(x,y)−βDKL(π(⋅∣x)∥πref(⋅∣x))
这个式子定义了想要的策略,但它不是 PPO 实现中直接反向传播的 actor loss。
PPO 用旧策略采样数据,并计算 advantage A^t。定义新旧策略概率比:
ρt(θ)=πθold(at∣st)πθ(at∣st)
实际最大化 clipped surrogate:
LPPOclip=Etmin(ρt(θ)A\^t,clip(ρt(θ),1−ϵ,1+ϵ)A\^t)
因为代码中的优化器通常做梯度下降,所以 actor loss 常写为该目标的负值。
A^t>0 时,这个 token 比预期好,概率比被限制在 1+ϵ 以内。 A^t<0 时,概率比被限制在 1−ϵ 以上。两种情形都是在限制单次更新离开 πθold 的幅度。 ϵ 的常见取值是 0.2。GRPO 使用同一个 clip,换掉的是 A^t 的算法,不是这段 surrogate。
在许多 RLHF 实现中,KL 项先被加入 reward:
rttotal=rtRM−βlogπold(at∣st)−logπref(at∣st)
然后用 rttotal 计算 GAE,最终进入 PPO actor loss。因此要区分:
- KL 正则化目标:理论上希望解决的 RL 问题;
- PPO clipped actor loss:稳定求解这个问题的一种实际算法目标。
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)
它表示当前动作的实际结果比当前状态下的正常预期好多少。
一步 TD 误差为:
δt=rt+γV(st+1)−V(st)
GAE 的递推式为:
A^t=δt+γλA^t+1
展开为:
A^t=δt+γλδt+1+(γλ)2δt+2+⋯
- λ=0:只看一步,方差低但偏差大;
- λ 接近 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(st)+A^t。它回答「写到这里,后面大概还值多少」。奖励模型回答「这句写完了有多好」。两个网络的监督信号不同,不能互相替代。GRPO 的做法是:不再学习 V(st),而用同一 prompt 下一组采样奖励的均值充当这个基线。那是第 12 节的起点。
6. PPO 的概率比来自重要性采样吗?
是的。重要性采样的一般恒等式是:
Ea∼pf(a)=Ea∼qq(a)p(a)f(a)
PPO 的样本来自旧策略 q=πold,但希望估计新策略 p=πθ 下的目标,因此:
Ea∼πθA(s,a)=Ea∼πoldπold(a∣s)πθ(a∣s)A(s,a)
这就是 PPO 概率比的来源:
ρt(θ)=πold(at∣st)πθ(at∣st)
它也可以写成:
ρ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
也就是状态为 prompt 加上已生成 token,动作为下一个 token。
严格的完整轨迹重要性比值是:
πold(τ)πθ(τ)=t=1∏Tπold(at∣st)πθ(at∣st)
但长序列连乘会产生很高的方差,因此 PPO 使用单步 ratio 加 advantage,并用 clipping 限制更新幅度。
DPO 不出现这个比值。它的数据是离线偏好对,损失直接写在 πθ 与 πref 的对数概率上,没有「用旧策略样本估计新策略期望」这一步。GRPO 仍然在线采样,因此保留 ρi,t 和 clip,见第 12 节。
7. DPO 的最优策略如何求出来?
固定 prompt x,记:
p(y)=π(y∣x),q(y)=πref(y∣x),r(y)=r(x,y)
考虑带 KL 正则的目标:
pmaxy∑p(y)r(y)−βy∑p(y)logq(y)p(y)
并满足:
y∑p(y)=1,p(y)≥0
构造拉格朗日函数:
L=y∑p(y)r(y)−βy∑p(y)logq(y)p(y)+α(y∑p(y)−1)
注意这里的 α 是拉格朗日乘子,与 GAE 中的符号没有关系。
对 p(y) 求导:
∂p(y)∂L=r(y)−β(logq(y)p(y)+1)+α
令导数为 0:
r(y)−β(logq(y)p(y)+1)+α=0
整理并取指数:
p(y)=q(y)exp(βr(y))exp(βα−1)
最后一项与具体的 y 无关,由归一化条件吸收进 Z(x):
Z(x)=y′∑πref(y′∣x)exp(βr(x,y′))
最终:
π∗(y∣x)=Z(x)1πref(y∣x)exp(βr(x,y))
它可以理解为:reference 概率乘以奖励带来的指数加权。
7.1 拉格朗日乘子怎样被 Z(x) 吸收
上面从「与 y 无关」直接跳到了 Z(x)。把归一化代回去,这一步可以写完整。由
y∑p(y)=exp(βα−1)y∑q(y)exp(βr(y))=1
得到
exp(βα−1)=Z(x)1
代回 p(y) 就是上面的最优策略。 α 不再出现在最终式子里。后面比较同一 prompt 下的两个回答时,连 Z(x) 也会消掉,所以训练时既不用估计 α,也不用估计 Z(x)。
再把对数写开,便于和第 8 节对接:
logq(y)p(y)=βr(y)+βα−1=βr(y)−logZ(x)
也就是
r(y)=βlogq(y)p(y)+βlogZ(x)
8. DPO 推导中的 y 和 Z(x)
这里的 y 是完整回答序列 ,不是单个 token。对固定 prompt x,所有可能完整回答组成集合 Y:
y∈Y∑π(y∣x)=1
这表示所有可能回答的概率加起来等于 1,而不是某一个回答的概率等于 1。
单个生成位置的词表归一化是另一件事:
v∈V∑π(v∣x,y<t)=1
完整回答概率由 token 概率相乘得到:
π(y∣x)=t=1∏Tπ(yt∣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),与 logπ(y∣x) 一致。若改成按 token 平均,损失比较的就不再是完整回答的概率,Bradley--Terry 那一步的代入不再成立。和式的尺度随回答长度变化,长度偏差要在数据和评估里单独看。
为什么 Z(x) 只依赖 x?因为:
Z(x)=y′∑πref(y′∣x)exp(βr(x,y′))
固定 x 后,这是对所有候选回答求和得到的一个数; y′ 只是求和变量,不是当前正在评价的某个回答。因此,无论计算 y1 还是 y2 的概率,分母都是同一个 Z(x)。
从最优策略式得到:
r(x,y)=βlogπ∗(y∣x)−logπref(y∣x)+βlogZ(x)
对同一个 prompt 下的 winner 和 loser 相减:
r(x,yw)−r(x,yl)=β−logπref(yw∣x)π∗(yw∣x)logπref(yl∣x)π∗(yl∣x)
因为两者的 βlogZ(x) 相同,所以抵消了。如果 winner 和 loser 来自不同 prompt, Z(x1) 与 Z(x2) 不同,就不能直接抵消。
9. DPO Loss 的最终形式
奖励模型的偏好概率为:
P(yw≻yl∣x)=σ(r(x,yw)−r(x,yl))
把上面的隐式 reward 代入,并用待训练策略 πθ 替代未知的最优策略 π∗:
Pθ(yw≻yl∣x)=σ(βlogπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x))
最大化偏好数据的对数似然,得到标准 DPO loss:
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)
DPO 希望:
r~θ(x,yw)>r~θ(x,yl)
也就是让模型相对于 reference 更偏向 winner,并压低 loser。
把括号里的差记成
hθ=logπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x)
则 LDPO=−logσ(βhθ),并且
r~θ(x,yw)−r~θ(x,yl)=βhθ
β 越低,策略越不在意 reference,这与 KL 正则目标一致。DPO 论文和参考实现里,常用起点是 0.1 到 0.5。不同代码对 β 的具体定义可能存在符号约定差异。阅读实现时,应以实际 loss 公式和 KL 项定义为准。
9.1 DPO 的梯度为什么把 hθ 往 +∞ 推
只看一条样本,令 u=βhθ,
L(u)=−logσ(u)
∂hθ∂L=∂u∂Lβ=−β(1−σ(βhθ))
只要 βhθ 有限, 1−σ(βhθ)>0,梯度为负,梯度下降就继续增大 hθ。 hθ→+∞ 时梯度才趋于 0。因此在 Bradley--Terry 把偏好当成确定事件时,DPO 没有一个有限的目标间隔,只是越自信梯度越小。第 10 节的保守 DPO 和第 11 节的 IPO,都是在这个 hθ 上给出一个有限的最优点。
9.2 同一个 hθ,对应三条损失
DPO 的参考实现先算出 hθ,再按损失形式分支。下面的 logits 就是 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),这一对回答在参考分布下概率相同。此时
hθ=logπθ(yw∣x)−logπθ(yl∣x)
KL 锚点只剩「两条回答谁的概率更大」,不再比较它们各自相对 SFT 移动了多少。参考实现把这种写法称为均匀参考,一般只在消融时使用。
训练日志里记录的 reward 就是隐式奖励,它不参与反向传播:
rchosen=r~θ(x,yw),rrejected=r~θ(x,yl)
准确率是 r~θ(x,yw)>r~θ(x,yl),margin 是两者之差 βhθ。准确率上升且 margin 变大,表示偏好被拉开。若两边的隐式奖励一起上升、准确率不动,变化来自整段 log-prob 的共同漂移,偏好差没有变。
和公式直接对应的还有两点。chosen 与 rejected 可以垫到同一长度后拼成一次前向,同时得到两条 log-prob。reference 就是冻住的 SFT 模型,前向不建梯度,参数不进优化器。
10. 保守 DPO:给 Bradley--Terry 加上标反概率
偏好标注会错。保守 DPO 假定一条配对以概率 ε 被标反,以概率 1−ε 方向正确。 ε 取在 (0,0.5), ε=0 就是第 9 节的 DPO。损失是两个负对数似然的加权,而不是在 sigmoid 里面先把概率混合再取一次 log:
LcDPO=−(1−ε)logσ(βhθ)−εlogσ(−βhθ)
ε=0 时第二项消失,回到 LDPO。
10.1 最优点是有限间隔
对 hθ 求导。利用
∂h∂logσ(βh)=β(1−σ(βh))
∂h∂logσ(−βh)=−βσ(βh)
第二式用到 1−σ(−βh)=σ(βh)。于是
∂hθ∂LcDPO=−β(1−ε)(1−σ(βhθ))+βεσ(βhθ)
令梯度为 0:
(1−ε)(1−σ(βhθ))=εσ(βhθ)
1−ε=σ(βhθ)
hθ∗=β1logε1−ε
ε=0.1 时, (1−ε)/ε=9, log9≈2.20,目标是 βhθ≈2.20,而不是把 hθ 推到无穷。 ε→0 时 log((1−ε)/ε)→+∞,退化回 DPO 的无限间隔。 ε=0.5 时目标间隔为 0,最优是 πθ 在这一对上相对 reference 不做区分。
因此 ε 有两层含义:它是标注被标反的比例,也决定了隐式奖励差停在多大。实践里常从 0.1 附近试起,再按数据集的噪声调整。 ε 越大,偏好准确率的上限越低,策略也越不容易把某一条回答的概率推到极端。
11. IPO:把同一个 hθ 回归到常数
IPO 换掉 Bradley--Terry 的对数似然,把 hθ 回归到一个常数。下面就是论文里的平方形式,参考实现直接对 hθ 做回归:
LIPO=(hθ−2β1)2
python
losses = (logits - 1 / (2 * beta)) ** 2
平方在 hθ=1/(2β) 处取最小值。梯度
∂hθ∂LIPO=2(hθ−2β1)
hθ 小于目标时梯度为负,梯度下降把它拉大; hθ 超过目标时梯度为正,梯度下降把它拉回。DPO 的梯度在 hθ 增大时只是变小,不会把过大的间隔推回去。IPO 会。
和保守 DPO 并排放:
| 损失 | 关于 hθ 的最优点 | β 在式子里的位置 |
|---|---|---|
| DPO | hθ→+∞(梯度趋于 0) | 乘在 hθ 上,进入 sigmoid |
| 保守 DPO | β1logε1−ε | 同样乘在 hθ 上,最优点还依赖 ε |
| IPO | 2β1 | 出现在回归目标里,不乘进 sigmoid |
三份损失共用第 9.2 节的 hθ。IPO 的 β 与 DPO 的 β 都是温度,数值不能照搬:DPO 里 0.1 到 0.5 是 logit 的缩放,IPO 里 1/(2β) 是要拟合的间隔。两边都要求 β>0。
IPO 论文把这类平方损失放在一个更一般的偏好优化框架里,用恒等映射得到上面的目标间隔,从而在偏好被当成近乎确定时,避免 Bradley--Terry 似然把 π(yl∣x) 压向 0。参考实现使用的就是这个恒等映射下的平方形式。
12. GRPO:用组内相对优势替换 GAE
DPO、保守 DPO 和 IPO 使用事先收集的 (x,yw,yl),没有在线采样,也没有 ρt 和 A^t。数学、代码和带标准答案的推理题里,奖励常常要等回答写完才能判定。这类任务回到第 4 节的在线目标,但第 5 节的 V(st) 本身就要占将近一份策略的显存,并且要在方差很大的回报上单独拟合。
GRPO(Group Relative Policy Optimization)保留 PPO 的概率比和 clip,把优势从 GAE 换成同一道题上一组采样的相对奖励。DeepSeekMath 提出这组公式,DeepSeek-R1 在可验证奖励上沿用它。
12.1 从 PPO 的优势定义替换基线
第 5 节写成 A=Q−V。结果监督下,一条回答的回报就是结尾的标量奖励 ri, Q 用这条采样的 ri 估计。若能对同一个 prompt 采样 G 条 {o1,...,oG},得到 {r1,...,rG},则 V 可以用组内均值估计,再除以组内标准差,把不同题目的奖励尺度对齐:
A^i=std(r1,...,rG)ri−mean(r1,...,rG)
结果监督下,回答 i 里每个 token 共用这一个 A^i。一组奖励若是 1,0,1,0,均值 0.5,标准差 0.5,优势就是 +1,−1,+1,−1。组内奖励完全相同(全对或全错)时分子为 0,这次更新的优势为 0。
把它代进第 4 节的 clipped surrogate。第 i 条回答的第 t 个 token 仍使用重要性采样比值
ρi,t(θ)=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)
DeepSeekMath 的目标是在组内、再在 token 上平均,并把 KL 留在每个 token 的损失里:
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 来自 δt+γλA^t+1,KL 先减进 rttotal,再通过 GAE 传播;
- GRPO 的 A^i 来自组内标准化奖励,clip 与 ρi,t 仍是第 4、6 节的那两个式子,KL 单独加在 token 损失上。
1/∣oi∣ 把一条回答的贡献变成 token 平均。 A^i 沿 token 为常数时,长回答和短回答各自先在内部平均,再按回答等权进入组平均。若去掉 1/∣oi∣,改为把所有 token 加总,长回答会占更多梯度。后面的工作讨论过「除以长度」和「除以标准差」会改变长短回答、不同难度题目的梯度权重。奖励已经是 0/1、题目之间尺度一致时,这两种归一化都应和「只减组内均值」做对照,而不是默认无害。
12.2 token 上的 KL 估计
GRPO 论文在采样 token 上使用
D KL=πθ(ot∣⋅)πref(ot∣⋅)−logπθ(ot∣⋅)πref(ot∣⋅)−1
它估计的是 KL(πθ∥πref)。记 u=πref/πθ,在 πθ 下取期望:
Eπθu=∑πθ⋅πθπref=∑πref=1
Eπθ−logu=Eπθlogπθ−logπref=DKL(πθ∥πref)
因此
Eπθu−logu−1=1+DKL(πθ∥πref)−1=DKL(πθ∥πref)
PPO-RLHF 更常见的是第 4 节那个 logπold−logπref,直接从奖励里减去。两个式子都在惩罚离开 πref,估计量和放进损失的位置不同。不同代码库对 β 的具体定义可能存在符号约定差异。阅读实现时,应以实际 loss 公式和 KL 项定义为准。
12.3 过程监督:把步骤奖励累加到 token
第 3 节说过,过程奖励模型评价的是中间步骤,不是整段一个分数。GRPO 的过程监督把回答 i 的步骤奖励记为 riindex(j),先在组内全部步骤上做与结果监督相同的减均值、除标准差,得到 r~iindex(j)。位置 t 的优势是它之后各步标准化奖励之和:
A^i,t=index(j)≥t∑r~iindex(j)
结果监督是这个式子的特例:整段只有一个奖励,于是每个 t 都等于同一个 A^i。过程监督把信用分配到步骤,仍然不训练 V(st)。
GRPO 的链是:
同一 prompt 采样 G 条→规则或 RM 打分→组内标准化得到 A^i→ρi,t 与 clip→减去 token 上的 KL 估计
它仍用旧策略采样,是 near-on-policy。组大小 G 变小,均值和标准差更噪; 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
DPO 的链条是:
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 | |
|---|---|---|---|---|---|
| 数据 | 在线采样 | 离线偏好对 | 离线偏好对 | 离线偏好对 | 每个 x 采样一组 |
| 奖励 | 显式 rϕ | 隐式 r~θ | 同 DPO | 同 DPO 的 hθ | 规则或 rϕ,再组内标准化 |
| 优势 | GAE | 不使用 | 不使用 | 不使用 | A^i,组内均值和标准差 |
| 实际损失 | −LPPOclip | −logσ(βhθ) | 两个方向的加权 NLL | (hθ−2β1)2 | clip (ρi,tA^i) 减去 KL |
| hθ 的最优点 | 由奖励和 KL 在采样中平衡 | 推向 +∞ | β1logε1−ε | 2β1 | 不定义 hθ |
| 训练时的模型 | 策略、value、RM、reference | 策略、reference | 策略、reference | 策略、reference | 策略、reference、打分器 |
按数据形态选择:
- 已经有离线偏好对时,用 DPO。标注噪声明显时,用保守 DPO 的 ε,或改用 IPO 的平方间隔。先看 chosen 是否稳定地高于 rejected,以及两者隐式奖励的差,再看生成是否变短、变空,或复读偏好集里的套话。
- 奖励必须等生成结束才能计算、又能对同一题采样多条时,用 GRPO。组内全对或全错的题优势为 0,采样条数和过滤方式决定有多少题真正产生梯度。
- 需要在线采样,并且要用学习到的 V(st) 做逐 token 信用分配时,用 PPO-RLHF。它的链条就是第 4、5 节那条。
三条路共同要看的是策略离开 SFT 的程度。PPO 看写进 rttotal 的 KL,DPO 看 r~θ 的绝对值,GRPO 看 token 上的 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。