单标量奖励喂不饱长推理:HSD 用"成功的同伴"把信用钉死在出错那一刻

如果你训过 RLVR(带可验证奖励的强化学习),多半碰到过这个膈应人的场景:模型刷出来一条 500 token 的推理链,开头几步漂亮,中间某一步代数算错了,然后顺着错的一路推到底,最后答案错了。验证器给这条 rollout 打个 0。

然后 GRPO 把这个 0 摊到 500 个 token 上,每个 token 拿到一模一样的优势值。

问题是——那 500 个 token 里只有第 217 个 token 真正错了,前面 216 个 token 是对的,后面那一长串只是"忠实地把错误推下去"。可在 GRPO 眼里它们没有区别,全是同一个负信号。这就是长推理链里 token 级信用分配(credit assignment)的老大难:奖励是对的,但它不告诉你错在哪。

这篇来自乔治华盛顿大学的论文(arXiv:2606.15576)给了一个我觉得相当漂亮的解法:别再拿标准答案当老师了,拿同一批 rollout 里那条做对了的"同伴"当老师。 方法叫 Hindsight Self-Distillation(HSD,事后自蒸馏)。在 Qwen3-8B 和 Qwen3-32B 上,数学和代码全面超过 GRPO 系和现有自蒸馏方法,AIME 这种"答案极短"的任务上涨得最猛,32B 的 AIME-24 比 GRPO 直接高了 7.3 个点。


一段话讲清楚它在干嘛

RLVR 给每条 rollout 只发一个标量奖励,长链里到底哪一步该背锅,信息严重不足。on-policy 自蒸馏想用"特权信息"造一个稠密的 per-token 信号——让同一个模型当老师,多看一眼答案,再去教只看题目的学生。但大家习惯把"标准答案"塞给老师,而答案只是个终点提示:在 AIME 这种答案就是个三位数的任务上,老师在中间那些真正需要指导的位置上直接哑火。HSD 的招数是把老师条件换成"本组里一条做对了的同伴轨迹"。这条同伴是从当前训练组里白捡的,零额外采样成本。因为它是一条完整的成功延续,信用信号会自动聚集到"失败轨迹和成功同伴开始分道扬镳"的那个分歧位置。一针见血地说:这不是又一个 RL trick,而是把"自蒸馏的老师该看什么"这个问题想透了——答案是终点,同伴是路径,长推理要的是后者。

论文信息 - 标题:Localizing Credit at the Divergence: Path-Conditioned Self-Distillation for LLM Reasoning - 作者:Yu Li、Shu Hong、Tian Lan(乔治华盛顿大学) - 链接:https://arxiv.org/abs/2606.15576


🎯 为什么 GRPO 的信用分配"欠定"

先把 GRPO 那一步摊开看。组里采 G 条 rollout,每条拿到结果奖励 \(R_i \in \{0,1\}\),然后做组内标准化:

\[A^{G}_{i,t} = \frac{R_i - \mu}{\sigma}\]

注意下标 \(t\)——优势值对一条 rollout 的每个 token 都一样。这就埋了两颗雷:

第一,梯度信号没有定位能力。一条失败的链,错在哪里它不管,从头到尾一个负值糊上去。模型只知道"这条不行",不知道"这条从哪开始不行"。

第二,信号幅度完全由组内离散度 \(\sigma\) 说了算。如果这一组 rollout 全对或全错\(\sigma \to 0\),优势直接坍缩成零——这道题白训了。越是难题(全错)或者太简单(全对),越容易撞上这个零梯度。

on-policy 自蒸馏本来是想救这个的。它让同一个模型分饰两角:老师看 prompt 加一份特权上下文 \(c\)(通常就是标准答案 \(a^\star\)),学生只看 prompt。两者的 per-token KL 当成稠密信用:

\[A_{i,t} = \log\frac{\pi_\theta(o_{i,t}\mid q, c_i, o_{i,<t})}{\pi_\theta(o_{i,t}\mid q, o_{i,<t})}\]

思路没问题。但你把 \(c\) 设成标准答案的瞬间,麻烦就来了。


🤔 答案是终点,不是路径——一个被量化出来的哑火

这是全文我最喜欢的地方:作者没有停在"答案信息不够"这种定性吐槽,而是把它量化成了一个信息论上界。

命题 2:如果标准答案 \(a^\star\) 最多取 \(V_k\) 个不同值,那么整条链上答案能提供的信息总量被卡死在:

