DAPO:裁剪、动态采样与超长反馈处理#

进阶7 分钟阅读查看源文件 ↗

TL;DR#

本页内容7 个部分

DAPO:保留有效组,调整裁剪与长度处理

1. 长推理训练的四个问题#

假设一次生成三组回答,正确性标记分别为 [1,1,1,1][1,1,1,1]、[1,0,1,0][1,0,1,0] 和 [0,0,0,0][0,0,0,0]。前后两组都没有分数差异,中心化后的任务权重全为零。已经支付生成成本,却只有中间一组提供任务比较信号,怎样继续组织采样与更新?

GRPO 用同题相对分数训练,逐 token 计算对称裁剪目标,先在回答内平均,再对回答平均。DAPO 针对这套配置讨论四个问题:

  1. 正优势任务项在概率比超过上界后进入常数分支,继续提高该概率比不再增加任务目标值。
  2. 全同分题组缺少得分差异,中心化后的任务权重均为零。
  3. 逐回答长度平均使长回答中单个 token 的聚合系数较小。
  4. 截断反馈可能把未完成的回答直接判为错误。

DAPO 分别调整裁剪、题组采样、聚合和超长反馈机制。

2. 四项修改的作用环节#

DAPO(Decoupled Clip and Dynamic Sampling Policy Optimization)保留 GRPO 的组内比较,调整四个环节:(1)放宽上裁剪界;(2)补采有信号的题组;(3)对有效 token 直接平均;(4)单独处理超长反馈。[1]

3. 裁剪、补采与长度反馈#

3.1 放宽正优势的上裁剪界#

用 rr 表示已采样 token 的 current/old 概率比,A^\hat A 表示该回答的组内优势。PPO 的正优势任务项在概率比超过上界后进入常数分支。

DAPO 将上、下裁剪宽度分别设为 ϵhigh\epsilon_{\mathrm{high}} 和 ϵlow\epsilon_{\mathrm{low}},并选择更大的上裁剪宽度。提高上界后,正优势 token 的概率比在更大的范围内仍能增加该任务项的目标值。[1]

例如手算取 ϵlow=0.2\epsilon_{\mathrm{low}}=0.2、ϵhigh=0.3\epsilon_{\mathrm{high}}=0.3。若 A^=1\hat A=1、r=1.25r=1.25,采用 0.20.2 的对称裁剪宽度时,目标为 对称裁剪任务项=min⁡(1.25,1.2)=1.2\text{对称裁剪任务项}=\min(1.25,1.2)=1.2,DAPO 则为 DAPO 任务项=min⁡(1.25,1.3)=1.25\text{DAPO 任务项}=\min(1.25,1.3)=1.25,该位置的任务项仍提供提高概率比的激励。

3.2 有效题组的筛选与补采#

仅使用二值正确性奖励时,一组全对或全错意味着所有分数相同,减组均值后的任务 advantage 都为零。因此,这些组不提供任务项的策略梯度。

设每题采样 K>1K>1 条回答。DAPO 过滤正确数为 00 或 KK 的题组,继续采样,直到收集到预定数量的有效组。补采用于达到预定的训练 batch 有效题目数,与统一缩放已有梯度不同。[1]

在三组正确性标记 [1,1,1,1][1,1,1,1]、[1,0,1,0][1,0,1,0]、[0,0,0,0][0,0,0,0] 中,只保留中间一组。若预定 batch 需要两组有效题,还需补采一组满足筛选条件的题目。

3.3 对有效 token 统一取平均#

令第 ii 条回答的有效生成长度为 TiT_i。DAPO 仍然取平均:把本组所有有效 token 的训练项相加,再除以有效 token 总数 ∑iTi\sum_iT_i。 这里的训练项包含 advantage、ratio 和 clipping;改变的是这些项怎样平均。[1]

手算取两条回答,长度分别为 2 和 4,共 6 个 token。GRPO 先在每条回答内部取平均,再对两条回答平均,因此每条回答各占一半。DAPO 则直接对全部 6 个 token 取平均:

