RL POST-TRAINING · DAPO §3.4 · OVERLONG REWARD SHAPING

截断的回答该怎么判

奖励噪声的两种修法:承认不可判定,或在悬崖前修一段缓冲坡

RL 训练的 rollout 必须有生成长度上限,被截断的回答默认按答错处理——DAPO 论文(arXiv:2503.14476)§3.4 指出,这会把「无法判定」的样本错判成「错」样本,把奖励噪声经组内归一化放大,注入整个训练过程。DAPO 给出两种修法:Overlong Filtering 不承认截断样本是样本,整体屏蔽其 loss;Soft Overlong Punishment 则把长度变成连续可判别的奖励维度——悬崖没有消除,悬崖前修了一段 4,096 token 的线性缓冲坡。

本报告为博客正文配套的交互版 · 正文:njx-njx.github.io/posts/dapo-overlong-reward-shaping/ · 论文 arXiv:2503.14476
姊妹篇交互研报:DAPO Clip-Higher · Dr.GRPO 长度与难度偏差 · TIS 训练推理不一致 · GSPO 序列级重要性采样
证据分级:论文一手 > 本地教材 > 推算/作者判断 [已标注] · 图内数字可点击下钻 · 点击画布切换三种处理方式

SCROLL

§0 · 关键结论

截断样本的奖励「不可判定」,默认按答错处理会把噪声注入全组

RL 训练的 rollout 必须有生成长度上限:显存要按最长序列预留,batch 要等最慢的一条写完,一条失控的 response 能拖垮整批吞吐。上限一设,就必然有一部分回答被截断。这些样本该怎么办?默认做法很常见:给惩罚性奖励,按答错处理。DAPO 论文 §3.4 指出,这个默认做法会带来问题——截断样本的错误处理会引入奖励噪声,而且是在组内归一化的放大下注入整个训练过程。

论文的理由很直白:一个推理过程本身合理,仅仅因为写得太长而被惩罚,这种惩罚会让模型困惑——它无法区分推理是否有效。GRPO 的 advantage 是组内相对排名,任何一条回答的奖励一旦出错,就会影响整组。DAPO 的两种修法对应两种态度:Overlong Filtering 承认截断样本「不可判定」,整体屏蔽其 loss;Soft Overlong Punishment 不屏蔽,但把长度本身变成一个连续、可判别的奖励维度。

报告按论证链展开:§1 先立长度预算的工程设定(16,384 + 4,096 = 20,480),§2 用一个 8 条回答的算例看清噪声怎么进 advantage,§3 与 §4 分别拆两种方案(含 Equation 13 的三段逐段点击),§5 把它和 Dr.GRPO 的 1/|y|、DAPO 的 token-mean 拼成完整的长度问题图景,§6 看 DAPO 全篇「宁缺毋滥」的设计取向,§7 给出三个判断与三条未决问题。

一个推理过程本身合理,仅仅因为写得太长而被惩罚,这种惩罚会让模型困惑——它无法区分推理是否有效。

— DAPO 论文 §3.4,arXiv:2503.14476

语境截断样本默认按答错处理(reward 记 0 或负分),是 RLVR 训练里的常见默认。 为何重要「惩罚长」与「惩罚错」被混为一谈后,模型会把好的推理方式和「写得长」一起抛弃。

§1 · 无法回避的工程设定

16,384 + 4,096 = 20,480:长度上限不是选择,是必需

DAPO 的配置(论文 §4.1):预期最大长度 16,384 token,额外保留 4,096 token 的缓冲区间,硬性生成上限为 20,480。上限一设,截断就必然发生——问题只剩下一个:被截断的回答怎么判。

三个数字把本篇的全部讨论定在一条尺子上:12,288(= 16,384 − 4,096)是 Soft Punishment 缓冲坡的起点;16,384 是预期上限,超过即截断;20,480 是硬上限,没有回答能越过。§4 的 Equation 13 与 §2 的噪声算例,都发生在这把尺子上。

§2 · 噪声是怎么进 advantage 的

一条回答的奖励出错,全组的相对排名都被扭曲

GRPO 的 advantage 是组内相对排名:同一道题采 G 条回答,减组内均值(除以 std)。这意味着任何一条回答的奖励一旦出错,就会影响整组。举一个具体算例:一道题采 8 条回答,真实情况是 4 对 4 错,其中 2 条「错」其实是被截断的优质推理(如果写完很可能对)。

