RLVR 训练里,GRPO 的固定裁剪会压住低概率 token 的探索,奖励全同的批次又会算出零优势;DAPO 用动态采样丢弃这些批次,代价是样本利用率。DCPO 把裁剪边界写成旧策略概率 q(x) 的函数,并用跨步累计统计平滑优势,再把 loss 的聚合改成“响应内 token 平均、跨响应求和”。
DCPO 针对的是 RLVR 里的两类浪费:固定裁剪让低概率 token 的更新区间过窄;当前步标准化在奖励全同时把优势算成 0。DAPO 用动态采样把零梯度批次丢掉,DCPO 选择把它们用起来。
三个组件分别管 token 级探索、response 级利用率和 loss 聚合:DAC 按 q(x) 放宽低概率 token 的裁剪上界;SAS 把历史累计奖励统计和当前步统计做平滑;OTM 先在单个响应内对 token 求平均,再对 G 条响应求和。
Qwen2.5-Math-7B 上,AIME24 的 Avg@1/Avg@32 从 GRPO 的 36.7/32.1、DAPO 的 36.7/31.6 到 DCPO 的 46.7/38.8;平均 RUR 从 GRPO 的 43.8%(Table 2 Average)到 71.8%,绝对增加 28.0 个百分点;§5.3 正文另称 GRPO 的 overall mean 为 44.6%,与 Table 2 的 43.8% 不一致。
边界:只测数学基准与 Qwen2.5 系列;不是每个模型、每个单元格都第一;训练效率“翻倍”是论文自述,§5.3 只有文字估计,没有独立墙钟表。
这一节把 DCPO 要修的两个训练病理分开:一个是 response 级别的零优势,一个是 token 级别的裁剪过紧。
RLVR 用可验证的结果奖励训练推理模型:同一道题采样一组回答,答对给 1,答错给 0,再用组内相对优势更新策略。问题在于,如果这一组回答的奖励全相同(全对或全错),组内标准化后的优势就是 0,整组样本对参数更新没有贡献。GRPO 会浪费这些样本;DAPO 引入 dynamic sampling,把奖励一致的组丢掉,保证每个 batch 都有非零梯度,但采样效率随之下降。
第二个问题在 token 级。PPO/GRPO 把概率比 r(x)=p(x)/q(x) 裁在固定区间 [1−ε, 1+ε]。对旧策略概率 q(x) 很低的 token,这个绝对区间对应的概率质量很小,模型很难把“冷门但可能正确”的 token 概率提上去。论文的 Figure 1 报告 DCPO 的 TCR(token clipping ratio)比 GRPO、DAPO 低一个数量级;这是作者对探索空间的解释,不是独立的因果实验。
论文把这两个问题分别对应到两个设计:SAS 处理 response 级零优势,DAC 处理 token 级裁剪。OTM 则是第三个、更偏工程的问题:loss 在不同长度响应之间的加权方式。
把三种基线的裁剪、标准化和 loss 聚合拆开看,才能看出 DCPO 改的是哪三处。
| 方法 | 概率比裁剪 | 优势标准化 | loss 聚合 |
|---|---|---|---|
| GRPO | 固定对称 [1−ε, 1+ε] | 当前 step 的组内奖励 | sequence-level mean(SLM) |
| DAPO | 固定非对称上下界 + dynamic sampling | 当前 step 的组内奖励 | token-level mean(TLM) |
| GSPO | sequence-level 概率比 + 非对称固定界;超界丢整条响应 | 当前 step 的组内奖励 | sequence-level |
| DCPO | 按 q(x) 动态变化,上下界都随 token 变 | 累计统计 + 当前统计,按 step 平滑 | only-token-mean(OTM) |
GRPO 的零优势。组内奖励全同时,标准化把优势变成 0;这不是“没有可学信号”,而是当前批次内部的相对比较失效。论文认为同一 prompt 的奖励分布在训练过程中可以看作来自同一个全局分布,因此可以用历史累计统计来补足当前批次的不足(§3)。
DAPO 的取舍。dynamic sampling 丢弃奖励一致的组,保证梯度非零,但直接减少参与更新的响应数。DCPO 的 SAS 想在“不丢样本”的前提下做到同样的事。
GSPO 的取舍。GSPO 用 sequence-level 概率比,超界时丢整条响应;论文认为这会浪费 informative tokens,并保留高方差 token(§2)。DCPO 选择在 token 级动态调界,不丢整条响应。
这一节给出三个组件的公式。最关键的是 DAC:它让低概率 token 获得更宽的概率比区间。
论文从 importance sampling 的方差-偏差权衡出发,把固定约束 |r(x)−1| ≤ ε 换成概率质量约束 |(r(x)−1)·p(x)| ≤ ε(Eq.3)。把 p(x)=r(x)q(x) 代入并解出 r(x),得到随 q(x) 变化的上下界(Eq.4):
0.5 + 0.5·√max(1 − 4εlow/q(x), 0) ≤ r(x) ≤ 0.5 + 0.5·√(1 + 4εhigh/q(x))
r(x) 上界都限制在 10(rmax=10),防止低概率 token 的区间过大导致过训练(§2、Appendix A.6)。直观上,q(x) 越小,4ε/q(x) 越大,上界越宽;q(x) 接近 1 时,动态上界反而可能比固定 1+ε 更紧。下面的滑块就是 Eq.4 的直接计算,εlow=0.16、εhigh=0.2 取自 Figure 4。
柱高按 r(x) 的 0–10 区间缩放;动态上界超过 10 时按论文的 cap 显示 10.000。固定裁剪区间是 [0.800, 1.200]。
q=0.01。下界 0.5 + 0.5·√max(1 − 4×0.16/0.01, 0) = 0.5 + 0.5·√max(1−64, 0) = 0.5;上界 0.5 + 0.5·√(1 + 4×0.2/0.01) = 0.5 + 0.5·√81 = 5.000。低概率 token 的上界从固定的 1.200 放宽到 5.000。
q=1.00。下界 0.5 + 0.5·√(1 − 0.64) = 0.5 + 0.3 = 0.800;上界 0.5 + 0.5·√(1 + 0.8) = 0.5 + 0.6708 = 1.171。高概率 token 的上界反而比固定 1.200 更紧。
滑块用同一组公式和同样的 εlow=0.16、εhigh=0.2;显示的三个小数与手算逐位一致。
GRPO 只用当前 step 的组内奖励算均值和方差。SAS 把同一 prompt 到目前为止生成的所有响应也纳入统计,得到累计标准化(Eq.5);再用 step 数 i 做两个方向的加权平均(Eq.6):
SAnew = (i−1)/i · Ânew + 1/i · ÂtotalSAtotal = 1/i · Ânew + (i−1)/i · Âtotal
这样即使当前组奖励全同,累计项仍然给出非零的 1/i · Âtotal,响应不会因为“这一步没比较出高低”而被完全浪费。论文的说法是:一旦 prompt 参与了优化,后续 step 生成的响应无论当前优势是否为 0 都会参与更新(§3)。
DAPO 的 TLM 把整个 batch 的所有 token 拉平求平均,长响应会获得更大权重。论文举了一个例子:响应 A 优势 1、长度 500;响应 B 优势 0.5、长度 1500。TLM 下 B 的 loss 贡献是 0.375,反而大于 A 的 0.25,尽管 B 的优势更低。OTM 改成先在每条响应内部对 token 求平均,再对 G 条响应求和(Eq.8 没有 1/G 因子),让每条响应的权重只与自身优势有关,与长度无关。
LDCPO(θ) = Σi=1..G (1/|oi|) Σt=1..|oi| min( ri,tÂi,t, clip(ri,t, 1−εlow, 1+εhigh)Âi,t )
这一节说明训练设置与开销:DCPO 没有引入额外网络、reward model 或人工标注。
数据与模型。训练集约 25k 道数学题,由 DAPO-Math-17K 与 MATH 的 levels 3–5 合并而成;四个模型:Qwen2.5-Math-1.5B-Instruct、Qwen2.5-3B(common base)、Qwen2.5-Math-7B(math base)、Qwen2.5-14B(common base)(§4)。所有题目用 Qwen-Math 模板处理。
评测。MATH500(500 题)只报 Avg@1;AMC23(40 题)、AIME24(30 题)、AIME25(30 题)报 Avg@1 与 Avg@32。Avg@1 是贪心解码的准确率;Avg@32 是每题采样 32 次(temperature 1.0、top_p 1.0)的平均准确率(§4)。
开销。DCPO 改的是 loss 与优势的计算方式,没有新增可训练参数,也没有额外的 reward model。DAC 只需要每个 token 的旧策略概率 q(x) 和两个 ε 超参(外加 rmax=10 的 cap);SAS 需要保存同一 prompt 的累计奖励统计;OTM 取消了跨响应平均,改为响应内 token 平均后跨响应求和。论文没有报告显存、吞吐或墙钟时间的对比表;§5.3 只有文字估计(DAPO 需 3–5 倍生成响应、至少 2 倍训练 GPU 小时),页面不把它当作独立的墙钟测量。
超参。DAC 用 εlow=0.16、εhigh=0.2(Figure 4);正、负优势对应的 r(x) 上界都限制在 10。其余训练超参在 Appendix A.9,页面未转录。
这张流程图只画 DCPO 相对 GRPO 改动的位置,不重复通用 RLVR 细节。
这一节把 Table 1 的主结果、Table 2 的 RUR 和几个反直觉单元格放在一起。
| 模型 | 方法 | MATH500 | AMC23 | AIME24 | AIME25 | Average |
|---|---|---|---|---|---|---|
| Qwen2.5-Math-1.5B-Instruct | base | 73.6 | 57.5/49.4 | 10.0/10.0 | 3.3/6.1 | 36.1/21.8 |
| GRPO | 77.2 | 70.0/68.4 | 16.7/14.0 | 20.0/13.5 | 46.0/32.0 | |
| DAPO | 76.0 | 80.0/70.6 | 20.0/13.5 | 14.4/12.5 | 46.5/32.4 | |
| DCPO | 77.2 | 75.0/70.8 | 20.0/15.6 | 16.7/12.1 | 47.2/32.8 | |
| Qwen2.5-3B(common base) | base | 46.4 | 27.5/7.8 | 3.3/0.1 | 3.3/0.7 | 20.1/2.9 |
| GRPO | 69.2 | 62.5/51.6 | 10.0/7.5 | 6.7/4.5 | 36.3/21.0 | |
| DAPO | 72.4 | 57.5/54.0 | 10.0/8.3 | 6.7/3.9 | 36.6/23.1 | |
| DCPO | 71.2 | 62.5/55.8 | 3.3/7.5 | 10.0/4.7 | 37.6/22.7 | |
| Qwen2.5-Math-7B(math base) | base | 50.4 | 40.0/19.5 | 13.3/6.0 | 3.3/1.5 | 28.4/9.3 |
| GRPO | 81.6 | 77.5/75.9 | 36.7/32.1 | 16.7/16.7 | 53.1/41.6 | |
| DAPO | 83.0 | 72.5/80.7 | 36.7/31.6 | 23.3/14.9 | 53.9/42.4 | |
| GSPO | 84.0 | 80.0/78.8 | 40.0/34.9 | 16.7/16.2 | 55.2/43.3 | |
| DCPO | 82.5 | 82.6/79.8 | 46.7/38.8 | 16.7/17.2 | 57.1/45.2 | |
| Qwen2.5-14B(common base) | base | 60.8 | 47.5/16.4 | 3.3/1.3 | 3.3/1.1 | 28.7/6.3 |
| GRPO | 81.2 | 75.0/65.6 | 13.3/17.6 | 13.3/10.5 | 45.7/31.3 | |
| DAPO | 83.4 | 87.5/85.1 | 16.7/16.4 | 20.0/15.3 | 51.9/38.9 | |
| GSPO | 78.6 | 77.5/75.0 | 23.3/16.0 | 16.7/9.9 | 49.0/33.5 | |
| DCPO | 84.6 | 85.0/79.9 | 20.0/18.2 | 23.3/19.0 | 53.2/39.0 |
Table 1 的 Δ 行未转录。页面按表值复算;原文 Δ 行有 4 处与表值不符:14B ΔGRPO Average Avg@1 写 +6.5(53.2−45.7=7.5);7B ΔGRPO AMC23 Avg@32 写 +4.9(79.8−75.9=3.9);7B ΔDAPO Average Avg@1 写 +3.3(57.1−53.9=3.2);14B ΔGSPO AIME25 Avg@32 写 +10.1(19.0−9.9=9.1)。
Average 列与逐项均值不一致(至少:1.5B DAPO 46.5/32.4 vs 逐项 47.6/32.2;3B GRPO 36.3/21.0 vs 37.1/21.2;3B DAPO Avg@32 23.1 vs 22.1;3B DCPO 37.6/22.7 vs 36.8/22.7;7B base 28.4/9.3 vs 26.8/9.0);页面按原表 Average 列引用。淡红底表示 DCPO(本文方法)行,不是逐格最佳值标记。
下面把 Table 1 的 Average Avg@32 按模型切开。柱高以 50 为满格;标签是表格原值。GSPO 只在 7B/14B 上报告,1.5B/3B 没有这一行。
RUR(Response Utilization Ratio)是“优势非零、参与策略更新的响应数 / 生成响应总数”。Table 2 报告 400 个训练步的平均值:
| 模型 | GRPO | GSPO | DCPO |
|---|---|---|---|
| Qwen2.5-Math-1.5B-Instruct | 45.6% | — | 67.1% |
| Qwen2.5-3B(common base) | 48.3% | — | 74.3% |
| Qwen2.5-Math-7B(math base) | 37.4% | 43.5% | 73.2% |
| Qwen2.5-14B(common base) | 43.9% | 47.6% | 72.4% |
| Average | 43.8% | 45.6% | 71.8% |
平均绝对增加 28.0 个百分点;按 GRPO 的 43.8% 复算,相对提升 63.9%。§5.3 正文称 GRPO 的 overall mean 为 44.6%,Table 2 的 Average 行是 43.8%,两者不一致;页面按 Table 2 复算:71.8−43.8=28.0 个百分点,28.0/43.8=63.9%(原文写 64%)。28.0 是百分点差,不是相对提升。分模型看,7B 的增幅最大、1.5B 的增幅最小推断(由 Table 2 复算):37.4% → 73.2%,绝对增加 35.8 个百分点;45.6% → 67.1%,绝对增加 21.5 个百分点。
7B 的 AIME24:DCPO 的 Avg@1 比 GRPO 高 10.0 个百分点(46.7 对 36.7),Avg@32 高 6.7 个百分点(38.8 对 32.1);相对 DAPO 的 Avg@32 高 7.2 个百分点(38.8 对 31.6)。14B 的 AIME25:DCPO 的 Avg@1 比 GRPO 高 10.0 个百分点(23.3 对 13.3),Avg@32 高 8.5 个百分点(19.0 对 10.5);相对 DAPO 的 Avg@32 高 3.7 个百分点(19.0 对 15.3)。论文把这一趋势解释为 “enhances the diversity and reliability of correct generations”(§5.1)。
7B 的 Average 从 GRPO 的 53.1/41.6 到 DCPO 的 57.1/45.2,绝对增加 4.0/3.6 个百分点;14B 从 45.7/31.3 到 53.2/39.0,按表值复算绝对增加 7.5/7.7 个百分点(原文 Δ 行与 §5.1 写 +6.5/+7.7,其中 +6.5 与表值不符)。但逐格看,DCPO 并非全部第一:
因此,合适的主张是“平均分与 AIME 采样稳定性更好”,不是“每个基准都更好”;页面按 Table 1 逐格并列。
摘要与结论写 DCPO “doubled the training efficiency over DAPO”,并说 TCR 比 GRPO/DAPO 低一个数量级(Figure 1)。Table 2 的 RUR 支持“更多响应参与更新”;§5.3 还有文字估计:DAPO 达到同样参数更新次数需要 3–5 倍生成响应,导致至少 2 倍训练 GPU 小时。论文没有给出对应的表格或独立墙钟测量;页面把“训练效率翻倍”标为作者自述,不当作独立测量结果。
这些限制决定了 DCPO 的数字能推广到哪里,以及部署时要额外补什么。
四个基准都是数学题;代码、科学、agent 任务没有实验。论文在结论里把 code generation 与 semantic reasoning 列为未来工作。
1.5B、3B、7B、14B 四个规模,都是 Qwen2.5 家族。换到 Llama、Mistral 或 MoE 模型,DAC 的 q(x) 分布与 SAS 的累计统计是否同样有效,论文没有回答。
DAC 用 εlow=0.16、εhigh=0.2,正、负优势对应的 r(x) 上界 cap 在 10。论文没有给出这三个取值(εlow、εhigh、cap=10)的敏感性表;换任务或模型时需要重新扫。
SAS 的全局分布假设。累计标准化假设同一 prompt 的奖励分布在训练过程中来自同一个全局分布(§3)。如果训练数据分布漂移,或者 prompt 的难度在课程学习中大幅变化,历史统计可能不再代表当前分布;论文没有做这种漂移实验。
没有独立计时。“训练效率翻倍”与“TCR 低一个数量级”分别来自摘要和 Figure 1;前者只有 §5.3 的文字估计(DAPO 需 3–5 倍生成响应、至少 2 倍 GPU 小时),后者是作者对裁剪 token 比例的测量。页面保留这两个主张的出处,不把它们合并成一个“效率提升 X 倍”的数字。
什么时候别用:如果训练任务不是可验证奖励的数学题(代码题论文未测),DCPO 的组件没有实验支撑;如果 batch 很小、同一 prompt 的累计样本很少,SAS 的历史统计噪声会更大推断(依据 §3 的累计统计定义);如果框架无法拿到 token 级的旧策略概率 q(x),DAC 的动态界也算不出来。反过来,在 GRPO/DAPO 已经能跑、但零梯度批次多、AIME 采样波动大的场景里,DCPO 的改动最直接。