名师出高徒:深入理解知识蒸馏、温度与软目标
从小模型为什么要学习教师输出讲起,推导温度 softmax、软硬目标组合损失与 T² 缩放,再讨论蒸馏真正传递了什么、适用边界和常见误解。
第一次听说知识蒸馏时,我是怀疑的:既然已经有真实标签,为什么还要让小模型模仿大模型?学生直接看标准答案,难道不比听老师转述更可靠吗?
问题恰恰在“标准答案”过于简洁。one-hot 标签只说哪个类别正确:正确位置是 1,其余位置是 0。它不会告诉模型,这个手写数字 7 有一点像 1,却几乎不可能是 8;教师输出的完整概率分布,可能保留这些类别间关系。
知识蒸馏(Knowledge Distillation,KD)的核心,就是把教师模型学到的函数行为转化为学生模型的训练信号。经典目标通常不是抛弃真实标签,而是让学生同时学习硬标签和教师提供的软目标。
从硬标签到软目标
设一个十分类样本的真实类别为 7,硬标签只提供:
教师可能输出类似:
两者都认为类别 7 正确,但教师还表达了“它与 1、9 的相似度高于其他类别”。Hinton 等人把错误类别间这些细微关系称为一种可迁移的知识,后来常被概括为 dark knowledge。
它不是固定的类别先验。同样是数字 7,不同笔迹的教师分布也可以不同,所以软目标同时携带了类间结构和样本特异性。
温度为什么能让知识显现
普通 softmax 往往非常尖锐,最大 logit 几乎吃掉全部概率,其他类别的相对关系难以看见。知识蒸馏在 softmax 中加入温度 。设教师 logits 为 ,学生 logits 为 :
- 是普通 softmax;
- 使概率分布更平滑,低概率类别的相对差异更明显;
- 使分布更尖锐。
教师和学生在计算软目标时使用相同温度。训练完成后,学生独立部署,普通分类推理恢复 ;线上不再需要教师。
经典蒸馏损失
软目标交叉熵为:
因为教师分布在训练学生时是固定的,最小化它等价于最小化:
KL 的方向不能随意写反。经典软标签交叉熵对应的是 teacher 到 student,而不是 student 到 teacher。
有真实标签时,再加入普通温度下的硬目标损失:
组合损失可以清楚地写成:
不同实现常用 和 表示两项,但 到底指硬目标还是软目标并没有统一约定,代码和文章都应该显式定义。
为什么软损失要乘
对学生 logit 求导,精确结果是:
所以“梯度严格缩小 倍”并不是任意温度下的恒等式。第二个 来自高温时师生概率差本身也大致随 缩小。对 logits 做零均值处理并在高温近似下:
因此乘 是为了在改变温度时,大致维持软目标与硬目标的相对梯度量级。它是经典推导下的尺度补偿,不是一个神秘的性能技巧;具体数值仍会受到损失 reduction 和权重设置影响。
一个完整的离线蒸馏流程
- 先训练容量较大的教师,教师也可以是模型集成。
- 固定教师,对迁移数据生成 logits 或高温软目标。
- 学生用相同温度拟合教师分布;有标签时,同时优化硬目标损失。
- 训练完成后移除教师,学生以 独立推理。
迁移数据可以是教师的原训练集,也可以是另一批同分布数据,甚至可以没有人工标签。无标签时自然只使用教师信号。学生学习的是教师在输入上的行为,不是复制教师参数,因此师生不必采用相同架构。
为什么学生可能学得更好
“教师比标签包含更多信息”只是第一层解释。蒸馏还可能带来几种效果:
- 软分布为每个样本提供多个类别方向的梯度,比 one-hot 监督更平滑;
- 教师把模型集成或大模型的归纳结果压缩进单个训练目标;
- 软目标可作为正则化,减少学生对硬标签和噪声的过度拟合;
- 未标注的迁移数据也能通过教师产生训练信号。
但学生不保证接近或超过教师。教师的错误、偏见和分布外失真也会被传递;学生容量太小、迁移数据不匹配、温度或权重不合适时,蒸馏甚至可能不如直接监督训练。
软决策树:不只是神经网络压神经网络
知识蒸馏传递的是函数行为,因此学生不必是神经网络。Frosst 与 Hinton 将神经网络蒸馏到软决策树:在 MNIST 实验中,蒸馏树达到 96.76% 准确率,高于普通树的 94.34%,但仍低于小型卷积网络的 99.21%。
这个例子很有代表性:蒸馏不是免费获得教师全部能力,而是在准确率、推理成本和可解释性之间做新的折中。
它与标签平滑有什么区别
两者都会把目标从尖锐的 one-hot 分布变软,但信息来源不同。
| 方法 | 软化信号 | 是否随样本变化 | 主要作用 |
|---|---|---|---|
| 标签平滑 | 通常是固定的均匀先验 | 通常不会 | 抑制过度自信 |
| 知识蒸馏 | 教师对当前样本的输出 | 会 | 迁移教师学到的类别关系和决策行为 |
标签平滑可以把少量概率平均分给其他类别,却不会知道某个 7 更像 1 还是 9。知识蒸馏的软目标由输入决定,因此不能简单理解成“另一种均匀标签平滑”。
它也不等于模型压缩
模型压缩是目标,剪枝、量化、低秩分解和蒸馏都可能服务于这个目标。知识蒸馏是一种训练方法,本身不会自动减少参数量、显存或 FLOPs;只有学生架构更轻,并且线上只部署学生时,才获得实际压缩收益。
后续研究也让蒸馏超出了“大教师压小学生”的范围:学生可以匹配中间特征或样本间关系;多个模型可以同时相互学习;同一架构的后代也可以向前代自蒸馏。这些维度可以交叉,不是一组互斥分类。
工程上容易忽略的成本
- 离线蒸馏需要先训练教师,并为迁移数据生成或缓存教师信号;
- 大类别空间下,保存完整 logits 可能带来显著存储和 I/O 成本;
- 教师与线上数据分布不一致时,更多软标签不一定意味着更多有效知识;
- 分类蒸馏的 softmax 公式不能原封不动套到检测、排序或生成任务,匹配对象和损失必须按任务重新定义;
- 应同时比较学生的精度、校准、时延、吞吐、内存与总训练成本,而不是只看参数量。
总结
知识蒸馏真正有价值的地方,不是让学生机械复制教师的最终答案,而是利用教师对错误类别、样本差异和决策边界的更丰富表达来指导优化。
温度负责把这些细微关系显露出来,软硬目标负责同时保留教师知识与真实监督, 则补偿高温下软目标梯度的尺度变化。理解这三者的关系,才能把“名师出高徒”从一个漂亮比喻变成可复现的训练方法。