2. 教师与学生:教师网络与学生网络的定义、角色分工、典型架构对比

知识蒸馏的核心,说白了就是「大模型教小模型」。那谁当老师?谁当学生?这俩角色怎么分工?架构上有什么讲究?这一章我们把这些基础问题彻底讲透。

2.1 教师网络:知识的源头

教师网络,就是那个「已经训练好的、性能很强的大模型」。它的任务只有一个:输出高质量的软标签(Soft Labels),作为学生网络的学习目标。

教师网络的核心特征:

  • 容量大:参数量通常是学生网络的 5~50 倍
  • 精度高:在目标任务上已经达到 SOTA 或接近 SOTA
  • 已收敛:训练过程已经完成,参数冻结,不再更新
  • 推理慢:因为容量大,推理速度通常不满足部署要求

我在项目中遇到过一种情况:团队花了两周训了一个 ResNet-152 做图像分类,精度 92.3%,但部署到手机端推理一次要 800ms。这显然不行。于是我们拿它当教师,去教一个 MobileNetV3。教师网络本身不部署,它只负责「输出知识」。

我的习惯:教师网络选型时,不要只看精度。还要看它的输出分布是否「有信息量」。如果教师网络过拟合严重,软标签会过于尖锐(接近 one-hot),蒸馏效果反而差。我一般会选在验证集上泛化能力最好的 checkpoint,而不是训练集上精度最高的那个。

2.2 学生网络:知识的继承者

学生网络,就是那个「我们要部署的小模型」。它的目标很明确:在教师网络的指导下,学到接近大模型的性能,同时保持小模型的推理效率。

学生网络在训练时,损失函数通常由两部分组成:

  1. 蒸馏损失(Distillation Loss):让学生网络的软输出逼近教师网络的软输出
  2. 硬标签损失(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 图,把教师网络、学生网络、蒸馏过程的核心关系画清楚了:

知识蒸馏教师-学生架构图 知识蒸馏:教师与学生网络架构 教师网络(Teacher) 架构:大容量(如 ResNet-152) 参数:已冻结,不更新 输出:软标签(Soft Labels) 角色:知识提供者 学生网络(Student) 架构:小容量(如 MobileNetV3) 参数:通过蒸馏训练更新 输出:软标签 + 硬标签预测 角色:知识继承者 软标签传递 (可选)中间层特征 蒸馏训练损失函数 L_total = α · L_distill(soft) + (1-α) · L_hard(hard) α 通常取 0.5~0.8,需根据任务调优 部署阶段 仅学生网络参与推理

2.6 架构选型实战建议

说了这么多理论,到底怎么选?我根据项目经验,给你几个直接可用的建议:

选型决策树:

  • 场景一:你有充足的计算资源,且对模型精度要求极高 → 选同构蒸馏,教师用最大版本,学生用最小版本
  • 场景二:你需要部署到边缘设备(手机、IoT)→ 选异构蒸馏,教师用大 CNN/Transformer,学生用 MobileNet/TinyBERT
  • 场景三:你想快速验证蒸馏效果 → 先试输出层蒸馏,不管同构异构,3 天内出结果
  • 场景四:教师和学生架构差异极大 → 只做输出层蒸馏,不要强行对齐中间层

我曾经犯过的错:有一次做异构蒸馏,教师是 ResNet,学生是 Transformer。我非要在中间层做特征对齐,结果适配器比学生网络本身还大,完全失去了蒸馏的意义。后来老老实实只做输出层蒸馏,效果反而更好。记住:蒸馏的目的是压缩,不是炫技。

2.7 本章小结

教师网络和学生网络,是知识蒸馏的两个基本角色。教师负责「输出知识」,学生负责「学习知识」。架构上,同构蒸馏容易做中间层对齐,异构蒸馏更灵活但通常只做输出层对齐。选型时,根据你的部署场景和资源情况,选择合适的组合。