2. 教师与学生
知识蒸馏的核心,说白了就是「大模型教小模型」。那谁当老师?谁当学生?这俩角色怎么分工?架构上有什么讲究?这一章我们把这些基础问题彻底讲透。
2.1 教师网络:知识的源头
教师网络,就是那个「已经训练好的、性能很强的大模型」。它的任务只有一个:输出高质量的软标签(Soft Labels),作为学生网络的学习目标。
教师网络的核心特征:
- 容量大:参数量通常是学生网络的 5~50 倍
- 精度高:在目标任务上已经达到 SOTA 或接近 SOTA
- 已收敛:训练过程已经完成,参数冻结,不再更新
- 推理慢:因为容量大,推理速度通常不满足部署要求
我在项目中遇到过一种情况:团队花了两周训了一个 ResNet-152 做图像分类,精度 92.3%,但部署到手机端推理一次要 800ms。这显然不行。于是我们拿它当教师,去教一个 MobileNetV3。教师网络本身不部署,它只负责「输出知识」。
我的习惯:教师网络选型时,不要只看精度。还要看它的输出分布是否「有信息量」。如果教师网络过拟合严重,软标签会过于尖锐(接近 one-hot),蒸馏效果反而差。我一般会选在验证集上泛化能力最好的 checkpoint,而不是训练集上精度最高的那个。
2.2 学生网络:知识的继承者
学生网络,就是那个「我们要部署的小模型」。它的目标很明确:在教师网络的指导下,学到接近大模型的性能,同时保持小模型的推理效率。
学生网络在训练时,损失函数通常由两部分组成:
- 蒸馏损失(Distillation Loss):让学生网络的软输出逼近教师网络的软输出
- 硬标签损失(Hard Label Loss):让学生网络仍然从真实标签中学习
你想想看,如果只用蒸馏损失,学生网络可能会「学歪」——因为教师网络也不是完美的。加上硬标签损失,相当于给学生一个「底线保障」。
我曾经踩过的坑:一开始做蒸馏时,我把蒸馏损失的权重设得特别大(0.9),硬标签损失只占 0.1。结果学生网络精度反而比直接训练还低。后来发现,教师网络在某个类别上本身就有偏差,学生网络把偏差也学过去了。建议蒸馏损失权重从 0.5 开始调,根据验证集表现上下浮动。
2.3 角色分工:谁该做什么?
教师和学生,分工非常明确。我整理了一张表,方便你对照:
| 维度 | 教师网络 | 学生网络 |
|---|---|---|
| 训练阶段 | 预训练完成,参数冻结 | 从头训练或微调 |
| 参数更新 | 不更新 | 通过反向传播更新 |
| 输出用途 | 提供软标签 | 学习软标签 + 硬标签 |
| 推理阶段 | 不参与推理 | 独立部署推理 |
| 计算开销 | 高(只在蒸馏时用) | 低(部署时用) |
| 精度目标 | 尽可能高 | 接近教师,但效率优先 |
说白了,教师是「幕后导师」,学生是「台前选手」。教师只在训练阶段出现一次,学生则要扛起线上推理的全部压力。
2.4 典型架构对比:同构 vs 异构
教师和学生网络的架构关系,可以分为两大类:同构蒸馏和异构蒸馏。
2.4.1 同构蒸馏
教师和学生使用相同或相似的网络架构,只是深度或宽度不同。比如:
- 教师:ResNet-152,学生:ResNet-18
- 教师:BERT-Large,学生:BERT-Tiny
- 教师:ViT-Large,学生:ViT-Tiny
同构蒸馏的好处是:中间层特征可以直接对齐。因为网络结构相似,教师和学生的中间层输出维度可能一致或成比例,方便做特征层蒸馏。
适用场景:当你对某个架构族很熟悉,想快速压缩模型时,同构蒸馏是最稳妥的选择。我在做 NLP 任务时,经常用 BERT-Base 教 BERT-Tiny,收敛快,效果稳定。
2.4.2 异构蒸馏
教师和学生使用完全不同的网络架构。比如:
- 教师:ResNet-152(CNN),学生:MobileNetV3(轻量 CNN)
- 教师:BERT(Transformer),学生:LSTM(RNN)
- 教师:ViT(Vision Transformer),学生:CNN
异构蒸馏的挑战在于:中间层特征难以直接对齐。因为网络结构差异大,特征维度、语义层级都不匹配。这时候通常只做输出层蒸馏,也就是只对齐 softmax 输出的软标签。
我的建议:异构蒸馏时,可以尝试在教师和学生之间加一个「适配器(Adapter)」,把教师的中间层特征映射到学生能用的空间。但适配器本身也会引入额外参数,需要权衡。我个人更倾向于先试输出层蒸馏,效果不够再加适配器。
2.5 知识体系结构图
下面这张 SVG 图,把教师网络、学生网络、蒸馏过程的核心关系画清楚了:
2.6 架构选型实战建议
说了这么多理论,到底怎么选?我根据项目经验,给你几个直接可用的建议:
选型决策树:
- 场景一:你有充足的计算资源,且对模型精度要求极高 → 选同构蒸馏,教师用最大版本,学生用最小版本
- 场景二:你需要部署到边缘设备(手机、IoT)→ 选异构蒸馏,教师用大 CNN/Transformer,学生用 MobileNet/TinyBERT
- 场景三:你想快速验证蒸馏效果 → 先试输出层蒸馏,不管同构异构,3 天内出结果
- 场景四:教师和学生架构差异极大 → 只做输出层蒸馏,不要强行对齐中间层
我曾经犯过的错:有一次做异构蒸馏,教师是 ResNet,学生是 Transformer。我非要在中间层做特征对齐,结果适配器比学生网络本身还大,完全失去了蒸馏的意义。后来老老实实只做输出层蒸馏,效果反而更好。记住:蒸馏的目的是压缩,不是炫技。
2.7 本章小结
教师网络和学生网络,是知识蒸馏的两个基本角色。教师负责「输出知识」,学生负责「学习知识」。架构上,同构蒸馏容易做中间层对齐,异构蒸馏更灵活但通常只做输出层对齐。选型时,根据你的部署场景和资源情况,选择合适的组合。