大模型通常拥有更强的理解和生成能力,但参数规模、推理延迟与部署成本也更高。
如果一个模型的效果很好,却无法放进手机、浏览器或资源有限的服务器里,这些能力就很难真正落地。
一个自然的想法是:
text
能不能让大模型当老师,把已经学会的知识教给一个更小的模型?
这就是知识蒸馏(Knowledge Distillation)要解决的问题。
它并不是把大模型的参数直接复制给小模型,也不只是收集一批答案让小模型死记硬背,而是让学生模型尽可能模仿教师模型对数据的理解方式。
为什么叫"蒸馏"?
在化学中,蒸馏会利用不同成分挥发性质的差异,将混合物中的目标成分分离出来。
知识蒸馏借用了这个名字:
text
能力更强、结构更大的模型
↓ 提取知识
能力更小、部署更轻的模型
其中:
- 能力更强的模型叫教师模型(Teacher Model)
- 需要学习的小模型叫学生模型(Student Model)
- 学生模仿教师的训练过程叫知识蒸馏
教师模型通常已经训练完成。蒸馏时,学生模型不仅学习训练数据里的正确答案,还会学习教师模型给出的预测信息。
只学习标准答案为什么不够?
假设我们要训练一个图片分类模型,输入是一张猫的照片。
普通标签可能只告诉模型:
text
猫:1
狗:0
老虎:0
汽车:0
这种明确的标准答案叫硬标签(Hard Label)。
硬标签能够告诉学生"正确答案是猫",却没有说明:
- 这张图有多像猫?
- 它为什么容易和狗混淆?
- 猫与老虎是否具有相似特征?
- 汽车为什么几乎不可能是答案?
对于硬标签来说,所有错误选项都是 0,狗、老虎和汽车没有区别。很多有价值的类别关系因此被丢掉了。
软标签提供了什么信息?
教师模型处理同一张图片时,内部输出可能更接近下面的概率分布:
text
猫: 80%
狗: 10%
老虎: 9%
汽车: 1%
这种带有相对概率的信息通常被称为软标签(Soft Label)。
它不只给出"猫"这个结论,还暴露了教师模型对不同类别关系的判断:
text
猫与狗有一些相似之处
猫与老虎的视觉特征也有关联
猫与汽车几乎没有关系
教师模型在大量数据中学到的这种类别关联,经常被称为"暗知识"(Dark Knowledge)。
因此,知识蒸馏中的学生模型要模仿的不是一个孤立答案,而是教师模型输出分布的形状。
温度参数为什么会出现?
模型在得到最终概率之前,通常会先输出一组未经归一化的分数,也就是 logits。
Softmax 会把这些分数转换成概率:
text
pᵢ = exp(zᵢ / T) / Σ exp(zⱼ / T)
其中:
zᵢ是第i个类别的 logitT是温度(Temperature)
普通分类常使用 T = 1。蒸馏训练通常会使用大于 1 的温度,让概率分布变得更平滑。
例如,原本非常集中的分布:
text
猫:96% 狗:3% 老虎:1%
经过较高温度软化后,可能更容易看出次要类别之间的差异:
text
猫:60% 狗:23% 老虎:17%
这里的数字只是为了说明分布变化,不是固定计算结果。
温度过低时,教师输出会非常接近硬标签;温度提高后,学生能看到更多非目标类别的信息。但温度也不是越高越好,过度平滑会让类别差异变得太弱。
学生模型究竟在优化什么?
经典知识蒸馏通常同时保留两种学习信号。
1. 学习真实标签
学生模型仍然要对训练数据的标准答案负责,例如这张图确实是一只猫。
这一部分通常使用普通的交叉熵损失。
2. 模仿教师分布
学生模型还要让自己的软化输出接近教师模型的软化输出。
这一部分常使用 KL 散度或交叉熵衡量两个分布之间的差异。
整体目标可以简化理解为:
text
总损失
= α × 学习真实答案
+ β × 模仿教师分布
在常见实现中,蒸馏损失还会乘以 T²,用于补偿温度变化带来的梯度缩放。
因此,学生既不会完全抛开真实数据盲目模仿教师,也不会只看到非黑即白的标准答案。
完整过程可以概括为:
text
同一批训练数据
├──→ 教师模型 ──→ 软化后的教师分布 ──┐
│ ├─→ 计算损失 → 更新学生模型
└──→ 学生模型 ──→ 软化后的学生分布 ──┘
+
真实标签
教师模型一般只参与前向计算,不再更新参数;真正被训练的是学生模型。
用"学做菜"理解知识蒸馏
可以把训练学生模型想象成培养一名新厨师。
第一种方法是只给他菜谱:
text
盐 3 克
油 20 毫升
翻炒 2 分钟
这很像硬标签。新人知道最终应该怎么做,却不知道为什么火候要这样控制,也不知道食材状态发生变化时该如何调整。
第二种方法是让经验丰富的厨师现场示范。
新人不只看到成品,还能观察大厨什么时候调火、怎样判断成熟度、遇到不同食材时如何改变操作。
这些没有完整写在菜谱里,却能体现经验的信息,就像教师模型概率分布中包含的暗知识。
知识蒸馏不是保证学生最终与老师完全相同,而是用更丰富的监督信号,让容量较小的学生尽量学到老师的判断方式。
"收集大模型回答"都算经典知识蒸馏吗?
不一定。
在经典分类蒸馏中,训练者通常能够访问教师模型的 logits 或完整概率分布,再让学生直接拟合这些信息。
但通过大模型 API 获得的往往只是一段最终回答:
text
问题 → 教师模型 → 文本答案
如果接口没有提供 logits 或 token 概率,学生就看不到教师完整的输出分布。这种利用教师生成内容训练学生的方法,通常更接近响应蒸馏(Response-based Distillation)或基于合成数据的蒸馏。
在大语言模型中,常见做法还包括:
- 让教师生成高质量问答数据
- 让学生模仿教师的回答风格与任务格式
- 在可访问时学习教师的 token 概率
- 对齐中间特征、隐藏状态或注意力信息
它们都体现了"教师向学生传递能力"的思路,但能获得的信息不同,训练方式也不完全相同。
因此,知识蒸馏不能简单理解成"向大模型发请求并保存答案"。能否访问概率、训练数据怎样构造、损失函数如何设计,都会影响它属于哪种蒸馏方式。
知识蒸馏、微调与模型压缩有什么区别?
这几个概念经常同时出现,但解决问题的方式不同。
| 方法 | 核心操作 | 是否需要教师模型 | 主要目的 |
|---|---|---|---|
| 微调 | 用特定任务或领域数据继续训练模型 | 不一定 | 让模型适应新任务或新领域 |
| 知识蒸馏 | 让学生模型模仿教师模型 | 是 | 把教师能力迁移到更小模型 |
| 量化 | 用更低精度表示权重或计算 | 否 | 减少显存、存储和计算开销 |
| 剪枝 | 删除不重要的连接、通道或参数 | 否 | 降低模型规模与计算量 |
它们并不互斥。
一个模型可以先通过蒸馏得到更小的学生模型,再进行量化;也可以针对某个业务领域继续微调。实际部署中经常组合使用多种方法。
知识蒸馏能带来什么?
更低的推理成本
学生模型参数更少,通常需要更少的显存和计算资源,适合高并发服务。
更快的响应速度
较小的模型更容易降低推理延迟,可用于移动端、边缘设备和实时应用。
比单独训练小模型获得更好的效果
同样规模的学生模型,如果只学习硬标签,得到的监督信息比较有限;加入教师信号后,往往能学习到更细致的决策边界。
利用未标注数据
教师模型可以为大量未标注样本生成软标签或回答,再将这些数据用于训练学生模型。
蒸馏也有明显限制
知识蒸馏不是无损复制。
学生容量决定能力上限
如果学生模型太小,它没有足够的参数容量承载教师知识,即使训练数据很多,也不可能完整复现教师能力。
教师的错误也会被传递
教师模型存在偏见、幻觉或错误时,学生可能把这些问题一起学走。教师输出并不天然等于正确答案。
训练数据覆盖范围很重要
学生只会在蒸馏数据覆盖的任务和分布上模仿教师。如果数据集中只有数学题,学生不会因此自动获得教师在代码、写作和视觉理解方面的全部能力。
蒸馏仍然需要成本
生成训练数据、运行教师模型、保存输出以及训练学生模型都需要资源。它是在模型能力与部署成本之间做权衡,不是零成本获得大模型能力。
数据与授权边界不能忽略
使用第三方模型生成训练数据时,还需要遵守对应服务条款、数据许可和知识产权要求。技术上能够采集输出,不等于在任何场景下都可以直接用于训练。
总结
知识蒸馏的核心不是"把大模型缩小",而是让一个学生模型学习教师模型提供的额外监督信息。
硬标签只告诉学生最终答案,软标签还能表现教师对类别相似性和决策边界的判断。学生同时学习真实标签与教师分布,就有机会在较小参数规模下获得比独立训练更好的效果。
可以把整篇文章浓缩成下面这条链路:
text
教师模型输出知识
↓
软标签、logits、回答或中间特征
↓
学生模型模仿教师
↓
用更小的模型换取更低的部署成本
但蒸馏不是复制。学生模型的容量、蒸馏数据的覆盖范围、教师输出的质量以及训练目标的设计,共同决定了最终能够迁移多少能力。