PPO 用 critic 把序列奖励摊到每个 token,GRPO 改用组内相对奖励省掉 critic,DAPO 再拆开裁剪、采样、长度归一化和超长奖励。 CISPO、SAPO、SAO、OPD 各自只改其中一项:裁剪对象、门控形状、采样方式或监督信号。 把它们放在一张表里,差异不在名字,而在优势从哪来、clip 裁什么、KL 放哪、长度怎么归一化。
PPO 的核心不是名字,而是 Eq.7 的 min:未裁剪的 r·Â 和裁剪后的 clip(r)·Â 取较小者。
它需要一个 Ât;PPO 用 critic + GAE 把序列末端的奖励摊到每个 token。代价是第二个同量级模型,以及“每个 token 的价值”本身很难学。
GRPO 去掉 critic:同一问题采样 G 条回答,奖励在组内减均值、除标准差,整条回答的所有 token 共用这个 Â。
DeepSeekMath 的设置是 G=64、β=0.04;它省掉了 value model,但组内全对或全错时 Â=0,样本级归一化也让长短回答的权重不同。
DAPO 在 GRPO 上拧四个开关:解耦上下 clip(0.2 / 0.28)、过滤全对或全错组、把损失从样本级改成 token 级、对超长样本做软惩罚。
它不是新 critic,而是把“哪些 token 该学、每组该不该学、长度怎么算”拆开。
再往后,CISPO 把裁剪从 token 更新移到 IS 权重并停梯度,SAPO 用平滑门控替代硬裁剪,SAO 把 group 采样换成单 rollout + DIS mask + 更强的 value model,OPD 把 reward 换成 teacher 的 token 分布。 它们不是一条单向升级链;共同点只是都在改同一张目标函数的某一项。
先建立共同认知:clipped surrogate 本身只是一个逐 token 的乘法与取小;真正决定训练成本的是 Ât 从哪来。
PPO 的目标写在 Eq.7。记 rt(θ) = πθ(at|st) / πθold(at|st),它是新旧策略对同一个动作的概率比:
ε 的示例取值为 0.2(§3)。当 r 落在区间外时,裁剪项把梯度与 θ 脱钩,min 使目标成为未裁剪目标的悲观下界。
min 的几何含义很直接:对正优势,r 超过上界后目标不再随 r 增长;对负优势,r 低于下界后目标也不再随 r 下降。
它限制的是“单次更新能把一个 token 的概率推多远”,而不是“这个 token 该不该学”。后者由 Ât 决定。
PPO 用 value function V(s) 和 GAE 得到 Ât。PPO 原文 Eq.11 给出截断 GAE:
λ=0.95、γ=0.99 是实验超参。λ 在偏差与方差之间插值:λ=0 只看一步 TD,λ=1 看完整回报。在 LLM RLHF 里,这个 critic 的代价被放大。DeepSeekMath §4.1 的原话是:PPO 里的 value function 通常是和 policy model 同量级的另一个模型,带来 substantial memory and computational burden; 而且在 LLM 场景中,reward model 通常只给最后一个 token 打分,训练一个“每个 token 都准”的 value function 会更困难。前者是显存与吞吐,后者是信号质量。
这四问不是分类学,而是会直接改变梯度的形状。比如 KL 放进 reward 时,Ât 里已经包含了对参考模型的惩罚;KL 作为 loss 项时,Ât 只反映任务奖励。
两种写法在论文里都叫“PPO/GRPO”,但梯度不是同一个东西。后面的对比都按“目标函数实际写了什么”来,不按名字。
PPO 用 critic 买 per-token 信用;GRPO 用组内比较省掉 critic。两条路的代价不同,不是简单的“谁更先进”。
价值网络给出 V(st),GAE 把 TD 残差按 (γλ) 加权,得到逐 token 的 Ât。信用粒度细,理论成熟。
代价:多一个同量级模型;长文本下 value 估计噪声大;LLM 往往只在序列末给奖励,per-token value 更难训。
在 RLHF 工程里,KL 通常还被塞进 reward:rt = rφ − β log(πθ/πref),这样 Ât 里已经含 KL。DeepSeekMath Eq.2 描述的就是这个写法。
同一问题采样 G 条回答,奖励在组内标准化;整条回答的所有 token 共用 Âi,t = (ri − mean(r)) / std(r)。不需要 critic。
代价:组内全对或全错时分子为 0;同一条回答里所有 token 共享一个数;硬 clip 的上界会压住低概率“探索型” token。
GRPO 把 KL 从 reward 移到 loss,用 Eq.4 的逐 token 估计量;DeepSeekMath 的设置是 G=64、β=0.04。
GRPO 的目标函数(DeepSeekMath Eq.3)是 PPO clip 目标加一个 KL 项,归一化方式改成了“先 token、再组内”(先在每条回答内对 token 取平均,再对 G 条回答取平均):
Âi,t 在同一组内对整条回答是常数。KL 估计量用 Eq.4:πref/πθ − log(πref/πθ) − 1,论文注明它保证非负。这些缺口正好对应 DAPO 的四个改动:全对/全错组没有梯度,对应动态采样;样本级归一化让长短回答权重不同,对应 token 级损失;上界压住低概率 token,对应 clip-higher;超长样本被截断后统一罚分,对应 overlong reward shaping。 所以 DAPO 不是“又一个新的 critic”,而是把 GRPO 里混在一起的几件事拆开。
本页表 1:PPO 与 GRPO 在优势、基线、KL、长度归一化四个维度上的对照(整理表,不是原文表号)。
| 维度 | PPO | GRPO | 差别落在哪 |
|---|---|---|---|
| 优势来源 | critic + GAE,逐 token | 组内标准化,整条回答共享 | 显存 / 信用粒度 |
| 基线 | V(st) | mean(r1…rG) | 基线是否条件在状态上 |
| KL 位置 | 通常在 reward 里(RLHF 约定) | loss 里的独立项 | Â 是否已含 KL |
| 长度归一化 | 逐 token / 逐序列,按实现 | (1/G)Σ(1/|oi|)Σt | 长短回答的总权重 |
| 典型失效 | critic 噪声、显存 | 零方差组、长度偏差 | 下一节展开 |
注:PPO 侧按 Eq.7/11 与 DeepSeekMath Eq.2 的 RLHF 写法;GRPO 侧按 DeepSeekMath Eq.3/4。两列的“典型失效”是结构性描述,不是论文实验结论。
先看目标函数的逐项差异,再看每个方法把哪一项换掉;最后用一个可调模拟器把“组内优势 + clip”算一遍。
PPO 和 GRPO 的信任域都作用在概率比 ri,t 上:min(r·Â, clip(r,1−ε,1+ε)·Â)。
差别在 Â 和 KL:PPO 的 Â 来自 critic,KL 常被塞进 reward;GRPO 的 Â 来自组内标准化,KL 是 Eq.3 里的独立项。
两种写法都能写成“带信任域的策略梯度”,但梯度的组成不同。
GRPO 的组内优势有一个容易忽略的细节:std(r) 的分母论文没有在公式里区分 ÷G 与 ÷(G−1)。
本页的模拟统一用总体标准差 ÷G;复现时要和实现对齐,因为 G=4 或 8 时两种分母的数值差别不小。
Clip-Higher(Eq.10)。把单一的 ε 拆成 εlow 和 εhigh,只抬高上界。DAPO §4.1 的设置是 εlow=0.2、εhigh=0.28。论文 §3.1 的理由是:上界会限制低概率“探索型” token 的概率提升,抬高上界可以缓解熵坍塌;εlow 保持 0.2,因为增大 εlow 会把低概率 token 的概率压到 0。
εlow=0.2、εhigh=0.28(§4.1)。Eq.10 与 Eq.12 的分母相同(都是 1/Σi|oi|);Eq.10 的改动是 clip,Eq.12 的改动是相对 GRPO Eq.3 的样本级归约改为 token 级归约。Dynamic Sampling(Eq.11)。对每个 prompt 采样一组回答,只保留“既有正确又有错误”的组,满足 0 < |{oi | is_equivalent(a,oi)}| < G。全对或全错的组不进 batch;采样不够就继续采,直到 batch 填满。这样每个进入训练的组都有非零优势,避免零梯度组稀释 batch 梯度。
Token-Level Loss(Eq.12)。GRPO 先对每条回答的 token 取平均,再对 G 条回答取平均;DAPO 直接对所有回答的所有 token 求和,再除以总 token 数。前者的每条回答总权重相同,后者每个 token 权重相同。DAPO §3.3 报告后者让长回答对梯度的影响更大;§4.2 报告它让训练更稳、长度增长更健康。
Overlong Reward Shaping(Eq.13)。超过 Lmax−Lcache 后开始线性罚分,超过 Lmax 后固定罚 −1:
Lmax=16384、Lcache=4096,因此最大生成长度为 20480 个 token。另有 Overlong Filtering:把被截断样本的 loss mask 掉。点一个样本,再用滑块改它的概率比 r;看组内优势与 clip 后的目标值。
简化模拟:奖励只有 0 / 1,标准差用总体标准差(÷G),r 由滑块给定,不由模型前向计算。
未覆盖:真实 token 级 ratio、KL 项、动态采样、多轮 off-policy 更新;因此它只验证 Eq.3 的组内标准化与 Eq.7 的 min/clip 算术,不代表完整训练。
奖励 [1, 0, 1, 0],G=4。均值:
总体方差 ((1−0.5)²+(0−0.5)²+(1−0.5)²+(0−0.5)²)/4 = 0.25,总体标准差 std = 1/2 = 0.500。
样本 0:Â = (1−0.5)/0.5 = +1.000;样本 1:Â = (0−0.5)/0.5 = −1.000。
正优势:取样本 0,r=1.300,ε_low=0.2、ε_high=0.28。未裁剪 r·Â = 1.300×1 = 1.300;裁剪 clip(1.3, 0.8, 1.28)=1.280;目标 min(1.300, 1.280)=1.280。
负优势:取样本 1,r=0.700,Â=−1.000。未裁剪 0.700×(−1) = −0.700;裁剪 clip(0.7, 0.8, 1.28)=0.800;目标 min(−0.700, 0.800×(−1)=−0.800) = −0.800。
注意负优势这一支:min 选的是更小的 −0.800,也就是裁剪分支。它的梯度为 0,这正是 PPO 在“坏 token 的概率已经被压得足够低”时停止继续压低的方式。
CISPO 的出发点是:PPO/GRPO 的 clip 会让高 rt 的稀有 token 在第一次 on-policy 更新后就不再贡献梯度。MiniMax-M1 §3.1 把这类 token 描述为推理路径的“分叉点”(例如 However、Recheck、Wait、Aha),它们在 base 模型里概率低,更新时 rt 往往很大,于是被裁掉。
r̂ = clip(r, 1−εlowIS, 1+εhighIS)(Eq.5),sg 表示 stop-gradient。论文说下界没有真正启用,εlowIS 设得很大,只调上界。
关键差别是裁剪对象:PPO/GRPO 裁的是“目标里的 token 更新”,CISPO 裁的是“IS 权重”,并且把权重停梯度。于是每个 token 都还能通过 log πθ 贡献梯度,权重只作为一个固定系数;代价是梯度有轻微偏差(论文 §3.1 自己说明)。
CISPO 还给了 Eq.6/7 的统一形式,用 token mask 模拟 PPO 的信任域:Â>0 且 r>1+εhigh 时 mask 为 0,Â<0 且 r<1−εlow 时 mask 为 0。它不使用 KL 项,并借用了 DAPO 的动态采样与长度惩罚。
引言(§1)称 2× 加速。正文对 CISPO vs DAPO/GRPO 的受控对比只给 Figure 2 的曲线,没有给出可直接转录的 AIME 分数(MiniMax-M1 最终模型分数见 Table 2)。
SAPO 的观察是 token 级重要性比方差大,硬裁剪在“稳定”和“保留学习信号”之间只能二选一:GSPO 在序列级裁,少数离群 token 会让整条序列的梯度被抑制;GRPO 在 token 级裁,边界是断开的。 SAPO 用一个温度控制的软门控替换硬裁剪:
fi,t(x) = σ(τi,t(x−1)) · (4/τi,t)(Eq.6),τi,t = τpos 若 Â>0,否则 τneg。因子 4/τ 使 r=1 处的梯度与未裁剪目标相同。
门控在 r=1 处取 1,向两侧平滑衰减;τ 越大衰减越快。论文设置 τpos=1.0、τneg=1.05(§5.1 的受控实验),并解释负优势需要更快的衰减,因为负 token 的更新会抬高大量未采样 token 的 logits,词表大时更容易不稳。
在“token 级 log-ratio 方差小”的假设下,逐 token 门控会聚合成序列级的 sech²(τ/2 · log si),因此它既有序列连贯性,又能只降权离群 token。目标函数 Eq.5 没有 KL 项。
论文在 Qwen3-30B-A3B-Base 的 cold-start 模型上比较 GSPO 与 GRPO-R2,报告 SAPO 训练更稳、最终 Pass@1 更高;但正文只给 Figure 4 的曲线,没有给出可转录的最终数值。Qwen3-VL 的实验同样只给 Figure 6 的曲线。
SAO 处理的是异步 agentic RL:同步 group 采样必须等最慢的一条 rollout,长链路任务里这个等待很贵;异步又会引入 policy lag。SAO 直接把 group 采样换成“每个 prompt 一条 rollout”,于是 GRPO 的组内基线消失,优势估计回到 value model。
πθold。区间外的 token 整段 mask 掉(梯度为 0),而不是只裁目标。
单 rollout 的梯度方差像 REINFORCE,SAO 用三件事补:critic 每个 policy 更新训 K=2 次;critic 的 attention 层冻结,只训 MoE 投影;agentic 轨迹跨 action→observation 边界时,用 skip-observation GAE 把 Bellman target 直接连到下一个 action:
ai,N 是第 i 个 action 的最后一个 token,ai+1,0 是下一个 action 的第一个 token;observation token 由环境生成,不进入 value 链路。
设置:batch 128、group size 1、max length 128k、policy lr 1e-6、critic lr 5e-6;数学/TIR 的 εℓ=0.3、εh=5.0,coding 的 εℓ=0.8、εh=3.0(§4.1)。
OPD(On-Policy Distillation)不采样“奖励”,而是让学生在自己的 rollouts 上接受 teacher 的逐 token 分布监督。这样状态分布与推理时对齐(on-policy),监督信号又比序列级 0/1 reward 密集。
st=(x,y<t),ν 是 teacher。文档把实现分成 GKD OPD(默认,teacher top-k forward KL,直接反传)与 PG OPD(单样本 reverse KL 估计当 reward,rt=sg(log ν(yt|st) − log πθ(yt|st)),走 PPO 更新)。出处说明:OPD 在笔记里没有对应单篇论文,笔记把来源指向 verl 官方文档的 OPD 页;本页的公式与 GKD/PG 区分按该文档写。按论文谱系追溯的原始出处,本页标注为“笔记简称,原始出处待核”,不引用任何二手博客的数字。
本页表 2:算法家族的目标函数逐项对照;“口径”列区分论文原文与工程实现约定。
| 方法 | 目标函数核心 | Â 来源 | 信任域机制 | KL | 长度归一化 | 口径 |
|---|---|---|---|---|---|---|
| PPO | min(r·Â, clip(r,1−ε,1+ε)·Â) |
critic + GAE | 概率比 clip,ε=0.2 | 通常在 reward 里(RLHF 约定) | 按实现,逐 token 或逐序列 | 论文 Eq.7/11;KL 位置是工程约定 |
| GRPO | min(r·Â, clip(r,1−ε,1+ε)·Â) − βDKL |
(Ri−mean)/std,整条共享 |
概率比 clip | loss 独立项,β=0.04 | (1/G)Σ(1/|oi|)Σt |
论文 Eq.3/4 |
| DAPO | min(r·Â, clip(r,1−εlow,1+εhigh)·Â) |
GRPO 组内优势 | 非对称 clip,0.2 / 0.28 | 移除(§2.3) | (1/Σi|oi|)ΣiΣt |
论文 Eq.10–13 |
| CISPO | sg(clip(r,1−εlowIS,1+εhighIS))·Â·log π |
GRPO 组内优势 | 裁 IS 权重并停梯度 | 无(§3.1) | token 级 | 论文 §3.1 Eq.4/5 |
| SAPO | σ(τ(r−1))·(4/τ)·Â |
GRPO 组内优势 | 平滑门控,τpos/τneg | Eq.5 无 KL 项 | (1/G)Σ(1/|yi|)Σt |
论文 §3 Eq.5/6 |
| SAO | f(r)·Â·log π,区间外 f=0 |
critic + skip-observation GAE | 双侧 token mask | 正文未列 KL 项 | token 级 | 论文 §3.1 Eq.1–5 |
| OPD | E[(1/|y|)ΣtD(πθ,ν)] |
teacher 分布,不是 Â | 无 PPO clip | 文档建议多数情况关闭 ref KL | token 平均 1/|y| |
verl 文档;笔记简称,原始出处待核 |
注:逐行按各文公式转录;OPD 一行来自 verl 文档,不是论文 Eq。
目标函数只写了“怎么更新”;这一节把三个最容易被忽略的账本拆开:Â 的统计量、长度的权重、KL 的位置。
GRPO 的 Â 是组内标准化:Âi = (Ri − mean(R)) / std(R)。它把“这一条比同组平均好多少”压成一个标量,然后复制给整条回答的所有 token。
这样做的好处是不需要 critic;代价是同一回答里所有 token 共享一个数,且组内奖励没有差异时 Â 为 0。
DAPO 的动态采样把“Â 为 0”的组直接过滤掉;SAO 则因为 group size 1,根本不用组内基线,改用 critic + GAE。CISPO 和 SAPO 沿用 GRPO 的组内优势,只是改了信任域;OPD 没有 Â,监督信号是 teacher 的分布。
| 方法 | Â 的估计 | 组规模 / 采样 | 零方差组怎么处理 | 出处 |
|---|---|---|---|---|
| PPO | critic + GAE,逐 token | 一条轨迹;可多 epoch | 无组概念 | Eq.7/11 |
| GRPO | (Ri−mean)/std | G=64(DeepSeekMath) | 没有专门处理;全同组梯度为 0 | §4.1/§4.2 |
| DAPO | 同 GRPO | 每个 prompt 16 条回答 | 动态采样过滤全对/全错 | §3.2/§4.1 |
| SAO | critic + skip-observation GAE | group size 1 | 不适用(没有组) | §3.1–3.2 |
| CISPO | GRPO 组内优势 | 正文未给具体 G | 借用 DAPO 动态采样 | §3.1 |
| SAPO | GRPO 组内优势 | 公式含 G,正文未给具体值 | 正文未展开 | §3 Eq.5 |
| OPD | teacher 分布,不是 Â | 无组 | 不适用 | verl 文档 |
本页表 3(整理表):组规模均按各文正文能查到的设置填写;“未给”表示正文没有写出具体数值,不是断言论文没有做实验。
标准差的除数是第二个容易踩的坑。GRPO 论文的公式只写 std(r),没有在正文区分 ÷G 与 ÷(G−1);本页模拟统一用 ÷G。
在 G=4、奖励 [1,0,1,0] 时,÷G 得到 0.500,÷(G−1) 得到 0.577;Â 会从 ±1.000 变成 ±0.866。复现时先对齐分母,再比较结果。
GRPO 的 Eq.3 是样本级归约:先在每条回答内部对 token 取平均,再对 G 条回答取平均。DAPO 的 Eq.12 是 token 级归约:所有回答的所有 token 一起求和,再除以总 token 数。 两条公式都合法,但对长短回答的权重不同。
| 归约 | 公式 | 两条回答(长度 2 / 6)的总权重 | 每个 token 的权重 |
|---|---|---|---|
| 样本级(GRPO) | (1/G)Σi(1/|oi|)Σt | 各 1/2 = 0.500 | 短回答 1/2 × 1/2 = 0.250;长回答 1/2 × 1/6 = 0.083 |
| token 级(DAPO) | (1/Σi|oi|)ΣiΣt | 2/8 = 0.250;6/8 = 0.750 | 每条 token 都是 1/8 = 0.125 |
本页表 4(整理表):G=2、长度 2 与 6 的玩具设定;权重由两条公式直接算出,不是论文实验数字。
简化模拟:只比较两条回答的权重,不计算 advantage、reward 或梯度;假设两条回答长度固定、没有截断。 未覆盖:G>2、变长 batch、padding/EOS mask、overlong reward shaping。
组内统计。奖励 [1,0,1,1,0,0,1,0],G=8。均值 4/8 = 0.500;每个奖励与均值相差 ±0.5,总体方差 8×(0.5)²/8 = 0.25,总体标准差 1/2 = 0.500。样本 0 的 Â = (1−0.5)/0.5 = +1.000。
长度权重。取 L1=2、L2=6,总 token 数 2+6=8。样本级:每条回答总权重 1/2 = 0.500。token 级:回答 1 2/8 = 0.250,回答 2 6/8 = 0.750;长回答拿到短回答的 0.750/0.250 = 3.000 倍权重。
这就是“长度偏差”的算术来源:token 级归约并不是“更公平”,它把总权重按 token 数分配;样本级归约则是每条回答一份。哪个更好取决于任务:长 CoT 里长回答的 token 也需要被惩罚或奖励,token 级更合适;如果长回答只是重复啰嗦,token 级会放大它的影响,需要 overlong shaping 或过滤配合。
DAPO 的 overlong shaping 只处理“超过 Lmax−Lcache”的部分:Lmax=16384、Lcache=4096,因此 16384−4096=12288 以内不罚,12288–16384 线性罚,超过 16384 固定罚 −1。
它解决的是“截断样本被错误罚分”的噪声,不是“所有长回答都该短”的偏好;长度偏置仍然由归约方式和 reward 决定。
本页表 5:KL 位置账本,以及它对 Â 的影响。
| 方法 | KL 位置 | 系数 / 设置 | 对 Â 的影响 | 出处 |
|---|---|---|---|---|
| PPO + RLHF | reward shaping | rt = rφ − β log(πθ/πref) | Â 里已含 KL | DeepSeekMath Eq.2 |
| GRPO | loss 独立项 | β=0.04 | Â 只含任务奖励,KL 不进 Â | Eq.3/4,§4.2 |
| DAPO | 移除 | — | Â 只含任务奖励 | §2.3 |
| CISPO | 无 | — | Â 只含任务奖励 | §3.1 |
| SAPO | Eq.5 无 KL 项 | — | Â 只含任务奖励 | §3 Eq.5 |
| SAO | 正文未列 KL 项 | — | Â 来自 critic | §3.1 |
| OPD | 文档建议多数情况关闭 ref KL | — | 监督来自 teacher 分布 | verl 文档 |
注:KL 的位置按各文公式/正文填写;“无”表示该方法的目标函数没有 KL 项,不是“KL 一定不需要”。
为什么位置重要?因为  是策略梯度的系数。KL 在 reward 里时, 已经包含“离参考模型多远”的惩罚,clip 之后仍然带着它;KL 在 loss 里时, 只反映任务奖励,KL 单独加在目标上。 这两种写法在数学上都可以成立,但梯度的量纲、系数 β 的最优值、以及“clip 裁的是任务优势还是任务+KL 优势”都不同。跨论文比较时,先看 KL 在哪,再看数字。
把公式放回一次训练迭代:采样、打分、算优势、更新。GRPO/DAPO 在“组”上分叉,PPO/SAO 在“critic”上分叉,OPD 在“监督信号”上分叉。
GRPO/DAPO 对每个 prompt 采样 G 条回答;SAO 每个 prompt 一条,完成即送入训练;OPD 采样学生自己的轨迹。实现里通常由推理引擎生成 token,再由训练引擎重算 log-prob,因为两套引擎的数值不完全相同。
DAPO 用最终答案的规则 verifier;PPO/RLHF 用 reward model;SAO 的在线实验用 LLM judge;OPD 不用 reward,teacher 给逐 token 分布。不同的 reward 决定不同的 reward hacking 风险。
组内:(Ri−mean)/std;critic:V(s) + GAE;teacher:D(πθ,ν)。这一步决定“信用分配”的粒度:整条回答、逐 token,还是逐 token 分布。
PPO/GRPO/DAPO 裁概率比;CISPO 裁 IS 权重并停梯度;SAPO 用软门控;SAO 把区间外的 token 直接 mask;OPD 直接对分布散度反传或把它当 reward。一次 rollout 通常做 μ 次更新。
πθold 的 log-prob,或按快照重算。std;实现可能用总体 ÷G 或无偏 ÷(G−1),G 小的时候差别明显。ε、ε_low/ε_high、clip_ratio_low/high 在不同框架里指同一件事,但默认值不一定相同。下面只做并列,不做跨论文排名。模型、数据、解码、评测次数不同的数字,不能相加,也不能说“谁比谁高多少”。
| 方法 | 模型 | 数据 / 设定 | 基准(口径) | 数值 | 原文位置 |
|---|---|---|---|---|---|
| GRPO | DeepSeekMath-RL 7B | GSM8K + MATH 的 CoT 数据 | GSM8K 准确率 | 88.2% | Table 5 |
| GRPO | DeepSeekMath-RL 7B | 同上 | MATH 准确率 | 51.7% | Table 5 |
| DAPO | Qwen2.5-32B | DAPO-Math-17K | AIME 2024 avg@32 | 50 | DAPO Table 1 |
| SAO | Qwen3-30B-A3B-Thinking-2507 | TIR SFT 初始化 | AIME2025 Pass@1 | 97.3 | SAO Table 1 |
| SAO | 同上 | 同上 | BeyondAIME Pass@1 | 74.8 | SAO Table 1 |
| SAO | 同上 | OpenHands,最多 300 轮 | SWE-Bench Verified | 29.8 | SAO Table 2 |
本页表 6:数字逐格转录自原文;GRPO 的两行来自同一张 Table 5,DAPO 来自 Table 1,SAO 来自 Table 1/2。不同行的模型与基准不同,不能跨行比较。
| 配置(按 DAPO Table 1 的累加顺序) | AIME 2024 avg@32 | 相对上一行 |
|---|---|---|
| DeepSeek-R1-Zero-Qwen-32B | 47 | — |
| Naive GRPO | 30 | — |
| + Overlong Filtering | 36 | +6 |
| + Clip-Higher | 38 | +2 |
| + Soft Overlong Punishment | 41 | +3 |
| + Token-level Loss | 42 | +1 |
| + Dynamic Sampling(DAPO) | 50 | +8 |
本页表 7:转录自 DAPO Table 1。它是累加消融,不是逐项独立消融;“+8”是在已有五项之上的边际,不是动态采样单独的因果效应。DAPO 比 R1-Zero-Qwen-32B 高 3 个百分点,同时只用了后者 50% 的训练步数。
这张表最容易被误读的地方是“token-level loss 只涨 1 分”。DAPO §3.3 明确说它对分数的贡献较小,但让训练更稳、长度增长更健康;只看 AIME 分数会漏掉它的作用。 同样,动态采样的 +8 是在特定累加顺序下的结果,而且它增加了采样量;论文 §3.2 说该策略不一定会拖慢训练,§4.2 报告整体训练时间没有明显变差,因为生成阶段本来就被长尾样本主导。
| 变体 | AIME2025 | BeyondAIME | 与 SAO 的差 |
|---|---|---|---|
| SAO | 97.3 | 74.8 | — |
| w/o Faster value | 95.0 | 69.8 | −2.3 / −5.0 |
| w/o Frozen attention | 90.6 | 74.5 | −6.7 / −0.3 |
| Vanilla VAPO(w/o DIS) | 91.3 | 69.0 | — |
| Running mean baseline | 79.8 | 55.3 | — |
本页表 8:转录自 SAO Table 4(另见 SAO Table 3)。差值为 SAO 减该变体:AIME 上 frozen-attention 的缺口为 6.7 个百分点,BeyondAIME 上 faster-value 的缺口为 5.0 个百分点(表中 Running mean 的缺口更大,不能把这两项读成全表最大)。
SAO 的结论不是“单 rollout 一定更好”,而是“单 rollout + DIS + 更强的 value model”这一组一起才成立。SAO Table 1 里 SAO 为 97.3,仅加 DIS 的 SAO 为 94.2,GRPO+DIS 为 93.5;单 rollout 本身没有带来这 3.1 个百分点的差距(97.3 − 94.2),value model 的训练方式才是后半段的分水岭(推断)。 论文还报告标准 GRPO 在约 160 步崩溃,SAO 稳定训练约 1000 步;vanilla VAPO 在约 90 步崩溃。
| 方法 | 论文报告 | 可核位置 |
|---|---|---|
| CISPO | 相同训练步数下优于 GRPO / DAPO;用 50% 步数追平 DAPO;引言(§1)称 2× 加速 | §3.1(50%)、§1(2×),Figure 2 |
| SAPO | 训练更稳、最终 Pass@1 更高;Qwen3-VL 上四个基准都报告提升 | §5.1 Figure 4;§5.2 Figure 6 |
| OPD | 文档给损失、GKD/PG 两种模式和配置,不给基准数字 | verl OPD 文档 |
本页表 9:这三项的可比受控结果在原文/文档中没有可直接转录的最终分数(CISPO 的最终模型分数见 MiniMax-M1 Table 2,但不属于同一受控对比);页面不把二手博客的数字补进来。
把三组结果放在一起看,能说的只有:DAPO 在 Qwen2.5-32B / AIME 2024 上从 30 到 50;SAO 在 Qwen3-30B-A3B / AIME2025 上到 97.3;GRPO 在 DeepSeekMath 7B / GSM8K 上到 88.2%。 不能把不同模型、数据、基准、评测次数下的分数直接相减。跨论文比较只能比机制,不能比分数。
边界按五个维度看:reward hacking、长度偏差、group size、离线/在线、实现差异。每一条都决定“这个方法在你的场景里是否成立”。
DAPO §2.4 明确说 reward model 容易 reward hacking,所以改用可验证任务的最终答案正确性作为 reward。规则 verifier 降低了“模型讨好 reward model”的风险,但没有消除“模型钻规则漏洞”的风险:格式、答案等价判定、截断处理都可能被利用(推断)。 SAO 的在线实验用 LLM judge 打 style reward,这类 judge 本身可以被优化;OPD 用 teacher 分布,teacher 的错误会被学生模仿。三种监督信号的 hacking 面不同,不能互相替代(推断)。
GRPO 的样本级归约给每条回答相同总权重,短回答的每个 token 权重更大;DAPO 的 token 级归约给每个 token 相同权重,长回答的总权重更大。
哪个更合适取决于任务:长 CoT 里长回答的 token 也需要被学习,token 级更自然;但如果长回答只是重复,token 级会放大噪声。
DAPO 的 overlong shaping 只处理超过 Lmax−Lcache 的样本,不改变预算内的长度偏好;它不能替代对 reward 和归约方式的设计。
GRPO 的 G=64 是 DeepSeekMath 的设置;DAPO 每个 prompt 16 条回答;SAO 直接把 G 降到 1。G 越大,组内均值的方差越小,但 rollout 成本线性增加;G 越小,优势噪声越大,SAO 因此需要 critic 和更强的 value model 来补(推断)。 动态采样还会额外增加采样量:它要一直采到 batch 里全是“非全对非全错”的组。论文说整体训练时间没有明显变差,但这是在其同步系统和长尾生成特征下的结论,不是所有系统都成立(推断)。
GRPO/DAPO 的组内比较假设同一组的 rollout 来自相近的策略;异步训练里,一条轨迹可能横跨多次策略更新,组内策略漂移会让 Â 失真。SAO 的 DIS 直接用 rollout 引擎的 log-prob 当行为策略,不再追踪 πθold,并用双侧 mask 把偏离太远的 token 整段去掉。
代价是它接受一定的 off-policy 偏差;论文说这是“controlled degree of off-policy bias”,不是无偏估计。
标准差用 ÷G 还是 ÷(G−1)、KL 放 reward 还是 loss、loss 用样本级还是 token 级、旧策略 log-prob 是保存还是重算——这些都不在论文的 Eq 里,但会改变梯度。
本页的模拟只覆盖 Eq.3 的组内标准化和 Eq.7 的 min/clip 算术;不覆盖真实 token 级 ratio、KL、动态采样、多轮更新和分布式实现。把页面里的数字当成“公式算术”,不要当成“复现实验”。
一句话总结:这个家族不是“PPO → GRPO → DAPO → SAO”的版本号序列。 PPO 买的是逐 token 信用,GRPO 省掉 critic 但把信用压成组内标量,DAPO 拆开 clip/采样/长度,CISPO 和 SAPO 改信任域的形状,SAO 改采样方式并把 critic 请回来,OPD 改监督信号。 选型时先看你的瓶颈是哪一本账:优势、长度、KL,还是 rollout 吞吐。