温度参数最初源于统计力学,在机器学习中通过 Softmax 函数发挥作用:
标准 Softmax($T=1$): $$ p_i = \frac{e^{z_i}}{\sum_j e^{z_j}} $$
带温度的 Softmax($T>0$): $$ p_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}} $$
其中 $z_i$ 是模型输出的原始分数(logits)。温度 $T$ 的作用如下:
举个例子:三分类任务 假设原始 logits 为 $[5, 2, 1]$,观察不同 $T$ 下的输出概率:
$T=1$:$[0.84, 0.12, 0.04]$ 类别 2 和类别 3 的概率很低,信息量少。
$T=4$:$[0.49, 0.29, 0.22]$ 类别 2 和类别 3 的概率被明显放大。这揭示了类别 2 比类别 3 更接近类别 1,这就是暗知识。
知识蒸馏的目标是让学生网络(小模型)不仅学习真实标签,更要模仿教师网络(大模型)的泛化能力。教师输出的概率分布中包含的类别间相似性信息,就是“暗知识”。
温度参数正是提取这些暗知识的关键工具。
温度 $T$ 就像一个旋钮,可以调节从教师模型传递的知识粒度。
在蒸馏中,温度参与的是学生与教师的蒸馏损失计算:
$$ L_{distill} = \text{KL}\left( \text{Softmax}\left(\frac{z_s}{T}\right) \parallel \text{Softmax}\left(\frac{z_t}{T}\right) \right) $$
这里关键的一点是:学生和教师必须使用完全相同的温度 $T$,才能在同一尺度上比较概率分布。
同时,学生的总损失通常是蒸馏损失和传统交叉熵损失的加权和。为了保证两部分损失的梯度尺度平衡,通常会给蒸馏损失乘以 $T^2$。
总的来说,温度参数让知识蒸馏从简单模仿“标准答案”,变成学习一个行业前辈的“判断直觉”,从而传递给轻量级模型。