在轨蒸馏与自蒸馏
蒸馏为什么能提升样本效率?
- 样本效率的定义: 每次昂贵的环境交互能带来多少有效的参数更新,而不只是训练步数或 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): 学生决定走到哪里,教师负责在学生已经走到的位置告诉它下一步的完整概率分布;
- 量化收益: 一条长度为 的 rollout 不再只产生一个 0/1 信号,而能产生约 组逐 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 引擎实际从 采样而 trainer 计算另一个 ,训练状态已经离轨,检查方法见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 还可能让模型丢失原有思考风格,需要额外正则稳定;
- 流程检查项: 数据权限、答案遮蔽与遗忘风险;