温度系数 T:Softmax 分布的“调温旋钮”
温度系数 T,在知识蒸馏里是个绕不开的核心参数。说白了,它就是控制 Softmax 输出分布“软硬程度”的一个标量。我刚开始接触蒸馏时,总觉得 T 就是个超参数,随便调调就行。后来踩了不少坑才明白——T 的取值,直接决定了学生模型能从老师那里“偷学”到什么。
数学定义:T 是怎么插进 Softmax 的?
先看标准 Softmax 公式:
p_i = exp(z_i) / Σ_j exp(z_j)
加了温度系数 T 之后,变成:
p_i = exp(z_i / T) / Σ_j exp(z_j / T)
嗯,就这么简单。T 被除在了指数里面。T=1 时,就是原始 Softmax;T>1 时,概率分布变“软”;T→0 时,趋近于 one-hot。
核心公式记忆点:
- T=1:标准 Softmax,不做任何缩放
- T>1:软化分布,类别间概率差异缩小
- T→0:硬化为 argmax,只保留最大概率类
T 对 Softmax 分布的影响:一个直观实验
假设我们有三个类别的 logits:z = [2.0, 1.0, 0.1]。我们看看不同 T 下的输出概率:
| 温度 T | 类别 A (z=2.0) | 类别 B (z=1.0) | 类别 C (z=0.1) | 分布特点 |
|---|---|---|---|---|
| T=0.5 | 0.79 | 0.19 | 0.02 | 接近 one-hot,尖锐 |
| T=1.0 | 0.66 | 0.24 | 0.10 | 标准 Softmax |
| T=2.0 | 0.50 | 0.30 | 0.20 | 分布变平缓 |
| T=5.0 | 0.37 | 0.33 | 0.30 | 接近均匀分布 |
看到没?T 越大,三个概率越接近。T=5 时,几乎分不清哪个类别更可能了。这就是“软化”的效果。
直觉理解:放大与缩小概率差异
为什么 T 能控制分布的“软硬”?我个人的理解是这样的:
- T 小(如 0.5):相当于把 logits 放大。原本 2.0 和 1.0 的差距,除以 0.5 后变成 4.0 和 2.0,差距翻倍。Softmax 后,大者更大,小者更小。
- T 大(如 5.0):相当于把 logits 缩小。2.0 和 1.0 变成 0.4 和 0.2,差距被压缩。Softmax 后,所有概率向均匀分布靠拢。
我的经验: 在图像分类蒸馏中,我习惯把 T 设在 3~8 之间。T 太小,学生只学到老师的“硬标签”,跟直接拿 ground truth 训练没区别;T 太大,分布太平,学生学不到类别间的相对关系。
SVG 图:温度系数对 Softmax 分布的影响
T 的直觉:放大镜 vs 压缩器
我个人喜欢用一个比喻来理解 T:
- T 小 → 放大镜:把 logits 的微小差异放大,Softmax 输出变得“非黑即白”。适合需要明确决策的场景。
- T 大 → 压缩器:把 logits 的差异压缩,Softmax 输出变得“模棱两可”。适合需要传递“模糊知识”的蒸馏场景。
我曾经踩过的坑: 有一次做 BERT 蒸馏,我把 T 设成了 20,想着“越软越好”。结果学生模型训练了三天,准确率死活上不去。后来发现,T 太大导致老师输出的分布几乎均匀,学生根本学不到任何有效信息。T 不是越大越好,也不是越小越好,得找到那个“甜点”。
蒸馏中的 T:为什么需要“软标签”?
你想想看,如果直接用硬标签(one-hot)训练学生,学生只能学到“猫 vs 狗”这种粗粒度区分。但老师模型其实知道更多——比如“猫”和“老虎”的相似度远高于“猫”和“汽车”。
这些“暗知识”就藏在 Softmax 输出的非最大概率里。温度 T 的作用,就是把这些暗知识“放大”出来,让学生能学到。
蒸馏温度 T 的核心作用:
- 软化分布:让非最大类别的概率变得可见
- 传递相似性:保留类别间的相对关系
- 控制信息量:T 越大,传递的“暗知识”越多,但噪声也越多
实际调参建议
根据我的项目经验,T 的调参可以遵循以下原则:
| 场景 | 推荐 T 范围 | 理由 |
|---|---|---|
| 图像分类(小模型蒸馏) | 3~8 | 平衡类别间相似性与噪声 |
| NLP 文本分类 | 2~6 | 文本类别边界相对清晰 |
| 序列标注 / 细粒度分类 | 5~15 | 需要更多暗知识传递 |
| 生成式模型蒸馏 | 1~3 | 生成任务对分布敏感,T 不宜过大 |
我的调试习惯: 先用 T=4 跑一轮 baseline,观察学生收敛速度和最终指标。如果学生学得太慢(loss 降不下去),适当降低 T;如果学生过拟合到老师的噪声上,适当提高 T。调 T 跟调学习率一样,得看 loss 曲线的“脸色”。