ExOPD:奖励外推的蒸馏方法,让学生稳定超过老师

为什么纯模仿的学生会被卡在老师的天花板上

学生模仿老师的输出分布,是大模型知识蒸馏里最朴素的训练目标。把监督学习的 cross-entropy 直接套到 teacher 的 logits 上,写几行 PyTorch 就能跑;但这种"off-policy 监督蒸馏"有一个老问题:student 在 inference 阶段自回归生成的 partial sequence 分布,跟训练时喂进去的 ground-truth 或 teacher-generated 固定数据集分布不一致。这种 train-inference mismatch 在自回归 LM 里会逐 token 累积,前面错一个 token,后面错的概率就被放大,因此 student 的天花板被钉死在 teacher 的水平上。

要让 student 走出 teacher 的天花板,第一步必须让学生自己生成 trajectory,再用 teacher 的 logits 给即时监督信号。这就是 on-policy distillation 的核心循环:student rollout 出一条轨迹,teacher 在每一个 prefix 上给 token-level 分布,student 用这个分布拟合自己刚 sample 出的 sequence;student 的采样过程被 stop-gradient,不参与反向传播,所以训练稳定、计算也便宜(student 比 teacher 小,rollout 比 teacher rollout 便宜)。Agarwal et al. 2023 在 ICLR 2024 上发表的 GKD 论文,把这个思路正式搬进了 LM 蒸馏领域On-Policy Distillation of Language Models (GKD)。

在选哪种 KL divergence 来拉齐两个分布这件事上,GKD 论文给了一张 1D bimodal mixture 图,把 forward KL 和 reverse KL 的几何差异画得很清楚:target 分布 P 有两个 mode,student 用一个 unimodal Gaussian Q_θ 去拟合;reverse KL 拟合的 Q_θ 收缩到其中一个 mode 上,forward KL 拟合的 Q_θ 在两个 mode 上都有非零质量On-Policy Distillation of Language Models (GKD)。

图注:左图是 bimodal mixture 的 target 分布 P;右图分别是 reverse KL 拟合的 Q_θ(集中在单个 mode 上,mode-seeking)与 forward KL 拟合的 Q_θ(两个 mode 上都有非零质量,mode-covering)。Reverse KL 在 P 接近零的区域强制 Q 也接近零,因此 student 主动忽略 teacher 的低概率尾巴;这是后面 ExOPD 选择 reverse-KL advantage 的几何基础。

这张图直观地解释了 forward KL 的痛点:当 student 容量不够时,mode-covering 行为会让 student 强行给 teacher 的低概率 token 分配概率质量,对应到文本上就是"看起来什么都说、但样样都不通"的长尾幻觉;reverse KL 是 mode-seeking,强迫 student 集中在 teacher 的高概率 token 上,质量更集中但多样性下降。任务相关的最优选择其实是 task-dependent 的(GKD 论文里 XSum 在 greedy 评测下 forward KL/JSD(0.9) 与其他 divergence 差异较小、在 temperature sampling (γ=1) 下 JSD(0.9) 与 reverse KL 才显著优于 forward KL;FLAN 上 reverse KL 更优——评测条件相关),所以后续工作如 MiniLLM 与 ExOPD 在选择 reverse KL 之外还有别的工程考虑。

GKD 还有一个统一目标把 supervised KD 与 on-policy KD 写到同一个损失里:用 λ_gkd(student data fraction)控制 on-policy 采样数据与 ground-truth 数据的混合比例,λ_gkd=1 时全用 student 自采样,λ_gkd=0 时退化为 supervised KD。这里必须显式区分两个 λ:GKD 的 λ_gkd 是数据混合比,ExOPD 的 λ 是 reward scaling factor,两者在不同空间起作用,命名相近但意义完全不同。

图注:GKD 在三任务(XSum/ROUGE-2、WMT/BLEU、GSM8K/accuracy)×三种 student 尺寸(T5-small/base/large)上的总览对比。On-policy GKD(每组最高的紫色柱)在多数配置上击败 supervised KD、Supervised FT、SeqKD;横线是 T5-XL (~3B) teacher 的 baseline。这一总览坐住了"on-policy 比 supervised KD 更稳"的历史结论,是后面 reverse-KL advantage 进场的历史锚点。