\[\sum_{t=1}^{T} I(o_t; a^\star \mid q, o_{<t}) \leq \log V_k\]

对 AIME 来说,\(V_k \approx 10^3\),也就是大约 6.9 nats 的信息,要摊到大约 500 个 token 上。模型再大也没用——你给老师看的就是个答案,它能从答案里榨出来的信息不可能超过答案本身。这个上界跟模型容量一点关系都没有。

实测数字更扎心。在 verbose-reference(给老师看完整解题过程)设置下,每条 rollout 的平均预测偏移 \(\overline{|A|}\) 还有 0.90 和 0.53 nats;可一旦换成 bare-answer(只给答案),MATH-numeric 上掉到 0.089,AIME 上掉到 0.039——降了 23 倍

老师不是不想教,是没东西可教了。

图1:不同基准上的逐token预测偏移

图1:横轴是相对位置 t/|o|,纵轴是采样 token 的预测偏移 |A|,每个基准 1024 条 Qwen3-8B rollout 平均。上排是 verbose-reference 任务(老师看完整解答),偏移在整条链上都有起伏;下排是 terse-target 任务(老师只看光秃秃的答案),偏移几乎贴着地板——老师在中间位置完全没声音。右侧边栏是各基准的 rollout 平均偏移。

图2:答案支持集大小与预测偏移的关系

图2:七个基准上的预测偏移 |A|,答案支持集从 V_k=2(二分类)一路到 V_k≈10⁴。\(|A|^2/2\) 可以当作"上下文在每个位置携带的条件信息"的代理量。上面那条按支持集缩放的参考线 log V_k/T 比实测偏移高出一到两个数量级。规律很干净:答案越紧凑,偏移单调缩小,右侧的差距在 terse-answer 设置上越拉越大。

这两张图基本把"为什么答案条件不够用"讲死了。答案越短,老师越哑。而恰恰是 AIME 这种答案最短的任务,最需要中间过程的指导。


🧠 HSD 的核心:把"做对的同伴"塞给老师

那换成什么?作者的回答简单到让人拍大腿:换成本组里另一条做对了的 rollout。

关键洞察在于:RLVR 训练循环里,组采样本来就常常同时吐出失败和成功的轨迹。每一条成功 rollout,都是模型自己当下生成的、已经被验证器盖章通过的推理路径。它就躺在那里,零额外成本。

而且这里有个干净的恒等式撑腰(拒绝采样恒等式):

\[\Pr[O = o_j \mid R(o_j)=1, q] = \pi^+(o_j \mid q)\]

\(R_j=1\) 过滤出成功 rollout,等价于直接从"成功条件策略" \(\pi^+\) 里采样。换句话说,你白捡的这条同伴,本身就是一个合法的、on-policy 的成功样本,不需要额外再跑一轮采样。

具体怎么用。对第 \(i\) 条 rollout,记它的成功同伴集合 \(\mathcal{S}_i = \{j \neq i : R_j = 1\}\),从里面均匀抽一条 \(o_i^+\),然后把老师的特权上下文设成:

\[c_i = \begin{cases}(a^\star, o_i^+), & \mathcal{S}_i \neq \emptyset \\ a^\star, & \mathcal{S}_i = \emptyset\end{cases}\]

组里要是一条成功的都没有,就回退到老路子,只用答案。注意同伴要排除自己(不然老师学生上下文一样,KL 恒为零),同时保留 \(a^\star\) 在场,用来稳住分歧点之后的尾部行为。

损失就是 per-token 的 reverse-KL,老师那边 stop-gradient,梯度只从学生这边回传:

\[\mathcal{J}(\theta) = \mathbb{E}\left[\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\mathrm{KL}\big(\pi^c_{i,t} \,\|\, \pi_{i,t}\big)\right]\]

外加一个 \(\beta\,\mathrm{KL}(\pi_\theta \| \pi_0)\) 锚定基模型防坍缩。

图3:终点上下文 vs 路径上下文

图3:这张图是 HSD 的灵魂。上半是只给老师答案 \(a^\star\),失败 rollout 上的 per-token 偏移几乎平的——一条线躺着,没信息。下半是给老师 \((a^\star, o^+)\)\(o^+\) 是同组的成功同伴。两条轨迹共享一段前缀直到分歧位置 \(\tau\),在共享前缀上 per-token 偏移接近零,在 \(\tau\) 处尖峰炸起,之后衰减。信用被精准钉在了"开始走错"的那一刻。


🔧 分歧位置:信用为什么会自动聚焦

