Temperature Scaling
发现温度缩放如何校准 AI 模型置信度。学习优化输出概率以获得高度可靠的 Ultralytics YOLO 预测。
Temperature scaling 是一种广泛使用的后处理技术,旨在校准 人工智能 (AI) 和 机器学习 (ML) 模型的预测概率。在现代深度学习中,模型常常表现出过度自信,这意味着它们的预测概率无法准确反映真实的统计校准或正确可能性。Temperature scaling 通过在应用 softmax 函数之前,将网络的原始输出分数(logits)除以一个单一的、学习到的标量参数(称为“temperature” (T))来解决这个问题。这种调整在不改变最终图像分类决策的情况下柔化了概率,确保模型的置信度与其真实准确度紧密一致。
温度缩放的工作原理#
在一个标准的分类网络中,最后一层输出原始 logits,然后通过 softmax 激活函数传递,以产生总和为 1 的概率。现代深度学习架构,尤其是那些通过交叉熵等损失函数进行大量优化的架构,往往会将这些 logits 推向极端值以最小化损失,从而导致模型校准失调和过度自信的现象。
温度缩放将温度参数 (T) 引入到 softmax 方程中。
- 当 T = 1 时,softmax 函数表现正常。
- 当 T > 1 时,logits 被缩小,这会柔化输出分布,有效地降低峰值置信度,并将概率质量更均匀地分布在所有类别上。
- 当 T < 1 时,分布变得更尖锐,促使模型对前置预测更加自信。
通过在指定的验证集上优化 T,工程师能够将期望校准误差降到最低。这种简单、单一参数的调整非常受青睐,因为它需要的计算开销极小,并且保留了模型权重的原始准确度。
温度缩放与标签平滑 (Label Smoothing) 的对比#
虽然这两种技术都旨在防止过拟合和过度自信,但它们在模型生命周期的不同阶段发挥作用。标签平滑在训练期间应用。它会改变真实标签(例如,将硬标签从 1.0 更改为 0.9),以防止模型将完整概率分配给单个类别。相比之下,temperature scaling 以及诸如 Focal Temperature Scaling 等更新的变体是训练完成后应用的后 hoc 校准方法,这意味着它们会修改完全训练好的模型的输出概率,而无需任何重新训练。
实际应用#
正确的模型校准对于各行各业的安全性和可靠性至关重要:
- **医学诊断:**在脑部肿瘤检测等任务中,过度自信的错误分类可能会导致严重的临床后果。使用 temperature scaling 可以确保预测建模系统输出可靠的概率。如果扫描预测在缩放后仍高度不确定,系统可以自信地将图像标记出来,供放射科医生进行人工复查。近期关于校准临床模型的研究继续突显了其在受限、高风险诊断环境中的价值。
- **大型语言模型 (LLMs):**对于 LLMs,temperature scaling 被广泛用于控制输出随机性和生成多样性,正如 OpenAI 的 temperature 参数所示。高 temperature 会产生更有创意、更多样的文本,而低 temperature 会产生确定性的、专注的响应。随着研究的进展,诸如自适应 Temperature Scaling (ATS) 等技术正在被开发出来,以纠正人类反馈强化学习后经常出现的校准退化问题。
- **自动驾驶汽车:**在自动驾驶中,目标检测系统必须立即判断障碍物是行人还是阴影。校准这些视觉模型可以确保当模型的真实置信度降至关键安全阈值以下时,能够可靠地触发紧急制动等备用机制。
代码示例:实现温度缩放#
以下代码片段展示了如何使用 PyTorch 将 temperature 标量应用于 Ultralytics YOLO26 分类模型的原始 logits。
import torch
import torch.nn.functional as F
from ultralytics import YOLO
# Load a pre-trained Ultralytics YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Assume 'logits' are the raw outputs from the model prior to activation
# (e.g., obtained via a custom forward pass or feature extraction)
logits = torch.tensor([[5.0, 2.0, 0.5]])
# Define an optimized temperature scalar (T > 1 softens the probabilities)
temperature = 1.5
# Apply temperature scaling before passing logits to the softmax function
scaled_logits = logits / temperature
calibrated_probabilities = F.softmax(scaled_logits, dim=1)
print(f"Original Softmax: {F.softmax(logits, dim=1)}")
print(f"Calibrated Probabilities: {calibrated_probabilities}")对于希望无缝部署已校准计算机视觉系统的团队,Ultralytics Platform 提供了强大的工具,用于管理实验跟踪、微调模型以及监控实时推理延迟。此外,关于现代校准技术的基础知识可以追溯到具有影响力研究,例如 "On Calibration of Modern Neural Networks",该研究将 temperature scaling 推广为行业标准。有关更多实际实现,请探索 scikit-learn 的概率校准框架或 TensorFlow 的不确定性感知的模型。






