DCPO
LLM-RL · arXiv 2025 · 2509.02333v2

DCPO:让裁剪边界随 token 概率变,把零梯度样本用起来

RLVR 训练里,GRPO 的固定裁剪会压住低概率 token 的探索,奖励全同的批次又会算出零优势;DAPO 用动态采样丢弃这些批次,代价是样本利用率。DCPO 把裁剪边界写成旧策略概率 q(x) 的函数,并用跨步累计统计平滑优势,再把 loss 的聚合改成“响应内 token 平均、跨响应求和”。

Shihui Yang 等 · Baichuan.inc 原文 ↗ 代码 ↗
TL;DR · 30 秒抓住核心

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 只有文字估计,没有独立墙钟表。

46.7%
Qwen2.5-Math-7B · AIME24 Avg@1
38.8%
同模型 · AIME24 Avg@32
71.8%
四个模型平均 RUR(Table 2 Average)
01

RLVR 的两个浪费:零梯度和被压住的低概率 token

这一节把 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 在不同长度响应之间的加权方式。

02

GRPO、DAPO、GSPO 各修了一部分,但都留着固定边界

把三种基线的裁剪、标准化和 loss 聚合拆开看,才能看出 DCPO 改的是哪三处。

三种基线的主要机制对照 · 依据 §1、§2、§3 与 Appendix A.3(A.3.1–A.3.3);不是原文中的表,页面按正文整理。
方法概率比裁剪优势标准化loss 聚合
GRPO固定对称 [1−ε, 1+ε]当前 step 的组内奖励sequence-level mean(SLM)
DAPO固定非对称上下界 + dynamic sampling当前 step 的组内奖励token-level mean(TLM)
GSPOsequence-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 级动态调界,不丢整条响应。

03

把裁剪边界写成 q(x) 的函数,再把优势沿训练步平滑

这一节给出三个组件的公式。最关键的是 DAC:它让低概率 token 获得更宽的概率比区间。

DAC:动态自适应裁剪

论文从 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。

当前 q(x) 的裁剪区间
q=0.010 · 动态 [0.500, 5.000] · 固定 [0.800, 1.200]

柱高按 r(x) 的 0–10 区间缩放;动态上界超过 10 时按论文的 cap 显示 10.000。固定裁剪区间是 [0.800, 1.200]。

手算:q=0.01 与 q=1.00 的 DAC 上下界与上面的滑块同一公式

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;显示的三个小数与手算逐位一致。

SAS:累计统计 + 当前统计的平滑

GRPO 只用当前 step 的组内奖励算均值和方差。SAS 把同一 prompt 到目前为止生成的所有响应也纳入统计,得到累计标准化(Eq.5);再用 step 数 i 做两个方向的加权平均(Eq.6):

SAnew = (i−1)/i · Ânew + 1/i · Âtotal
SAtotal = 1/i · Ânew + (i−1)/i · Âtotal
最终优势取两者中绝对值较小的一个(Eq.7),以降低单步采样波动的影响。

这样即使当前组奖励全同,累计项仍然给出非零的 1/i · Âtotal,响应不会因为“这一步没比较出高低”而被完全浪费。论文的说法是:一旦 prompt 参与了优化,后续 step 生成的响应无论当前优势是否为 0 都会参与更新(§3)。

OTM:先在响应内平均 token,再在响应间求和

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 )
与 DAPO 一样,DCPO 的 loss 不加 KL 约束;上下界用 DAC 的动态值。
04

不改模型结构,只改裁剪、优势和 loss 聚合

这一节说明训练设置与开销: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,页面未转录。

05

一次更新的五步:采样、奖励、平滑、动态裁剪、OTM

这张流程图只画 DCPO 相对 GRPO 改动的位置,不重复通用 RLVR 细节。

采样 G 条响应 同一 prompt 旧策略 q(x) 可验证奖励 答对 1 / 答错 0 结果级信号 SAS 标准化 当前 step 统计 + 历史累计统计 按 i 加权平滑 DAC 裁剪 按 q(x) 算上下界 低概率 token 放宽 cap 在 10 OTM loss 响应内 token 平均 再对响应求和 不加 KL 陶土红框是 DCPO 相对 GRPO 的主要改动;采样与奖励计算与标准 RLVR 相同。示意图按 §2–§3 重绘。
DCPO 的更新链路。SAS 与 DAC 都在 loss 之前;OTM 改变的是 loss 内部的 averaging 顺序。
06

平均分更高,AIME 采样更稳,但不是每个单元格都第一

