RL 后训练的一个隐蔽浪费:格式分早就拿满了,梯度却还在往那儿砸

上周读了一篇让我挺有共鸣的论文。做 RLVR 后训练的人大概都有这个经验:给模型挂好几个奖励——正确性、长度、格式——然后用一个固定权重加成一个标量,丢给 GRPO 训。训着训着你发现,格式奖励很快就涨到 99 分了,长度奖励也基本拿满,但训练还在认认真真地给这些已经"毕业"的目标分配梯度。真正难啃的正确性目标,反而要跟一群已经饱和的目标抢优化预算。

核心摘要:这篇论文(arXiv: 2608.16072)指出多奖励 GRPO 的标准做法——"先加权和、再组内标准化"——有两个根本缺陷:不同奖励画像的 rollout 可能拿到完全相同的优势值,而且各目标的相对权重全程固定、无视其饱和程度。作者提出 SA-MRPO:每个奖励目标独立标准化,再按"批次级饱和度估计"动态打折,饱和的目标权重按 \((1-s^{(k)})^\gamma\) 衰减。效果上,数学推理两/三目标设定下 15 个基准对比中赢了 GDPO 12 个,AIME24 最多涨 5 个点;自适应推理 5 个基准全胜,平均涨 3.8 个点、AMC23 最多涨 9.2 个点。这是一个改动极小(只动优势构造、不动策略更新)但动机非常扎实的工程改进,值得做 RL 后训练的人细读。

论文信息

  • 标题:Learn What's Left, Not What's Mastered: Saturation Aware Advantage Reweighting for Multi-Reward Policy Optimization
  • 作者:Yixuan Wang, Yifei Chen, Haichao Zhang, Haozheng Luo, Xander Wu, Jie Ni, Yun Fu, Nuno Vasconcelos, Yijiang Li
  • 机构:University of Florida、UC San Diego、Northeastern University、Northwestern University、Stanford University、Universität Innsbruck 等
  • 链接:https://arxiv.org/abs/2608.16072 (2026 年 8 月 17 日提交)

🎯 问题:固定权重不知道哪个目标已经"学完了"

先铺垫一下背景。GRPO 这类组相对优势方法现在是推理模型后训练的事实标准:对同一个 prompt 采 \(G\) 条 rollout,用组内均值方差把奖励标准化成优势,省掉了 PPO 的 value function。但 GRPO 原生假设每条 rollout 只有一个标量奖励。实际场景里奖励几乎总是多维的——答案要对、长度不能超、格式要合规、代码要能跑。

标准做法是把奖励向量先加权求和成一个标量:

\[r_{\mathrm{sum}}^{(i,j)} = \sum_{k=1}^{n} w_k r_k^{(i,j)}\]

然后再组内标准化。作者指出这个设计有两个毛病,而且都挺要命的。

毛病一:标量化丢失奖励分辨率。 等权重下,奖励画像 \((1, 0)\)\((0, 1)\) 加权和完全一样,于是两条行为截然不同的 rollout 拿到一模一样的优势。一条"答案对但格式错"和一条"格式对但答案错",在梯度眼里是同一条。GDPO(arXiv: 2601.05242)已经解决了这个问题——每个奖励维度独立标准化再求和,不先混合。

毛病二:固定权重无视目标饱和度。 这个 GDPO 也没解决。格式奖励训练早期就冲到接近满分了,但它在优势公式里的权重 \(w_k\) 从头到尾不变。结果就是:已经解决的目标继续消耗梯度预算,而剩余空间最大的难目标(通常是正确性)分到的优化压力被稀释。

说实话,第二个毛病我之前调多奖励训练时也隐隐感觉到过——长度奖励的组内方差到后期变得很小(大家都拿满分),但因为每条 rollout 还有细微差异,标准化之后这些无意义的差异反而被放大成可观的优势信号。等于模型在被"长度 3990 和 4005 token 的区别"这种噪声梯度推着走。这篇论文把这个直觉形式化了。

🧠 一个例子看懂三种方法的差异

论文的 Figure 1 是我最近见过的把方法差异讲得最清楚的一张图:

图1:GRPO、GDPO、SA-MRPO 在一组 4 条 rollout 上的优势分配对比

图1:同一组 G=4 的 rollout,format 目标已饱和(饱和度 \(s_1=0.98\)),correctness 目标远未饱和(\(s_2=0.02\))。重点看中间的 rollout 2 和 rollout 3:前者 format 99/100 + correctness 1/100,后者 format 100/100 + correctness 0/100。

