一句话定义:温度缩放是一种「事后校准」手段——训练好的模型一个参数都不动,只在验证集上学一个温度 T,把输出层的 logits 全部除以 T 再过 softmax,让模型报出来的概率更接近真实命中率。
为什么需要它
神经网络最后一层吐出的是 logits(未归一化的分数),softmax 之后变成概率。问题在于,现代模型普遍过度自信:它标着 0.95 的样本,真实正确率可能只有 0.7 左右。也就是「答得挺对,但概率不能信」。
打个比方:一位阅卷老师习惯把 60 分的卷子打成 90 分。排序大体没错,但分数普遍虚高。温度缩放不改卷面内容,只是给所有分数做一次统一的压缩——名次不动,虚高的部分被拉回来。
它是怎么做的
公式很简单:概率 = softmax(logits / T)。
- T = 1:原样输出。
- T > 1:分布被「软化」,概率向中间靠拢,过度自信被削掉(最常见的情况)。
- T < 1:分布变尖,模型更自信。
T 的取值在验证集上通过最小化负对数似然(NLL,等价于交叉熵)搜出来。因为只有一个参数,一维搜索就够了,几乎不存在过拟合风险。注意别用训练集:训练集上模型更自信,学出来的 T 是偏的。
关键性质:除以一个正数不改变数值大小顺序,所以 argmax 不变,准确率一模一样。它修的是概率的刻度,不是答案本身。
和相邻概念的区别
| 概念 | 何时介入 | 改的东西 | 能提准确率吗 |
|---|---|---|---|
| 温度缩放 | 训练后 | 一个全局温度 | 不能,也不该指望 |
| 标签平滑 | 训练中 | 目标标签 | 有时间接有 |
| 深度集成 / 多模型平均 | 训练多个模型 | 预测求平均 | 通常能 |
| 向量缩放 / 矩阵缩放 | 训练后 | 每类一组参数 | 不能 |
| 大模型里的「温度」 | 生成采样时 | 采样随机性 | 不适用 |
二分类里的 Platt 缩放是它的近亲,温度缩放可以看作 Platt 缩放套在多分类 logits 上的一参数版本。
还要把「校准」和「准确率」分开看:校准问的是「说 80% 把握的事,真的对 80% 吗」;准确率问的是「一共答对多少」。两者互不决定——模型可以很准但很狂,也可以很菜但很诚实。
对实际工作的意义
只要概率被拿去做决策,校准就有价值:
- 设阈值做风控、审核、告警,按置信度排序,或者选择性拒答、转人工。
- 模型融合、主动学习、不确定性监控,前提都是概率可信。
- 线上还能顺带监控 T:新数据上最优 T 明显偏离 1 且持续漂移,是分布漂移的一个廉价信号。
两个别忽略的坑:温度缩放只保证整体平均校准,不保证每个置信度分桶、每个子人群都准;它也不改变模型能力上限,别指望靠它涨点。
实现上通常就是几行代码加一次一维优化,成本低到几乎可以默认加上。具体接口和取值范围以官方文档为准。