两层扭曲叠在一起。第一层在账面上:按真实质量,组均值 0.5,答对的回答拿到正 advantage,答错的拿到负的;按截断=0 分,截断样本也被算作错误回答,错的算 6 条,组均值被拉低到 0.25——于是所有答对样本的 advantage 被抬高、所有答错样本的 advantage 被减轻,包括那两条真正答错的。

第二层在行为上:那两条被截断的优质推理本身,会被作为负样本强化。模型从中学到的不是「要写短一点」,而是「我这种推理方式不对」——这正是论文说的会让模型产生困惑的地方。这两类惩罚混为一谈后,模型会把好的推理方式和「写得长」一起抛弃。

机制要点。噪声的放大器是组内归一化本身:advantage 减的是组均值,均值被 2 条误判样本从 0.5 拉到 0.25,全组 8 条的 advantage 全部偏移——不是只有截断样本自己受害。这也是 §3 方案一要「整条屏蔽」而不是「改个分数」的原因:只要它还留在组内统计里,就仍在污染其他样本。

§3 · 方案一 · Overlong Filtering

认为截断样本「不可判定」,屏蔽其 loss

DAPO 的第一种处理方式是:不把截断样本当作错误样本,而是直接不承认它是样本。Overlong Filtering 把被截断回答的 loss 整体屏蔽——这条样本不参与 advantage 估计,也不产生梯度。

论文 Figure 5 给出的效果:应用 Overlong Reward Shaping 后,AIME 准确率和 actor 模型的熵都更稳定,训练稳定性明显提升。这一点值得注意:熵的稳定意味着截断噪声本身就在干扰探索动力学——并不只影响 reward 的账面数字。下图为按论文结论做的示意重建(非逐点实测):

代价同样明显,论文没有展开,博客补充两点:

  • 代价一 · 算力白费一条截断样本的 rollout 成本已经花了——它往往是最长的那条,恰好占用最多算力——屏蔽后一条梯度都没换回来。这与 dynamic sampling 的逻辑相同:都是「用算力换信号质量」,DAPO 全篇都是这个取向(§6)。
  • 代价二 · 隐性的幸存者偏差什么样的样本更容易被截断?长题、难题、需要长 CoT 的题。系统性地屏蔽截断样本,等于系统性地降低难题在训练分布中的权重。短期内训练会更稳定,长期代价则是模型可能在最需要长推理的题目上暴露短板。论文没有讨论这个副作用,这是博客作者提出的保留意见。

§4 · 方案二 · Soft Overlong Punishment

悬崖前修一段缓冲坡:长度从二元事件变连续任务

完全屏蔽会丢失信息:模型无法学到长度本身很重要。DAPO 的第二种处理方式把长度本身变成一个连续、可判别的奖励维度(论文 Equation 13)。点击三段,逐段查看:

EQUATION 13 · 三段拆解 · 点击任意一段

Rlength(y) = 0 ⏐ ((Lmax−Lcache)−|y|) / Lcache ⏐ −1

|y| ≤ 12,288

R_length = 0

自由区:不惩罚,长度完全自由

12,288 < |y| ≤ 16,384

线性 0 → −1

缓冲坡:每 token 多罚 1/4096

|y| > 16,384

封顶 −1 · 叠加

悬崖仍在:加到对错奖励上

段一 · 自由区:不惩罚

|y| ≤ L_max − L_cache(DAPO 配置下即 ≤ 12,288 token):长度惩罚为 0。这一段的回答只按对错计分,长度完全自由——模型在这一区间收不到任何关于长度的信号。

这个设计最精妙的地方在于:悬崖没有被消除,悬崖前修了一段缓冲坡。超过 L_max 仍然是 −1 的硬惩罚,和 naive 做法一样狠;但模型在到达悬崖前四千 token 就开始收到连续的「快超预算了」的信号,而且信号强度与超预算的程度单调相关。组内归一化之后,「12,500 token 差点超」和「16,300 token 即将超」的两条回答会拿到可分辨的 advantage 差,模型能据此学会提前收尾,而不是到了上限才知道疼。拖动滑杆,试探任意长度的惩罚与叠加后的总分:

叠加是关键。段三的 −1 不是替代对错奖励,而是加到原来的对错奖励上——答对但写超了,总分照样可能被拉低(图中游标:15,800 token 答对,长度罚 −0.86,总分 ≈ 0.14)。长度控制由此从一个二元事件(没超/超了)变成一个连续可学习的任务。

§5 · 放进「长度问题」的完整图景

三个层级,三种修法:梯度权重、损失聚合、奖励判定