三种方法对这两条 rollout 的处理完全不同:

  • GRPO:两条的加权和都是 99,标准化后优势都是 0.00。"答对 1 分"和"答对 0 分"被一视同仁,正确性信号直接蒸发。
  • GDPO:分开了两个维度,能区分它们了——但给了 rollout 3 高达 +0.61 的优势、rollout 2 只有 +0.20。等等,rollout 3 的 correctness 是 0 分啊?原因是对饱和的 format 目标做组内标准化时,99 和 100 的微小差距被除以一个极小的标准差,放大成了显著的正优势。饱和目标不但没退场,还在主导排序。
  • SA-MRPO:format 维度整体打折后,局面反转——rollout 3 拿到 -0.69(比 rollout 2 的 -0.23 更负),而 correctness 最高的 rollout 4 拿到 +1.65 的最大优势。

注意这里最有意思的一点:SA-MRPO 不只是"缩放"优势的幅度,它直接反转了更新的方向。GDPO 想推高的 rollout 3,SA-MRPO 要压低。作者在后文也强调了这一点——这不是超参微调能产生的差别,是优化目标分配逻辑的差别。

🔧 方法:给每个目标装一个"剩余空间"阀门

SA-MRPO 的做法拆成三步,每步都很简单。

第一步,每个目标独立组内标准化(这步继承 GDPO):

\[A_k^{(i,j)} = \frac{r_k^{(i,j)} - \mu_k^{(i)}}{\sigma_k^{(i)}}\]

第二步,估计每个目标的批次级饱和度。 对整个 batch 取目标 \(k\) 的平均奖励 \(\bar{r}^{(k)}\),除以它的可达奖励区间:

\[s^{(k)} = \frac{\bar{r}^{(k)} - r_{\min}^{(k)}}{r_{\max}^{(k)} - r_{\min}^{(k)}} \in [0, 1]\]

这里有个前提:奖励必须是有界的、范围已知的。对 RLVR 的规则奖励(0/1 正确性、分段长度奖励、通过率)这完全成立,不需要学任何东西、不需要估计奖励天花板,\(s^{(k)}\) 是直接可观测的。

第三步,按剩余空间打折,聚合成优势:

\[\widetilde{A}^{(i,j)} = \sum_{k=1}^{n} w_k \left(1 - s^{(k)}\right)^{\gamma} A_k^{(i,j)}\]

然后因为权重随训练动态变化、优势尺度会漂移,再对整个 batch 做一次标准化得到最终优势 \(\widehat{A}_{\mathrm{SA}}^{(i,j)}\),塞进标准的 GRPO clipped surrogate 目标里就完事了。

一个直觉:\((1-s^{(k)})^\gamma\) 就是个阀门。目标越接近拿满,阀门关得越小;\(\gamma\) 控制关阀门的手劲。format 奖励饱和到 0.98 时,\(\gamma=0.25\) 下它的权重就只剩 \((0.02)^{0.25} \approx 0.38\) 倍;\(\gamma=1\) 时直接只剩 2%。而还没饱和的 correctness(\(s \approx 0.3\))权重几乎不打折。

几个性质值得单独说:

它严格泛化 GDPO 和 GRPO。 \(\gamma = 0\) 时所有饱和因子恒为 1,退化成 GDPO;单目标时再退化成 GRPO。所以它不是另起炉灶,是在现有方法上拧了一个旋钮。

相对权重的偏移是单调可控的。 对任意两个目标 \(a\)\(b\),若 \(s^{(a)} \gt s^{(b)}\),则

\[\frac{\widetilde{w}_a}{\widetilde{w}_b} = \frac{w_a}{w_b}\left(\frac{1-s^{(a)}}{1-s^{(b)}}\right)^{\gamma}\]

关于 \(\gamma\) 严格递减。\(\gamma\) 越大,优化压力越往剩余空间大的目标倾斜,方向是确定的,不是玄学超参。

作者很坦诚地承认:这不是带保证的约束优化。 论文 4.2 节专门分析了失败模式:当两个目标梯度冲突(\(g_a^\top g_k \lt 0\))且冲突足够强时,削弱已饱和目标的自我保护项,可能导致该目标性能下滑。SA-MRPO 是"自适应分配规则",不承诺每个已饱和目标单调保持。这个坦诚我挺欣赏——他们没有把方法包装成万能的 Pareto 保证,而是把问题留给实验:难目标上的收益能不能盖过易目标上的损失?答案基本是能。

