GRPO 和自蒸馏都不够好?这篇论文用样本路由把两者粘在一起,还真work了

你有没有碰到过这种情况——用 GRPO 训模型,reward 涨得挺稳,但感觉模型学得很"粗",好像只学到了"答对就好",没学到更细粒度的推理修正能力?

然后你换成自蒸馏(SDPO),训了几个小时还不错,token级别的信号确实更dense。但再往后训,模型突然开始崩——accuracy 断崖式下跌,self-teacher 的熵越来越高,信号越来越不靠谱。

一个太粗,一个会崩。能不能让它们互补?

这篇来自中科院自动化所、新加坡国立大学等团队的论文,给了一个出乎意料简洁的方案:别让所有样本走同一条路——答对的走 GRPO,答错的走 SDPO。就这么一个路由策略,在 Qwen3-8B 上平均准确率达到 77.4%,比 GRPO 高 3.4 个点,比 SDPO 高 6.3 个点,同时每步计算量还省了 17.2%。

说实话,看到这个设计的时候,我的第一反应是:这也太直觉了吧?但看完实验,尤其是消融实验里 sample-level routing 和 advantage-level mixing 的对比,确实说明了"在哪个层级做混合"这件事没那么trivial。


📖 论文信息

  • 标题:Unifying Group-Relative and Self-Distillation Policy Optimization via Sample Routing
  • 作者:Gengsheng Li, Tianyu Yang, Junfeng Fang, Mingyang Song, Mao Zheng, Haiyun Guo, Dan Zhang, Jinqiao Wang, Tat-Seng Chua
  • 机构:中科院自动化所 / 中国科学院大学 / 新加坡国立大学 / 腾讯 / 武汉AI研究院
  • 链接:https://arxiv.org/abs/2604.02288
  • 日期:2026年4月

🎯 核心摘要

LLM 后训练(post-training)中,GRPO 和 SDPO 各有软肋:GRPO 信号太粗(sequence-level reward 广播到每个 token),SDPO 长时间训练会崩溃(self-teacher 信号退化)。SRPO 的核心idea 是按样本正确性做路由——答对的样本用 GRPO 做奖励强化,答错的样本用 SDPO 做 token 级纠错蒸馏,再加一个熵感知的动态加权来压制不靠谱的蒸馏信号。在五个科学推理 benchmark 上,Qwen3-8B 平均 77.4%(GRPO 74.0%,SDPO 71.1%),计算量反而更低。这不是一个"大力出奇迹"的工作,而是一个把诊断做得很扎实、方案设计非常对症的工程优化。


🧠 问题动机:GRPO 和 SDPO 到底差在哪?

先快速回顾一下两个baseline。

GRPO(DeepSeek 提出的)核心思路很简单:同一个 prompt 生成一组回答,用组内 reward 的相对排名作为 advantage,省掉 critic model。好处是稳定,坏处是 credit assignment 太粗——整个 sequence 拿同一个 reward,广播到每个 token。模型知道"这个答案对了",但不知道"哪个token该为对负责"。

SDPO 走另一条路:用模型自己(conditioned on 正确答案)做 teacher,生成 token 级别的 logit 信号来指导训练。信号确实更 dense,但问题是——随着训练推进,这个 self-teacher 自己也在退化。

作者做了一组非常漂亮的诊断实验来拆解 SDPO 为什么会崩。

Figure 1: GRPO vs SDPO vs SRPO的训练动态对比

Figure 1:三张子图分别展示了效率与稳定性的权衡(左)、正确样本上的歧义问题(中)、self-teacher 熵随训练时间升高的退化现象(右)

Figure 1 里有几个关键发现:

(a)效率 vs 稳定性的两难。上面一行是 accuracy vs 生成数量,SDPO 收敛快(大约 3 倍于 GRPO),但下面一行看长时间训练,SDPO 在约 80000 步后直接 collapse,而 GRPO 虽慢但稳。SRPO(红线)两头兼顾——既快又稳。

