老师喜欢的不等于对的:GC-OPD 用「组内残差」给长上下文蒸馏纠偏

做长上下文后训练的朋友应该都有过这种隐隐的不安:on-policy distillation 训练的时候,teacher 对每个 token 的 logprob 支持明明很高,但任务 verifier 给的 reward 就是不涨。老师的「语感」和任务的「对错」,到底哪个该信?

清华、北邮和 OpenBMB 的这篇 GC-OPD(arXiv:2608.19181)把这个直觉做成了一个可量化的诊断,然后给了一个相当轻量的修正方案。说实话,我读完的感觉是:问题定义得很干净,解法也很克制——不改动 teacher、不增加额外 forward,只在 advantage 构造环节做了一次「组内校准」。这种小切口、强动机的论文,比那些上来就堆模块的工作读起来舒服多了。

核心摘要:On-policy distillation(OPD)用 teacher 的 token 级 logprob 差作为稠密优势信号训练 student,但在长上下文任务里,teacher 可能偏爱「局部通顺但漏掉远处证据」的回答,与 response 级的任务 verifier 产生系统性分歧。论文先在两个证据聚合任务上量化了这种「师生分歧」——输入越长,分歧率从 40% 一路涨到 64%。解法 GC-OPD 分三步:在 rollout 组内分别对 verifier reward 和 OPD 轨迹分数做 z-score 归一化,两者之差构成带符号的分歧残差,再用 RACA 按 token 的相对 OPD 优势把残差分摊到每个 token 上。在五个长上下文 benchmark 上,Qwen3-4B 从 29.08 提到 40.47,Qwen3-8B 从 35.12 提到 44.65,均压过 vanilla OPD 和四个同期 OPD 变体。提升幅度对 OPD 而言约 1.1 个点,不算爆炸,但消融做得扎实,残差设计的每一步都被验证过。


📖 论文信息

  • 标题:Beyond Teacher Likelihood: Group-Calibrated On-Policy Distillation for Long-Context Reasoning
  • 作者:Zhu Zhang、Jixun Wang(共同一作)、Xiaoang Xu、Xiaorong Wang、Zihan Zhou、Zhiyuan Wang、Shuo Wang、Chaojun Xiao、Yuezhi Zhou(通讯)
  • 机构:Tsinghua University、Beijing University of Posts and Telecommunications、OpenBMB
  • arXiv:https://arxiv.org/abs/2608.19181 (2026 年 8 月 19 日提交)
  • 代码:https://github.com/SolereZhang/GC-OPD

🎯 问题动机:老师的「喜欢」和任务的「对错」是两回事

先把背景补齐。On-policy distillation 这条线(GKD、MiniLLM 一路下来)的核心是:student 自己采样回答,teacher 在 student 的生成分布上给逐 token 的 logprob,优势函数就是两者的对数概率差:

\[A^{(i)}_{t}=\log\pi_{T}(y^{(i)}_{t}\mid\mathbf{x},\mathbf{y}^{(i)}_{<t})-\log\pi_{\theta_{\mathrm{old}}}(y^{(i)}_{t}\mid\mathbf{x},\mathbf{y}^{(i)}_{<t})\]

这个信号的期望等于负的 reverse KL——也就是说,它在数学上度量的就是「teacher 比 student 更支持这个 token 多少」。信号是稠密的,每个 token 都有反馈,这是它相对纯 RL 的最大卖点。

但问题在于:稠密 ≠ 正确。这个信号度量的是 teacher 的偏好,不是任务是否完成。

短上下文场景里这两者大概率一致——输入就几百 token,teacher 看着通顺的回答通常也真的答对了。长上下文就不一样了。一个 32K token 的输入,证据散落在各个角落,student 完全可能写出一个局部读起来很顺、teacher 每个 token 都点头、但实际上漏掉了关键证据的回答。这时候任务 verifier(比如 exact match、IoU、Set F1)会毫不留情地打低分。

