时间:2025-11-15 23:15
人气:
作者:admin
总结一下Thinking Machines发表的《On-Policy Distillation》,文章探讨了一种名为“On-Policy Distillation”的后训练方法,结合了RL的在线策略(on-policy)和知识蒸馏的密集奖励信号。
原文链接:https://thinkingmachines.ai/blog/on-policy-distillation/
参考中文博客:https://www.mlpod.com/1217.html
大模型的后训练方法主要分为两类:

举个原文中下棋的例子:如果你在学习下棋,on-policy强化学习是自己独立下棋,没有任何指导,赢输的反馈直接与自己的棋局相关,但反馈仅在每局结束时提供一次,并且无法告诉你哪些棋步对结果贡献最大;而off-policy蒸馏则观看一位棋艺高超的大师下棋,你能观察到非常强的棋步,但这些棋步往往发生在新手很少遇到的棋盘状态下,所以无法有效模仿。那么,on-policy与off-policy相结合,就等同于在学棋的场景中,有一个老师给你每一步棋打分(等级从愚蠢到杰出),让你可以在自己亲自下棋的同时,深刻理解每一步棋的好坏。
所以,更好的后训练方法应该兼顾两者优势:1)获得on-policy训练中RL的自适应学习;2)利用off-policy蒸馏的密集奖励信号。于是引出了本文的核心——On-Policy Distillation。
On-policy distillation的核心思想:从学生模型中采样推理轨迹,并使用高性能的教师模型对每个轨迹的每个token进行评分。

On-policy distillation会对学生模型生成的解题步骤中的每一步进行评分,惩罚导致最终答案错误的步骤,同时强化那些执行正确的步骤。
选择用逐token的反向KL散度(Reverse KL Divergence),该损失函数衡量在给定相同上文的情况下,学生模型和教师模型在下一个token 上的分布差异。
奖励函数的目标是最小化反向KL散度,这促使学生在每个状态下尽可能地模仿教师的行为。当学生的行为与教师完全相同时,反向KL散度为0。
该方法可以显著节省计算,因为不需要等待一个完整的序列生成结束才计算一个奖励,而是可以用更短或部分的序列进行训练。同时,计算教师模型的对数概率(log prob)只需要一次前向传播,而轨迹完全是由更小的学生模型生成的。此外,这种方法也不需要一个单独的奖励模型或标注模型。
# 初始化教师模型
teacher_client = service_client.create_sampling_client(
base_model=teacher_config.base_model,
model_path=teacher_config.load_checkpoint_path,
)
# 用学生模型采样轨迹
trajectories = do_group_rollout(student_client, env_group_builder)
sampled_logprobs = trajectories.loss_fn_inputs["logprobs"]
# 计算奖励(师生模型的反向KL散度)
teacher_logprobs = teacher_client.compute_logprobs(trajectories)
reverse_kl = sampled_logprobs - teacher_logprobs
trajectories["advantages"] = -reverse_kl
# 训练RL
training_client.forward_backward(trajectories, loss_fn="importance_sampling")
本质上,offline-policy蒸馏就是我们以前常规理解的知识蒸馏,利用教师模型的轨迹,来让学生模型进行模仿学习。而on-policy蒸馏是让学生模型正常做rollout以及RL训练,但是同时让教师模型在学生模型所生成的轨迹上,计算下一个token的概率分布,然后优化目标就是让学生模型在token粒度上学习教师模型的预测分布。