知识蒸馏:SFT、RL、GKD等核心区别解析 一文讲懂知识蒸馏SFT、RL、GKD、OPD-RL、OPSD 到底有什么区别前言知识蒸馏简单来说就是让一个强模型当老师一个小模型当学生。学生不是只背老师的最终答案而是学习老师在每一步生成 token 时的“判断倾向”。很多人第一次接触知识蒸馏时会把它理解成“让小模型模仿大模型的答案”。这个理解不算错但不够准确。真正的知识蒸馏不只是让学生模型输出和老师模型一样的答案而是让学生模型学习老师模型在每一步生成时的概率判断结构。也就是说学生学的不是一个死答案而是老师在生成过程中的“判断方式”。一、最简单的类比老师不是只给答案而是告诉你为什么这个答案更像对的普通 SFT 更像这样老师直接给你标准答案。你只需要照着答案背。比如问题请解释知识蒸馏 标准答案知识蒸馏是一种让小模型学习大模型能力的方法。训练时学生模型只知道下一个 token 应该是“知识” 再下一个 token 应该是“蒸馏” 再下一个 token 应该是“是”但是它不知道老师为什么这么选。知识蒸馏更像这样老师不仅告诉你答案还告诉你这个位置为什么更适合用“模型”不太适合用“数据”更不适合用“参数”。比如老师模型在某个位置的判断可能是token老师认为的概率模型60%知识20%参数10%数据5%其他5%学生模型当前可能是token学生认为的概率数据40%模型25%参数15%知识10%其他10%蒸馏训练的目标就是让学生的概率分布逐渐接近老师的概率分布。所以知识蒸馏学到的不是一个死答案而是老师的概率判断结构。这就是所谓的软标签 / soft distribution二、SFT 其实可以看成知识蒸馏的特殊版本SFT 也可以看成一种特殊的蒸馏。区别在于SFT 的老师只给 one-hot 答案。也就是正确 token 1 其他 token 0比如下一个 token 应该是“知识”那 SFT 只告诉学生“知识”是正确答案其他都别管。但是在真实的教师模型里它可能是这样想的token概率知识70%模型10%训练8%机器3%其他9%SFT 只保留了“知识”这个最终答案却丢掉了老师完整的判断过程。所以可以这样理解SFT 学的是标准答案。知识蒸馏学的是老师的判断分布。三、为什么需要知识蒸馏语言模型通常会经历几个阶段阶段作用预训练学语言、世界知识、基础推理能力中训练注入领域知识比如代码、医学、公司内部文档后训练让模型更会听指令、更会对话、更会推理知识蒸馏主要发生在后训练阶段。它的核心作用是把一个已经比较强的大模型的行为习惯、推理方式、回答风格迁移给一个更小、更便宜、更容易部署的小模型。你可以理解成大模型能力强但成本高、延迟高、部署难 小模型成本低、速度快、部署容易但能力弱 蒸馏尽量把大模型能力迁移给小模型所以蒸馏的目的就是尽量保留大模型能力同时降低成本、延迟和部署难度。四、训练小模型时老师到底是怎么教学生的可以从两个角度看题目和答案从哪里来老师怎么给反馈这就涉及两个关键维度off-policy 和 on-policyper-sequence 和 per-token五、off-policy 和 on-policy数据从哪里来1. off-policy用别人已经准备好的答案训练比如你有一批固定数据问题请解释知识蒸馏 标准答案知识蒸馏是让小模型学习大模型输出分布的方法……学生模型拿这批现成数据去学。这就叫 off-policy。你可以理解成学生看教材、背例题、学固定答案。SFT 就是典型的 off-policy。2. on-policy学生自己先生成答案再拿去评价比如学生模型自己回答问题请解释知识蒸馏 学生回答知识蒸馏就是把大模型压缩成小模型……然后老师模型或者奖励模型来评价这个回答好不好。这叫 on-policy。你可以理解成学生自己先做题然后老师再批改。RL、GRPO、on-policy 蒸馏都属于这个方向。六、per-sequence 和 per-token反馈有多细1. per-sequence整段回答只给一个总分比如学生写了一整段答案老师只说这条回答 80 分。老师没有告诉你哪句话好哪一步错只给了整体分数。这就叫 per-sequence也就是按整段回答给反馈。RL 通常就是这种形式。它的特点是能优化最终结果但反馈比较粗。2. per-token每一个 token 都给反馈大模型生成文本不是一次生成整段而是一个 token 一个 token 往外生成。比如知识 / 蒸馏 / 是 / 一种 / 模型 / 压缩 / 方法老师可以在每个位置告诉学生这个位置应该更倾向于输出“蒸馏”不是“训练” 这个位置应该更倾向于输出“模型”不是“数据” 这个位置应该更倾向于输出“压缩”不是“部署”这叫 per-token。你可以理解成老师不是只看最终答案而是逐字逐步地告诉学生哪里更接近正确方向。知识蒸馏的强大之处就在这里它的反馈比 RL 更细。七、把 SFT、RL、蒸馏放到一张表里方法数据来源反馈粒度像什么SFT固定数据集每个 token但只有标准答案背标准答案RL / GRPO学生自己生成整段回答一个分数做题后看总分离线蒸馏固定数据集每个 token 学老师概率看老师逐字讲解在线蒸馏学生自己生成每个 token 学老师概率学生先做老师逐步改真正要记住的是SFT 是学标准答案。RL 是学奖励分数。蒸馏是学老师每一步的判断分布。八、为什么说 SFT 是“背答案”SFT 的训练数据通常长这样输入解释一下知识蒸馏 输出知识蒸馏是一种让小模型学习大模型能力的方法……训练时模型只知道下一个 token 应该是“知识” 再下一个 token 应该是“蒸馏” 再下一个 token 应该是“是”它不知道老师心里其实是这样想的“知识”概率 70% “模型”概率 10% “训练”概率 8% “机器”概率 3% 其他词概率更低SFT 只告诉学生正确答案就是“知识”其他都别管。所以 SFT 的信号比较硬也就是 one-hot 标签。九、为什么蒸馏比 SFT 更像“老师教学生”蒸馏不只是告诉学生正确答案是什么还告诉学生老师在这个位置上认为哪些 token 也有可能哪些 token 完全不应该出现。举个例子。问题什么是知识蒸馏老师模型在某个位置可能认为token老师认为的概率模型60%知识20%参数10%数据5%其他5%学生模型当前可能是token学生认为的概率数据40%模型25%参数15%知识10%其他10%蒸馏训练的目标就是让学生的分布越来越接近老师的分布。所以蒸馏不是简单地让学生输出同一个答案而是让学生学习老师的判断结构。十、GKD 是什么GKD 可以理解成一种非常直接的知识蒸馏方式。它的逻辑是老师给出每个 token 的概率分布 学生也给出每个 token 的概率分布 然后计算两者之间的差距 差距越大loss 越大 训练目标让学生越来越像老师所以 GKD 的核心就是老师怎么判断学生就尽量怎么判断。在 Swift 训练配置里--rlhf_type gkd意思就是使用 GKD 这种蒸馏训练方式。十一、GKD 里的 lmbda 是什么意思lmbda控制的是训练时到底更多使用固定数据集还是更多使用学生自己生成的数据。1. lmbda 0完全使用固定数据集这意味着完全用已有数据训练。比如数据中已经有问题 A - 答案 A 问题 B - 答案 B 问题 C - 答案 C学生就在这些固定答案上学习老师的分布。这叫离线蒸馏。可以理解成学生完全看教材学习。2. lmbda 1完全使用学生自己生成的数据流程变成1. 给学生一个问题 2. 学生自己生成回答 3. 老师看学生这个回答 4. 老师逐 token 给学生指导 5. 学生根据老师反馈改进这叫在线蒸馏也叫 on-policy 蒸馏。可以理解成学生自己做题老师现场批改。3. 0 lmbda 1固定数据和学生生成数据混合比如lmbda 0.5可以粗略理解成一半看教材一半自己做题。十二、GKD 里的 beta 是什么意思beta比较抽象涉及 KL / JSD 这类分布距离。先不用急着看公式可以先这样理解beta 控制学生学习老师分布时是学得更“宽”还是更“尖”。1. beta 0Forward KL偏向于老师觉得可能的东西学生都尽量覆盖。也就是说学生会比较“宽”。比如老师认为A 有可能 B 也有可能 C 也有一点可能学生就尽量都学一点。适合的情况希望学生回答更丰富不要太死板。2. beta 1Reverse KL偏向于学生重点抓老师最确定的答案。也就是说学生会比较“尖”。比如老师认为A 最可能 B 也可以 C 勉强可以学生可能更集中学习 A。适合的情况希望学生输出更确定、更收敛。3. beta 0.5JSD这是一个折中。可以理解成既不要太散也不要太窄。所以一般默认用 0.5 会比较稳。十三、OPD-RL 是什么前面的 GKD 是老师直接教学生。而 OPD-RL 是在 RL 训练里面额外加一个老师。普通 GRPO / RL 是这样1. 学生生成几个回答 2. 奖励函数给每个回答打分 3. 高分回答增强低分回答削弱比如回答分数回答 A90回答 B60回答 C30模型知道A 比 B 好 B 比 C 好但是问题是它不知道 A 到底好在哪里 它也不知道 C 到底哪一步错了所以 RL 的反馈比较粗。OPD-RL 加了老师之后变成1. 学生生成回答 2. 奖励函数给整段回答打分 3. 老师模型逐 token 看学生输出 4. 老师告诉学生每一步是否接近高手答案 5. 最后把奖励分数和老师信号一起用于训练所以 OPD-RL 可以理解成既有 RL 的整体奖励又有老师的逐 token 指导。十四、Swift 里怎么触发 OPD-RL原本 GRPO 是--rlhf_type grpo如果加上老师模型--rlhf_type grpo --teacher_model xxx或者使用老师模型服务--rlhf_type grpo --teacher_model_server xxx就可以理解成带老师指导的 OPD-RL。其中--teacher_kl_coef控制的是老师影响力有多大。teacher_kl_coef含义小主要听奖励函数老师只是轻微参考大更强制学生靠近老师太大学生可能过度模仿老师RL 自己的探索空间变小十五、OPSD 是什么OPSD 更特别它是自蒸馏。也就是说不是一个外部大老师教小学生而是同一个模型分成“老师身份”和“学生身份”。区别在于身份能看到什么学生身份只能看到题目老师身份能看到题目 参考答案 / 解析 / 特权信息然后让学生去学习老师的输出。举个数学题例子。学生看到问题小明有 3 个苹果又买了 5 个一共有几个学生只能根据题目回答。老师看到问题小明有 3 个苹果又买了 5 个一共有几个 参考答案3 5 8所以答案是 8。老师因为看到了参考答案所以输出更稳定、更准确。然后训练目标是让学生在没有参考答案的情况下也尽量学到老师那种解题方式。这就是 OPSD。十六、GKD、OPD-RL、OPSD 三种方法对比方法老师是谁学生怎么学适合场景GKD外部教师模型学老师每个 token 的概率分布大模型教小模型OPD-RL外部教师模型 奖励函数既看奖励分数也看老师逐 token 指导GRPO / RLHF 训练中加老师OPSD同一个模型的教师身份学带参考答案的自己有参考答案、解析、标准过程的数据十七、用一个“学生考试”的故事串起来1. SFT背标准答案老师直接给标准答案题目解释知识蒸馏 答案知识蒸馏是……学生背。特点稳定、简单但学生只知道标准答案不知道老师的完整判断。2. RL做题后看总分学生自己写答案。老师只给分这篇 80 分。 那篇 40 分。学生知道哪篇好但不知道具体哪一步错。特点能优化最终效果但反馈粗。3. GKD老师逐字讲解老师逐字告诉学生这里应该用“模型”不用“数据”。 这里“压缩”比“训练”更合适。 这里“迁移能力”比“复制参数”更准确。学生模仿老师每一步的判断。特点反馈细适合把大模型能力迁移到小模型。4. OPD-RL总分 老师点评学生先做卷子。奖励函数给总分80 分。老师再逐步点评这一步推理不错。 这里 token 选择偏了。 这里应该更像老师模型的输出。特点既有 RL 的整体优化又有老师的细粒度指导。5. OPSD自己教自己同一个模型分成两个身份。学生身份只看题目。老师身份看题目 标准答案 解析。训练目标让学生身份学会老师身份的推理方式。特点不一定需要外部大模型但需要参考答案或特权信息。十八、最后总结把这篇文章浓缩成一句话SFT 是学标准答案RL 是学奖励分数蒸馏是学老师每一步的判断分布。GKD 是直接蒸馏OPD-RL 是在 RL 里加老师OPSD 是让模型用参考答案教自己。再简单一点SFT老师给答案学生背。 RL学生做题老师给总分。 GKD老师逐 token 教学生。 OPD-RL奖励函数给总分老师逐 token 点评。 OPSD模型用“看过参考答案的自己”去教“没看参考答案的自己”。知识蒸馏的核心不是“压缩模型”这么简单而是把强模型的判断方式、推理习惯和输出风格尽可能迁移到更小、更便宜、更容易部署的模型上。