本周前几篇文章讨论的都与长度有关,本篇是最后一个方面。三者处理的是三个不同层级的长度问题,并不冲突:

DAPO 同时使用 token-mean 和 overlong shaping,表示它既修梯度侧,也修奖励侧;Dr.GRPO 侧重归一化。配合阅读:Dr.GRPO 长度与难度偏差交互研报 拆 1/|y| 的摊薄机制,DAPO Clip-Higher 交互研报 拆熵坍缩与不对称裁剪。

§6 · DAPO 的设计取向

宁缺毋滥:与其使用不可靠的信号,不如不用

从本篇往外看,DAPO 全篇都是同一个取向——训练崩溃往往不是算法不够好,而是信号中混入了噪声。hover 卡片查看完整说明:

滤零信号

DYNAMIC SAMPLING

过滤没有梯度信号的 prompt:全对/全错的题直接丢弃重采。

全对或全错的题组内 std=0,减均值后 advantage 照样是 0,什么也没学到。dynamic sampling 约束每个 prompt 都有有效梯度——代价是过采样的算力,换的是信号质量。

Hover for the full story

屏蔽噪声

OVERLONG FILTERING · 本篇

屏蔽奖励不可靠的样本:被截断的回答 loss 整体屏蔽。

截断样本的 verifier 没能执行完判定,奖励不可判定。filtering 承认这种不可判定性:整条样本不参与 advantage 估计,也不产生梯度(§3)。同样是用算力换信号质量。

Hover for the full story

消除歧义

DATASET TRANSFORMATION · §3.5

把答案统一转成整数,消除解析器噪声(DAPO-Math-17K)。

数据集的答案格式五花八门(分数、小数、表达式、单位),解析器判错本身就是一种奖励噪声。DAPO-Math-17K 把答案统一转成整数形式,从源头消除一类判定歧义——与 overlong 处理的是同一个原则:奖励必须可验证。

Hover for the full story

训练崩溃往往不是算法不够好,而是信号中混入了噪声。

— 本报告 · 取向小结

语境dynamic sampling 滤零信号、overlong filtering 屏蔽噪声样本、Dataset Transformation 答案整数化。 为何重要三者的共同方向:与其使用不可靠的信号,不如不用——「用算力换信号质量」是 DAPO 全篇的取向。

§7 · 三个判断与未决问题

不可判定 ≠ 答错;熵监控要和奖励判定质量一起分析

三条判断是博客作者基于全部证据给出的结论;未决问题是证据本身留下的三个缺口。hover 查看完整论证:

判断一

不可判定 ≠ 答错

截断样本是「不可判定」样本,判为错误属于奖励层面的误判。

RLVR 的前提是奖励可以验证——能判对错才给分。截断样本的 verifier 根本没能执行完判定,它既不是 1 也不是 0。filtering 承认不可判定性,soft punishment 引入新的可判定维度(长度本身);naive 的 punitive reward 违反了这个原则。(K10)

Hover for the full story

判断二

熵与判定质量绑定

Overlong 处理后熵更稳定这件事,比表面看上去更重要。

Figure 5(b) 显示 shaping 后 actor 熵的曲线更平稳:长度上限附近的混乱(突然被惩罚的优质长推理、被迫乱收尾的回答)不只使 reward 失真,还增加探索噪声。结合 Clip-Higher(熵坍缩):熵既会被优化器错误压制而坍缩,也会被奖励噪声干扰而剧烈波动——熵监控必须和奖励判定质量一起分析。(K11)

Hover for the full story

判断三

两个待监控超参数

cache 宽度和屏蔽比例需要监控,目前没有公开依据。

4,096/16,384 = 25% 的缓冲坡长度是怎么定的,论文没有给;训练中截断率(被屏蔽样本占比)随模型长度行为漂移——屏蔽率过高时有效 batch 缩水、难题占比下降,过低则说明长度控制已经失效或上限设得太宽。这两个数字论文里都没有监控曲线,复现时只能自己补。(K12)

Hover for the full story

未决问题

  • 一 ·Overlong Filtering 造成的难题权重流失,在长期训练里是否需要配合长度课程(progressive length curriculum)补偿,没有公开实验。
  • 二 ·cache 宽度(25%)的选取依据与消融,论文未披露。
  • 三 ·Soft Punishment 的 −1 封顶与 Clip-Higher 的不对称裁剪叠加时,长但正确的探索性回答是否会被双重抑制,目前没有数据。

右栏仪表盘随章节切换:三种处理方式状态、长度标尺与本章关键数字;全部可点击下钻。