论文管这个叫 teacher–verifier disagreement。光说不练不行,作者做了个诊断实验:拿 GoLongRL 里的两个证据聚合任务(Multi-Table Extraction 751 条、High-Recall Retrieval 2,908 条),用 Qwen3-8B 当 student、Qwen3-30B-A3B-Thinking-2507 当 teacher,每个 prompt 采 8 条回答,把 token 级优势平均成轨迹级 OPD 分数 \(s^{(i)}\),然后看它和 verifier reward 的组内排序是否一致。

两个指标:pairwise disagreement rate(OPD 排序和 verifier 排序冲突的样本对占比)和 OPD preference gap(沿 verifier 排序方向,OPD 偏好的方向和幅度)。

图1:两个证据聚合任务上的师生分歧诊断

图1:左侧是分歧的四象限示意——按 OPD 分数高低和 verifier reward 高低分成四类,对角线上的两类就是分歧。右侧是随 prompt 长度变化的趋势:MTE 任务的分歧率从 <8K 的 41% 涨到 32–64K 的 64%,preference gap 从 +0.35 跌到 -0.37;HRR 任务从 35% 涨到 60%,gap 从 +0.65 跌到 -0.35。输入越长,老师越「看走眼」。

看到这组数字我愣了一下。32–64K 区间里分歧率超过六成,preference gap 还变成负的——OPD 不只是跟 verifier 不一致,它是在系统性地偏向 verifier 认为更差的回答。拿这种信号训长上下文,训得越久可能偏得越远。这个动机站得住。


🏗️ 方法核心:组内归一化 → 带符号残差 → RACA 分摊

GC-OPD 的思路一句话就能讲完:不动 teacher 给的稠密信号,只用 verifier 和 OPD 在组内归一化后的差值做修正项

图2:GC-OPD 方法总览

图2:三步流程。① 组内相对评估:每个 prompt 采 G 条 rollout,算出各自的轨迹级 OPD 分数和 verifier reward,分别在组内做 z-score 归一化。② 分歧残差:归一化后的 verifier reward 减去归一化后的 OPD 分数,得到 response 级的标量残差 ρ,ρ<0 表示 OPD 比 verifier 更偏爱这条回答,ρ>0 则相反。③ RACA 信用分配:按每个 token 的相对 OPD 优势把残差分摊下去,ρ>0 的回答整体被抬升(Promote),ρ<0 的被压制(Suppress),最后叠加回原始 OPD 优势。

第一步:组内 z-score 归一化

两个信号量纲完全不同(reward 可能是 0/1 或 [0,1] 的分数,OPD 分数是 logprob 差的均值),直接比 raw value 没意义。GC-OPD 借用 GRPO 的组内比较思路,在每个 rollout 组内分别归一化:

\[\tilde{R}^{(i)}=z(R^{(i)}),\quad \tilde{s}^{(i)}=z(s^{(i)})\]

对 graded reward(IoU、F1 这类),归一化保留了组内 outcome 的相对间距——这点比只用排序的方法精细。

第二步:带符号的分歧残差

\[\rho^{(i)}=\tilde{R}^{(i)}-\tilde{s}^{(i)}\]

为什么用差值而不是直接加 verifier reward?作者的论证挺漂亮:如果直接加 reward,你会重复强化 OPD 已经表达过的偏好。残差在两个信号一致时自动归零,分歧越大修正越强——校准火力精确集中在「老师和裁判打架」的地方。

还有一个排序一致性的小性质:如果 verifier 偏爱 i 而 OPD 偏爱 j(严格分歧),那么必有 \(\rho^{(i)}-\rho^{(j)}\gt 0\),残差的排序永远和 verifier 一致。方向不会错。

边界情况也处理了:组内任一信号标准差接近零(比如 8 条 rollout 全对或全错),整组残差置零,退化为 vanilla OPD。不硬来。

第三步:RACA 信用分配

残差是 response 级的标量,怎么分给每个 token?这是所有 outcome reward 方法都绕不开的信用分配问题。RACA 的做法:先把每个 token 的 OPD 优势减去轨迹均值、除以轨迹内标准差,得到相对优势 \(u^{(i)}_t\),再过一个有界映射:

\[c^{(i)}_{t}=1+\tanh\left(\frac{u^{(i)}_{t}}{2}\right)\in(0,2)\]

最终的优势函数:

