温度系数 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 对 Softmax 分布的影响 T=0.5 (尖锐) T=1.0 (标准) T=2.0 (较软) T=5.0 (均匀) 类别 A 类别 B 类别 C 0.0 0.5 1.0 0.79 0.19 0.02 0.66 0.24 0.10 0.50 0.30 0.20 0.37 0.33 0.30 关键观察: T 越小,分布越尖锐 T 越大,分布越均匀 T=5 时三类概率几乎相等

T 的直觉:放大镜 vs 压缩器

我个人喜欢用一个比喻来理解 T:

  • T 小 → 放大镜:把 logits 的微小差异放大,Softmax 输出变得“非黑即白”。适合需要明确决策的场景。
  • T 大 → 压缩器:把 logits 的差异压缩,Softmax 输出变得“模棱两可”。适合需要传递“模糊知识”的蒸馏场景。

我曾经踩过的坑: 有一次做 BERT 蒸馏,我把 T 设成了 20,想着“越软越好”。结果学生模型训练了三天,准确率死活上不去。后来发现,T 太大导致老师输出的分布几乎均匀,学生根本学不到任何有效信息。T 不是越大越好,也不是越小越好,得找到那个“甜点”。

蒸馏中的 T:为什么需要“软标签”?

你想想看,如果直接用硬标签(one-hot)训练学生,学生只能学到“猫 vs 狗”这种粗粒度区分。但老师模型其实知道更多——比如“猫”和“老虎”的相似度远高于“猫”和“汽车”。

这些“暗知识”就藏在 Softmax 输出的非最大概率里。温度 T 的作用,就是把这些暗知识“放大”出来,让学生能学到。

蒸馏温度 T 的核心作用:

  1. 软化分布:让非最大类别的概率变得可见
  2. 传递相似性:保留类别间的相对关系
  3. 控制信息量:T 越大,传递的“暗知识”越多,但噪声也越多

实际调参建议

根据我的项目经验,T 的调参可以遵循以下原则:

场景 推荐 T 范围 理由
图像分类(小模型蒸馏) 3~8 平衡类别间相似性与噪声
NLP 文本分类 2~6 文本类别边界相对清晰
序列标注 / 细粒度分类 5~15 需要更多暗知识传递
生成式模型蒸馏 1~3 生成任务对分布敏感,T 不宜过大

我的调试习惯: 先用 T=4 跑一轮 baseline,观察学生收敛速度和最终指标。如果学生学得太慢(loss 降不下去),适当降低 T;如果学生过拟合到老师的噪声上,适当提高 T。调 T 跟调学习率一样,得看 loss 曲线的“脸色”。