还有一点作者也主动点破了:名义剩余空间不等于可优化的剩余空间。\(1 - s^{(k)}\) 量的是"奖励区间里还剩多少没拿到",但如果模型容量就到这儿了,剩下的区间可能本来就拿不到。这个区分我觉得挺诚实的,饱和度量的是进度,不是潜力的证明。

📊 实验:难目标上全面涨,已饱和目标基本不掉

实验覆盖三个场景,基座模型、训练数据、评测协议都换着来,对照组就是 GDPO(同数据、同奖励、同超参,只差优势构造)。

数学推理:两目标与三目标

Qwen2.5-3B/7B-Instruct,DeepScaleR-Preview(约 4 万道竞赛题)上训练,两目标为 correctness + length(4000 token 硬预算),三目标再加 format(XML 格式合规)。评 AIME24、AMC23、MATH500、Minerva Math、OlympiadBench 五个基准,每题采 16 条报 avg pass@1。

基准 指标 7B Base 7B GDPO(3目标) 7B SA-MRPO(3目标) 3B GDPO(2目标) 3B SA-MRPO(2目标) 3B GDPO(3目标) 3B SA-MRPO(3目标)
AIME24 Acc ↑ 11.7 11.5 16.5 5.0 8.5 6.7 8.1
Minerva Acc ↑ 16.1 24.2 24.8 16.2 16.6 16.9 18.1
AMC23 Acc ↑ 41.1 44.6 43.5 33.2 34.9 31.5 35.2
MATH500 Acc ↑ 50.0 64.2 67.7 57.1 58.2 58.9 59.5
Olympiad Acc ↑ 23.8 25.3 26.1 20.6 19.3 20.6 20.0

表1:数学推理主结果(准确率,%)。Exceed 指标(超长比例)各设定下 SA-MRPO 与 GDPO 基本相当,均在 1.7% 以内。

15 个对比里 SA-MRPO 赢了 12 个。7B 三目标下 AIME24 从 11.5 涨到 16.5,多了 5 个点——AIME 这种小样本高难基准上这个幅度不算小。MATH500 也涨了 3.5 个点。输的三个里,7B AMC23 掉 1.1 个点、3B Olympiad 分别掉 1.3 和 0.6 个点,幅度都在可接受范围。

我的批判性看法:赢面是实的,但不是碾压。3B 上多数提升在 1-2 个点,这种幅度在 pass@1 平均 16 次采样的协议下统计上还算稳,不过离"质变"远。真正的卖点不是绝对涨幅,而是"涨的同时 Exceed 没崩"——长度目标被主动打折了,超长率居然没恶化,说明机制确实按设计在工作。

自适应推理:把饱和写进奖励函数里

这个实验设计得很巧。作者把长度奖励改成分段函数:\(\leq B_{\min}=1024\) token 拿满分 1,\(B_{\min}\)\(B_{\max}=2048\) 之间线性衰减,超过 \(B_{\max}\) 为 0。这人为造出一个显式饱和区——响应一旦短于 1024 token,长度奖励封顶,再短也没用。基座换成 DeepSeek-R1-Distill-Qwen-7B。

基准 GDPO Acc SA-MRPO Acc Δ SA-MRPO 平均长度
AIME24 5.2 7.3 +2.1 804
Minerva 15.4 15.9 +0.5 277
AMC23 28.3 37.5 +9.2 个点 417
MATH500 47.1 51.5 +4.4 270
Olympiad 18.1 20.9 +2.8 529
平均 22.8 26.6 +3.8 个点 459

表2:自适应推理结果。两方法的平均响应长度都远低于饱和阈值 1024 token。

五个基准全胜,AMC23 直接涨 9.2 个点,这个数我看到的时愣了一下。代价是响应变长了(平均 333 → 459 token)。但注意作者的辩护逻辑:既然平均长度远在饱和区之内(459 远小于 1024),继续压长度本来就零收益,把这部分"长度预算"换成推理 token 去提正确性,恰恰是这个机制想要的行为。说白了——哦不,这话换个说法——你想想看,长度奖励已经封顶了,还为它省 token 就是纯浪费。这个实验是对机制最直接的验证。

代码生成:换个任务域还成立吗

Qwen2.5-7B-Instruct 在 Eurus-2-RL 上训练,双目标为可执行性(能编译运行)和测试通过率。直觉上可执行性是"易饱和"的基础约束,通过率是"难目标"——正好对上 SA-MRPO 的假设。

