On-Policy蒸馏是假蒸馏?OPSA无需监督策略迁移的方法论解析
今天来拆一个有点“找茬”性质的研究命题On-Policy 蒸馏到底是不是真的在做蒸馏如果你正在做策略模型的迁移、小模型对齐或者研究 RLHF 的强化学习工程师这个问题会直接影响到你“教师信号该不该删”“self-play 数据能不能替代教师 rollout”这一整类训练决策。这篇论文的标题本身就包含两段信息前半段质疑——On-Policy 蒸馏可能并没有在真正蒸馏学生性能提升也许来自额外的数据探索和策略更新次数而不是教师知识的迁移后半段提出方法——给出一个无需显式监督的 OPSA 方法尝试在没有教师标签或外部监督信号的条件下完成策略层面的迁移与适应。下面我会先拆清楚“蒸馏”这个术语在策略优化里的歧义再解释为什么 On-Policy 这个限定词会让问题变得更复杂最后给出一套验证论文主张时可以直接使用的实验设计框架。先给结论这篇文章不是教你跑一个现成的一键包它更像一张方法论的“校验清单”。如果你正在读类似“把大模型蒸馏到小模型”“把一本书蒸馏成训练样本”“把 skill 蒸馏进 agent”的工作那么先看完这篇文章再决定信不信那个涨点能省下不少踩坑时间。我从标题和关键词里能拿到的可确认信息是OPSA 与 On-Policy 蒸馏并列出现并且被强调为“无需监督”。至于 OPSA 的完整展开形式、论文实验环境、benchmark 选择材料里没有给出我不会去编造文中的伪代码和实验建议只是通用的技术推理框架需要对照论文原文做修改。方向重点放在为什么需要质疑 On-Policy 蒸馏这种质疑如何验证以及“无需监督”这条技术路线会带来哪些新的工程收益和风险。1. 这篇论文究竟在回答什么问题先理解研究问题的层次。标题里的“蒸馏”对应到强化学习中的 Policy Distillation也就是把一个教师策略模型的知识迁移到学生策略模型上。知识蒸馏这个概念从 Hinton 的经典工作开始流行基本操作是让学生的输出分布去拟合教师的软标签比如分类概率、温度缩放后的 logits。放在监督学习里这种 KD 几乎不会有太大争议因为教师和学生面对同一个静态数据集数据分布固定教师提供额外监督信号学生学到更平滑的目标分布。但放到策略优化中就完全不是一回事了。策略蒸馏通常不是静态的数据采集由某个策略在环境中 rollout 产生每个时刻的状态、动作都会影响未来状态分布学生策略一旦改变它未来会遇到的 state distribution 也会改变。这种“分布变化”正是 On-Policy 和 Off-Policy 区分的核心逻辑。论文标题里单独强调 On-Policy其实是在问两个更尖锐的问题在一套 On-Policy 训练流程中学生性能上升究竟是来自“教师告诉了我更好的动作”还是来自“学生自己的行为数据增加了多样性和覆盖度”如果学生本身就在做强化学习更新那么教师信号是不是已经退化成一个普通的正则项它还有没有“知识蒸馏”的资格对应地OPSA 被放在这个问题的解空间里强调“无需监督”。按常规定义去理解监督蒸馏依赖教师策略产生的高质量动作标签或软分布而无需监督的方法必须回答另一个问题不向教师借标签那用什么信号来驱动学生学习可能的替代信号包括自生成轨迹上的内部一致性、偏好对比、回报模型或纯探索奖励。这类“教师弱化甚至移除”的设计思路在语言模型对齐领域对应 Self-Rewarding、DPO、KTO 等路线。OPSA 大概率不是走“让教师模型给学生打标签再离线训练”的老路而是把核心放在“学生策略在自身采样分布上做某种自适应优化”上。问题传统 KDRL 策略蒸馏On-Policy / RLHF 结合蒸馏数据来源固定数据集教师或学生在环境中 rollout学生策略在线采样教师角色提供软标签提供动作/分布监督可能与奖励信号混用主要风险数据重复、容量差距状态覆盖错位收益来源难以归因学生对数据分布的影响无中高“蒸馏”是否成立较明确需要验证需要严格对照如果你只是按表层的训练 loss 组成去看即“KL(student || teacher) RL return”那么训练曲线上升时你根本分不清是哪一个分量在起作用。这篇论文的价值恰恰在于把这个问题从“训练细节”提升到“方法结论是否可靠”的层面。2. 从知识蒸馏到策略蒸馏哪些概念被混在一起了知识蒸馏的经典定义要求一个已经训练好的教师模型向学生模型提供软化的监督分布。在图像分类、语音识别里教师的监督信号基本不会随学生的训练过程变化因为源数据域固定学生学习的目标分布是“教师对同一个输入产生的输出分布”教师不参与环境交互也不受学生策略影响。这样蒸馏出来的学生才有资格被称为“继承了教师的知识”。到了强化学习里Policy Distillation 变了形。最经典的设定是让教师策略在环境中采样轨迹然后用这些轨迹训练学生策略。对教师来说这些轨迹是其策略自身的 on-policy 数据但对于正在训练中的学生来说这些轨迹来自另一个策略严格说是 off-policy 数据。之所以有些研究把这种流程叫 on-policy distillation是因为“当前收集数据的策略”与“将要被优化的策略”在某种近似意义上是同源的尤其在 teacher 和学生共享部分网络、或者 student 在 teacher rollout 基础上做多轮自举时数据分布与学生策略的当前分布会不断靠近。由于这个“On-Policy 标签”本身就不够严格所以“是否真在蒸馏”的质疑天然成立。要拆这个局你必须同时看清三件事第一数据分布由谁决定。如果一条轨迹是学生自己 rollout 产生的再用教师给学生当前状态做监督那么即使没有教师学生也可以依靠策略梯度拿到不小的收益。此时把收益全部记到“教师知识迁移”头上并不公平。第二教师是固定的还是动态更新的。很多实验里教师不是完全冻结的教师还在继续与环境交互优化那么学生学到的其实更多是“教师不断探索后的新知识”而不是经典 KD 意义上的知识压缩。第三失配状态如何处理。学生的当前策略会访问教师很少访问的状态教师在这一部分状态上给出的动作未必可靠学生拟合这些教师输出反而会被带到错误方向。于是在 On-Policy 环境里做蒸馏很可能出现一个反直觉结论教师监督加了不一定更好甚至起负作用。这刚好解释了为什么热词里会出现“蒸馏一本书”“怎么蒸馏 skill”这类联想。表面上看它们都指“把复杂、大规模的信息压缩到更轻量的表达里”但在严谨的 RL 语境下教师迁移的是一组状态-动作映射不是一段可以随意重放的文本。把一本书蒸馏成摘要再让模型去读摘要这个过程没有环境反馈闭环而策略蒸馏一旦脱离环境反馈闭环就容易退化成行为克隆。行为克隆可以学到教师在某部分状态下的映射却无法处理学生自己未来会遇到的分布外状态。这个差异非常关键On-Policy 蒸馏如果只做行为克隆那么不管它叫什么它都没有完成“让学生学会决策”这一目标。3. OPSA无需监督的 On-Policy 策略适应思路没有材料给出 OPSA 的完整全称和每一处算法细节所以这里我不冒充“我有论文实现”而是从标题与方法定位推断OPSA 的目标是把策略适应过程从“教师监督”中解放出来。传统蒸馏的监督通常有两种形态一是教师模型的软标签二是人工或环境给出的奖励。OPSA 主张“无需监督”时最合理的解读应当是它不依赖从外部教师模型导出的逐动作监督而是让学生策略在 On-Policy 的经验流中构建自己的学习目标。按这个推理OPSA 可以给出一条与“真正蒸馏”互补的路线教师不负责为每一个学生状态提供动作标签学生的学习信号来自自生成数据中的内部一致性、跨回合结果对比或隐式价值判断。这种思路在语言模型对齐领域已经有相当多近亲比如 Self-Rewarding Language Models 通过在自生成样本上训练一个评判器来替代人工反馈DPO 直接把偏好对建模进策略似然里不单独训练奖励模型KTO 则只按“可接受/不可接受”做信号建模。OPSA 和这些工作的共同点在于它们都质疑“必须有外在教师/奖励模型逐步指导学生”这一强假设。为了更直观地看到这种“不蒸馏”的运行逻辑这里不写论文实现只写一个概念伪代码帮助你理解训练循环里去掉教师监督后还剩下什么# 概念伪代码OPSA 类无需监督的 on-policy 更新 # 仅供理解思路不是论文官方实现 for round_idx in range(total_rounds): # 1. 由当前学生策略自己采样轨迹 buffer [] for _ in range(rollout_steps): state env.reset() done False while not done: action student_policy.sample(state) next_state, reward, done, info env.step(action) buffer.append((state, action, reward, next_state)) state next_state # 2. 将“外部监督/教师logits”移除 # 改用自生成经验构造的内部信号。 for state, action, reward, next_state in buffer: # 示例TD误差 / 优势值 / 自一致性打分 # 这些信号都从学生自己的价值估计中产生 advantage compute_gae( valuesvalue_net(state), rewards[...], dones[...], gamma0.99, lam0.95 ) # 3. 更新学生策略但不再计算 teacher_kl_loss update_policy( student_policy, states[...], actions[...], advantagesadvantages )这段伪代码想表达一个关键判断单靠算法骨架你无法区分一个方法是在做知识蒸馏还是在做普通强化学习。区别只能在 loss 里体现。如果把 teacher loss 打开就是“有监督蒸馏”如果把 teacher loss 合上只剩优势函数和自训练信号它就滑向“OPSA 式无需监督策略优化”。另一种可能的实现是在蒸馏 loss 中保留教师 KL 散度项但把教师权重置为 0让它自适应地决定“什么时候听教师”。这种门控式设计比直接删除更稳健学生可以先靠 reward 信号把自己的策略稳定住再在状态接近教师高置信区域时慢慢开启教师约束。它更符合“无需监督”的另一层意思——不需要人类精心设计监督权重模型自己判断教师知识在哪个状态区间可用。这个思路在迁移学习里已经不新鲜但在 On-Policy 策略迁移中一直没有成为默认操作原因是门控决策本身会引入额外的方差。如果 OPSA 真是沿这个方向做那它真正值得关注的不是大幅涨点而是那些原本依赖教师监督的任务在去掉监督后还能保持多少收益。对比维度经典监督蒸馏OPSA 的思路位置教师动作标签必需逐状态提供不强依赖奖励信号可能弱化来自环境或自构造学生策略自举少核心行为克隆退化风险高用内在信号规避可解释性清晰需要额外评估4. 质疑实验设计怎么验证 On-Policy 蒸馏是否真的蒸馏论文如果只停留在“提出概念”而没有实验分层那说服力会很弱。所以本文重点讨论“如果去验证这篇论文结论应该做哪些关键对照”。研究者最需要警惕的一点是你看到实验表格里加教师蒸馏的版本 return 更高就断定“教师知识有用”这显然不够。因为加蒸馏的学生版本训练步数、数据利用率、奖励相对权重都可能产生了变化。下面提到的这套实验设计可以作为方法复现时的默认协议。第一组对照是“移除教师只看自探索”。学生完全不加教师 KL只用自己的 rollout 数据和价值函数更新。它会告诉你基线收益到底有多高。如果这个基线已经接近完整蒸馏版本那所谓的蒸馏收益就是假的如果完整蒸馏版本明显更高教师监督可能真有贡献但也还不确定贡献来自“知识”还是“额外一个平滑正则项”。第二组对照是“随机教师替代真实教师”。把真实教师换成一个随机初始化教师或一个均匀随机策略仍然给学生加 KL 约束。如果学生的表现依然和“真实教师蒸馏”接近那么涨点来源就不是教师内部的领域知识而是 KL 正则带来的探索约束和策略熵控制。这在很多小样本 RL 环境里完全可能发生。第三组对照是“数据来源四象限”。交叉状态来源和标签来源具体切分成四种组合学生状态学生标签、学生状态教师标签、教师状态教师标签、教师状态学生标签。这个设计能把“状态覆盖差异”从“教师知识质量”中分离出来。如果教师状态教师标签明显强于学生状态教师标签说明学生靠自己的状态分布无法获得教师全部知识那又回到了 OOD 覆盖问题。如果学生状态教师标签和教师状态教师标签差不多说明学生自己见过的状态才是关键教师只是辅助标签。# 一次典型对照训练的实验目录结构便于做数据隔离 runs/ ├── exp_001_no_teacher/ # 去掉教师 KL只用 PPO ├── exp_002_random_teacher/ # 随机教师做 KL 监督 ├── exp_003_true_teacher/ # 真实教师做 KL 监督 ├── exp_004_student_state_teacher_label/ # 学生采样状态 ├── exp_005_teacher_state_teacher_label/ # 教师采样状态 └── exp_006_mixed_data/ # 混合数据源第四组对照是“教师本身是否在优化”。把教师冻结、停止一切环境交互只作为固定的目标映射器或者让教师与学生同步在线更新。如果在线教师版本显著好于冻结教师版本说明学生提升来自教师继续探索产生的新信息而不是“旧知识”的迁移。这种结果一旦出现文章的“是否真蒸馏”质疑就有了非常直接的证据那些被叫做蒸馏的工作其实是在做随教师一起增长的知识蒸馏甚至学生的学习收益是被教师新的探索成果绑定的。第五组要控制“样本量和训练步数”的总量对齐。让所有实验访问相同数量的环境步、训练迭代次数和优化器配置否则效率差异会被误读成算法效果差异。建议每次实验至少用 5 个随机种子不仅报告均值还要报告方差和最优种子下的差距。如果你的结论只在一个种子下成立那大概率是噪声。下面是一个可以放进训练循环里的自动分析工具每一轮迭代结束后记录学生策略与冻结教师在“学生当前状态分布”和“教师固定状态分布”两个集合上的 KL 散度变化。统计 KL 降低到底发生在哪一侧能避免把“单纯策略收敛”误判成“教师知识被吸收”。# 用于判断“蒸馏是否发生”的诊断伪代码 def diagnose_distillation(student, teacher, student_states, teacher_states): kl_on_student kl_divergence( student.log_prob(student_states), teacher.log_prob(student_states) ) kl_on_teacher kl_divergence( student.log_prob(teacher_states), teacher.log_prob(teacher_states) ) return { kl_on_student_states: kl_on_student.mean().item(), kl_on_teacher_states: kl_on_teacher.mean().item(), }如果 kl_on_teacher_states 的下降幅度明显大于 kl_on_student_states说明学生更多是在模仿教师见过的状态而不是真正泛化到自己的状态分布上。这时面对报告里的“蒸馏使策略提升”你就应该保持怀疑。5. 从“蒸馏一本书”到“蒸馏 skill”热词背后的术语泛化搜索热词里出现“蒸馏一本书”“怎么蒸馏 skill”这很能反映现在的社区氛围几乎所有“把庞大信息压缩到小模型”的过程都被冠以蒸馏之名。人们说“把一本 500 页的书蒸馏成训练集”本质上不过是做了数据处理和摘要增强“把 skill 蒸馏给 agent”在实现上也往往是让大模型生成大量行为轨迹再对策略模型做模仿学习。这些过程都不完全等于 Hinton 那套知识蒸馏定义更不等于 On-Policy 策略蒸馏。术语泛化造成的最直接问题是研究结论失真。假设你用一个大语言模型给一堆提示词生成高质量回复然后用这些回复做 SFT 训练小模型最后小模型效果不错你说这是“蒸馏成功”。但从技术机理上你只是做了一个数据扩充版的监督微调。大模型提供的并不是按原始输入空间逐点定义的软标签而是一组行为流。对通用 NLP 任务这也许没关系反正评判标准是生成质量但在强化学习决策任务里由于学生未来的状态访问分布与教师行为数据覆盖不一致监督微调式的“蒸馏”很容易在分布外状态失败。OPSA 方向真正想做的大概是重新划定术语边界如果要让学生在复杂任务里顶用不能只在教师固定的离线路轨迹上做有监督拟合要让学生在自己策略主导的 On-Policy 状态分布上学会适应。于是“无需监督”不只是算法创新也是一种方法论提醒。它提醒所有做蒸馏的人先去证明迁移机制再谈效果迁移。日常表达常见实现方式背后的真实技术机理是否能称为严格意义上的知识蒸馏蒸馏一本书大模型对整本书做摘要、结构化文本摘要与数据合成至多是数据预处理把 skill 蒸馏进 agent大模型生成轨迹小模型做行为克隆Imitation Learning / BC严格说不算缺环境闭环模型蒸馏软标签 / logits 匹配经典知识蒸馏是但需看数据分布OPSA / 无需监督策略自生成经验上做自对齐自监督 / 自举优化它自己刻意避开这套命名6. 从“是否真蒸馏”到项目工程判断工程师应该关注什么如果只看论文核心读者是研究策略蒸馏的人但做 RLHF 训练系统和强化学习应用的工程师同样能从这篇论文的质疑里提炼出可操作的经验。最直接的一条是不要在训练脚本里无脑叠加 teacher loss。很多 RLHF 项目会把“策略模型参考模型 KL 惩罚”叫作蒸馏其实它只是防止策略模型跑飞的正则约束。P PO 训练时参考模型的 KL 越压越低并不代表参考模型知识迁移成功更多代表新策略与参考策略分布接近。想要验证是否迁移需要单独评测参考模型擅长的任务子集而不是只看整体 reward 上升。工程上我建议把三类信号分开统计reward 信号、教师/参考模型 KL、学生自身探索指标。每一轮训练记录里都单独出一张图。如果 reward 在上升同时 KL 在下降这是典型的策略向教师靠拢如果 reward 上升但 KL 不降说明学生是在靠自身强化学习而不是模仿教师如果 reward 不升但 KL 下降学生只是被拉向教师但没有学会环境反馈。三种情况对应完全不同的调参方向只盯一个总 loss 曲线看不出问题。需要关注的第二个点来自数据分布迁移成本。训练后期学生策略的频率分布往往高度集中在高收益状态附近教师参考模型在通用分布上的监督反而会把学生拉离高收益区域。此时正确的做法是用自适应温度或自适应权重来控制教师约束而不是固定一个 KL 系数。OPSA 的“无需监督”启发就在这里当训练进入后期外部教师约束可以逐步退温让学生在奖励信号主导的小区域里做细颗粒度优化可能比继续强制贴近教师效果更好。第三个点是接口/服务上的影响这类策略研究通常需要大规模并行 rollout。如果你的团队在复现类似 OPSA 方法整个系统需要额外规划一个高质量的经验回放池把学生的自生成数据、价值函数估计、状态分布统计按时间窗口保存。这样可以随时做后验归因某个回合性能下降是因为学生进入了一个新的状态区域还是因为教师约束过强。建议将环境采样的数据结构和统计工具打成独立模块避免全部耦合在训练脚本里。7. OPSA 路线在 LLM 对齐场景中的可迁移价值OPSA 虽然可能在经典强化学习环境里提出但它的核心命题在 LLM 对齐上也成立。现在很多“大模型蒸馏小模型”项目实际用的是离线生成数据加监督微调。数据由大模型教师生成输出空间不像连续控制那样受分布漂移影响吗当然受。语言模型生成回答时上下文是用户提示和模型之前的生成内容蒸馏用的教师回答分布如果与学生策略分布差异过大学生只是在拟合教师偏好却不一定形成自己的高质量生成模式。这正是 OPSA “无需监督”思路迁移到语言模型时可以发挥价值的地方。让策略模型在自生成的输出上构建偏好信号或自洽性判断不再依赖教师逐 token 监督能够规避教师分布和学生分布错位问题。比如让同一个模型对同一问题生成多个回答用自我一致性打分挑选高置信答案作为偏好对再更新策略。这个过程既没有外部奖励模型也没有教师 logits是纯学生自举。应用到 RLHF 里时它可以减少对奖励模型的依赖也能消除奖励模型过度优化Reward Hacking的风险因为学生的优化目标被换成“回答集合内部一致性”这种相对稳健的信号。但这不代表 OPSA 可以无限迁移。语言模型的环境反馈往往稀疏不像 MuJoCo 或 Gym 那样每一步都有明确奖励。学生自举必须有某个内部评估器否则模型会产生高频但无意义的内容。因此“无需监督”实际等价于“把外部监督换成了更便宜的内部监督”研究者在迁移时要评估这条内部监督的质量能打几分。再进一步看任务设计OPSA 类方法更适合那些有明确“标答一致性”的任务比如代码生成、数学推理、结构化信息提取而对于观点生成、创意写作这类开放任务自我一致性信号和真实用户偏好未必正相关。选题时如果盲目套用无监督自适应容易得到“学生自己和自己对齐但用户不满意”的结果。8. 局限与最容易踩的坑先讲概念上的局限。OPSA 既然不依赖教师监督它就要为目标函数找到一个可以提供学习信号的东西。一旦没有任何外部信号学生只能靠自举优化这非常容易引发模式坍缩。许多 RL 任务的开局状态差异很大学生的价值网络在探索不足时会给出噪声巨大的估计这时候用 OPSA 更新策略可能比不用更差。稳妥的做法是前期先用一段教师监督或模仿学习把策略带到可行区域再切换成 OPSA 做细调。把“无需监督”理解成“从第 0 步就不监督”很危险。实验复现层面最容易踩的坑就是把数据分布混在一起还不自知。很多训练实现为了省事把教师数据集、学生自集、回放池混合在一个 loader 里。这样得到的结果无法回答任何归因问题。建议每个实验版本都保存训练集组成标记至少区分 data_source 和 teacher_loss_weight 两个字段。将来做消融时不用重新训练就能先排除一批可能原因。下面给一份最小配置示例{ exp_name: opsa_style_debug, trainer: { algorithm: ppo, total_timesteps: 1000000, seed: [1, 2, 3, 4, 5] }, data: { student_rollout: true, teacher_rollout: false, mixed_replay_buffer: false, data_source_mark: true }, loss: { use_teacher_kl: false, teacher_kl_weight: 0.0, use_advantage: true, internal_signal: gae } }代码层面也要留意 GPU 与 rollout 吞吐量的平衡。OPSA 类方法的主成本几乎都花在自生成轨迹上学生策略需要不断在环境中交互采样。如果采样速度远慢于优化速度训练会频繁阻塞。最好单独维护一套采样 worker让梯度更新和 rollout 并行。显存占用主要来自价值网络、策略网络以及可能的自一致性打分模型具体数字应根据模型参数量和批量大小实测不同环境差别很大。9. 一张“论文检查单”阅读类似研究时先看这四件事结合 On-Policy 蒸馏是否真蒸馏这个主题以后你再看任何“agent 蒸馏”“skill 迁移”“策略蒸馏”相关的论文都可以先检查四个点。第一看它是离线蒸馏还是在线交互式蒸馏。离线蒸馏可以被理解成高级行为克隆在线蒸馏则和强化学习更新纠缠在一起。如果论文没有把这两个设定明显区分那么报告里的涨点大概率是混合因素而不是纯粹蒸馏贡献。第二看教师是否固定。好的蒸馏对比应该把教师冻结后单独做一组实验。如果教师也参与在线更新就必须报告“学生从冻结教师学到多少”和“学生通过与在线教师同练得到多少”否则无法回答真正的问题。第三看它把学生自己的 rollout 算不算作成功原因。很多方法的提升只是因为学生的训练预算增加了凡是做了环境中多轮采样再训练性能自然会提升。这不是蒸馏的功劳而是策略自适应的功劳。OPSA 恰恰站在这条边界上。第四看评估集是否来自学生自己的状态分布。如果评测只在教师数据覆盖范围内做学生过拟合教师行为也会得到高分数只有让学生在开放交互环境中长周期运行并测试才能判断它是否真的获得了决策能力。把这些检查点读过一遍你至少不会因为曲线涨了就宣称“蒸馏有效”。在最坏情况下很多被包装成新方法的 work本质上是“普通强化学习 一个可有可无的正则项”。如果你正要复现或扩展这套思路我建议的第一个验证动作是跑“随机教师替代真实教师”那组实验。它是最便宜、最直接的试金石能快速告诉你在你的任务中所谓教师知识到底占多少权重。多数时候你会发现随机教师也能带来相当大比例的 KL 约束提升那后面的 OPSA 路线就值得认真对待。把这份反思带回到你自己的训练任务中先定义一个不能归因到外部知识源的最低性能基线再做蒸馏最后回答“提升超过基线了吗超过基线的那部分能跨分布泛化吗”解决了这两个问题你才算真正做了一次负责任的蒸馏实验。