为什么换成同伴,信用就能定位?因为失败轨迹和成功同伴会共享一段开头,然后在某个点分道扬镳。这个点就是分歧位置:

\[\tau \triangleq \min\{t \geq 1 : o_{i,t} \neq o^+_{i,t}\}\]

per-token 信用因此呈现一个很优雅的三段式:

  • 分歧前(\(t < \tau\):老师学生读的是同一段前缀,没分歧,信用贴着地板;
  • 分歧处(\(t = \tau\):老师把概率质量压在演示延续 \(o^+_{i,\tau}\) 上,学生还分散在包括那个错误 token 在内的好几个延续上,KL 一下子拉大——这里就是错误发生的位置
  • 分歧后(\(t > \tau\):失败链越走越偏,信用在随后 10–15 个 token 内衰减回地板。

模型不再需要猜"我这 500 步里哪步错了",信号直接告诉它:第 \(\tau\) 步,你本该接成功同伴那样,结果接歪了。

这里还有个覆盖率的细账值得说。失败、且组里至少有一条成功同伴的 rollout 占比是:

\[f(p, G) = (1-p)\big(1-(1-p)^{G-1}\big)\]

\(p\) 是通过率。这个函数在 \(p=0\)(全错)和 \(p=1\)(全对)时都是零,峰值在中等难度。\(G=8\) 时峰值约在 \(p^\star \approx 0.25\)。有意思的是 AIME 的通过率 \(p \approx 0.22\),正好落在峰值附近——所以理论上就预测 AIME 增益最大;而 HumanEval+ 通过率约 0.8,太简单了,增益最小。后面的实验数字跟这个预测对得严丝合缝,这种"理论先预言、实验后兑现"的论文我一向高看一眼。


📊 实验:AIME 上的涨幅最能打

主表用相同数据、\(G=8\)、训练 1500 步。先看 Qwen3-8B:

方法 MATH-500 AIME-24 AIME-25 LCB-v5 HE+
GRPO 78.4 24.5 21.6 32.0 80.5
Dr. GRPO 79.2 25.6 22.5 32.6 80.7
GSPO 79.7 26.3 23.2 33.0 80.9
DAPO 80.1 26.8 23.7 33.4 81.1
OPSD 80.9 27.3 24.4 33.7 81.4
SDPO 81.4 27.9 25.0 34.5 82.0
RLSD 81.6 28.2 25.3 34.8 81.6
GRPO + OPSD 81.9 28.6 25.7 35.1 81.7
HSD(本文) 83.6 31.4 28.1 37.2 81.9

再看 Qwen3-32B:

方法 MATH-500 AIME-24 AIME-25 LCB-v5 HE+
GRPO 85.2 38.7 34.5 41.6 86.3
DAPO 86.8 41.1 36.7 42.9 86.8
OPSD 87.0 41.5 37.1 43.0 86.9
SDPO 87.5 42.3 37.8 43.7 87.4
GRPO + OPSD 87.9 43.2 38.6 44.1 87.1
HSD(本文) 89.4 46.0 41.7 46.8 87.3

读数字之前先看趋势:从 GRPO 到 DAPO 到各种自蒸馏,每一档涨零点几到一个点,挤牙膏式的。HSD 上来直接拉开。

比 GRPO 的增益:8B 上 AIME-24 涨 6.9 个点、AIME-25 涨 6.5 个点;32B 上 AIME-24 涨 7.3 个点、AIME-25 涨 7.2 个点。比现有最强的自蒸馏方法(OPD best),数学和代码上还能再稳拿两到三个点。

但我更欣赏作者的诚实:HumanEval+ 这一列,HSD 是 81.9 / 87.3,输给 SDPO 0.1 个点,表里明明白白标着 −0.1。为什么?回去看覆盖率那个公式——HumanEval+ 通过率约 0.8,组里几乎条条都对,根本凑不出"失败+成功同伴"的配对,HSD 没用武之地。这不是缺陷,是方法适用边界的自然结果,而且跟理论预测完全一致。一篇敢把自己输的那一列原样放出来、还能用自己的理论解释清楚的论文,可信度高很多。

图4:HSD在Qwen3-8B上的诊断视图

图4:四联诊断图。(a) AIME-25 上 1500 步的训练动态,HSD 对四个基线,最终值标在右侧——HSD 在前几百步就分离出去,差距单调拉大。(b) HSD 随组大小 G 和训练步数的网格,每格标准确率,大部分增益在 G=8 拿到。(c) 路径监督覆盖率 Pr[|S_i|>0] 按难度和组大小分层:难题的覆盖率随 G 陡升,从 G=4 的不足 20% 升到 G=16 的约三分之二。(d) 同伴选择规则消融:均匀采样(本文用的)跟最优方案的差距在评测噪声以内。


🔬 几个值得拎出来的消融

同伴怎么选? 图4(d) 比了四种从成功集合里抽同伴的规则。最低困惑度略好于均匀采样,均匀采样又好于最短长度和最高困惑度,最高困惑度明显最差。作者最后选均匀采样——因为那点收益不值得额外记账的开销。这个取舍我认可,工程上少一个需要维护的排序逻辑是实打实的省心。

终点回退有没有用?\(\mathcal{S}_i = \emptyset\) 时回退到只用答案这步去掉,8B 上 AIME-25 和 MATH-500 明显掉。回退主要在前几百步对最难的问题起作用——那些题早期一条成功 rollout 都采不出来,没有回退就彻底拿不到梯度,直接饿死。

信用真的聚焦了吗? 这是图5,也是对核心主张的直接验证。

图5:分歧位置附近的per-token信用分布

图5:横轴是相对分歧位置 τ 的偏移 t−τ,纵轴是 per-token 信用 |A|,512 条失败 rollout 平均。左图:HSD 的信号在两个规模上都聚集在 τ 处,32B 的尾巴比 8B 更宽;而条件为 c=a⋆ 的 OPSD 基线在整个窗口里都待在"静默带",根本没有 τ 峰值。右图:累积信用质量随窗口 |t−τ|≤w 的变化——HSD 把大约 55% 的质量集中在 τ 的 ±8 token 内,OPSD 则均匀摊开。

配套的累积质量表(Qwen3-8B)把这事钉死:

窗口 w 2 4 8 16 32
HSD 23% 39% 55% 76% 93%
GRPO+OPSD 11% 21% 31% 53% 79%
OPSD 7% 13% 19% 36% 64%

±8 token 内,HSD 攒了 55% 的信用,OPSD 不到 20%。所谓"定位信用"不是嘴上说说,是真量出来了。

还有一个细节我觉得特别有说服力:作者拿 SDFT(用离线专家演示做自蒸馏)对比,发现 SDFT 的参考解在 87% 的情况下跟失败 rollout 共享 0 个 token(除了 prompt 之外完全对不上),而 HSD 的同组同伴跟失败 rollout 中位数共享 58 个 token 前缀。前缀对不上,分歧位置就无从谈起,信用也就聚焦不了。这一刀解释了为什么"必须用同组的 on-policy 同伴",而不是随便找条专家解答塞进去——同源才有共享前缀,共享前缀才有清晰的分歧点。


💡 我的判断

先说成本,省得有人觉得这是免费午餐。HSD 每步要跑学生和老师两次前向,老师那次还更长(多了同伴上下文),实测 Qwen3-8B 上每步 24.1 秒,GRPO 是 11.2 秒——两倍多。但按"每秒计算换来的 AIME-25 增益"算,HSD 约 0.27 点/秒,OPSD 约 0.14 点/秒,单位算力的回报反而是 OPSD 的两倍。贵,但贵得值。

这篇论文我给的评价是:一个被想得很透的好 idea,加上一套自洽到有点优雅的论证。 它最值钱的地方不是"涨了几个点",而是把"自蒸馏的老师该看什么"这个一直被默认成"看答案"的设定给掀翻了,并且用信息论上界 + 覆盖率公式 + 分歧位置三段式,把"为什么答案不够、为什么同伴管用、什么任务管用什么任务不管用"全都说圆了。理论预测 AIME 涨最多、HumanEval+ 涨不动,实验一一兑现,连自己输的那 0.1 个点都解释得明明白白。

要说保留意见,两倍的训练开销在大规模场景下不是小数目,而且整个方法吃"组内能凑出失败+成功配对"这个前提——任务太简单或太难都会让覆盖率塌掉,回退机制只能算个补丁。它本质上是中等难度区间的利器。

但话说回来,AIME 这种"答案极短、过程极长"的推理任务,本来就是当前最难啃也最值钱的硬骨头,HSD 恰好打在这个点上。如果你正在做长推理的 RL 训练,尤其是数学和竞赛代码方向,这个"拿成功同伴当老师"的思路,真的值得拿去试一把——它不需要额外采样,改的就是老师的条件输入,落地成本比想象中低。


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