回答 GRPO:每个 token 的平均系数 DAPO:每个 token 的平均系数
短回答,2 个 token 12×12=14\frac12\times\frac12=\frac14 1/61/6
长回答,4 个 token 12×14=18\frac12\times\frac14=\frac18 1/61/6

DAPO 的分母已经是 token 总数,不再额外除以回答数或各自的长度。本例中,短回答合计占 2/62/6,长回答占 4/64/6;每个 token 的平均系数相同。

聚合系数决定各 token 训练项在平均目标中的权重。正负方向仍由 advantage 决定,ratio 和 clipping 也仍然生效。长回答的正优势项和负优势项都受影响;token 平均没有直接增加长度奖励。

3.4 超长回答的屏蔽与奖励塑形#

达到生成上限而被截断,不等于推理过程已经被证明错误。超长反馈有两种处理:(1)屏蔽截断样本的 loss;(2)在接近长度上限时加入逐渐增大的软惩罚。前者过滤训练项,后者改变奖励。[1]

令回答长度为 T=∣y∣T=|y|,最大长度为 Lmax⁡L_{\max},软惩罚区间宽度为 Lcache>0L_{\mathrm{cache}}>0,则长度奖励为:

Rlength(y)={0,T≤Lmax⁡−Lcache,−T−(Lmax⁡−Lcache)Lcache,Lmax⁡−Lcache<T≤Lmax⁡,−1,T>Lmax⁡.R_{\mathrm{length}}(y)=\begin{cases} 0,&T\le L_{\max}-L_{\mathrm{cache}},\\ -\dfrac{T-(L_{\max}-L_{\mathrm{cache}})}{L_{\mathrm{cache}}},&L_{\max}-L_{\mathrm{cache}}<T\le L_{\max},\\ -1,&T>L_{\max}. \end{cases}

长度奖励先加到任务评分上,再进入组统计。手算取 Lmax⁡=10L_{\max}=10、Lcache=4L_{\mathrm{cache}}=4:长度 6、8、10 的附加分分别为 00、−0.5-0.5、−1-1。该软惩罚在回答长度进入指定区间后生效,而非仅在发生截断时生效。

4. 合并四项设计计算训练目标#

4.1 组内权重与完整任务目标#

对问题 qq,旧策略 πold\pi_{\mathrm{old}} 采样 K>1K>1 条回答 yiy_i,得到分数 RiR_i 和有效生成长度 TiT_i。组内均值、总体标准差分别为 Rˉ\bar R、σR\sigma_R,相对权重为 A^i=(Ri−Rˉ)/(σR+δ)\hat A_i=(R_i-\bar R)/(\sigma_R+\delta),其中 δ>0\delta>0 防止除零。

正确性奖励设为答对 +1+1、答错 −1-1;前面的 1/0 序列仅标记是否答对。

正在更新的策略记为 πθ\pi_\theta。相同前缀下的 token 概率比为 ri,t=πθ(yi,t∣q,yi,<t)/πold(yi,t∣q,yi,<t)r_{i,t}=\pi_\theta(y_{i,t}\mid q,y_{i,<t})/\pi_{\mathrm{old}}(y_{i,t}\mid q,y_{i,<t})。令 ϵlow\epsilon_{\mathrm{low}}、ϵhigh\epsilon_{\mathrm{high}} 分别控制下界和上界,对保留的组最大化:

JDAPO(θ)=1∑iTi∑i=1K∑t=1Timin⁡ ⁣(ri,tA^i,clip⁡(ri,t,1−ϵlow,1+ϵhigh)A^i).J_{\mathrm{DAPO}}(\theta)=\frac{1}{\sum_iT_i}\sum_{i=1}^{K}\sum_{t=1}^{T_i}\min\!\left(r_{i,t}\hat A_i,\operatorname{clip}(r_{i,t},1-\epsilon_{\mathrm{low}},1+\epsilon_{\mathrm{high}})\hat A_i\right).

目标要最大化;奖励、组统计和 old 在本批更新中固定。这里的 DAPO 配置不使用 reference KL。[1]

与先回答内、再回答间平均相比,这个分母让本组每个有效 token 的聚合系数相同。完整 batch 还需明确跨题及跨小批次怎样汇总,见 Loss 平均。

4.2 同一组回答的完整目标计算#

以下在同一组数据上联合计算评分、归一化、裁剪与聚合:保留正确性标记 [1,0,1,0][1,0,1,0],取长度 [2,4,2,4][2,4,2,4]。在上述 Lmax⁡=10L_{\max}=10、Lcache=4L_{\mathrm{cache}}=4 下,长度惩罚都为零;正确性奖励为 [1,−1,1,−1][1,-1,1,-1],得到 Rˉ=0\bar R=0、σR=1\sigma_R=1,忽略稳定项后的 A^\hat A 也为 [1,−1,1,−1][1,-1,1,-1]。

假设每条回答内的 token ratio 分别恒为 [1.25,0.9,1.4,0.7][1.25,0.9,1.4,0.7],仍取上下裁剪宽度 0.30.3 与 0.20.2。四条回答各位置的 clipped 任务项为 [1.25,−0.9,1.3,−0.8][1.25,-0.9,1.3,-0.8]。乘各自 token 数再汇总:

JDAPO=2(1.25)+4(−0.9)+2(1.3)+4(−0.8)12=−17120≈−0.1417.J_{\mathrm{DAPO}}=\frac{2(1.25)+4(-0.9)+2(1.3)+4(-0.8)}{12} =-\frac{17}{120}\approx-0.1417.

相应任务 loss 为 17/12017/120。第三条的正权重项与第四条的负权重项已分别进入裁剪常数分支,第一、二条仍提供任务梯度;目标正负本身不能判断梯度是否为零。这里所有数据均为手算设定。

4.3 单轮训练步骤#

  1. 采样回答:保存当前策略为 old,为候选题目各生成 KK 条回答,记录 old 的 token 概率。
  2. 评分并处理超长反馈:验证回答的正确性,计算正确性奖励与配置中的长度惩罚,并按配置设置截断样本的 loss mask。正确性标记与最终训练分数分别保存。
  3. 筛选并补采:只保留正确数大于 00 且小于 KK 的题组。未达到预定的有效题组数时,继续采样、评分和筛选。
  4. 更新策略:用保留组的最终训练分数计算并固定 advantage,再用非对称 clipping 和有效 token 平均更新 current。本批更新结束后刷新 old,开始下一轮采样。

5. 组件比较与局限性#

5.1 与 Dr. GRPO 的分母和采样选择比较#

Dr. GRPO 用共同常数替代逐回答长度,并移除组内标准差归一化。本文的 DAPO 配置仍按组内标准差缩放优势,再对有效 token 平均;此外还筛选并补采题组。因此,两者既有分母差异,也有进入训练的数据分布差异,不能把结果差别只归因于上裁剪界。

5.2 裁剪与筛选的限制#

上裁剪界调整改变任务目标进入常数分支的阈值,并不强制 ratio 保持在裁剪区间内,也不保证放宽上界一定增加有用探索;实际结果还受奖励、采样和共享参数影响。

动态补采使每个更新批次需要的生成量不固定。过滤也改变了进入更新的题目分布:当前组全部回答错误,不表示该题的真实成功概率为零,也不能据此判定该问题没有训练价值。怎样提高后续采样的成功率,仍需结合探索策略或课程设计检验。

5.3 正确性标记与训练奖励的区别#

加入长度奖励后,全对组也可能出现分数差异;动态筛选仍按正确数判断。正确性筛选与最终 advantage 的奖励统计因此需要分别记录。

参考资料#

  1. DAPO(2025). §2–3、算法 1:目标、四项训练设计与长度奖励。