(b)正确样本上的歧义。中间那张图特别有意思:把 SDPO 拆成只看"正确样本"和只看"错误样本"两条线。黑色虚线(错误样本)表现稳定,但绿色虚线(正确样本)波动剧烈。为什么?因为一道题可以有多条正确的推理路径,self-teacher 选了其中一条,但模型走了另一条同样对的路径——这时候蒸馏信号反而在"惩罚"一个正确的行为,制造了优化歧义。

这个观察很关键。

(c)信号退化。右图展示 self-teacher 的 token 级熵随训练时间单调上升,从 0.5 涨到接近 2.0。熵越高,teacher 的分布越平坦,蒸馏信号的信噪比越低。

三个发现指向同一个结论:SDPO 不应该用在正确样本上,而且即使用在错误样本上,也需要根据 teacher 的可靠程度做加权。


🏗 方法核心:SRPO 怎么做的?

整体架构

Figure 2: SRPO框架图

Figure 2:SRPO 的整体流程——对同一个 prompt 的多条 rollout,先做正确性检查,答对的走 GRPO 分支(sequence-level advantage),答错的且有 teacher 信息的走 SDPO 分支(token-level 蒸馏),再汇总两个 loss

思路非常清晰。对一个 prompt \(x\),模型生成 \(n\) 条 rollout,每条用 verifiable reward 判断对错。然后做路由:

路由规则

\[z_i^{\text{SDPO}} = (1 - c_i) \cdot m_i\]

其中 \(c_i \in \{0,1\}\) 是 correctness indicator,\(m_i \in \{0,1\}\) 表示是否能构建 teacher 信息(需要同 prompt 下至少有一条正确 rollout 作为 teacher 输入)。路由到 GRPO 的就是剩下的:\(z_i^{\text{GRPO}} = 1 - z_i^{\text{SDPO}}\)

翻译成人话: - 答对了 -> GRPO,用组内相对 reward 做强化,稳稳当当 - 答错了,但同 prompt 下有别的答对了 -> SDPO,用答对的那条作为 teacher 信息,做 token 级纠错 - 答错了,同 prompt 下全错了(没有 teacher 信息)-> 也归 GRPO(作为低 advantage 样本被抑制)

熵感知动态加权

光做路由还不够。即使只在错误样本上用 SDPO,teacher 信号的质量也参差不齐——有的 token 位置 teacher 很确定,有的位置 teacher 自己都在猜。

SRPO 引入了一个按 token 的动态权重:

\[\tilde{w}_{i,t} = \exp(-\beta \cdot H_{i,t})\]

\(H_{i,t}\) 是 teacher 在第 \(t\) 个 token 位置的熵,\(\beta\) 控制灵敏度。熵越高(teacher 越不确定),权重越低。

这个设计的工程直觉很好理解:teacher 信号可靠的时候多学一点,不可靠的时候自动收手。\(\beta=1\) 是默认值,相当于对高熵 token 做了一个指数衰减的"软过滤"。

最终 loss

\[\mathcal{L}_{\text{final}} = \frac{\sum_i z_i^{\text{GRPO}} \cdot \ell_i^{\text{GRPO}} + \sum_i z_i^{\text{SDPO}} \cdot \ell_i^{\text{DW-SDPO}}}{\sum_i z_i^{\text{GRPO}} + \sum_i z_i^{\text{SDPO}}}\]

GRPO 分支用标准的 clipped advantage loss,SDPO 分支的 loss 是带动态权重的 KL 散度。两个分支的 loss 按各自的样本数做归一化后直接加在一起。

坦率讲,整个方法从头到尾没有什么"黑魔法"。路由规则是二值的,权重公式是单调的,loss 合并是线性的。但恰恰是这种简洁让我觉得这个工作比较靠谱——越复杂的方法越容易过拟合到特定的实验设置上。


🧪 实验结果

实验设置

  • 模型:Qwen3-4B 和 Qwen3-8B(instruct 版)
  • 硬件:8 张 NVIDIA H20 GPU
  • 评估:5 个科学推理 benchmark(Chemistry, Physics, Biology, Materials, Tool Use),来自 SciKnowEval 和 ToolAlpaca
  • 指标:mean@16(每个问题生成 16 条,取平均准确率),更稳定地反映模型能力