\[A^{\prime(i)}_{t}=A^{(i)}_{t}+\beta\,c^{(i)}_{t}\rho^{(i)}\]

这个设计有几个细节值得说。credit 恒为正,所以它只缩放残差、永不翻转符号——残差说压就压、说抬就抬,token 级只决定「分多少」。tanh 有界,单 token 最多分到 2 倍、最少接近 0 倍,不会出现极端权重。而且 \(u_t\) 只是分配信号,作者特意声明不要把它解读成 token 正确性——这种克制我很喜欢,比那些硬把启发式权重包装成「重要性估计」的工作诚实。

工程上几乎零成本:OPD 优势和 verifier reward 本来就是 pipeline 里算好的,GC-OPD 只加了组内聚合、归一化和逐 token 的逐元素变换,不需要任何额外的 teacher 或 student forward

超参 β 的选择

图3:残差系数 β 的留出验证

图3:在 231 条与训练集无重叠的 GoLongRL 留出样本上扫 β。两种汇总口径(step-100 单点 reward、steps 60–100 均值)在 4B 和 8B 上都指向 β=0.10。注意 8B 上 β 拉到 0.3 以上 reward 明显回落——修正项不是越大越好。


🧪 实验:五榜全面对比 + 两层消融

设置:student 是 Qwen3-4B 和 Qwen3-8B(no-thinking 模式),teacher 是 Qwen3-30B-A3B-Thinking-2507,YaRN ×4 扩上下文。训练数据从 GoLongRL 过滤出 ≤32K token 的 9,527 条 prompt,覆盖 9 个任务族(3 个 binary reward、6 个 graded reward)。所有方法共享同一套训练配置:100 步,每步 32 个 prompt × 8 条 rollout。评测五个 benchmark:DocMath(数值推理)、FRAMES(多跳综合)、MRCR(多轮指代)、CorpusQA(语料聚合)、LBv1QA(长文问答),输入上限 120K token。

主结果(Qwen3-8B,五榜均值,%):

方法 Avg. DocMath Frames MRCR CorpusQA LBv1QA
Raw(未训练) 35.12 45.88 30.95 23.87 22.19 52.70
OPD 43.56 55.13 34.59 30.44 39.82 57.80
ExOPD† 43.49 53.12 33.50 32.73 37.69 60.40
Uni-OPD† 43.41 54.13 34.59 25.25 42.86 60.20
PowerOPD† 41.53 51.38 32.65 31.65 37.39 54.60
FiRe-OPD† 44.01 54.00 34.34 30.96 41.64 59.10
GC-OPD 44.65 55.50 34.59 31.10 43.77 58.30

4B 侧同样成立:Raw 29.08 → OPD 39.31 → GC-OPD 40.47,也是所有共享设置实现里的最高均值。

几点我的观察:

  • 相对 vanilla OPD,4B 涨 1.16、8B 涨 1.09 个点。单看幅度不算惊艳,但注意 baseline 全是在完全相同的初始化、teacher、数据、rollout 配置和训练预算下复现的(†标记),这个对比是干净的。
  • 增益集中在 CorpusQA(8B 上 +3.95)、MRCR、DocMath 这类需要结构化推理和证据聚合的任务上——和动机部分的诊断完全对得上。Frames 几乎没动,LBv1QA 有涨有跌,说明收益不是均匀的。作者自己也承认了这点,没有藏着。
  • 有意思的是 FiRe-OPD 这个 baseline 其实挺能打(44.01),比 Uni-OPD、ExOPD 都高,GC-OPD 赢它的 margin 只有 0.64 个点。如果审稿人较真,这个差距的统计显著性值得追问——论文没报方差,这是个小遗憾。

消融一:加的到底是什么信号?(Qwen3-8B,统一用 RACA 和 β=0.10,只换附加项)

