
最近在调研大模型知识蒸馏时有一类讨论非常有意思On-Policy 蒸馏是否真的在蒸馏这个问题听起来像绕口令但背后牵扯的其实是知识蒸馏训练范式中一个容易被忽略的逻辑漏洞。如果学生模型用来请教老师的样本全部来自自己当前的输出分布那么训练结束后学生究竟学到了教师的知识边界还是仅仅在自己的能力范围内变得更加自信更进一步的追问是当一条 On-Policy 样本被教师给出高分时我们能不能确定这个高分是来自真实的语义对齐还是来自学生恰好选了一条保守且平庸的路径这些问题最终指向一类无需额外监督信号的修正思路。本文将围绕一项相关工作——OPSA 方法展开精读梳理 On-Policy 蒸馏的范式定义、潜在风险、核心解决思路以及它对我们在工程中设计蒸馏任务有哪些直接启发。不管你是做 LLM 训练、微调还是只对知识蒸馏方向感兴趣这篇文章都会给你一套完整的分析框架。文中涉及的伪代码仅为工程化示意用于帮助理解论文操作逻辑并非官方源码。1. 背景知识蒸馏中一个容易忽略的逻辑问题1.1 知识蒸馏的最小定义知识蒸馏Knowledge Distillation最初在图像分类领域被广泛使用。一个已经训练好的大模型作为教师Teacher把预测分布中的“软信息”传递给小模型学生Student从而让学生不仅学会正确答案还学会正确答案之外的类间相似度。例如一张猫的图片教师模型可能输出“猫 0.85、老虎 0.10、狗 0.05”这 0.10 的老虎概率就包含了“猫和老虎在视觉特征上有一定相似性”的知识。在大语言模型时代蒸馏的形式更偏向序列级知识迁移。教师模型针对某个提示生成回答学生模型学习这段回答的文本分布。常见的做法是构造一个包含提示和响应的数据集然后让学生模型在教师响应上做最大似然估计或 KL 散度最小化。这样的做法可以理解为用一批固定的、来自教师分布的数据去约束学生。这个过程中数据的分布是相对静态的。提示集固定教师响应固定学生只是在这个固定分布上做模仿逼近。它的优点是稳定缺点也同样明显学生能力的上限受限于离线数据覆盖的范围很难学到数据中没有覆盖到的教师行为。1.2 On-Policy 蒸馏为什么会出现离线蒸馏的问题在强化学习社区看来非常熟悉。如果学生只在一个固定数据集上学习那么它一旦遇到分布外输入行为可能完全失控。于是一个很自然的改进方案是让学生先自己尝试生成再把学生生成的内容交给教师打分或纠正进而利用教师反馈继续训练学生。这种思路在形式上非常接近强化学习中的 On-Policy 采样。训练过程中学生模型当前策略采样出响应再使用教师信号评估该响应最后反过来更新学生。于是就有了“On-Policy 蒸馏”这个说法。具体的训练目标可能是一系列设计的组合比如让教师对学生生成的响应计算 KL 散度或者让教师判断学生生成内容的优劣再以这些信号作为训练权重。表面上看这个闭环比离线蒸馏更高效学生每更新一步采样分布就更接近当前策略训练数据也更有针对性。但仔细想会发现一个潜在问题学生问教师的每一个问题都是学生自己已经知道怎么回答的问题。即使回答得不对也只是在“自己熟悉的地方犯错”。那教师提供的纠正信息本质上是局部的、受限的并不等于覆盖了教师真正擅长的知识边界。1.3 为什么“是否真在蒸馏”是一个严肃问题蒸馏不是简单的模型压缩它的本质是让学生从教师的决策逻辑中获得泛化能力。如果训练数据只来自学生当前的输出分布那么学生很容易陷入一种状态在自己已经能够较好处理的区域内输出变得更平滑、更自信但在自己原本不会的区域因为根本没有机会采样到相关样本所以始终没有得到教师的指导。这会产生一个反直觉的结局——训练损失持续下降评测指标看起来相当不错但学生并没有变得更像教师只是更像“一个经过平滑处理后的自己”。论文标题中“是否真在蒸馏”的疑问本质上就是在质疑这种训练范式的有效性边界。2. 标准蒸馏与 On-Policy 蒸馏的核心差异2.1 标准响应蒸馏固定分布上的模仿为了把问题说清楚我们先定义一个相对标准的蒸馏流程。给定提示集 X教师模型 T 对每个提示生成响应 y_T。学生模型 S 的训练目标通常是L E_{x ~ X} [ KL( S(· | x) || T(· | x) ) ]或者更常见的是在教师生成的离散文本 y_T 上做 teacher-forcing 训练L - E_{x ~ X} Σ_t log S(y_T,t | x, y_T,t)这里 y_T 在训练前或者训练过程中以较低频率刷新但整体上不依赖学生当前策略。教师是学生学习的“绝对标尺”学生需要去够到一个外部给定的目标分布。这种方式的优点是训练稳定学生不会因为自己当前策略的缺陷而无法获得某个区域的监督。缺点是数据覆盖受限。如果教师在某些提示上的回答风格非常多样但离线样本只保留了其中一种学生就只会学到这一种无法主动探索教师的其他合理行为。2.2 On-Policy 蒸馏学生采样教师评判On-Policy 蒸馏的核心变化是监督信号来自学生自己的采样结果。具体训练循环可以写成这样给定提示 x学生模型 S 按照当前策略采样一段响应 y_S。将完整序列 (x, y_S) 交给教师模型 T。教师模型基于这段学生输出给出某种反馈信号。学生模型根据该反馈更新参数。这种模式的优点非常明显它可以在线产生和当前策略分布匹配的训练数据。学生哪里容易犯错就从哪里采样然后教师针对性地纠正。这种“哪里不会点哪里”的思路理论上应该比静态数据更高效。但问题也随之而来。由于 y_S 来自学生自己的分布学生没有采样到的区域永远不会获得教师反馈。如果学生早期就对某个领域完全无知导致采样概率极低那么整个训练过程中这个领域几乎不会进入监督范围。对比维度标准响应蒸馏偏 Off-PolicyOn-Policy 蒸馏数据来源教师或固定数据集生成学生当前策略采样覆盖范围取决于离线数据覆盖度取决于学生策略探索范围训练稳定性较高存在自增强风险教师反馈含义对固定目标分布的描述对当前学生输出的局部修正分布偏移不太容易体现学生能力变化数据分布随学生能力动态漂移2.3 两者的训练信号差异如果我们进一步拆解训练信号差异会更加明显。在标准蒸馏中教师给出的 token 级分布是独立于学生状态的。教师说“下一个词应该是 A 而不是 B”这个判断不会因为学生当前是否倾向于生成 A 而改变。这种信号更接近“绝对知识”。在 On-Policy 蒸馏中教师看到的输入序列是学生生成的。教师给出的“A 比 B 好”的判断不仅要考虑 x 本身还要考虑学生已经生成的错误上下文。如果学生生成的上下文偏离了正常分布教师的反馈更多是在“修正一个已经跑偏的对话”而不是“示范正确的对话应该长什么样”。这种信号更适合称为局部纠正而不是全局蒸馏。理解这一点是理解 OPSA 方法的关键前提。3. On-Policy 蒸馏的隐忧模型到底在学什么3.1 教师给出高分不代表学生学到了知识在 On-Policy 蒸馏的训练循环里学生采样响应后教师会对该响应给出一个评分或分布反馈。当教师给出较高分数时训练流程会认为“学生这次输出不错应该强化”。但这个判断存在一个微妙的盲区教师的高分可能是语义层面的认可也可能是“虽然这句话表达一般但毕竟是在当前上下文中比较安全的回答”。举例来说如果我们让教师评价一个代码修复建议学生给出了一段语法完全正确但没有解决根本问题的代码。教师可能因为代码本身没有明显错误而给出不低的分数。学生收到正向强化后会更倾向于生成类似模式的代码。它确实变流畅了却没有更接近教师的深层推理能力。这就是典型的“伪对齐”教师点头并不等于学生学到了知识只说明学生这次没有踩到教师明显不喜欢的区域。3.2 分布偏移与自我巩固风险On-Policy 采样会带来一个动态闭环。学生如果早期对某个风格有偏好它的采样结果也会倾向于该风格教师基于这些样本给出的反馈会继续强化这种风格。表面上学生是在向教师学习实际上它在自己的局部最优区域里越走越深。这种效应类似于自训练Self-Training中的确认偏差也和强化学习中过度利用、探索不足的问题同源。尤其需要警惕的是学生的错误模式可能会相互叠加。当学生连续生成多个在教师看来“勉强可用但不够好”的 token 后教师不得不基于一个逐步偏离理想分布的序列做评判。教师给出的反馈因此越来越像“补丁”而不是“蓝图”。补丁打得多了学生自身生成分布的缺陷反而被掩盖最终培养出一个充满内部妥协的模型。论文中常提到的一个现象是On-Policy 蒸馏在训练分布上的指标通常会不错。因为采样分布和训练分布同源模型当然更擅长应对自己采样出来的数据。真正的问题暴露在分布外评测中一旦提示风格、任务领域发生偏移模型的真实泛化能力就会现出原形。3.3 教师的纠正能力也是有限的另一个容易被忽略的因素是教师模型本身的能力边界。教师虽然比学生强但并非全知全能。当学生给出一个非常离谱的输出时教师可能会尝试纠正最明显的错误但不会顺带把更优的解题思路完整示范一遍。一次纠正的收益是有限的多次纠正的累积效果也不一定等于一段高质量示范。OPSA 相关工作最核心的出发点就是意识到不加筛选的 On-Policy 监督信号中包含大量低质量、低信息量的样本。与其让这些样本平等地参与梯度更新不如先对采样得到的监督信号做一次“质量甄别”再把真正有助于学生接近教师决策边界的样本凸显出来。4. 无需监督的 OPSA 方法核心原理4.1 从“监督信号加权”到“采样调整”OPSA 的全称可以理解为 On-Policy Sampling Adjustment也就是对 On-Policy 采样得到的训练信号进行自适应调整。它和普通样本加权最大的区别在于不需要额外训练一个奖励模型或质量判别器。很多蒸馏方案会训练一个评估模型对样本打分然后过滤低分样本。这样的做法需要额外的监督数据而且评估模型自身的偏差也会引入新的噪声。OPSA 希望只利用学生和教师在前向传播过程中本身就存在的分布信息就能判断哪些监督信号是有效的。这种思路对训练管线非常友好。因为蒸馏训练中学生和教师的 forward 计算本来就是必需的。我们不需要单独维护一个奖励模型也不需要人工标注数据只需要设计合适的指标从学生采样序列与教师反馈序列的一致性中抽取信号。这个“无需监督”的设定是 OPSA 方法最具工程吸引力的地方。4.2 从采样序列中发现“伪教学信号”要理解 OPSA 的调整逻辑需要先理解什么样的 On-Policy 样本是“低价值”的。一类典型的低价值样本是学生生成的序列已经严重偏离任务目标教师虽然可以纠正局部错误但整段序列并没有展现出更优的推理路径。另一类低价值样本是学生输出虽然流畅但和教师偏好之间的分歧很小。如果学生已经会了继续给高分只会让训练信号变得冗余。反过来说真正高价值的 On-Policy 样本应该处在学生“稍微够一下就能达到教师水准”的区间内。学生在这个区间里犯错但教师的纠正能把学生推向一个更优的局部区域。这个区间对应机器学习里常说的“合适难度”样本不容易但也没有难到完全无法学习。问题在于我们如何不用额外监督就识别出这类样本OPSA 的思路是观察学生当前输出与教师解码路径之间的对齐关系。这可以分为两个层面。第一个层面是分布层面学生某个 token 位置上的预测分布和教师在同一位置的预测分布差异有多大。差异过小说明样本太简单差异过大说明这个位置已经超出了学生当前的可学习范围。第二个层面是语义层面一段学生输出中哪些连续的 token 组成了一个完整的语义单元在这个单元内部的对齐情况如何。4.3 对齐分数计算与调整目标用工程化的语言描述我们可以为学生的每个采样序列计算一个对齐分数向量。对序列中的每个 token 位置 t假设学生模型在当前上下文下输出的概率分布为 P_S(· | x, y_S,t)教师模型对同一前缀输出的概率分布为 P_T(· | x, y_S,t)。两个分布之间的差异可以用 KL 散度或 Jensen-Shannon 散度衡量。但直接用 token 级差异会过于碎片化OPSA 类方法通常会先识别出语义块再在语义块内汇总对齐信息。高对齐的语义块意味着学生的局部决策和教师一致较低但对齐趋势稳定的语义块则可能是值得学习的“最近发展区”。完全不对齐或剧烈震荡的语义块则可能来自学生已经进入某种错误生成模式此时继续强化或硬拉都会降低训练收益。调整阶段可以有两种操作。一种是软加权给不同语义块分配一个 0 到 1 之间的权重让低质量监督信号对梯度的贡献变小。另一种是重采样根据对齐分数调整后续采样策略比如在低质量区域增加探索温度或者重新从教师引导的上下文开始生成。两种操作并不互斥实际中更常见的是先做软加权过滤再对少数困难样本进行重采样补全。4.4 无需监督的“监督信号”到底从哪来看到这里你可能会好奇既然不需要额外的监督模型那 OPSA 用什么来判断“当前语义块是否值得学习”答案是它用的仍然是训练过程中已有的信号但把信号的组织方式从“绝对值”改成了“相对一致性”。关键转变在于我们不再问“教师喜不喜欢这段输出”而是问“这段输出中学生与教师的分歧模式是否被学生自身当前的能力分布所支持”。如果学生的高置信度区域与教师的高置信度区域高度重合说明学生正在依赖可靠的内部知识如果学生高置信度但教师低置信度并且分歧方向不清晰这类样本更可能来自过度自信的错误猜测。此时并不需要额外标注只需要对比两套分布就能发现矛盾。这种逻辑有点像利用模型自身的不确定性做样本修正只是 OPSA 把它从图像分类、半监督学习迁移到了序列蒸馏场景并且把粒度从整个样本细化到了语义作用域。5. 代码视角把 OPSA 思路写成可执行的伪代码5.1 逐 Token 对齐状态计算虽然论文不一定会公开可以直接复现的代码细节但我们可以把 OPSA 的核心思想拆解成清晰的模块。第一个模块是逐 Token 的状态收集。我们需要同时跑学生和教师的前向传播并记录每个 token 位置上的概率分布和隐状态。下面是一段 PyTorch 风格的伪代码只用于表达计算逻辑import torch import torch.nn.functional as F def collect_alignment_stats(student, teacher, input_ids): input_ids: 学生当前策略采样出的 token 序列 返回每个 token 位置的分布差异和隐状态相似度 with torch.no_grad(): s_logits, s_hidden student(input_ids, output_hidden_statesTrue) t_logits, t_hidden teacher(input_ids, output_hidden_statesTrue) s_probs F.softmax(s_logits, dim-1) t_probs F.softmax(t_logits, dim-1) # 用 KL 散度衡量分布差异数值越大分歧越明显 kl_div F.kl_div( s_probs.log(), t_probs, reductionnone, log_targetFalse ).sum(dim-1) # 用最后一层隐状态的余弦相似度衡量语义方向接近程度 s_vec s_hidden.last_hidden_state t_vec t_hidden.last_hidden_state cos_sim F.cosine_similarity(s_vec, t_vec, dim-1) return kl_div, cos_sim这段代码并不复杂重点在于我们同时获得了分布层面和表示层面的对齐指标。分布层面的 KL 散度适合反映学生是否在“预测下一个词”这件事上和教师保持一致表示层面的余弦相似度则能更细腻地反映两个模型在当前上下文中的内部理解是否同向。5.2 在语义作用域上做自适应重加权拿到逐 token 的对齐指标后下一步是找出语义作用域并计算权重。逐 token 操作太碎一个句子里可能有某个虚词导致 KL 散度异常但整体语义仍然是高质量的。更合理的做法是先用简单规则把序列切成若干片段比如按停顿词、标点、句子边界切分再在每个片段上聚合对齐指标。如果想要更精细也可以用文本分割工具提取短语级别的语义单元。为了演示下面用标点和换行作为粗略切分规则import re def segment_by_punctuation(text): # 按句子终止符切分保留原始顺序 parts re.split(r(?[。.!?])\s*, text.strip()) return [p for p in parts if p] def compute_segment_weights(kl_div, cos_sim, token_ids, tokenizer, temperature1.0): # 将 token 还原为文本后切分 decode_str tokenizer.decode(token_ids, skip_special_tokensTrue) sentences segment_by_punctuation(decode_str) # 建立 token 到句子的粗略映射 weights [] for sent in sentences: # 实际代码需要根据 token 偏移精确聚合 sent_len max(len(tokenizer.encode(sent)), 1) seg_kl kl_div[start: start sent_len].mean() seg_cos cos_sim[start: start sent_len].mean() start sent_len # 核心调整逻辑 # 1. KL 过大说明分歧噪声大不应给太高权重 # 2. 余弦相似度低说明语义方向不一致应降权 # 3. 两者都适中时才是“可学习”样本 score seg_cos / (1.0 seg_kl) weight torch.sigmoid((score - 0.5) / temperature) weights.append(weight.item()) return weights这里的 weight 计算只是一个示意思路。真实论文中的调整函数可能有更精细的设计例如使用非线性映射、动态归一化、甚至逐层聚合隐状态信息。但核心逻辑是通用的把“学生与教师的分歧程度”转化为“当前监督信号可信度”然后用可信度去调制 Loss。5.3 训练循环集成最后把上述逻辑放入一个训练循环。学生在每个 step 先采样一段响应计算教师反馈时同步得到对齐指标最后用 OPSA 权重重新缩放每个片段的 KL 损失def opsa_training_step(student, teacher, optimizer, prompt_ids, tokenizer): optimizer.zero_grad() # 1. 学生当前策略采样响应 student.eval() with torch.no_grad(): sampled_ids student.generate( prompt_ids, max_new_tokens128, do_sampleTrue, temperature0.8 ) student.train() # 2. 联合前向获得对齐统计量 kl_div, cos_sim collect_alignment_stats(student, teacher, sampled_ids) # 3. 在语义片段上计算权重 seg_weights compute_segment_weights( kl_div, cos_sim, sampled_ids, tokenizer ) # 4. 重构加权后的蒸馏损失 s_logits, _ student(sampled_ids, output_hidden_statesTrue) t_logits, _ teacher(sampled_ids, output_hidden_statesTrue) loss weighted_kd_loss( s_logits, t_logits, sample_idssampled_ids, segment_weightsseg_weights, tokenizertokenizer ) loss.backward() optimizer.step() return loss.item()需要注意采样和梯度传播之间必须做好状态隔离。学生在采样时应处于 eval 模式并使用 no_grad避免采样过程中的随机性反向传播到模型参数中导致训练不稳定。5.4 一份实验配置示例为了让工程复现更方便我们还可以把关键超参数整理成一份 YAML 配置model: student_name: Qwen/Qwen2.5-0.5B-Instruct teacher_name: Qwen/Qwen2.5-7B-Instruct max_length: 1024 sampling: temperature: 0.8 top_p: 0.95 do_sample: true max_new_tokens: 256 opsa: enabled: true segment_mode: sentence # sentence / phrase / token weight_temperature: 1.0 min_weight: 0.05 low_kl_threshold: 0.1 high_kl_threshold: 5.0 training: batch_size: 4 grad_accumulation_steps: 8 learning_rate: 5e-6 lr_scheduler: cosine log_interval: 10 save_interval: 200配置参数需要根据你的模型和任务自行调整上面只是演示 OPSA 思路落地时需要哪些控制项。核心思想是不仅记录教师反馈还要记录反馈与当前策略采样的对齐状态再根据对齐状态调制学习目标。6. 论文实验观察哪些结论值得关注6.1 局部 Token 对齐与全局语义效果的分离论文在实验部分一个值得关注的发现是直接基于逐 Token 的对齐指标做加权并不一定带来整体收益。原因是 token 级分布中的噪声太大。某些停用词、语法连接词会让 KL 散度产生较大波动但这些波动对语义迁移没有实际意义。只有把对齐信息汇总到更粗的语义粒度比如句子、短语或完整的推理步骤后调整信号才变得稳定。这个现象和我们在文本生成中常见的经验一致。语言模型训练 loss 是一个逐 token 的负对数似然累加但真正体现模型智能水平的是更宏观的语义规划能力。OPSA 在语义作用域上做调整本质上就是在帮助训练过程把目光从“局部词预测”拉高到“整体语义推进”上。6.2 训练稳定性和泛化能力的变化另一个值得关注的方向是训练稳定性。从论文的表述逻辑来看On-Policy 蒸馏之所以需要修正是因为它会放大学生模型的早期偏好形成一种内在的正反馈。OPSA 通过对低质量监督信号降权相当于切断了这条自我强化的回路。学生不再盲目相信教师给出的每一个 positive feedback而是有选择地吸收那些真正朝教师分布靠拢的信号。在泛化能力方面论文的核心观点是经过 OPSA 调整后的学生模型在分布外评测中会更稳定。这个结论的方向是符合直觉的。因为我们没有强迫学生把所有自身采样出的内容都向教师看齐而是把学习压力集中在那些学生已经表现出一定潜力、只是尚未完全对齐的语义区域。6.3 实验设置的启示从工程复现的角度看论文中的实验设置也给我们的训练管线提出了几个启示。第一数据集中需要包含足够的提示多样性否则无论采样策略如何调整学生能探索的区域仍然有限。第二温度参数会影响 On-Policy 采样的探索程度温度过低会导致采样的响应高度集中难以触发高价值的学习信号温度过高则会产生太多噪声让教师反馈失去语义重心。第三模型的中间层对齐状态可能比最后一层更容易反映可学习性尤其是对于层数差异较大的师生模型对。当然论文中的具体实验提升幅度会因模型规模、任务类型、蒸馏数据规模不同而有所差异。如果你在复现中发现效果不如预期建议先检查采样配置和对齐指标的计算粒度这两个模块通常是影响 OPSA 成效的关键因素。7. 从论文到工程实践给训练同学的参考7.1 不要盲信 On-Policy 反馈读这篇论文给我一个很直接的工程提醒在任何蒸馏或自训练流程中都不应该把“教师给了高分”当作样本一定有价值的充分条件。更稳妥的做法是在训练日志中额外记录一组“样本对齐度”指标比如学生与教师在语义片段上的 KL 散度、隐状态相似度以及教师反馈分数的变动趋势。把这三者放在一起观察才能区分模型是在稳步靠近教师还是在某些局部区域里自嗨。这种监控成本很低只需要在 forward 时多保留几份中间结果但对判断训练是否健康非常有帮助。7.2 采样策略和蒸馏目标应该联动很多训练流程把采样策略和蒸馏目标当成两个独立模块。采样端只负责生成候选响应蒸馏目标端负责计算 Loss。OPSA 提醒我们这两个模块应该共享对齐信息。采样时温度太高就会导致大量低质量监督信号进入 Loss此时即便有 OPSA 降权训练效率也依然不高。反过来如果我们能在采样前就根据当前对齐状态动态调节温度或上下文前缀那么采样质量会显著改善需要降权的样本比例也会下降。工程上可以设计一个简单的调节规则当最近 N 个 batch 的片段平均对齐分数持续走低时降低采样温度当对齐分数一直很高说明学生已经接近教师分布可以提高温度以探索新的语义区域。这本质上是在训练过程中引入了针对“学习难度”的自适应控制。7.3 OPSA 与 RLHF/DPO 的关系熟悉大模型对齐训练的读者可能会联想到 RLHF 或 DPO。它们之间确实有交集但目标不同。RLHF 使用奖励模型来反映人类偏好强化学习算法更新学生策略目标是让奖励最大化。DPO 则直接利用偏好对构造隐式奖励。OPSA 针对的目标是“学生和教师分布之间的对齐”它更像是监督蒸馏阶段的一种样本修正方案不一定要和奖励模型绑定。在真实的训练管线中OPSA 可以作为一个前置模块先让学生更好地逼近教师分布再进入 RLHF 阶段做人类偏好对齐。这样可以减少 RL 阶段对探索噪声的依赖提高整个训练流程的稳定性。反过来OPSA 也可以作为一种辅助信号融入 RLHF作为奖励模型之外的正则项避免策略在奖励最大化过程中跑偏。7.4 轻量的可用替代方案即使暂时没有资源完整复现 OPSA也可以借鉴它的思想做一个轻量版本。最简单的做法是在每次 On-Policy 采样后用教师模型从同一起始上下文重新采样一条响应然后与学生采样响应做一次序列级 BLEURT 或余弦相似度对比。相似度低的学生响应直接过滤。这样做虽然多了一路教师采样成本但实现简单也能部分缓解伪对齐问题。另一个更省资源的方法是使用 perplexity 差异作为粗略代理。如果教师对学生响应的困惑度很低但学生自身对该响应的困惑度也很低说明两者高度一致样本冗余如果教师困惑度低而学生困惑度高这类样本最值得学习。这个规则虽然粗糙却能帮你快速筛选出 On-Policy 采样中真正有教学价值的子集。7.5 警惕对齐指标本身的噪声最后要强调的是任何对齐指标都不是完美无缺的。KL 散度对分布差异敏感但如果两个模型的词表不一致计算前需要先统一词表或使用映射。余弦相似度依赖隐层维度不同模型层的语义空间不一定可比。如果你使用的是异构师生模型比如 LLaMA 教师 Qwen 学生直接比较中间层特征可能并不合理。此时可以退回到只比较输出分布层面的指标或者先训练一个轻量映射层再做相似度计算。OPSA 中“无需监督”听起来很美好但在异构模型场景下对齐指标的可靠性会打折扣。工程落地时需要先验证指标本身的稳定性再把它用于 Loss 调制否则等于把噪声引入了训练目标。8. 常见疑问复盘疑问通俗回答工程建议On-Policy 蒸馏是否完全不可用不是它有很高的数据效率但存在伪对齐风险配合对齐指标使用不要无条件信任教师反馈OPSA 是否需要额外训练一个判别器不需要信号完全来自学生和教师前向结果实现时注意保存中间隐状态和逐 token 概率是否只能在同源师生模型上使用不限于同源但异构模型需要处理特征空间不可比问题优先使用分布层面的指标而不是隐状态相似度权重设置会不会让训练更不稳定有这种可能需要设置合理上下限给权重加 min/max 限制并用 EMA 平滑这篇论文适合哪类读者适合做大模型蒸馏、自训练和对齐训练的算法同学也可以作为排查训练不收敛问题时的参考结合以上内容如果后续要做更深入的实验可以优先复现两个对比一是固定随机种子的情况下普通 On-Policy 蒸馏与 OPSA 式调整在分布外数据集上的差距二是不同语义切分粒度对最终效果的影响。这两组实验能帮助你更直观地理解论文中提出的问题也能判断这种思路在你的业务场景里是否有效。9. 写在最后一次对训练目标的重新审视9.1 蒸馏的本质是让模型学会边界而不仅仅是拟合分布知识蒸馏真正有价值的部分不是让学生复现教师在某些样本上的输出而是让学生理解教师决策背后的边界条件。什么时候应该自信什么时候应该承认不确定什么时候需要更长链路的推理。On-Policy 蒸馏之所以会遭受质疑是因为它很容易把训练引导到一条只关注“当前策略下的局部修正”的窄路上。OPSA 提供了一种无需额外监督的调整思路通过学生采样序列与教师反馈之间的内在对齐信息来区分哪些监督信号真正有助于学生逼近教师的知识边界。这个思路并不复杂但它直击了 On-Policy 训练中一个非常本质的方法论问题你要教学生的到底是学生自己已经会做的事情还是学生需要踮脚才能触及的教师能力。9.2 为什么这个概念对工程落地很重要在大模型训练成本高昂的环境下很多团队会优先选择 On-Policy 类方法因为它不依赖大规模离线标注数据效率高。但如果学生只是在自我巩固训练资源的浪费会比想象中更严重。引入对齐感知的样本调整机制不需要额外标注不需要额外训练模型只需要修改训练循环中的 Loss 加权逻辑就能在一定程度上避免这种浪费。这种低成本的修正恰恰是论文工作最有借鉴意义的地方。它提醒我们在追逐更高指标的同时要定期审视训练目标本身是否仍然成立。学生模型真正需要的不是教师在每个位置上的肯定而是那些能把自身推出舒适区的有效监督。希望这篇精读笔记能给你带来一些启发。如果你正在做知识蒸馏或 On-Policy 类训练不妨试试在训练日志中加入对齐状态监控再逐步过渡到更复杂的样本加权策略。理论上的“是否真在蒸馏”之问最终需要靠实践中的指标和泛化表现来回答。