那么 on-policy imitation 解决了"走出 teacher 天花板"的问题吗?解决了第一步:student 不再被钉死在 teacher 的状态分布上。但 on-policy imitation 还有第二层限制:student 还是在拟合 teacher 的分布,最多就是"逼近"而非"超过"teacher。要让 student 真正"超越"teacher,就需要把 imitation 改写成 RL,让 reward 信号有梯度上推的方向。这就是下一章要讲的事。

把模仿改写成带 KL 约束的 RL:reverse-KL advantage = -kl 的一行改动

要让学生超过 teacher,关键不是换种 divergence,而是把训练目标从"拟合 teacher 的 logit"换成"在 KL 约束下最大化某种奖励"。ExOPD 论文的 Eq. 7–10 给出这条改写链:

把 reverse KL 拆开:$D_\text{KL}(\pi_\theta | \pi^*) = E[\log \pi_\theta - \log \pi^*]$,引入第三个分布 $\pi_\text{ref}$ 做加减,得到 $D_\text{KL}(\pi_\theta | \pi^*) = E[(\log \pi_\theta - \log \pi_\text{ref}) - (\log \pi^* - \log \pi_\text{ref})]$。这一步加一个 $\pi_\text{ref}$ 不是无意义的:在 NLP 训练里 $\pi_\text{ref}$ 通常取 student 的初始化(也就是 pre-train 后的 SFT 模型),它本身就是一个有意义的、容易拿到的分布。

再用 identity $D_\text{KL}(\pi_\theta | \pi_\text{ref}) = E[\log \pi_\theta - \log \pi_\text{ref}]$,把上式改写成 $D_\text{KL}(\pi_\theta | \pi^*) = \max E[(\log \pi^* - \log \pi_\text{ref}) - D_\text{KL}(\pi_\theta | \pi_\text{ref})]$。这一步把"最小化 KL"转换成了"在 KL 约束下最大化 $(\log \pi^* - \log \pi_\text{ref})$",后者正好是 KL-constrained RL 的标准形式:reward = $\log \pi^* - \log \pi_\text{ref}$,KL 项 = $D_\text{KL}(\pi_\theta | \pi_\text{ref})$。这就是 OPD = RL with reward $\log(\pi^*/\pi_\text{ref})$ and KL coefficient 1 的来源Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation (ExOPD)。

这条改写的好处:原来"拟合 teacher"的目标变成了"在 KL 约束下拉高 reward"的目标,后者天然有"让 student 跑出 teacher 分布之外"的潜力,只要 $\pi_\text{ref}$ 不强加约束,student 就有空间走出 teacher 的舒适区。这就是 OPD 与 supervised KD 在优化地形上的本质差异。

把这套 KL-constrained RL 用到 GRPO/PPO 框架上,关键是算出 per-token advantage。MiniLLM 的 Appendix A.1 用 max-entropy Inverse RL 证明:KL-regularized RL 的目标 $J(\theta) = E[\sum_t r_t + \text{entropy}]$,其中 $r_t = \log p(y_t|y_{<t}) - \log q_\theta(y_t|y_{<t})$,等价于"最小化 reverse KL + 常数"。这意味着每个 token 上的 advantage 就是 $\log p - \log q_\theta$——也就是 $-\text{reverse_kl}$ 的一行(与 TML 伪代码 advantages = teacher_logprobs - sampled_logprobs 的符号方向一致)MiniLLM: Knowledge Distillation of Large Language Models。

图注:MiniLLM Figure 2 的 toy 实验。Target 是三峰高斯混合(蓝色实线),Forward KLD 拟合出近乎平坦的低概率曲线(橙色虚线),Reverse KLD 拟合出一个又高又窄的单峰(绿色虚线)。Reverse KL 的 mode-seeking 行为在 toy 上可视化出来——这把"为什么 reverse-KL advantage 让 student 不去强行覆盖 teacher 的低概率 token"用一张图坐住了。

