3. 知识蒸馏入门

知识蒸馏(Knowledge Distillation, KD)的核心思想是让一个轻量级的学生模型去模仿一个已经训练好的、性能更强的教师模型。与直接用硬标签训练学生模型不同,蒸馏把教师模型输出的“软标签”作为额外监督信号,使学生不仅学到“正确答案是什么”,还学到“教师认为其他类别有多像”。这种暗知识(Dark Knowledge)往往能显著提升小模型的泛化能力,是模型压缩工程中最常用的手段之一。

一、教师-学生范式:结构、角色与信息流

教师-学生范式由三个要素构成:教师模型、学生模型和蒸馏监督信号。教师模型通常是参数量大、精度高的网络,训练完成后参数冻结;学生模型是目标部署模型,参数量小、推理快。训练时,同一批输入同时送入教师和学生,教师输出软标签,学生输出预测,二者通过蒸馏损失对齐。

教师模型并不一定比学生模型“大很多”,但必须在目标任务上更强。常见组合包括:BERT-base 教师蒸馏到 BiLSTM 学生、ResNet-50 教师蒸馏到 MobileNet 学生、集成模型教师蒸馏到单模型学生。教师可以是同架构的深模型,也可以是异构模型,甚至可以是多个教师组成的集成。

教师-学生蒸馏信息流 教师模型 参数冻结 · 高精度 学生模型 可训练 · 轻量 教师软标签 p_t = softmax(z_t/T) 学生软预测 p_s = softmax(z_s/T) 蒸馏损失 KL(p_t || p_s) 总损失 L = αL_CE + (1-α)L_KD

二、软标签与温度系数:暗知识的来源

硬标签是 one-hot 向量,例如三分类中正确类为 [1, 0, 0]。软标签是教师模型经过 softmax 后的概率分布,例如 [0.7, 0.2, 0.1]。这个分布携带了类别间的相似性信息:教师认为第二类与第一类有一定相似度,而第三类几乎无关。学生模型通过拟合这种分布,可以学到更平滑的决策边界。

温度系数 T 是控制软标签“软化程度”的关键超参数。标准 softmax 为:

p_i = exp(z_i / T) / Σ_j exp(z_j / T)

当 T=1 时,输出为普通 softmax;T 越大,分布越平滑,小概率类别被放大,暗知识更明显;T 越小,分布越尖锐,接近硬标签。通常 T 取 2~10,分类任务中 T=4 或 T=5 较常见。训练学生时,教师和学生使用相同的 T 计算软标签,但学生推理时恢复 T=1。

温度系数不是越大越好。T 过大时,所有类别概率趋于均匀,教师置信度被稀释,学生难以学到有效判别信息;T 过小则退化为硬标签蒸馏,暗知识几乎消失。

三、蒸馏损失函数:KL 散度与总损失

蒸馏损失通常用 Kullback-Leibler 散度衡量教师软标签与学生软预测之间的差异:

L_KD = KL(p_t || p_s) = Σ_i p_t(i) · log(p_t(i) / p_s(i))

由于 KL 散度对概率分布敏感,训练时需要对软标签乘以 T² 进行缩放,以平衡梯度量级。总损失由两部分组成:

L_total = α · L_CE(y, p_s) + (1 - α) · T² · L_KD(p_t, p_s)

其中 L_CE 是学生预测与真实硬标签的交叉熵,α 是平衡系数,通常取 0.1~0.5。α 越大,学生越依赖真实标签;α 越小,学生越依赖教师软标签。实际工程中,α 和 T 需要联合调参。

超参数作用典型范围调参建议
T(温度)控制软标签平滑度2~10分类任务先试 T=4
α(硬标签权重)平衡 CE 与 KD0.1~0.5教师强时取小值
学习率学生优化步长1e-4~1e-2比独立训练略小
批大小影响梯度稳定性32~256与教师训练一致

四、基本训练流程与工程案例

标准蒸馏训练流程分为五步:

  1. 训练教师模型至收敛,冻结参数。
  2. 准备学生模型,随机初始化。
  3. 同一批数据同时前向教师和学生,得到 z_t 和 z_s。
  4. 按温度 T 计算软标签,计算 L_KD 和 L_CE,加权求和。
  5. 反向传播更新学生参数,教师不更新。
for x, y in dataloader:
    with torch.no_grad():
        z_t = teacher(x)
    z_s = student(x)
    p_t = softmax(z_t / T, dim=-1)
    p_s = log_softmax(z_s / T, dim=-1)
    L_kd = F.kl_div(p_s, p_t, reduction='batchmean') * (T * T)
    L_ce = F.cross_entropy(z_s, y)
    loss = alpha * L_ce + (1 - alpha) * L_kd
    loss.backward()
    optimizer.step()

以文本分类为例:教师 BERT-base 在情感三分类上准确率 92%,学生 BiLSTM 独立训练仅 86%。加入蒸馏后,T=4、α=0.3,学生准确率提升到 89.5%,参数量从 110M 降到 4M,推理延迟下降约 8 倍。这说明软标签确实传递了教师学到的类别间结构信息。

常见误区:一是教师模型未充分训练就蒸馏,软标签质量差;二是学生容量过小,无法拟合教师分布,出现“容量鸿沟”;三是忽略 T² 缩放,导致 KD 损失梯度过小;四是训练时用 T 计算软标签,推理时忘记恢复 T=1,造成预测分布异常。

五、复盘与关键结论

知识蒸馏的本质是“用教师的输出分布作为监督信号”,其效果取决于教师质量、温度系数、损失权重和学生容量四者的匹配。工程落地时,建议先固定 T=4、α=0.3 做基线,再根据验证集精度微调。若学生精度明显低于独立训练,应检查教师是否过拟合、软标签是否过于尖锐、学习率是否过大。蒸馏不是万能压缩手段,它更适合教师与学生任务一致、教师明显强于学生的场景。