3. 知识蒸馏基础理论
知识蒸馏,说白了就是让一个小模型(学生)去模仿一个大模型(老师)的行为。我刚开始接触这个方向时,总觉得这不就是“抄作业”吗?后来在工业界做模型压缩,才真正体会到——抄作业也是有技巧的,抄得好不好,直接决定你上线后的推理速度和精度。
这一节,我们先把蒸馏最核心的三个概念讲透:软标签 vs 硬标签、温度系数 T 到底在干嘛、以及那个让两个分布对齐的 KL 散度损失函数。
3.1 软标签与硬标签:老师到底教什么?
先看一个最简单的分类场景。假设老师模型要区分猫、狗、兔子三类。输入一张图片,老师输出的 logits 是 [5.0, 1.2, 0.8]。
硬标签就是 one-hot 向量:猫是 1,其他是 0。你想想看,这种标签只告诉学生“这是猫”,但没告诉学生“这猫长得有点像狗,但绝对不是兔子”。信息量太少了。
软标签则是经过 softmax 后的概率分布,比如 [0.88, 0.08, 0.04]。它保留了类间相似性信息。猫和狗的概率接近,说明这两个类别在特征空间里挨得近;兔子的概率低,说明它离得远。
我个人习惯把软标签比作“老师的解题思路”,硬标签只是“标准答案”。学生光看答案,遇到新题还是不会;但看了老师的思路,就能举一反三。
- 硬标签:只包含类别信息,信息熵低,容易过拟合。
- 软标签:包含类间相似性,信息熵高,泛化能力更强。
我在项目中遇到过一个问题:直接用硬标签训练学生模型,精度总是比老师差一大截。后来换成软标签,学生模型在 30% 参数量下,只掉了不到 1 个点的精度。这就是软标签的价值。
3.2 温度系数 T:把分布“摊开”来看
软标签虽好,但有个问题——老师输出的概率分布往往太“尖锐”了。比如 [0.98, 0.01, 0.01],非目标类概率几乎为 0,类间相似性信息被淹没了。
这时候就需要 温度系数 T 出场。它的公式很简单:
q_i = exp(z_i / T) / Σ_j exp(z_j / T)
其中 z_i 是 logits,T 是温度系数。T 越大,分布越平滑;T 越小,分布越尖锐。
为什么会这样?你想想看,除以 T 相当于把 logits 的差距缩小了。原本 5.0 和 1.2 差 3.8,除以 T=5 后变成 1.0 和 0.24,差 0.76。softmax 后,非目标类的概率就明显抬高了。
| T 值 | 猫 | 狗 | 兔子 | 特点 |
|---|---|---|---|---|
| T=1 | 0.88 | 0.08 | 0.04 | 标准 softmax,分布尖锐 |
| T=5 | 0.45 | 0.30 | 0.25 | 分布平滑,类间关系清晰 |
| T=20 | 0.36 | 0.33 | 0.31 | 接近均匀分布,信息稀释 |
我一般建议 T 取 2~8 之间。太小了没效果,太大了会把噪声也放大。嗯,这里要注意:训练时用高温蒸馏,推理时学生模型用 T=1。这个切换千万别忘了。
3.3 KL 散度损失函数:让两个分布对齐
蒸馏的核心损失函数就是 KL 散度。它衡量的是两个概率分布之间的差异。公式如下:
KL(P || Q) = Σ_i P(i) * log(P(i) / Q(i))
其中 P 是老师模型的软标签分布,Q 是学生模型的软标签分布。KL 散度越小,说明学生越像老师。
你可能会问:为什么不用交叉熵?其实 KL 散度和交叉熵本质上是等价的,只差一个常数项。但 KL 散度有更直观的物理意义——它表示用 Q 来编码 P 时,额外需要的比特数。
完整的蒸馏损失函数通常长这样:
L = α * KL(P_teacher || P_student) + (1-α) * CE(y_hard, y_true)
第一项是蒸馏损失,让学生模仿老师的软标签;第二项是硬标签损失,让学生不偏离真实标签。α 是平衡系数,我一般设 0.7 左右。
3.4 知识蒸馏核心流程
把上面三个概念串起来,蒸馏的完整流程就清晰了。我画了一张图,帮你理清逻辑:
流程其实不复杂:输入数据同时喂给老师和学生 → 老师生成软标签(高温) → 学生也生成软标签(高温) → 计算 KL 散度 → 加上硬标签交叉熵 → 反向传播更新学生参数。
3.5 蒸馏 vs 普通训练:一张表说清楚
| 对比维度 | 普通训练 | 知识蒸馏 |
|---|---|---|
| 监督信号 | 硬标签(one-hot) | 软标签 + 硬标签 |
| 损失函数 | 交叉熵 | KL 散度 + 交叉熵 |
| 温度系数 | 无 | T > 1(训练时) |
| 信息量 | 低(只有类别) | 高(含类间关系) |
| 泛化能力 | 一般 | 更强 |
| 参数量 | 大模型直接训练 | 小模型模仿大模型 |
看到这里,你应该明白了:蒸馏不是简单的“让学生背答案”,而是让学生理解老师的“解题思路”。软标签提供了丰富的类间关系,温度系数让这些关系变得可读,KL 散度则量化了学生和老师之间的差距。