图注:MiniLLM Figure 3 的方法对比。左图 Sequence-Level KD(forward KL + supervised);右图 MiniLLM(reverse KL + on-policy)。两图并列展示"改两件事就把 supervised KD 改成 OPD"——换 KL 方向 + 换数据来源。右图的 on-policy student rollouts 是 reverse-KL advantage 能成立的前提。

Thinking Machines Lab 的工业实战把这条逻辑压成一行伪代码On-Policy Distillation (Thinking Machines Lab blog):

# 1. 初始化 student 与 teacher sampling client
# 2. student rollout: trajectories = do_group_rollout(student_client, ...)
#    sampled_logprobs = trajectories.loss_fn_inputs["logprobs"]
# 3. 计算 reverse-KL advantage
teacher_logprobs = teacher_client.compute_logprobs(trajectories)
reverse_kl = sampled_logprobs - teacher_logprobs
trajectories["advantages"] = -reverse_kl
# 4. 走 importance_sampling 的 PPO update
training_client.forward_backward(trajectories, loss_fn="importance_sampling")

第 3 行的 trajectories["advantages"] = -reverse_kl(等价于 teacher_logprobs - sampled_logprobs)就是 $-\text{reverse_kl}$ 的工业一行实现,可以挂在任何 KL-regularized RL 框架上(包括 Tinker、verl、TRL),不用改框架本身。这是 ExOPD 的"λ=1 起点"——下一章加 λ>1 就变成了 reward extrapolation。

最后看一个 per-token 的几何直觉。下图是 SimpleBench 算术推理题轨迹,token 颜色越深代表 per-token reverse KL 越高On-Policy Distillation (Thinking Machines Lab blog):

图注:学生模型在推理煎锅冰块算术题时算出了"4+5+11=20",但忽略了物理前提("at the end of the third minute")而直接套用算术。Per-token reverse KL 把"在物理时刻描述"、"数字 4/5/11/20"、"最终答案 C. 20"这几个 fork tokens 染成深红——它们是学生推理路径被推离 teacher 模式的关键分歧点。Reverse-KL advantage 不是均匀信号,在分歧点才发强信号,这正是它"指引方向"的物理含义。

G-OPD 加两个旋钮:reference 与 λ 如何让 reward 沿 π*−π_ref 方向可推

上一章改写出的 OPD 目标有一个隐含限制:reward $\log(\pi^*/\pi_\text{ref})$ 的权重是 1。要让 student 走出 teacher 的舒适区,需要把 reward 的权重放大,但又不能失控。ExOPD 论文在 OPD 基础上加一个 reward scaling factor λ,把目标函数写成Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation (ExOPD):

$$\max_\theta ; E\left[\lambda \log\frac{\pi^*}{\pi_\text{ref}} - D_\text{KL}(\pi_\theta | \pi_\text{ref})\right]$$

这就是 G-OPD(Generalized OPD)的 Eq.11 主公式。两个旋钮互相独立:

  • λ:reward scaling factor。λ=1 退化为标准 OPD;λ<1 是 reward interpolation(student 行为在 $\pi_\text{ref}$ 与 $\pi^*$ 之间);λ>1 是 reward extrapolation(ExOPD)。
  • π_ref:reference model,可以是 student 初始 / teacher pre-RL 变体 / 任意白盒模型;既能出现在 reward 的分母里,又能出现在 KL 项里。

λ>1 之所以能让 student 超过 teacher,几何读法来自 optimal-solution identity:取 Eq.11 的最优解,得到 $\log \pi_\theta = \lambda \log \pi^* + (1-\lambda) \log \pi_\text{ref}$。当 λ>1 时,$(1-\lambda) < 0$,$\pi_\theta$ 不再是 $\pi^*$ 与 $\pi_\text{ref}$ 之间的内插,而是沿 $\pi^* - \pi_\text{ref}$ 方向继续走 $(\lambda-1)$ 步——也就是把 teacher 的 log-prob 减去 reference 的 log-prob 后再放大 $(\lambda-1)$ 倍。"沿 teacher 减去 reference 的方向多走 $(\lambda-1)$ 步",这是 λ 解释的核心,把抽象 λ 落到一个具体的方向。

