1. 知识蒸馏概述:从“大老师”到“小学生”的传承
大家好,欢迎来到这门课的第一章。
知识蒸馏(Knowledge Distillation,KD),说白了就是让一个小模型去模仿一个大模型的行为。你想想看,大模型(比如 BERT-Large、GPT-3)虽然能力强,但部署到手机或边缘设备上,那简直是“杀鸡用牛刀”,推理慢、内存大、功耗高。小模型呢?跑得快、省资源,但精度往往差一截。
知识蒸馏就是来解决这个矛盾的。它让一个“教师网络”(Teacher)去教一个“学生网络”(Student)。学生学到的不是原始数据,而是教师“消化”后的知识。我在项目中遇到过好几次,直接用小模型从头训练,效果总差那么 2-3 个点。但用了蒸馏,学生模型几乎能无损地继承教师的能力。
1.1 蒸馏的动机与目标
动机其实很朴素:模型太大,跑不动。具体来说,有三大痛点:
- 推理延迟高:大模型在 CPU 或低端 GPU 上,一次推理可能要几百毫秒,无法满足实时性要求。
- 内存/显存占用大:比如一个 ResNet-152 模型,参数超过 60M,在移动端根本放不下。
- 功耗过高:数据中心和边缘设备都扛不住。
蒸馏的目标很明确:在尽量不损失精度的情况下,大幅压缩模型体积和计算量。我个人的习惯是,先看业务场景对延迟和精度的容忍度,再决定要不要上蒸馏。如果精度要求极高(比如医疗影像),蒸馏可能只是辅助手段;但如果是为了上线一个实时推荐系统,蒸馏几乎是必选项。
核心目标公式:
学生模型精度 ≈ 教师模型精度,但学生模型推理速度 × 2~10 倍,模型体积压缩 50%~90%。
1.2 教师-学生网络架构
这个架构听起来高大上,其实结构很简单。教师网络通常是一个预训练好的大模型,参数冻结,不参与训练。学生网络是一个小模型,从头开始训练,或者用教师的部分权重初始化。
训练时,学生不仅要学习真实标签(hard label),还要学习教师输出的软标签(soft label)。软标签里包含了类别之间的相似性信息——比如一张猫的图片,教师可能输出“猫 0.9,狗 0.08,老虎 0.02”。这个分布比 one-hot 标签“猫 1.0”信息量大多了。
我的经验: 学生网络的结构不一定要和教师完全一样。我试过用 3 层 Transformer 的学生去学 12 层 Transformer 的教师,效果依然不错。关键是学生的容量要足够“接住”教师的知识,别太小。
下面这张图展示了教师-学生架构的核心流程:
1.3 知识蒸馏的三大范式
蒸馏不是只有一种玩法。根据教师和学生训练的方式,业界把它分成了三大范式。我刚开始接触时也容易搞混,后来用一句话总结:看教师和学生谁先训练、谁后训练、谁更新参数。
| 范式 | 教师网络 | 学生网络 | 典型场景 |
|---|---|---|---|
| 离线蒸馏 | 预训练好,完全冻结 | 从头训练,只学教师输出 | 大模型压缩、模型部署 |
| 在线蒸馏 | 与学生同步训练,参数更新 | 与教师同步训练,互相学习 | 多任务学习、协同训练 |
| 自蒸馏 | 学生自己当自己的老师 | 同一模型不同阶段或不同深度 | 轻量化、无额外教师 |
1.3.1 离线蒸馏(Offline Distillation)
这是最经典、最常用的范式。流程很简单:
- 先训练一个大的教师模型,直到收敛。
- 冻结教师参数,用教师对训练集生成软标签。
- 学生模型同时学习软标签和真实标签。
我个人的习惯是,离线蒸馏适合那种“教师模型已经存在”的场景。比如公司之前已经部署了一个大模型,现在想换小模型,直接用离线蒸馏就行,不需要重新训练教师。
避坑指南: 我曾经在离线蒸馏时犯过一个低级错误——忘了对软标签做温度缩放(Temperature Scaling)。如果不加温度,软标签太平滑(接近均匀分布),学生学不到有效信息。温度一般设置在 3~10 之间,具体要调。
1.3.2 在线蒸馏(Online Distillation)
在线蒸馏里,教师和学生是同时训练的。教师不再是一个固定的“老前辈”,而是和学生一起成长。这种方式的好处是:不需要预先训练一个教师,节省了训练成本。
但问题也很明显:如果教师太弱,学生学不到好东西;如果教师太强,学生跟不上。我建议在在线蒸馏中,教师和学生可以共享一部分底层特征提取器,这样两者能更好地对齐。
1.3.3 自蒸馏(Self-Distillation)
自蒸馏是个很有意思的范式。它不需要额外的教师网络,学生自己就是自己的老师。具体做法是:
- 在训练过程中,把模型早期 epoch 的输出作为“教师信号”。
- 或者把模型深层的特征图作为“教师”,去指导浅层特征。
你想想看,这其实是一种自我反思机制。模型在训练后期,用自己早期的“模糊知识”来约束自己,防止过拟合。我在做轻量化模型时特别喜欢用自蒸馏,因为它不需要额外存储教师模型,部署起来特别干净。
一句话总结三大范式:
- 离线蒸馏:先有老师,再教学生。
- 在线蒸馏:老师和学生一起上学。
- 自蒸馏:学生自己当自己的老师。