
1. 为什么大模型反而更需要蒸馏一个反直觉的现实先聊个真实场景。去年我在帮团队落地一个面向C端的智能问答产品最初用的是70B级别的开源模型效果确实好但每次调用都在烧钱。单卡推理延迟接近4秒碰上晚高峰并发一起来GPU集群的账单涨得比业务数据还快。后来我们把模型切成7B速度快了但输出质量肉眼可见地下滑尤其是那些需要多步推理和复杂指令跟随的场景直接崩。这几乎是每个做大模型落地的人都会撞上的墙模型越大效果越好但部署成本和响应延迟不允许你一直往上堆参数。知识蒸馏Knowledge DistillationKD在这个时候重新被推到台前。它最早可以追溯到Hinton在2015年提出的经典框架——用一个已训练好的大模型教师去指导一个小模型学生学习核心思路是让学生模型模仿教师模型的行为而不只是学习标注数据本身。听起来简单但放到大模型时代事情发生了本质变化。经典蒸馏处理的是图像分类这类任务教师和学生都是同一类结构输出的是类别概率。而大模型知识蒸馏面对的是自回归生成任务教师和学生可能是完全不同的架构、不同的参数量、不同的词表甚至教师是闭源API比如只能调用接口但不开放权重。这导致大模型蒸馏不能照搬Hinton那套它需要重新定义学什么和怎么学。这篇综述Knowledge Distillation of Large Language Models的价值就在于系统性地把这个问题拆开了。它不只是在讲大模型蒸馏有哪些方法而是把整个知识蒸馏在大模型背景下的动机、分类、训练策略、评测结论和开放问题都做了梳理。先说一个最反直觉的结论在大模型时代蒸馏的重点已经从提升小模型能力转向了让任何一个规模的模型都能对齐教师模型的分布。过去蒸馏是为了把大网络压缩成小网络现在蒸馏很多时候是为了让开源模型对齐闭源模型的风格、推理模式和指令跟随能力哪怕两者参数量差距不大。比如用GPT-4的数据去微调Llama-2-70B这也叫蒸馏。这个转变是整个综述理解的关键。另一个容易被忽视的点是蒸馏和微调的分界线在大模型时代变得非常模糊。传统KD有明确的教师模型参与损失计算而大模型时代很多做法只是用教师模型生成数据来做监督微调SFT教师根本不参与学生训练时的loss计算。这两种做法本质有区别前者是让学生模仿教师的输出分布logits层面后者只是把教师当数据标注器token层面。综述把这两种都归入知识蒸馏的范畴因为它们共享同一个核心目标——迁移教师的知识。搞清楚这一层后面看任何蒸馏方法都不会迷路。2. 蒸馏方法全景从白盒到黑盒的分层思路综述把大模型蒸馏方法分成了两大类白盒蒸馏和黑盒蒸馏。这个划分的核心依据是——你能否拿到教师模型的内部信息比如logits、中间层表示、注意力分布。这个划分非常关键因为它直接决定了你能用什么技术手段。2.1 白盒蒸馏logits、中间层与动态对齐白盒蒸馏的特权是教师模型的权重和隐状态完全开放。你能拿到的信息越多能做的对齐就越精细。最直接的做法是logits蒸馏。教师模型的输出概率分布不仅仅是它选了什么词更包含了它对候选词的置信度分布。比如回答中国的首都是哪里教师模型给北京打的概率可能是0.75给上海打的可能是0.05——这个概率分布里的信息远比北京这个hard label丰富。学生模型不只是学会预测北京还要学会教师对上海的轻微倾向。为了让学生真正感觉到这种分布差异通常会引入温度参数T对logits做软化处理。说句实话logits蒸馏在大模型上有个现实障碍学生和教师的词表如果不一样两个概率分布根本对不上。比如教师用Llama-2的词表学生用ChatGLM词表它们的tokenizer切分方式不同同一个词的token id完全不同直接算KL散度是行不通的。实践中通常用embedding映射来解决。比logits更深一层的是中间层特征蒸馏。教师模型的某一层Transformer块会输出一个高维向量这个向量里封装了模型在这一层学到的语义理解结构。学生拿到这个向量后通过一个投影层把它映射到自己的特征空间然后计算MSE或余弦相似度损失。这个做法在自然语言理解任务上效果很好但大模型时代面临一个尴尬到底应该对齐哪一层的特征是逐层对齐还是只在最后几层对齐综述中提到的几个工作给出的经验是——深度网络更适合只对齐教师的后半部分层因为前几层学到的都是相对通用的语法特征强行对齐反而限制学生的灵活性。白盒蒸馏里还有一个趋势叫动态蒸馏。传统做法是提前用教师模型生成一堆离线数据然后固定这批数据去训练学生。问题在于教师的分布是固定的数据多样性有限。动态蒸馏的逻辑是与其用固定数据不如让学生和教师对话——学生模型当前对哪个样本最困惑就专门找教师请教哪些样本。这个过程很像实习生带着具体问题去问师傅而不是抱着一本教材自学。动态蒸馏已经被证实在样本效率和最终效果上都优于离线蒸馏但代价是训练过程复杂度显著提升。2.2 黑盒蒸馏API蒸馏、上下文学习与数据增强黑盒蒸馏更贴近现实——大多数时候你根本拿不到教师模型的权重只能调用API。那怎么办综述里把黑盒蒸馏拆成了几个层次。最小粒度是token级蒸馏调用教师API给它一批提示词拿到它的回答文本把这些回答当作训练数据来微调学生模型。这就是所谓的指令微调和模型蒸馏之间的模糊地带。Zephyr-7B就是这么干的用GPT-4生成数据微调Mistral-7B效果一度碾压了大量20B左右的模型。这个做法的优点是无脑、通用缺点是你只能学到教师的输出内容学不到教师的置信度信息和推理过程中的思考痕迹。再进一步是序列级蒸馏让学生模型对同样的问题先生成一个回答然后让教师模型对学生的回答做打分或排序用这个反馈来训练学生。这相当于在student模型上叠加了一层RLHF式的奖励信号。MiniLLM是其中一个代表工作作者指出标准的token-level KD在生成任务上有一个致命伤——它用教师在每个位置的概率去监督学生但实际情况是教师生成时看到的上下文是教师自己生成的而学生生成时看到的上下文是学生自己生成的两者路径不一致强行逐个token对齐会让学生陷入局部模仿而不是全局策略学习。序列级蒸馏解决了这个问题但需要额外的评分器工程上更复杂。黑盒蒸馏还有一个重要分支叫上下文学习蒸馏In-Context Learning Distillation。教师模型的输出质量高度依赖提示词的质量。如果你在教师API上精心构造包含few-shot示例的提示词让它输出推理链条然后用这些高思考量数据去训练小模型小模型最终能学会一种类似于教师内部推理的能力。这个方向有个很诱人的副产品你可以用教师模型去生成教师自己可能答不出来的问题的推理步骤相当于通过蒸馏来提升教师的能力上限。2.3 蒸馏与微调的边界为什么现在蒸馏这么好用前几年大模型生态里大家随口说微调现在开口闭口蒸馏其实很多实际操作用的是同一条技术路线——用高质量数据做监督训练。区别在于高质量数据从哪来。传统微调依赖人工标注成本高、规模小、一致性差。蒸馏则用教师模型批量生成数据成本低、规模大、风格可控。这种转变的本质是我们把数据标注工作从人转移给了模型代价是引入了教师模型的偏见和错误。如果你是做技术选型我建议你把它放在从训练数据角度来思考的维度上数据是教师生成的训练模式是监督微调——这是目前最主流也最便宜的方案适合大部分场景如果你幸运地拿到了教师权重并且学生和教师词表兼容可以考虑白盒蒸馏效果上限更高如果你的核心诉求是让学生学会教师的偏好而不是知识那么序列级蒸馏加上偏好优化会更合适。3. 训练策略里的关键细节数据、温度与损失函数这一节是整篇综述里实操价值最高、也最容易踩坑的部分。模型架构选好了蒸馏方法定了剩下的全在训练策略的细节里。3.1 数据只用教师输出的代价蒸馏数据的来源和质量决定了蒸馏效果的天花板。综述中强调了一个核心原则蒸馏数据必须多样、平衡、难度适中。许多初学者犯的错误是拿一批教师模型输出质量很高的数据去蒸馏结果学生虽然能模仿教师的正确回答但对错误输入毫无抵抗力甚至会臆造答案。原因很简单如果教师只在简单问题上给出高质量输出学生看到的分布太干净没见识过犄角旮旯的困难样本泛化能力自然差。在实践中一个可靠的策略是让教师模型同时充当困难问题生成器。具体做法用一小批种子问题做反向提示让教师生成类似难度更高的问题再用这些困难问题蒸馏。这样学生的训练数据中就包含了更多边界情况。另一个工程上常用的技巧是采样温度控制——用较高的温度让教师生成多样化的答案而不是每次都输出argmax的最优答案。这样做能防止学生模型陷入只会重复几句话的模式坍塌。关于数据量大模型蒸馏的数据规模通常在万级到百万级token之间。我看到不少实验证明在数据清洗和多样性上花功夫带来的收益比盲目扩充数据量的收益高得多。一个5万条高质量数据的蒸馏效果可能比20万条低质量数据好出一截。这也是Zephyr这类小而精的工作能比肩大模型的原因之一——数据蒸馏的质量即训练的天花板而数据量只是下限。3.2 温度参数把概率分布熨平的时机与代价温度T是知识蒸馏中最重要的超参数之一。它的作用可以这样理解模型输出的logits经过softmax后概率分布非常尖锐——正确词的概率接近1其他词接近0。这样的分布对学生模型没有太多可学的东西因为它只告诉学生哪个对没告诉学生其他候选词的相对优劣。调高温度相当于把概率分布变得平滑让次优词的差异也变得可见。但盲目的高温策略同样有害。在OpenAI的早期研究中T8甚至更高可以获得更好的蒸馏效果但那是在小规模分类任务上。语言生成任务不同平滑的分布虽然包含更多暗知识但同时也引入了大量噪声。温度设得过高学生模型学到的是教师在每个位置上的犹豫不决生成的文本会显得极其冗余和不确定。我自己的经验是对于生成任务T在2到4之间比较合适对于分类或检索类任务可以尝试更高温度。另外训练中期可以做一个温度退火——先用较高的温度让学上博采众长后期逐渐降低温度让它专注模仿教师的高置信输出。这个策略在多个实验里都验证了收敛更快、最终精度更高。更关键的还在于不是所有位置都值得跟着教师学。大模型生成时实词名词、动词的logits分布往往比较尖锐而虚词位置分布平滑。如果对所有token一视同仁地做蒸馏学生可能会花大量能力去模仿教师冗余输出的虚词部分。综述里提到的一个优化方向是对loss做加权——让模型更关注语义核心token弱化虚词token的监督信号这在生成质量上的提升是立竿见影的。3.3 损失函数与动态权衡白盒蒸馏中通常需要把多个损失函数组合起来学生与教师之间的logits蒸馏损失KL散度或JS散度、学生与真实标签的交叉熵损失、中间层特征的MSE损失等。每种损失函数的权重直接影响训练的方向。常见设置是蒸馏损失占大头如0.7交叉熵占小头如0.3。这个配比有它的合理性——如果完全只用蒸馏损失学生只能学到教师的能力范围内无法触及教师没见过的知识如果交叉熵占比太高学生又会退化成普通微调失去了蒸馏的意义。我们需要的是一个平衡点教师负责传授风格和推理偏好真实标签负责注入基础事实。综述中还讨论了动态调整损失权重的机制。我们不需要在整个训练周期内都用固定的权重比例。一个合理的做法是训练初期提高蒸馏权重让学生快速逼近教师分布中后期逐渐降低蒸馏权重、提高真实标签权重来补充事实性知识。这种渐进式调权策略在不少实验里比固定权重的收敛更平滑。最后提一个很多人会忽略的细节梯度裁剪和人为截断教师输出的长度。教师生成的长回答往往包含大量重复和无关内容如果直接用于蒸馏学生连废话也一并学走了。在生成蒸馏数据时除了质量清洗长度截断这个步骤强烈建议不要省。4. 评测说了什么从任务类型看蒸馏的真实效果综述对已有蒸馏方法在不同类别任务上的表现做了汇总分析。这里我挑几个有代表性的结论讲这些结论对实际技术选型的指导意义非常大。4.1 推理和数学任务蒸馏效果大打折扣在大多数标准的问答、指令跟随任务上蒸馏能保留教师80%到90%的能力。但在数学推理和复杂逻辑推理任务上这个数字会跌到70%甚至更低。原因在于推理能力对学生的参数容量有硬性要求纯靠模仿教师的输出模式很难学会真正的逻辑链条。有一个很有意思的实验把教师的推理步骤chain-of-thought完整蒸馏给学生学生在标准测试集上表现不错但一旦遇到训练分布的微小扰动比如换一种问法、数值变化表现就会急剧下滑。这说明学生学到的是模仿推理过程的表面模式而没有内化推理的底层语义。这也是目前蒸馏领域最难突破的瓶颈之一——如何把教师的推理能力压缩进一个更小的模型而不是仅仅复述教师的推理形式。我的建议是如果目标场景非常依赖数学推理和逻辑判断且预算允许尽量保住13B以上的规模不要往下压缩实在要压缩优先考虑让教师模型输出逐步推理最终答案的完整链条且数据中要刻意掺入大量反例和干扰项让学生在对比中学会抗干扰。4.2 事实性知识蒸馏会放大幻觉风险蒸馏最大的隐患之一是幻觉的级联放大。教师模型本身就可能产生幻觉学生模型会把这些幻觉当成真知识学走而且由于小模型的记忆容量有限它对错误知识的固化效应往往更强。综述里有一个扎心的数据在TruthfulQA等事实性评测上蒸馏后的模型普遍比教师下降5到10个百分点比同规模但从零训练的模型也要差。解决办法有几个方向一是蒸馏数据中刻意混入老师答错被纠正的样本让学生见过错误答案被标记的情况二是引入检索增强RAG在推理时通过外部知识来补充事实性短板而不是指望学生把事实背下来三是训练后的错误模式分析——如果学生在某个领域频繁出错针对性地给这个领域补充高质量正例再做一轮小步长训练。我实际测试下来第三种方法性价比最高能快速止血。4.3 多语言与风格迁移蒸馏真正的甜区如果说推理能力是蒸馏的短板那么多语言能力和风格迁移就是蒸馏的优势区。教师模型在几十种语言上表现稳定但学生模型如果用单语语料训练多语言能力几乎为零。通过蒸馏教师的多语言知识可以低成本迁移给学生效果显著。风格迁移更是蒸馏的拿手好戏。教师模型尤其是GPT-4这类对齐得非常好的模型的输出风格——语气、格式、结构、标点习惯——都在生成的文本中体现出来。学生蒸馏后的文本风格能和教师高度一致这比通过人工规则去调prompt的方式可靠得多。换句话说如果你想让自己的模型说话像某个大模型蒸馏一定比prompt工程更高效。这也是为什么很多做ChatBot的团队训练小模型时大量采用闭源大模型的蒸馏数据——不是为了学知识就是为了学说话方式。4.4 压缩率与能力保留的权衡曲线蒸馏方法的效率不是线性的。我对综述中的实验数据做了一个粗略归纳在7B规模左右蒸馏一个13B的教师通常能保留90%左右的性能蒸馏一个几十B的教师性能保留率会下降到85%左右而如果你从一个百亿级模型想蒸馏出一个1B以下的小而美保留率可能只有60%多。这个曲线告诉我们不是所有老师都能教出好学生教师能力与学生容量的差距过大时知识在传递过程中的损耗是不可避免的。一个务实的建议是——选择教师模型时不要只看它绝对能力强不强还要看它和学生的知识差距是否适中。教师太弱学生学不到东西教师太强学生的容量承载不了。理想状态下教师比学生强一到一个半量级蒸馏的性价比是最高的。5. 工程落地什么时候该蒸什么时候别蒸综述讲完落回工程视角。我给读者一个可以直接参考的决策框架。这个框架不是凭空想出来的是本人在几个实际项目里反复调整后的总结。5.1 四种场景的蒸馏策略对照场景推荐做法原因要把70B模型能力压缩到13B以下部署白盒蒸馏logits 中间层词表兼容条件下白盒能保留更多边界能力要让开源7B模型说人话对齐闭源API风格黑盒蒸馏API生成指令微调核心诉求是风格对齐不需要教师权重预算充足、对推理能力要求高不急着蒸馏先试试量化推理优化蒸馏会损失推理能力量化通常只损失少许精度面向垂直领域金融、医疗的场景蒸馏 领域数据回流单一通用教师覆盖不了领域深度需要领域数据做补偿这张表大家按需取用。5.2 蒸馏后的验证不要只看评测集分数一个让我吃过亏的教训蒸馏模型的评测集分数可能很好看但在真实负载下的表现却可能很不稳定。原因在于评测集覆盖的分布太正了而真实用户问的问题充满了歧义、缺词、口语化和恶意构造。所以我的验证策略是三级验证第一级标准公开评测集如MMLU、HumanEval、GSM8K快速横向对比第二级自建业务评测集覆盖真实用户的高频query和脏数据第三级线上小流量灰度观察回答采纳率、举报率、超时率只有三级都过关才算蒸馏成功。前两级绿灯但第三级红灯的情况我遇到过不止一次。原因是蒸馏模型在开放域的表现往往比封闭域评测差尤其当用户输入格式和训练数据差异较大时容易产生不可控的退化。5.3 教师输出的毒化效应与数据清洗黑盒蒸馏中教师生成的数据质量参差不齐。很多团队为了省事调用API后直接拿去训练这是大忌。我在实践中的标准流程是去重用MinHash或Embedding距离对生成文本去重防止同一类问题反复出现导致学生过拟合质量过滤用规则和Score模型筛选教师输出剔除明显错误、幻觉和低信息密度的样本难度平衡按问题难度对数据分层抽样确保简单、中等、困难样本的比例合理避免训出来的模型只会答简单题错误纠正对教师模型的错误输出人工打标或用更强模型纠正一遍再混入训练数据高质量蒸馏数据的成本不低但省掉这些步骤之后将来在模型效果上付出的代价会更大。5.4 蒸馏和量化的配合顺序有讲究现在很多团队在部署小模型时会同时做蒸馏和量化但两者的组合顺序值得推敲。我的经验是先蒸馏后量化。原因很简单蒸馏的过程会给模型带来更平滑的概率分布这对于量化时数值范围的压缩是有利的。反过来如果先量化再蒸馏量化误差会被学生模型当成教师风格学走导致训练过程不稳定。另外还有个细节蒸馏后的模型在做PTQ训练后量化时更不容易出现极端异常值这意味着INT8或者INT4量化后的精度损失会更小。我在一个项目里测试蒸馏INT8量化的组合比直接对原模型做INT8量化在业务指标上高出约4个百分点这个收益非常可观。6. 写在最后的一些观察知识蒸馏在大模型时代已经不是一个如何把大模型变小的孤立话题它和模型压缩、领域适配、能力迁移、风格控制重叠得越来越厉害。综述里总结的很多研究思路放到具体业务场景里都需要做大量的工程化的二次开发。我个人的体会是蒸馏最迷人的地方不在于它能把模型变小而在于它为模型能力的可控迁移提供了一个统一的理论框架。以前我们调模型靠堆数据和堆参数现在蒸馏给了我们一条系统性的路径——想让模型学会什么能力就去构造什么样的教师指导信号。这种思路的影响远比压缩模型本身更深。如果你正在做模型落地我的最终建议是不要把蒸馏当成一个独立的性能优化手段而要当成模型生产流程的一个组成部分。从数据构造、训练策略、评测验证到部署压缩蒸馏的思想应该贯穿始终。先跑通一个最简流程再针对瓶颈逐步加复杂度——这比一开始就追求完美蒸馏方案要务实得多。