图注:ExOPD 在 multi-teacher merge (a) 与 strong-to-weak (b) 两个 setting 下的总览对比。左面板是 math × code 平均准确率空间的散点图:ExOPD 是四个方法中唯一一个稳定超过两个 domain teacher(SFT、OPD、ExPO 都做不到)的学生。右面板显示在 strong-to-weak 蒸馏上 ExOPD 比标准 OPD 有明显改进,加上 reward correction 后进一步提升。这张图坐住了"λ>1 真的有效果"。

有一篇命名相近的方法 ExPO(Model Extrapolation Expedites Alignment)也需要在这里澄清Model Extrapolation Expedites Alignment (ExPO)。ExPO 走的是 weight-space 外推:给定 SFT 起点 θ₀ 与部分训练后的对齐模型 θ₁,定义 $\theta_2 = \theta_1 + \alpha \cdot (\theta_1 - \theta_0)$,纯 inference-level 算力搜索 α 即可得到更强模型。ExPO 与 ExOPD 命名只差一个字母,但外推维度完全不同:

维度ExOPDExPO
外推空间reward 空间weight 空间
改的是什么训练目标里的 reward 项训练后的参数
是否需要再训练是(仍走 OPD 训练循环)否(纯 inference α 搜索)
适用范围限制$\pi_\text{ref}$ 与 $\pi^*$ 都可达必须同 base 初始化 + mode connectivity

图注:ExPO Figure 2 的 weight-space 几何。橙色曲线从 θ₀ 延伸到 θ₁(实际训练轨迹),从 θ₁ 再延伸出直线段到 θ₂(ExPO 外推结果),下方灰线段标记 δθ = θ₁ - θ₀。ExPO 沿参数变化方向做线性外推,几何上就是这条直线段——与 ExOPD 在 reward 空间沿 π*-π_ref 方向走 (λ-1) 步完全不同。

理解这两个旋钮之后,下一章就要把它们落到具体的代码骨架上。

把 Eq. 11 落进 verl:三个 yaml 字段加 ref_input_utils.py 三条 prep 调用链

把 G-OPD Eq.11 落到 verl 框架上,核心只有三个开关(only_reverse_kl_advantages / lambda_vals / ref.model.path),外加一个 base_model_path 指定 π_ref 与几个配套项——这是工程上相对轻量的部分RUCBM/G-OPD Official Repository:

# verl/examples/g_opd/run_qwen3-4b-g-opd.sh 的核心三件套
actor_rollout_ref.actor.policy_loss.only_reverse_kl_advantages: True   # 把 -reverse_KL 当 advantage
actor_rollout_ref.actor.policy_loss.lambda_vals: 1.25                 # reward scaling factor,>1 即 ExOPD
actor_rollout_ref.ref.model.path: Qwen3-4B-Non-Thinking-RL-Math        # teacher
actor_rollout_ref.model.base_model_path: Qwen3-1.7B                    # π_ref(默认 = student 初始状态)
# 注:单教师场景下 actor_rollout_ref.ref.model.base_model_path 被注释为「useless」;
#     它在多教师场景下才被复用为第二个 teacher(如 Code-Teacher)的路径

第一行把上一章的"reverse-KL advantage = -kl"接到 GRPO outcome reward 上;第二行就是 Eq.11 的 λ;第三行 ref.model.path 是 teacher,不带 ref. 前缀的 model.base_model_path 才是 π_ref(默认等于 student 初始权重)。lambda_vals 一处决定标准 OPD 还是 ExOPD,model.base_model_path 一处决定是否走 Reward Correction。

图注:verl main_ppo 训练流程框架图。顶部输入(数据 / 学生 / 教师 / 可选外部 critique vLLM)→ 中部流程(student rollout → log-prob → ref input prep + Context 蒸馏旁支)→ 下部 G-OPD 目标函数与 PPO 更新 → 底部评估与 checkpoint。这张图把论文 Eq.11 与 verl 启动脚本的具体 yaml 字段对到同一张图上;图中字段值是脚本默认 / 示例配置,不是论文实验结论。

