1. 为什么我们需要能量分数?从Softmax的“过度自信”说起
如果你用过图像分类模型,比如在CIFAR-10上训练的ResNet,你可能会发现一个有趣的现象:有时候,模型会把一张完全不属于训练集的图片(比如一张猫的卡通画),以高达99.9%的置信度分到某个类别(比如“狗”)。这种“迷之自信”在机器学习领域被称为过度自信问题,它让传统的OOD检测变得异常困难。
OOD检测,全称是Out-of-Distribution Detection,即分布外检测。它的目标很简单:判断一个输入样本是否属于模型训练时所见的“已知世界”(分布内,In-Distribution),还是来自一个完全陌生的“未知世界”(分布外,OOD)。这在自动驾驶、医疗诊断等安全关键领域至关重要——你肯定不希望一个自动驾驶系统把路中央的塑料袋以99%的置信度识别成“无障碍物”并直接撞上去。
长久以来,大家习惯用模型输出的Softmax置信度(即最大类别的概率值)作为判断依据:置信度低的,就认为是OOD。这个想法很直观,但现实很骨感。神经网络,特别是深度网络,其Softmax输出空间存在一个根本性问题:它是在有限的、离散的标签空间(比如10个类别)上进行归一化的。模型被训练得“太会”在这个小空间里做文章了,以至于对于完全陌生的输入,它也能通过调整logits(模型最后一层线性层的输出),让某个类别的概率变得异常高。
这就好比一个只学过10种水果分类的学生,你给他看一个汽车模型,他硬要把它归为“苹果”,并且坚信不疑。问题的根源在于,Softmax置信度衡量的是“在已知类别中谁更像”,而不是“这个输入本身是否属于已知世界”。它丢失了输入数据在特征空间中的绝对密度信息。
那么,有没有一个指标,能更直接地反映“这个样本出现在我训练数据中的可能性有多大”呢?这就是能量分数登场的背景。它脱胎于基于能量的模型,其核心思想非常物理:为每个输入样本赋予一个“能量”值。熟悉的、常见的样本能量低;陌生的、罕见的样本能量高。这个能量值理论上与输入数据的概率密度直接挂钩——高能量对应低概率密度,低能量对应高概率密度。这样一来,OOD检测就变成了一个更自然的问题:计算样本的能量,如果能量超过某个阈值,就判定它为“陌生来客”。
我第一次在项目中尝试替换掉Softmax置信度,改用能量分数时,效果是立竿见影的。同一个在CIFAR-10上预训练的WideResNet模型,面对SVHN数据集(街景门牌号数字图片)的OOD样本,Softmax置信度还是傻乎乎地给出0.99的高分,但能量分数已经敏锐地将其标记为高能量值,与CIFAR-10样本的低能量值拉开了明显差距。这种“拨云见日”的感觉,让我意识到能量分数背后坚实的理论根基和巨大的实用潜力。
2. 能量分数的数学直觉:从Softmax到Log-Sum-Exp
要理解能量分数,我们得先看看它和Softmax的“血缘关系”。假设我们有一个训练好的K类分类模型,输入x,它输出K个logits,记作向量f(x) = [f₁(x), f₂(x), ..., f_K(x)]。
Softmax的公式我们都熟悉:
p(y|x) = exp(f_y(x)) / Σ_{i=1}^{K} exp(f_i(x))
这里,模型通过指数运算和归一化,将logits转化为一个概率分布。
而**能量分数E(x; f)**的定义是:
E(x; f) = -log Σ_{i=1}^{K} exp(f_i(x))
注意,这里没有减去最大值,也没有除以温度T(默认T=1)。这个形式在数学上被称为Log-Sum-Exp运算的负值。
看出联系了吗?Softmax的分母正是exp( -E(x; f) )。也就是说:
Σ_{i=1}^{K} exp(f_i(x)) = exp( -E(x; f) )
取个对数,我们得到:
E(x; f) = -log( Σ_{i=1}^{K} exp(f_i(x)) )
这个公式的美妙之处在于它的解释性。Log-Sum-Exp函数有一个很好的性质:它平滑地近似于max函数。也就是说,E(x; f) ≈ -max_i f_i(x)。但它比单纯取负最大值包含了更多信息——它考虑了所有logits的贡献,而不仅仅是最大的那个。对于分布内样本,模型通常对某个正确类别的logit输出很高的正值,其他类别的logit为较低的负值,这样Log-Sum-Exp的结果主要由最大值主导,E(x; f)会得到一个较低的负值(比如-10)。对于OOD样本,所有logits可能都处于一个较低且混乱的值域,没有哪个特别突出,Log-Sum-Exp的结果就不会被一个很大的值主导,E(x; f)就会是一个较高的负值或甚至正值(比如-2)。
我们可以做一个更直观的对比。Softmax置信度其实可以写成:
log max_y p(y|x) = E(x; f) + f_max(x)
其中f_max(x)是最大的logit。这个式子揭示了一个关键问题:Softmax置信度是能量分数E(x; f)和最大logit值f_max(x)的叠加。对于分布内样本,E(x; f)低(负得更多),f_max(x)高,两者一加,可能得到一个很高的置信度。但对于OOD样本,虽然E(x; f


1839

被折叠的 条评论
为什么被折叠?



