知识蒸馏是一种训练小模型的技巧:先让一个参数多、能力强的大模型(老师模型)给出答案,再让一个小模型(学生模型)照着老师的答案学,学到尽量接近老师的表现。它解决的不是“怎么让模型变聪明”,而是“怎么把已经聪明的模型做小、做快、做便宜”。
训练过程分两步。第一步,老师模型对训练数据做一次完整的预测,输出的不是唯一的正确答案,而是它对每个候选答案的概率分布。比如识别一张图,老师可能给出“猫 0.82、狗 0.13、兔子 0.05”;这个分布里藏着老师的“暗知识”——狗比兔子更像猫,这是普通 one-hot 标签给不了的信息。第二步,学生模型用这些概率分布当学习目标去训练,而不是只学“正确答案是猫”。通过一个叫温度(temperature)的参数,还可以把分布调得更平滑,让暗知识更容易被学生吸收。2015 年 Hinton 等人发表的论文《Distilling the Knowledge in a Neural Network》第一次系统讲清了这套方法,也是“知识蒸馏”这个名字的来源。
经典例子是 DistilBERT:用 BERT 当老师蒸馏出一个小 40%、快 60% 的学生模型,性能保留了 BERT 的 97% 左右。更近的例子是 DeepSeek-R1 的蒸馏系列:2025 年 1 月,DeepSeek 公开了用 R1 蒸馏出的多个小模型(R1-Distill-Qwen-32B/14B/7B/1.5B、R1-Distill-Llama-70B/8B),它们都是在 Qwen、Llama 基座上用 R1 生成的约 80 万条样本微调出来的,权重完全开源,一下子让普通显卡也能跑上推理能力不错的模型。
知识蒸馏和微调、量化、剪枝有什么区别
这几个词经常被混用,但解决的问题完全不同。
微调是拿一个现成的模型,继续在特定数据上训练,让它学会新任务或新风格。微调不改变模型大小,调完还是原来那个体量。蒸馏则是造一个全新的小模型,学的不是新任务,而是老师模型已有的行为;蒸馏出来的学生模型照样可以再微调。
量化不训练新模型。它把同一个模型的参数精度从浮点 32 位降到 16 位、8 位甚至 4 位,让模型占更少显存、跑得更快。量化前后的模型是同一个“人”,只是穿了更薄的衣服。蒸馏前后则是两个不同体量的模型。
剪枝是把模型里不重要的连接或神经元直接砍掉,相当于给大模型“瘦身”。它和蒸馏一样想让模型变小,但思路是做减法而不是重新教一个学生。实践中这几招常常组合用:先蒸馏出小模型,再量化压缩一次,部署成本可以压得更低。
四个常见误解
误解一:学生模型能学会老师的全部本事。 学不会。学生学的是老师在训练数据上的输出行为,老师没展示过的能力、训练数据没覆盖的场景,学生都学不到。学生的上限被三个因素锁死:老师的真实水平、学生的参数容量、蒸馏数据的质量和覆盖面。拿一个 70B 老师去教 1.5B 学生,指望 1.5B 在所有任务上都达到 70B 的水平,是不现实的。
误解二:蒸馏出来的模型能超过老师。 在老师自己的强项任务上,通常不能。偶尔看到的“学生超过老师”,多半是拿学生在某个基准上和另一个基线模型比,而不是和教它的老师比。也有研究在特定设置下让学生略超老师,但那属于例外,不是蒸馏的常规承诺。
误解三:有了蒸馏就不需要量化了。 恰恰相反,两者互补。蒸馏解决的是“模型太大”,量化解决的是“精度太占地方”。一个蒸馏出的 7B 模型再做 4-bit 量化,可以在消费级显卡上跑起来,这是单用其中一招很难达到的效果。
误解四:把“蒸馏攻击”和知识蒸馏混为一谈。 通过反复调用某个商业模型的 API、收集它的输出来复制一个竞品模型(模型提取/蒸馏攻击),在安全语境里也叫蒸馏,但那是未经授权的模型窃取,和服务商的服务条款直接冲突,和这里讲的训练技术是两回事。2025 年底就有模型厂商公开披露并处置过这类有组织的蒸馏攻击。自己训练蒸馏模型时,务必确认老师模型的许可允许这种用法。
什么时候该用蒸馏模型,什么时候不该
适合用的场景有三类。第一,本地部署和离线场景:笔记本、手机、内网服务器上跑不动几十 B 的模型,蒸馏出的小模型加量化就能落地。第二,成本敏感的大规模推理:客服、内容审核、批量打标这类调用量巨大的任务,用蒸馏小模型可以把单次推理成本压到原来的几分之一。第三,延迟敏感的实时应用:语音对话、代码补全这种需要毫秒级响应的场景,小模型天然更快。
不适合的场景同样明确。当你需要的是前沿能力本身——最难的数学证明、最复杂的代码推理、最开放的创造性任务——蒸馏模型通常给不了你老师的上限,这时候该用原生的强模型。当任务落在老师模型的训练分布之外,学生的表现会掉得更快,因为它连老师的“见识”都没完整继承。选型时一个实用的判断标准是:先用小模型在你的真实任务上实测,达标就用,不达标再升级,别凭参数量下结论。知识蒸馏的价值不在公式里,而在你清楚它能省多少成本、又会在哪里掉链子。