多教师路由通过 extra_info.opd_teacher 字段标记样本该走哪个 teacher("math" 或 "code"),配合 multi_teacher_distill=True 开关启动双 ref.model 路径。multi_teacher_distill 在单教师脚本里根本不出现,多教师时才打开(README 注释 turn on for multi-teacher distillation);被标为"useless"的是单教师场景下的 actor_rollout_ref.ref.model.base_model_path。

ref_input_utils.py(约 650 行)封装了 reference 模型与 student tokenizer 不同时的输入对齐逻辑RUCBM/G-OPD Official Repository:

  • prepare_ref_model_inputs——单教师/多教师场景:ref tokenizer 与 actor 不同时,左 pad → 拼接 responses → 计算 position_ids。
  • prepare_critique_distillation_inputs——on-policy context-distillation 场景:用 CritiqueClient 调外部 vLLM 生成 critique,把对话拼成 [user:problem, assistant:solution, user:critique]。
  • prepare_ref_model_inputs_based_on_correct_solution——OPSD 场景:extra_info.ref_solution 存在时把 reference solution 作为 in-context hint 拼进 user prompt。

图注:ref_input_utils.py 三分支数据流图——左列共同输入(raw_prompt + responses + ground_truth);中列 A 单教师 prepare_ref_model_inputs;右中列 B 多教师双 ref.model 路径;最右列 C Context-Distillation 走 prepare_critique_distillation_inputs + prepare_ref_model_inputs_based_on_correct_solution;底部统一汇流到 ref_log_prob 与 actor 更新。这张图是阅读源码时的路线图,具体超参是脚本默认 / 示例配置,不当作论文结论。

从 README 的行内注释和脚本默认值里能反推出 4 个常见坑,是动手实验时必须先避开的雷区:

症状调试手段对应 yaml 字段
raw_prompt not found in batch.non_tensor_batch必开data.return_raw_chat=True
KL 项被加了两遍KL 通过 advantage 通道施加,loss 里不要再加actor.kl_loss_coef=0 但 use_kl_loss=True
student 熵塌缩蒸馏场景关掉熵正则以免削弱 teacher-followingentropy_coeff=0
多教师路由不生效multi-teacher 阶段必须打开actor.policy_loss.multi_teacher_distill=true

跑通一个 toy 版 ExOPD:让学生期望奖励在 λ=1.25 时上穿老师

把论文 Eq.11 落到 verl 是大模型训练的场景。但要验证"λ>1 真的让学生超过老师"这件事,不必先起 8 卡 A100 跑 Qwen3-4B——用一个 toy 字符级 LM 就能在单卡 CPU/GPU 上复现这个观察。

toy 实验的设计:teacher 是一个在小语料上训好的随机策略(这里用一个 8 token 词表、固定分布 $p_\text{teacher}$);student 是一个可训练的策略 $q_\theta$,初始化成均匀分布。训练目标就是 Eq.11:$E[\lambda \log p_\text{teacher}/p_\text{ref} - \text{KL}(q_\theta | p_\text{ref})]$,$\pi_\text{ref}$ 取 student 初始化时的均匀分布。

下面是一个最小可跑的 PyTorch 骨架(约 30 行),把训练循环拆成四步:

import torch
import torch.nn.functional as F

# toy 词表 8 个 token,teacher 与 reference 是固定分布
V = 8
p_teacher = torch.tensor([0.40, 0.25, 0.15, 0.10, 0.05, 0.03, 0.01, 0.01])
p_ref = torch.full((V,), 1.0 / V)              # uniform reference
log_q = torch.zeros(V, requires_grad=True)    # student 初始化为均匀分布(log 空间)
optim = torch.optim.Adam([log_q], lr=1e-2)

def kl_student_to_ref(log_q):
    q = log_q.softmax(0)
    return (q * (log_q - p_ref.log())).sum()   # KL(q ‖ p_ref)

