蒸馏损失函数与权重设计:软损失+硬损失的平衡
本文定位:L2 理论基础,是《KL 散度与交叉熵》《软标签与硬标签》的”落地公式篇”。 前置知识:softmax 温度软化、KL/CE 关系、dark knowledge。
1. 蒸馏损失的整体形式
Hinton et al. (2015, arXiv:1503.02531) 给出的蒸馏损失,是软损失与硬损失的加权和:
$$ \mathcal{L}{\text{KD}} = \alpha ; T^2 , D{\mathrm{KL}}!\big(q_T \parallel q_S\big)
- (1-\alpha), \mathrm{CE}!\big(y,, \text{softmax}(z_S)\big) $$
其中:
- $q_T = \text{softmax}(z_T / T)$:教师在温度 $T$ 下的软标签;
- $q_S = \text{softmax}(z_S / T)$:学生在温度 $T$ 下的软输出;
- $y$:真实 one-hot 标签;
- $\alpha \in [0,1]$:软/硬损失的平衡权重。
2. 软损失项(Soft Loss)
$$ \mathcal{L}{\text{soft}} = T^2 , D{\mathrm{KL}}(q_T \parallel q_S) $$
- 在温度 $T$ 下,让学生软化分布 $q_S$ 匹配教师软化分布 $q_T$。
- 用 KL(等价地,在 $q_T$ 固定时用 CE)衡量两分布差异,理由见《KL 散度与交叉熵》。
- 前乘 $T^2$ 的作用见下一节。
3. 硬损失项(Hard Loss)
$$ \mathcal{L}_{\text{hard}} = \mathrm{CE}!\big(y,, \text{softmax}(z_S)\big) $$
- 学生在**普通 softmax($T=1$)**下与真实标签的交叉熵。
- 作用是:即使教师有偏差,真实标注仍能提供正确方向的”锚”。
- 实践上硬损失常不可或缺,尤其在学生要独立达到标注精度时。
4. $T^2$ 系数的来源(来自原论文梯度分析)
这是最容易被误写的一点。$T^2$ 不是拍脑袋的超参,而是 Hinton 论文中从梯度推导得到的校正因子:
- 软损失对 student logits 的梯度,在温度 $T$ 下近似为 $\frac{1}{T^2}\big(q_T - q_S\big)$(当 logits 未归一化、且 $T$ 较大时,该近似成立)。
- 也就是说,温度越高,软损失产生的梯度量级被缩小约 $1/T^2$。
- 为了让”软损失”与”硬损失”的梯度量级可比、联合训练稳定,原论文在软损失前乘以 $T^2$ 来抵消这一缩放。
严谨提示:$T^2$ 抵消的是”软损失梯度随 $T$ 缩小”的效应;它保证当 $T$ 变化时软损失项的梯度尺度大致恒定,而非人为增大知识权重。具体推导见 Hinton et al. 2015 原文。
5. $\alpha$ 的调参直觉
$\alpha$ 控制”更信教师”还是”更信标注”:
- $\alpha \to 1$:几乎只靠教师软标签。适合教师很强、且软标签信息量大的场景,或标注稀缺/噪声大时。
- $\alpha \to 0$:退化为普通有监督训练,蒸馏几乎不起作用。
- 折中取值:通常让软损失占主导,但保留少量硬损失以”防偏”。
需要明确:$\alpha$ 的具体经验取值在事实库中并未给出统一标准,须结合教师质量、数据规模与任务实验确定(具体最优区间「待核实」,请以你所用基线论文/实现为准)。本文只提供调参的定性直觉,不给出编造的数字。
6. 联合训练的实践要点
- 教师前向不计算梯度(
teacher.eval(); no_grad()),仅提供 $q_T$。 - 同一 batch 同时算软损失与硬损失,再加权求和反传学生。
- 推理部署时,学生用 $T=1$ 的普通 softmax,教师不再参与。
- 温度 $T$ 与 $\alpha$ 需联合调参:$T$ 决定暗知识的”显影程度”,$\alpha$ 决定其”被信任的程度”。
7. 与其他蒸馏损失形式的联系
本文的加权和损失是响应基蒸馏的主干,但完整蒸馏框架往往还会叠加其他知识类型的损失:
- 特征基:在中间隐层再加一个回归/MSE 损失(如 FitNets 的 hint learning,Romero et al. 2015, arXiv:1412.6550),此时总损失 = 响应损失 + 特征损失。
- 关系基:以样本间关系结构作为监督(如 Relational KD, Park et al. 2019, arXiv:1904.05068),损失项改为对齐师生输出的”关系矩阵”。
无论叠加何种知识,响应基的 $\mathcal{L}_{\text{KD}}$ 通常仍作为基础项保留,因为它锚定了”最终输出分布”这一最直接的目标。换句话说,$\alpha$ 与 $T$ 的设计思想(信教师 / 显影暗知识)在更复杂的损失组合中依然适用,只是需要再引入额外的平衡系数来协调多个知识源。
一个常见误区是把 $T^2$ 当成”知识权重”来调大以”加强蒸馏”。实际上 $T^2$ 只是梯度量级的校正常量;真正控制”知识占比”的是 $\alpha$,以及软标签本身携带的信息量。若想增强知识迁移,应优先调教师质量、温度 $T$ 与 $\alpha$,而非放大 $T^2$。此外,当训练数据带有真实标签时,硬损失项不可或缺;但在某些场景(如无标签数据 + 集成伪标签,参见 Bucilă et al. 2006 的 Model Compression, KDD 2006)也可只用软损失,此时 $\alpha$ 退化为 1。这类设置下蒸馏退化为纯粹的”用教师伪标签训练小模型”,是 KD 最早的工程雏形之一。
另一种常见困惑是”要不要给学生也加温度”。答案是否定的:温度 $T$ 只用于软化比较,学生的软输出与教师的软输出在同一个 $T$ 下比较才有意义;而硬损失与最终部署都使用 $T=1$ 的普通 softmax。也就是说,温度是一个”训练期的对齐工具”,不进入学生的最终接口。若误在学生部署时也保留 $T>1$,反而会平滑掉本该尖锐的判别信号。这也提醒我们:$T$ 与 $\alpha$ 都是训练超参,推理阶段一律 $T=1$、只用学生自身 softmax;牢记这一点,能避免很多”为什么蒸馏后学生变笨”的调试事故(这部分坑在初版实现里极其常见)。
还有一个工程细节:软损失里的 $T^2$ 与硬损失里的 $T=1$ 并存,意味着两项梯度量级天然不同。除原论文的 $T^2$ 校正外,实际训练中还常用学习率 warmup、对教师输出做停止梯度(stop-gradient)等技巧来稳定联合优化。这些都不改变损失形式,只是让”软 + 硬”的加权训练更平稳。换言之,损失公式决定了”学什么”,而上述训练技巧决定了”怎么学得稳”,二者属于不同层面的问题,调试时应分开看待。
8. 小结
- 蒸馏损失 = $\alpha T^2 \mathrm{KL}(\text{软}) + (1-\alpha)\mathrm{CE}(\text{硬})$。
- $T^2$ 来自原论文的梯度量级校正,使软损失梯度尺度不随 $T$ 崩溃。
- $\alpha$ 在”信教师”与”信标注”间权衡,无统一标准值,需实验。
延伸阅读 / 参考文献
- Hinton G., Vinyals O., Dean J. (2015). Distilling the Knowledge in a Neural Network. arXiv:1503.02531.(蒸馏损失完整形式、$T^2$ 校正与软/硬损失加权)