基准 指标 Base GDPO SA-MRPO
APPS Pass ↑ 43.8 53.2 53.8
CodeContests Pass ↑ 12.4 19.2 20.6
Codeforces Pass ↑ 8.7 10.6 12.9
TACO Pass ↑ 29.0 36.0 35.6

表3:代码生成结果(Pass 为平均测试通过率,%)。Bug 率(编译/运行错误比例)两方法基本相当,均远优于 Base。

四个基准赢三个,Codeforces 上最多涨 2.3 个点,TACO 小输 0.4 个点,Bug 率基本持平。提升幅度比数学场景温和,但跨任务域的一致性本身比单点大涨更有说服力。

🔬 消融:\(\gamma\) 旋钮真的可控吗

图2:不同 γ 取值下两奖励维度的训练曲线

图2:Qwen2.5-3B/7B 上 γ 从 0 到 1 的训练奖励轨迹。右侧两图:γ 大于 0 时 correctness 分数系统性地更高;左侧两图:γ 越大 length 分数越低,γ=0.75 和 γ=1.0 时下滑明显。

曲线和预测完全吻合:\(\gamma\) 增大 → 饱和的 length 目标被压得更狠 → correctness 受益。下游评测也确认了这个 tradeoff:

基准 Base γ=0 γ=0.25 γ=0.5 γ=0.75 γ=1.0
AIME24 0.6 5.0 8.5 9.0 8.7 7.4
Minerva 6.7 16.2 16.6 16.9 17.0 16.8
AMC23 10.7 33.2 34.9 35.6 35.3 34.8
MATH500 26.3 57.1 58.2 58.6 58.8 58.5
Olympiad 4.5 20.6 19.3 20.1 19.4 20.7

表4:γ 消融(Qwen2.5-3B,两目标,准确率 %)。γ=0 即 GDPO。所有正 γ 的平均准确率都高于 γ=0,γ=0.5 综合最强;γ 过大时 Exceed 开始抬头(1.1%)。

所有正 \(\gamma\) 都赢 \(\gamma=0\),说明收益确实来自饱和感知机制而不是随机扰动。\(\gamma\) 太大(1.0)时 AIME24 回落、超长率上升——阀门关太死,长度约束真被丢了。作者在正文实验里用的反而是偏保守的 \(\gamma=0.25\),说明表1的结果还有上调空间。

🤔 我的判断

这篇论文最值钱的地方在于:它把一个模糊的工程直觉变成了一个有名字、有公式、可控的机制。 "别在已饱和的目标上浪费梯度"这话谁都说过,但 SA-MRPO 给出了具体的落法——奖励区间归一化的饱和度 + 幂次折扣,外加一次 batch 级重标准化稳住尺度。改动只碰优势构造那一行,verl 里实现大概就几十行代码的事。

也要说清楚它的边界。跟同期工作比,DVAO 按奖励方差调权、GD2PO 处理优势冲突、SAW 用奖励变化率衡量目标信息量——大家都在解"多奖励权重不该固定"这同一个问题,SA-MRPO 的差异化是显式用"距奖励天花板的距离"作为分配依据,动机更直观,但说它是底层突破谈不上,更像是多奖励 RL 工具箱里一个设计干净的新旋钮。实验全是 3B/7B 规模、规则可验证奖励,对不可验证的学习型奖励模型(没有明确 \(r_{\min}/r_{\max}\))这套东西怎么迁移,论文没碰,这是个实际的落地问题。

对工程的启发很直接:如果你在跑多奖励 RLVR,先打开日志看看每个奖励的 batch 均值——哪个早就贴着满分不动了,哪个还在半山腰。只要有"贴满分"的目标存在,这个 \((1-s)^\gamma\) 折扣几乎是无成本的尝试,\(\gamma\) 从 0.25 起步扫到 0.5 就行。另外那个"饱和目标的标准化会放大无意义微差"的坑(图1里 GDPO 给 0 分正确答案 +0.61 优势),就算不用 SA-MRPO,也值得检查一下自己的训练是不是正在犯同样的错。

但还有个更本质的问题悬着:饱和是按 batch 均值估的,训练早期所有目标都不饱和、机制近似 GDPO,到中后期才开始分化——那如果不同 prompt 难度差异巨大,单一的全局饱和度估计会不会太粗?按难度分桶估饱和,可能是下一步值得做的事。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我