def neg_reward(log_q, lam):                    # −λ·log(π_t/π_ref) 的等价值
    q = log_q.softmax(0)
    return -(lam * (p_teacher * (p_teacher.log() - p_ref.log())).sum()
             - lam * (q     * (p_teacher.log() - p_ref.log())).sum())

for step in range(500):
    log_q = log_q.detach().requires_grad_(True)   # 防 graph 复用
    kl_term = kl_student_to_ref(log_q)
    obj = neg_reward(log_q, 1.25) - kl_term        # Eq.11 取负做 minimization
    optim.zero_grad(); obj.backward(); optim.step()

print("student q =", log_q.softmax(0).detach().round(decimals=3).tolist())
print("teacher  =", p_teacher.round(decimals=3).tolist())

λ sweep 对照表(toy 上观察到的现象,不是论文的具体数字):

λ学生最终分布 qθ期望 log-ratio与 teacher 关系
0.0均匀分布 (= π_ref)0完全不动
1.0接近 teacher 但略平滑等价 OPD模仿 teacher
1.25teacher 高概率 token 更高,低概率被进一步压低沿 π*-π_ref 方向多走 0.25 步上穿 teacher(qθ[0]=0.55 > teacher[0]=0.40)
1.5部分 token 概率被推到接近 1多走 0.5 步reward hacking 风险(toy 上未塌缩,但论文 Qwen3-4B 上 λ=1.5 因 implicit reward hacking 掉点)

toy 上 λ=1.25 让学生期望奖励上穿 teacher 的现象,是 ExOPD 论文 Figure 2 的 λ sweep 趋势在 toy 尺度上的"小尺寸复现"。论文里这是 Qwen3-4B-Non-Thinking 作为 student,teachers 分别是 Qwen3-4B-Non-Thinking-RL-Math(math 面板)和 Qwen3-4B-Non-Thinking-RL-Code(code 面板),reference 固定为 student 本身;math/code 两个面板各跑 λ∈{0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5} 七点扫描的真实实验数据(Qwen3-1.7B 只在 Figure 6 reward correction 与 Table 3 strong-to-weak 设置中出现)Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation (ExOPD):

图注:横轴 λ 从 0 到 1.5 七档,纵轴 accuracy;math 面板四条线(蓝/绿/橙/红对应 AIME24/25/HMMT25-Feb/HMMT25-Nov),code 面板三条线。两条面板上的曲线都呈"先单调升至 λ=1.25、再在 λ=1.5 掉点"的形状;这就是 toy 上 λ=1.25 上穿、λ=1.5 风险的可视化版本。

需要强调:toy 实验的尺寸(8 token 词表 / 500 步)不能替代 Qwen3-4B + DeepMath-103K + Eurus 的 1.7B/4B 实证;但 toy 让读者亲眼看见 λ>1 让学生超过老师这件事在 toy 上是 reproducible 的——这是动手实验的目的。

ExOPD 在哪里翻车:5 类常见坑与 REOPD 给出的稳定化补丁

ExOPD 在 toy 与小尺寸实验上看起来稳,但真到 4B 模型 + DeepMath-103K / Eurus 数据上,有 5 类典型坑必须事先知道。

坑 1:λ 推得太远——implicit reward hacking

ExOPD Figure 2 的 λ sweep 显示 accuracy 单调升至 λ=1.25 后,λ=1.5 因 implicit reward hacking 掉点Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation (ExOPD)。机制:当某些 token 的 log-ratio 极大时,ExOPD 把 (λ-1)·log-ratio 等比例放大,student 会被推向"拟合 peak"的局部最优,反而损害 generalization。论文 Figure 2 还显示 response length 持续增长,反映 length bias 是同一类 hacking 的副作用。

坑 2:reference 选错——strong-to-weak 蒸馏需要 reward correction