主实验:Qwen3-8B(10h 训练预算)

方法 Chemistry Physics Biology Materials Tool Use Average
GRPO 78.9 73.6 70.6 77.8 69.0 74.0
SDPO 80.6 74.0 58.5 76.6 65.7 71.1
SRPO 83.0 78.4 72.8 81.5 71.2 77.4

几个值得注意的点:

SDPO 在 Biology 上只有 58.5%,比 GRPO 低了 12 个点。这正好印证了前面的诊断——Biology 的训练集最小(450 条),模型能力提升快,self-teacher 退化也最快。数据越少、训练越久,SDPO 崩得越狠。

SRPO 在所有五个 benchmark 上都是最优的,没有一个"跷跷板"。Chemistry 从 78.9 涨到 83.0,Physics 从 73.6 涨到 78.4,这种跨 benchmark 的一致性比单点提升更有说服力。

Qwen3-4B 的结果

方法 Average
GRPO 69.7
SDPO 66.7
SRPO 74.2

4B 模型上差距更大——SRPO 比 GRPO 高 4.5 个点,比 SDPO 高 7.5 个点。小模型容量更有限,SDPO 的退化问题更严重,SRPO 的路由策略价值更大。

训练动态

Figure 3: 三个benchmark上的训练曲线

Figure 3:Chemistry、Biology、Tool Use 三个 benchmark 上的训练动态。SDPO(绿线)在 Biology 上明显 collapse,而 SRPO(红线)全程稳定

这张图把 SDPO 的问题暴露得很彻底:在 Biology 上,SDPO 约 5 小时后开始崩,到 10 小时已经从峰值 0.6 跌到 0.4 以下。GRPO 稳但慢,SRPO 兼具两者的优势。

计算效率

Figure 4: 计算效率对比

Figure 4:(a)训练过程中 response 长度变化;(b)不同时间窗口下每步训练耗时

这里有个有趣的现象:GRPO 的 response 越训越长(从约 450 涨到 500+),因为模型学会了"写长一点可能拿到更高的 reward"。SDPO 反过来,越训越短。SRPO 处于中间,而且更稳定。

每步训练耗时方面,SRPO 在 10h 时比 GRPO 快 17.2%,比 SDPO 快 8.6%。为什么比两个 baseline 都快?因为 SRPO 的 response 更短,forward/backward 的 token 数更少。

消融实验

变体 1h 5h 10h
Advantage Mix 67.2 72.3 72.3
SRPO w/o dynamic weighting 66.5 74.8 75.6
SRPO (full) 66.9 75.5 77.4

这里有个关键对比:Advantage Mix vs Sample Routing

Advantage Mix 是把 GRPO 和 SDPO 的 advantage 在 token 级别做加权混合,也就是"每个 token 都同时受两种信号影响"。而 SRPO 是在 sample 级别做路由,"每条样本只走一条路"。

结果差别很大:5h 时差 2.5 个点,10h 时差 5.1 个点。而且 Advantage Mix 在 5h 到 10h 之间完全停滞(72.3 -> 72.3),说明 token 级混合也继承了 SDPO 的退化问题。

样本级路由比优势级混合好,因为它从根本上避免了正确样本的蒸馏歧义。

动态加权的贡献看起来不大(1h 时只有 +0.4),但越到后期越明显(10h 时 +1.8)。这也合理——训练越久,teacher 的熵越高,动态加权的"过滤"作用越重要。

自适应路由比例

Figure 5: 训练过程中样本路由比例的变化

Figure 5:训练过程中 GRPO 分支(a)和 SDPO 分支(b)的样本占比变化,以及可构建 teacher 信息的样本占比(c)

这张图展示了一个很自然的现象:训练初期模型弱,答错的多,约 40% 的样本被路由到 SDPO 分支。随着模型变强,答对的比例上升,GRPO 分支的比例从 60% 逐渐升到 80%+。

