跳到主要内容

在轨蒸馏与自蒸馏

蒸馏为什么能提升样本效率?​

  • 样本效率的定义: 每次昂贵的环境交互能带来多少有效的参数更新,而不只是训练步数或 GPU 时间;
  • 成本对照: 代码解释器 RL 的训练时间是 SFT 的 200 倍以上(9 天 vs 1 小时),因此减少环境采样尤其重要;
  • 表层原因: RL 高方差、在轨数据难复用;
  • 更根本的原因: 反馈太稀疏——主流 model-free RL 通常只在一条 rollout 结束时得到一个成败标量,中间的错误原因、缺少字段、流程提示都没有直接学习信号;
  • 示例: 客服说“需要信用卡后四位”,模型却只能从最终的 0/1 结果反复试错,可能要数百次交互才偶然学会这一步,而人类听到一次就能记住;
  • 关键机制: 蒸馏把一次 rollout 变成密集的监督信号,不必额外探索更多环境轨迹,就能让同一条轨迹贡献大量梯度;

在轨蒸馏与 SFT、RL 的监督有什么不同?​

  • “policy” 在这里的含义: 指谁生成学生将要学习的状态前缀,不是指谁提供监督;
方法轨迹/状态由谁采样每条轨迹的主要监督
SFT / 离轨蒸馏人类或教师标注答案的逐 token 监督,密集
On-policy RL当前学生结果或过程奖励,通常稀疏
On-policy Distillation当前学生教师在学生前缀上的逐 token 分布,密集
  • SFT 的盲点: 监督密集,却主要覆盖教师会走到的状态;学生部署后若在早期犯了教师不会犯的错误,就会进入训练数据没有覆盖的前缀,后续每一步都在陌生状态上预测,误差沿长序列累积;
  • On-policy RL 的取舍: 直接在学生自己的状态分布上训练、相关性更高,却常常只在轨迹结束得到一个成败信号;
  • 在轨蒸馏(On-Policy Distillation): 学生决定走到哪里,教师负责在学生已经走到的位置告诉它下一步的完整概率分布;
  • 量化收益: 一条长度为 TT 的 rollout 不再只产生一个 0/1 信号,而能产生约 TT 组逐 token 监督;
  • 综合优势: 比离轨 SFT 更贴近学生实际会犯的错,比纯 RL 的反馈更密集、方差更低;教师推理增加的是计算,却不需要再采一批环境轨迹;

在轨蒸馏如何实现?​

  • 目标: 让学生的预测分布贴近教师分布,通常最小化两者的 KL 散度;
  • 示例: 学生生成“先查询 API,再解析返回值……”时,教师可以在“查询”这个 token 的位置给出“查询”80%、“调用”15%、其余 5% 的 token 分布;
  • 收益: 相比最终成败的二元奖励,逐 token 对齐提供了密集得多、方差更低的学习信号;
  • 代价: 教师推理成本——因此在环境交互昂贵时尤其划算;
  • 伪代码:
student_trajectory = rollout(student, task)
loss = 0
for state in student_trajectory:
teacher_logits = teacher(state)
loss += KL(student_logits(state), teacher_logits)
update_student(loss)
  • 效率: 在数学等任务上,达到同等性能所需的训练步数约为纯 RL 的 1/10;
  • 多轮场景: 成败信号更晚、更稀疏,逐 token 的教师分布能直接指导中间决策;
  • 前提: 仿真环境要足够真实,让学生探索到的状态接近部署分布,否则教师对陌生偏差状态的评分也不可靠;
  • 能力边界: 不是“从零创造能力”的办法——学生至少要能进入教师可纠正的有效状态,教师策略也不能离学生的有效支持太远;底座有缺口时仍应先 Mid-training 或用离轨示范冷启动;
  • 数值前提: 它优化的是学生当前策略所访问状态上的教师 KL;若 rollout 引擎实际从 μ\mu 采样而 trainer 计算另一个 πθ\pi_\theta,训练状态已经离轨,检查方法见On-Policy 与数值失配;

稠密信号优于稀疏信号的直接证据是什么?​

  • 对照: 在“时间感”任务上比较 DPO、四种 RL 与 On-Policy Distillation;
  • 前三者的限制: 分别受到稀疏奖励、目标错位、rollout 形状不匹配与策略崩溃的制约;
  • 做法: 换成冻结的 Qwen3-32B 教师,在学生自己的多轮轨迹上逐 token 对齐;
  • 结果: 训练平滑收敛,四种条件下的通过率比同源 SFT 基线高出 23 到 47 个百分点;
  • 结论: 瓶颈往往不是奖励函数不够复杂,而是每次交互提供的信号不够密;

没有更强的教师怎么办?​

  • 硬前提: 在轨蒸馏的威力来自教师,也因此要求有一个明显强于学生的教师模型——垂直领域训练时这个前提往往不成立;
  • 破题思路: On-Policy Self-Distillation(OPSD,在轨自蒸馏)——同一个模型分饰教师和学生两角,但看到的上下文不同;
  • 特权信息: 教师版能看到标准答案或已验证的正确解答,学生版只看到问题本身,却在自己采样的轨迹上向教师版的逐 token 分布对齐;
  • 为什么有效: 对着答案解释学生刚走过的路径,通常比独立探索更容易,因此一条 rollout 仍能产生密集监督;
  • 伪代码:
student_trajectory = rollout(model, task_without_answer)
loss = 0
for state in student_trajectory:
privileged_state = add_verified_answer(state)
teacher_logits = stop_gradient(model(privileged_state))
loss += KL(model(state), teacher_logits)
update(model, loss + retention_regularizer)
  • 约束: privileged_state 只能在训练侧构造,不能泄露给部署时的 Agent;retention_regularizer 代表保留集/风格约束;
  • 与 RLVR 的差别: 不要求奖励一定能被自动验证——特权信息可以是标准答案、人工示范或领域文档;
  • 局限: 不会凭空创造新知识——如果模型拿着答案也讲不清过程,自蒸馏就没有额外信号;朴素 OPSD 还可能让模型丢失原有思考风格,需要额外正则稳定;
  • 流程检查项: 数据权限、答案遮蔽与遗忘风险;