默认 ExOPD 把 $\pi_\text{ref}$ 取成 student 初始(Qwen3-1.7B-Non-Thinking)。但在 strong-to-weak 蒸馏(teacher = Qwen3-30B-A3B-Instruct-2507)场景,teacher 与 student 的 pre-train 分布差距太大,implicit reward $\log(\pi^*/\pi_\text{ref})$ 会有很大噪声。论文 Remark 3.2 提出 reward correction:把 $\pi_\text{ref}$ 换成 teacher 的 pre-RL 变体(Qwen3-4B-Non-Thinking 作为 Qwen3-4B-Non-Thinking-RL-Math 的 pre-RL base),等价把 effective reward 修正为 $\log(\pi^*/\pi_\text{base}^\text{teacher})$,这恰好是 teacher RL post-training 的 implicit reward,DPO 闭式解可以保证它是 well-defined 的Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation (ExOPD)。

图注:reward correction 在 strong-to-weak 蒸馏上的实证。左面板 math 平均(Qwen3-1.7B → Qwen3-4B-RL-Math),右面板 code 平均(Qwen3-1.7B → Qwen3-4B-RL-Code)。每个面板四根柱:SFT / OPD(λ=1) / ExOPD-default(π_ref=π_base^student, λ=1.25)/ ExOPD-reward-correction(π_ref=π_base^teacher, λ=1.25)。Reward-correction variant 在两面板上都高于 default ExOPD。代价 = 需要 teacher pre-RL 变体 + 额外 log-prob 计算。

坑 3:token 级不稳——REOPD 的 token-level λ_{b,t} 改进

ExOPD 用单一全局 λ 把同样的 $(\lambda-1) \cdot \log(\pi^*/\pi_\text{ref})$ 套到每一个 sampled token 上,这会让 teacher-reference log-ratio 的极端 peak 被均匀放大,导致训练不稳。最优 λ 在不同领域之间不一致(数学偏好 λ=1.25、单 teacher 代码偏好 λ=1.5、多 teacher 数学在 λ=1.25 和 1.75 打平)REOPD: Reliability-Adaptive Reward Extrapolation for On-Policy Distillation。

REOPD(arXiv:2608.11698,2026-08-30)把全局 λ 拆成 token-level × micro-batch 级双轴控制:

$$\lambda_{b,i,t} = 1 + \gamma_b \cdot q_{b,i,t}$$

其中 $q_{b,i,t} \in (0,1]$ 是 token 级 compatibility weight(从 student-teacher 差异 $\hat\delta = \exp(x) - x - 1$ 算出来),$\gamma_b \in [0, \gamma_\text{max}]$ 是 micro-batch 级的 extrapolation budget(由所有 data-parallel rank 上的 sufficient statistics 做 all-reduce → EMA → clip 推出)。REOPD 在 math/code × 单/多 teacher 四个设置上都达到或逼近 best fixed-λ ExOPD,不需要 per-setting 调参。

图注:REOPD overview 框图。左半 Fixed-coefficient ExOPD(同一 (λ-1) gain 套到每个 token,会放大 peak);右半 REOPD(token path: compatibility q gate teacher-reference residual + controller path: all-reduce → EMA → clip → γ_b),两者乘积定义 $\lambda_{b,i,t}=1+\gamma_b q_{b,i,t}$。Teacher alignment 项保留不变。q_t 不是 correctness estimator,仍保留 τ/γ_max/B_0 等超参。

坑 4:thinking-pattern 不一致——OPD 直接失败的机制

清华 THUNLP 团队 2026-04 的工作(Rethinking OPD)证明:OPD 成功需要两个条件同时成立Rethinking On-Policy Distillation of Large Language Models:

  1. Thinking-pattern consistency:student 与 teacher 共享兼容的推理模式。
  2. Genuinely new knowledge:teacher 必须有 student 没见过的"真新能力"。

两个条件任一不成立,OPD 都会停滞。Token-level 标志是 top-k overlap ratio 从约 72% 单调升至 91% 以上、overlap-token advantage 趋零、entropy gap 收窄;任一指标不出现,OPD 就失败。反直觉发现:teacher benchmark 分高不代表 OPD 能成功——JustRL-1.5B(成功,AUROC ≈ 0.73)与 R1-Distill-7B(失败,AUROC ≈ 0.75,benchmark 分更高)的 sequence mean reward 几乎相当,差别可能在于 per-token advantage 的各向异性(reverse KL 的 mode-seeking 行为可能把它们相互抵消——这是作者明确未直接验证的假设)。