这种自适应是"免费"的——不需要任何 scheduling hyperparameter。模型自身能力的提升自动调节了两个分支的配比。我觉得这是 SRPO 设计上最优雅的地方。


🤔 我的判断

亮点

1. 诊断先行,方案后出。 这篇论文最有价值的部分可能不是 SRPO 本身,而是 Figure 1 的诊断分析。把 SDPO 的崩溃拆成"正确样本歧义"和"teacher 信号退化"两个独立原因,每个原因指向一个对应的设计决策(路由 + 动态加权)。这种"先看病再开药"的研究范式比"先想个方法再找理由"要扎实得多。

2. 方案极简,没有多余零件。 路由是二值的(对/错),权重是单调的(熵越高权越小),loss 合并是线性的。没有什么需要精心调的 scheduling strategy,也没有引入额外的模型或参数。

3. 自适应信号混合。 不需要手动设定"训练前期多用 SDPO,后期多用 GRPO"的 schedule,模型能力的变化自动调节了路由比例。

局限和疑问

1. 评估 benchmark 偏"小数据"。 五个 benchmark 里最大的 Chemistry 也只有 1890 条训练数据,Biology 只有 450 条。在更大规模的数据集(如 MATH、GSM8K)上是否还能保持优势?SDPO 的退化速度跟数据量直接相关,数据越多、模型需要更多步才会过拟合,SRPO 的路由优势可能被削弱。

2. 只在 Qwen3 上验证。 4B 和 8B 两个尺度,同一个模型系列。在 LLaMA、Mistral 或其他架构上是否有类似效果,论文没有回答。

3. 只对比了 GRPO 和 SDPO。 没有跟 PPO、REINFORCE++、Dr.GRPO 等同期的 RL 训练方法做对比。如果 SDPO 本身就不是 GRPO 最好的替代品,那 SRPO 的"统一"价值就需要重新评估。

4. teacher 信息的构建依赖同 prompt 下有正确 rollout。 如果某个 prompt 下所有 rollout 都错了(比如 8 条全错),那这些样本只能走 GRPO 分支,拿不到任何 dense signal。在模型能力较弱、题目较难的场景下,这个比例可能不低。

5. \(\beta\) 的鲁棒性。 论文用的默认值 \(\beta=1\),但没有给出不同 \(\beta\) 值下的消融。熵的绝对值跟词表大小、序列长度都有关系,\(\beta=1\) 是否在不同模型/任务上都能work?

跟同期工作的关系

这篇工作的定位是"工程整合"而非"底层突破"。GRPO 和 SDPO 都不是新提出的,SRPO 的贡献在于找到了一个合理的方式把它们组合起来。这跟 Dr.GRPO(解决 GRPO 的 baseline 偏差问题)、DAPO(解决 GRPO 的 entropy collapse 问题)等工作思路不同——那些是在修 GRPO 本身的bug,这篇是在 GRPO 之外补一条蒸馏支路。

从工程实践角度看,SRPO 的实现成本很低(主要是加一个 correctness-based routing 和一个 entropy weighting),而且跟 GRPO 的各种改进(Dr.GRPO、DAPO 等)不冲突。如果你已经在用 GRPO 做 RL 训练,加上 SRPO 的路由逻辑应该是一个 low-hanging fruit。


💡 工程启发

如果你在做 LLM 的 RL 后训练,有几个 takeaway:

  1. 不要用同一个信号训所有样本。 答对的样本和答错的样本,最优的训练信号是不同的。答对的用 sequence-level reward 就够了,答错的才需要 token-level 的纠正信号。

  2. 自蒸馏要有"保质期"。 Self-teacher 的信号质量会随训练退化,不加控制地长时间用会崩。如果你在用任何形式的自蒸馏,监控 teacher 的 token 熵是一个很好的健康指标。

  3. 简单的方法组合,只要组合点选对了,效果可能比复杂的统一方法更好。 SRPO 的每个组件都不新,但"在样本级别而非 token 级别做信号混合"这个选择,让简单的组合避开了复杂的交互问题。


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