变体 Avg. Δ vs OPD
Vanilla OPD 43.56
Additional OPD(加 \(\beta c_t A_t\) 43.60 +0.04
Direct reward(加 \(\beta c_t \tilde{R}\) 44.19 +0.63
GC-OPD(加 \(\beta c_t \rho\) 44.65 +1.10

这张表是全文最有说服力的部分。Additional OPD 几乎没动(+0.04),排除了「随便加点 OPD 衍生物就涨」的可能;Direct reward 涨 0.63,证明 verifier 反馈确实有用;而残差比直接加 reward 再多拿 0.46 个点——「减去 OPD 已表达的偏好」这个动作本身值半个点。因果链一环扣一环。

消融二:残差怎么分到 token 上?

分配方式 Avg. Δ vs OPD
Vanilla OPD 43.56
Absolute OPD(按优势绝对值分配) 43.93 +0.38
Uniform(均匀分配) 44.28 +0.72
RACA 44.65 +1.10

Uniform 已经能拿 +0.72,说明残差的大头收益来自 response 级校准本身;RACA 再贡献 0.37。Absolute OPD 最差——它丢掉了优势的符号,会给 teacher 强烈反对的 token 也分大 credit,方向错了。这个结果反过来印证了「保留组内带符号排序」的设计直觉。

分歧的普遍性:附录里对全部任务族做了诊断(下图),grounded reasoning 的 pairwise disagreement 高达 61.0%,precise retrieval 最低也有 33.3%,九个任务族宏平均 45.3%。分歧不是某两个任务的特例,而是长上下文训练混合里的普遍现象,只是程度因任务而异。

图4:跨任务族的师生分歧率

图4:四个样本量 ≥500 的任务族 + 全九族宏平均的分歧诊断。紫色是 pairwise disagreement,绿色是 top-1 mismatch。Grounded reasoning 分歧最严重(61.0%),precise retrieval 最轻(33.3%)。

案例研究也很直观:一个 17,265 token 的表格理解题,正确答案是 B(HV15R,NNZ 最大的矩阵),但 vanilla OPD 把错误答案 D 排在 B 上面。8 条 rollout 里答 B 的两条 verifier reward 为 1、OPD 分数却偏低,残差 ρ = +3.46 把它们硬生生抬了上来——最终校准后的优势让正确回答获得了净提升。

图5:长上下文师生分歧案例审计

图5:案例全貌。上半部分是从 17K token 上下文中选出的三段证据;下半部分是 8 条固定 rollout 的诊断表——答 D 的 6 条 reward 为 0、残差为负,答 B 的 2 条 reward 为 1、残差 +3.46,校准后正确回答的 token 优势被整体抬升。


🤔 我的判断

这篇论文最值钱的地方不是那 1.1 个点,而是把「teacher 偏好 ≠ 任务正确」这个模糊直觉变成了可测量、可修正的对象。诊断部分的两个指标(pairwise disagreement、preference gap)设计得很巧,任何做 OPD 类训练的团队都可以拿去量化自己的任务上师生分歧有多严重——这本身就是一个实用工具。

方法层面,残差设计的动机清晰、性质可证、消融扎实,RACA 的 tanh 有界映射也是工程上稳妥的选择。跟同期的 verifier-aware OPD 方法比(SCOPE 的路由、Uni-OPD 的 margin 校准、SG-OPD 的符号门控),GC-OPD 的差异化在于:它是唯一一个同时保留组内 graded 差异、做 token 级差异校准、又不碰原始 OPD 信号的方案。

但问题也得说清楚。其一,残差依赖组内方差——如果 rollout 组里 8 条回答全对或全错,修正直接归零,而长上下文任务里「全错组」恰恰是学生最需要学习信号的地方,这部分样本被静默跳过了。其二,β 是在只含 High-Recall Retrieval 单一任务族的 231 条留出集上选的,跨任务的泛化性没有充分验证,图3 里 8B 在 β=0.3 后的回落也暗示不同任务可能需要不同强度。其三,主表没报方差,1.1 个点的提升在单 seed 下说服力打折。

工程启发倒是实打实的:如果你在做长上下文 RL 或蒸馏,先别急着调 reward shaping,先量一下你的训练信号和 verifier 的组内排序一致率。要是分歧率也在五六成,那 GC-OPD 这种「归一化求差、有界分摊」的残差校准几乎是零成本可插拔的——不需要额外 forward,改十几行 advantage 构造代码就能试。这个投入产出比,值得动手。


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