这一节把 Table 1 的主结果、Table 2 的 RUR 和几个反直觉单元格放在一起。

Table 1 主结果转录(Δ 行未转录)· 四个 Qwen2.5 模型在 MATH500 / AMC23 / AIME24 / AIME25 上的 Avg@1,以及 Avg@1/Avg@32。MATH500 只报 Avg@1;AMC23/AIME 的单元格是 Avg@1/Avg@32;最后一列是 Average(Avg@1/Avg@32)。
模型方法MATH500AMC23AIME24AIME25Average
Qwen2.5-Math-1.5B-Instructbase73.657.5/49.410.0/10.03.3/6.136.1/21.8
GRPO77.270.0/68.416.7/14.020.0/13.546.0/32.0
DAPO76.080.0/70.620.0/13.514.4/12.546.5/32.4
DCPO77.275.0/70.820.0/15.616.7/12.147.2/32.8
Qwen2.5-3B(common base)base46.427.5/7.83.3/0.13.3/0.720.1/2.9
GRPO69.262.5/51.610.0/7.56.7/4.536.3/21.0
DAPO72.457.5/54.010.0/8.36.7/3.936.6/23.1
DCPO71.262.5/55.83.3/7.510.0/4.737.6/22.7
Qwen2.5-Math-7B(math base)base50.440.0/19.513.3/6.03.3/1.528.4/9.3
GRPO81.677.5/75.936.7/32.116.7/16.753.1/41.6
DAPO83.072.5/80.736.7/31.623.3/14.953.9/42.4
GSPO84.080.0/78.840.0/34.916.7/16.255.2/43.3
DCPO82.582.6/79.846.7/38.816.7/17.257.1/45.2
Qwen2.5-14B(common base)base60.847.5/16.43.3/1.33.3/1.128.7/6.3
GRPO81.275.0/65.613.3/17.613.3/10.545.7/31.3
DAPO83.487.5/85.116.7/16.420.0/15.351.9/38.9
GSPO78.677.5/75.023.3/16.016.7/9.949.0/33.5
DCPO84.685.0/79.920.0/18.223.3/19.053.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(本文方法)行,不是逐格最佳值标记。

交互:切模型看平均 Avg@32

下面把 Table 1 的 Average Avg@32 按模型切开。柱高以 50 为满格;标签是表格原值。GSPO 只在 7B/14B 上报告,1.5B/3B 没有这一行。

当前读数
7B 平均 Avg@32:GRPO 41.6,DAPO 42.4,GSPO 43.3,DCPO 45.2;DCPO 比 GRPO 高 3.6 个百分点。
GRPO DAPO GSPO DCPO

Table 2:RUR 从 43.8% 到 71.8%

RUR(Response Utilization Ratio)是“优势非零、参与策略更新的响应数 / 生成响应总数”。Table 2 报告 400 个训练步的平均值:

Table 2 完整转录 · 四个模型 400 个训练步的平均 RUR;GSPO 的逐模型值仅 7B/14B,Average 行 45.6% 是这两行的均值。
模型GRPOGSPODCPO
Qwen2.5-Math-1.5B-Instruct45.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%
Average43.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 个百分点。

发现 1:AIME 的采样稳定性提升最明显

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)。

发现 2:平均分领先,但不是每个单元格都领先

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 逐格并列。

发现 3:训练效率的“翻倍”是论文自述,不是计时表

摘要与结论写 DCPO “doubled the training efficiency over DAPO”,并说 TCR 比 GRPO/DAPO 低一个数量级(Figure 1)。Table 2 的 RUR 支持“更多响应参与更新”;§5.3 还有文字估计:DAPO 达到同样参数更新次数需要 3–5 倍生成响应,导致至少 2 倍训练 GPU 小时。论文没有给出对应的表格或独立墙钟测量;页面把“训练效率翻倍”标为作者自述,不当作独立测量结果。

07

它解决不了:只测数学、只测 Qwen、超参要调、效率没有墙钟表

这些限制决定了 DCPO 的数字能推广到哪里,以及部署时要额外补什么。

限制 1

只覆盖数学推理

四个基准都是数学题;代码、科学、agent 任务没有实验。论文在结论里把 code generation 与 semantic reasoning 列为未来工作。

限制 2

只测 Qwen2.5 系列

1.5B、3B、7B、14B 四个规模,都是 Qwen2.5 家族。换到 Llama、Mistral 或 MoE 模型,DAC 的 q(x) 分布与 SAS 的累计统计是否同样有效,论文没有回答。

限制 3

ε 与 cap 需要调

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 的改动最直接。