温度缩放与 ECE:逐步校准模型置信度
通过 softmax,利用六个预测拟合温度,计算 ECE,并了解为什么更好的似然仍可能带来更差的分箱校准分数。
六个预测即使有四次正确,也可能讲述两种非常不同的概率故事。在下面的示例中,获胜类别从未改变。把每个 logit 除以拟合出的温度,只会降低或提高附着在每个获胜类别上的置信度。
这个小调整把平均负对数似然从 提高到 。然后出现了一个尴尬的现象:用四个等宽分箱计算的期望校准误差,从 上升到 。
这套算术并不是温度缩放失败了。它揭示了一个更有用的教训:校准是预测概率与观测结果之间的关系,而 ECE 是对这种关系的一种依赖样本、依赖分箱的估计。 学完本课后,你将能够拟合温度、计算 ECE、在 Python 中重现两个结果,并解释为什么这两个数字都不能不加改变地迁移到新的部署总体。
当前的评估工作让这种区别具有实际意义。Google DeepMind 在 8 月 27 日发布的试点让专有模型权重与外部测试提示彼此保持隐藏,而 MLCommons 提供了保留的 AILuminate 子集。这些控制措施保护了测试材料,但并不决定概率应该描述哪个总体。NIST AI 800-3 对准确率提出了类似观点:固定基准问题上的表现与在更广泛的相似问题总体中的表现,是不同的测量目标。
概率预测包含一个可检验的承诺
假设一个分类器在许多相互独立的示例上以 的置信度预测类别 。校准后的置信度意味着这些预测中约有 是正确的。更正式地说,如果 是预测类别, 是它报告的置信度,那么完美的顶层标签校准要求
这个定义并没有说分类器是准确的。一个以 的置信度预测、并且 的时间成功的模型是经过校准的,尽管它经常出错。一个模型也可以正确地为每个示例排序,却为实际只有 成功率的案例报告 。准确率问谁获胜;校准检查附带的概率是否兑现了承诺。
事件和总体都需要明确名称。“正确”可能意味着类别完全匹配、任务完成,或另一种评分结果。示例可能是使用某种语言的客户支持请求、基准问题,或明天的生产流量。改变任一方,概率陈述也会随之改变。关于这一选择背后的更广泛评估流程,请参阅评估如何塑造 AI 产品。
温度转动置信度旋钮
分类器通常会输出 logit:针对 个类别的无约束分数 。Softmax 将它们转换为概率:
温度缩放引入一个正数 :
当 时,缩放后的 logit 之间的差距缩小,概率向量变得不那么集中。当 时,差距扩大,向量变得更尖锐。 会保持原概率不变。
对于第一个示例,logit 是 。在求指数之前减去最大 logit,可以在不处理不必要的大数的情况下得到相同的 softmax:
在 时,向量变为约 。类别 仍然获胜。事实上,任何正温度都会保留 logit 的排序,因此温度缩放不能改变预测类别或分类准确率;它只改变概率的集中程度。
根据留出的标签拟合一个标量
Guo 及其同事的同行评审校准论文在保持网络参数不变的同时,通过最小化留出验证集上的负对数似然(NLL)来拟合 。对于 个有标签示例,目标函数是
其中 是分配给示例 真实类别的缩放后概率。自信的错误会受到很大惩罚,因为真实类别的概率很小。
下面是完整的合成验证集。标签 、 和 代表三个任意类别;其中不涉及私人或高风险预测。
| 示例 | Logit | 真实类别 | 预测类别 | 正确? | 时的置信度 | 时的置信度 |
|---|---|---|---|---|---|---|
| 1 | A | A | 是 | 0.844 | 0.779 | |
| 2 | A | A | 是 | 0.766 | 0.701 | |
| 3 | B | A | 否 | 0.883 | 0.821 | |
| 4 | B | B | 是 | 0.574 | 0.537 | |
| 5 | C | C | 是 | 0.629 | 0.575 | |
| 6 | A | B | 否 | 0.518 | 0.496 |
搜索正温度得到 。平均 NLL 从 时的 降到拟合值处的 。正如保留的类别排序所预期的,准确率仍为 。
这个集合有意做得很小,便于计算。它并不足以批准一个已部署的校准器,而且使用同样的六行来拟合 并报告性能,会产生对泛化能力过于乐观的估计。
ECE 压缩可靠性图
可靠性图也叫校准曲线,它按置信度对预测分组。对于每个分箱 ,计算
以及
指示函数 在预测正确时为 ,否则为 。当一个分箱的准确率等于其平均置信度时,它位于理想对角线上。
期望校准误差对各分箱的绝对差距取样本加权平均:
下面的计算使用四个固定的等宽置信区间:、、 和 。空分箱不产生贡献。
| 温度 | 置信度区间 | 样本数 | 平均置信度 | 准确率 |
|---|---|---|---|---|
| 1.00 | [0.50, 0.75) | 3 | 0.574 | 0.667 |
| 1.00 | [0.75, 1.00] | 3 | 0.831 | 0.667 |
| 1.23 | [0.25, 0.50) | 1 | 0.496 | 0.000 |
| 1.23 | [0.50, 0.75) | 3 | 0.604 | 1.000 |
| 1.23 | [0.75, 1.00] | 2 | 0.800 | 0.500 |
缩放前, 中的三个预测贡献
而 中的三个预测贡献约为 。两者相加为 ,即 。
缩放后,一个预测跨到了 以下,其他示例组成大小为三个和两个的分组。三个分箱贡献约为 、 和 ,得到 ,即 。
更好的似然,更差的 ECE
拟合出的温度优化的是 NLL,而不是四分箱 ECE。NLL 评估分配给每个真实类别的完整概率,并且随 平滑变化。ECE 把预测丢进区间,丢弃分箱内的细节,并在置信度越过边界时突然变化。
六个示例放大了这种不稳定性。一个单样本分箱中的错误会带来 的准确率;一个正确结果会让同一个分箱达到 的准确率。移动边界或选择不同数量的分箱,可能在不改变任何预测的情况下产生不同的 ECE。Guo 等人明确指出,ECE 是分箱近似,结果可能受到分箱方案影响。scikit-learn 的校准指南同样把曲线与直方图放在一起,因为没有样本计数的单个点很容易被过度解读。
因此,这个例子支持三个彼此独立的陈述:
- 选定的 改善了这六行上的 NLL;
- 温度缩放让它们的预测类别和准确率保持不变;
- 四分箱 ECE 在同样的行上变差。
这些都不能说明校准器会改善新样本的概率。这个问题需要从部署决策所涉及总体中抽取的、未触碰的评估数据。
用 NumPy 重现每个数字
下面的程序对一个正标量进行密集搜索。这个网格有意保持透明;生产代码可以使用有界标量优化器,并且应保留独立的最终评估集。
import numpy as np
logits = np.array([
[3.0, 1.0, 0.0],
[2.5, 1.0, 0.0],
[3.0, 0.5, 0.0],
[1.5, 2.0, 0.0],
[0.5, 0.0, 1.5],
[2.0, 2.2, 0.0],
])
labels = np.array([0, 0, 1, 1, 2, 0])
def probabilities(temperature):
scaled = logits / temperature
scaled -= scaled.max(axis=1, keepdims=True)
exp = np.exp(scaled)
return exp / exp.sum(axis=1, keepdims=True)
def nll(temperature):
p = probabilities(temperature)
return -np.log(p[np.arange(len(labels)), labels]).mean()
temperatures = np.linspace(0.25, 4.0, 15_001)
temperature = temperatures[np.argmin([nll(t) for t in temperatures])]
def ece(temperature, edges=np.linspace(0.0, 1.0, 5)):
p = probabilities(temperature)
predictions = p.argmax(axis=1)
confidence = p.max(axis=1)
correct = predictions == labels
total = 0.0
for lower, upper in zip(edges[:-1], edges[1:]):
in_bin = (confidence >= lower) & (confidence < upper)
if upper == 1.0:
in_bin = (confidence >= lower) & (confidence <= upper)
if in_bin.any():
total += in_bin.mean() * abs(
correct[in_bin].mean() - confidence[in_bin].mean()
)
return total
print(f"T={temperature:.5f}")
print(f"NLL: {nll(1.0):.5f} -> {nll(temperature):.5f}")
print(f"ECE: {ece(1.0):.3f} -> {ece(temperature):.3f}")
预期输出约为:
T=1.22975
NLL: 0.82278 -> 0.81243
ECE: 0.129 -> 0.380
校准器属于一个测量契约
一份可辩护的校准记录应说明模型检查点、未缩放的 logits、结果定义、总体、数据时间窗口、划分方法、拟合出的 、优化目标、可靠性分箱边界、分箱计数,以及至少一种 NLL 这样的适当评分规则。在用来训练分类器之外的示例上拟合校准器,然后在未触碰的数据上评估它。
分布偏移是决定性的边界情况。在干净的基准问题上拟合的温度,对于短提示、另一种语言、新的类别混合,或产品变更后收集的输入,可能是错误的。温度缩放无法修复糟糕的类别排序,无法检测未见过的领域,也无法证明系统安全。它只会在拟合一个数字时所使用的验证假设下重新缩放 logits。
因此,部署评审应把可靠性曲线和样本计数放在 ECE 旁边,而不是把这个标量当作证书。如果新的群组让这些点偏离对角线,下一步不是为旧 ECE 辩护,而是确定哪个总体发生了变化,收集足够标签来测量变化,并决定校准契约是否仍然描述正在使用的系统。