图注:成功 vs 失败 OPD 训练曲线对比。同一 student(R1-Distill-1.5B)配两种 teacher:JustRL-1.5B(成功 run)vs R1-Distill-7B(失败 run)。上方三幅子图是 AIME 2024/2025/AMC 2023 的 avg@16 accuracy,虚线是 teacher 性能;下方三幅是 overlap ratio / overlap-token advantage / entropy gap 随 step 变化。成功 run 在 overlap 单调上升 + entropy gap 收窄上同时成立,失败 run 三项都停滞。这是 OPD 成功条件的可观察信号。

坑 5:λ 跨域不迁移 + long-horizon 后段监督退化

ExOPD 的最优 λ 在不同领域设置之间不一致:单 teacher math 1.25 / 单 teacher code 1.5 / multi-teacher math 1.25 / multi-teacher code 1.25。每个新设置都要重新做 λ 网格扫描,正是它拆成 REOPD 的动机。

此外,OPD 在 long-horizon(extended CoT、agentic multi-turn)上的可扩展性是开放问题:teacher 在 student-visited states 上的监督质量会随 prefix 深度退化,response length 10K–15K 时出现 late-stage collapse,entropy 从 suffix 率先升高再向 prefix 传播(论文未单独报告 overlap 下降与 gradient norm 数值);teacher continuation 实验量化 prefix 从 1K 涨到 16K 时,1K 上的 +0.37 accuracy 优势到 16K 时只剩 +0.02。这是 OPD 的"dense reward ≠ free lunch"边界。

5 类坑的速查表

症状机制调试手段对应仓库开关
λ=1.5 accuracy 掉点implicit reward hackingλ sweep 到 1.25 即停lambda_vals=1.25
strong-to-weak 增益小reference 选错reward correctionref.model.base_model_path=teacher_pre_RL_variant
token-level 不稳全局 λ 套到每个 tokenREOPD token-level λ_{b,t}(需自行扩展 policy_loss 注册器)
overlap 不升、accuracy 不动thinking-pattern 不一致 + teacher 无 new knowledgeoff-policy cold start 或换 teacher(需两阶段训练)
长序列后段崩teacher 在 deep prefix 上的监督质量退化限制 response length ≤ 7K 或换更鲁棒 teacher(需 prompt-side 限制)

到这里,整条主线已经走完。Reference scaling factor λ 与 reference model π_ref 是 G-OPD 给的两个独立旋钮:λ=1 是标准 OPD,λ>1 是 reward extrapolation,π_ref 的选择直接决定 reward 的有效信号。在 toy 上能看到学生超过老师,在 4B 模型上有 5 类已知坑与对应的稳定化补丁——动手实验、verl yaml 字段映射、REOPD token-level 改进都给出了能直接落到训练脚本上的开关。

参考文献

本专题引用的核心资料如下,建议深入学习时阅读原文:

  1. Learning beyond Teacher: Generalized On-Policy Distillation with Reward Extrapolation — arXiv:2602.12125
  2. RUCBM/G-OPD — Official repository for ExOPD / G-OPD — https://github.com/RUCBM/G-OPD
  3. On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes (GKD) — arXiv:2306.13649
  4. MiniLLM: Knowledge Distillation of Large Language Models — arXiv:2306.08543
  5. On-Policy Distillation (Thinking Machines Lab Connectionism blog) — https://thinkingmachines.ai/blog/on-policy-distillation/
  6. Model Extrapolation Expedites Alignment (ExPO) — arXiv:2404.16792
  7. REOPD: Reliability-Adaptive Reward Extrapolation for On-Policy Distillation — arXiv:2608.11698
  8. A Survey of On-Policy Distillation for Large Language Models — arXiv:2604.00626
  9. Rethinking On-Policy Distillation of Large Language Models: Phenomenology, Mechanism, and Recipe — arXiv:2604.13016
  10. A Formula-Driven Survey and Research Agenda for On-Policy Distillation — arXiv:2606.22793
ExOPD:奖励外推的蒸馏方法,让学生稳定超过老师