Energy Method

Energy-based Out-of-distribution Detection

Energy-based Out-of-distribution Detection(NeurIPS 2020)

motivation:
使用softmax置信度分数会导致模型对OOD data的预测有较高的置信度(这与softmax的特性有关,也有深度神经网络训练的特性有关),这显然是不合理的。同时,有研究表明通过深度生成模型估计得到的密度函数对于OOD data的检测并不可靠。基于此,作者提出了energy score。

idea:
基于energy的模型将每个输入映射为一个标量,这个标量对于见过的数据(ID data)较低,对于未见过的数据(OOD data)较高。
一、使用energy score的一些优点:可以直接根据分类模型推导得到,而不依赖密度估计;可以解决模型对OOD data的预测过度自信的问题;使用方便,是一个无参数度量。
二、作者提出了一个训练框架,能够利用分布内数据和辅助数据集数据,使得ID data和OOD data的energy score有一个较为明显的差距。
三、基于energy的fine tune model不仅可以提高OOD data的检测效果,对ID data进行分类的准确率也不会因此下降。

同样使用后处理 #post-hoc

能量函数

基于能量的模型(EBM)的本质是建立一个函数$E(\mathbf{x}):R^D \to R$,将输入空间的每个点x映射到一个称为能量的单一非概率标量。能量值的集合可以通过吉布斯分布转化为概率密度$p(\mathbf{x})$:
image.png
其中分母称为配分函数,它在$y$上边缘化,$T$是温度参数。

由上式的分母部分可以推出,给定数据点$x \in R^D$的亥姆霍兹自由能$E(\mathbf{ x})$可以表示为对数配分函数的负值:
image.png
image.png

综述:基于能量的模型 - yearn的文章 - 知乎
LeCun 的Lessons:yann.lecun.com/exdb/publis/pdf/lecun-06.pdf
补充:ICLR2020的论文:解读 Your Classifier is Secretly an Energy Based Model and You Should Treat it Like One-CSDN博客

基于能量的模型与现代机器学习,尤其是判别模型有着内在的联系。为了看到这一点,我们考虑一个判别神经分类器$f(\mathbf{x}):R^D\to R^K$,它将输入$x \in R^D$映射到K个称为logits的实数值。这些logits用于使用softmax函数推导分类分布:
image.png
softmax:
image.png

通过连接Eq.1和Eq.3,我们可以将给定输入$(\mathbf{x},y)$的能量定义为$E(\mathbf{x},y)= f_{y}(\mathbf{x})$。更重要的是,在不改变神经网络$f_{y}(\mathbf{x})$的参数化的情况下,我们可以用softmax激活的分母来表示$x \to R^D$上的自由能函数$E(x; f)$:
image.png

image.png
论文尝试在分类模型上接入energy函数,通过energy进行OOD检测。energy较小的为ID数据,energy较大的为OOD数据。当负能量评分大于阈值时,OOD检测器将该输入分类为OOD。

实际上,通过负对数似然(negative log-likelihood,NLL))损失训练的模型本身就倾向于拉低ID数据的energy,负对数似然损失可表示为:
image.png
定义energy函数 $E(x,y) = -f_{y}(x)$并将$\log$里面的分数展开,NLL损失可转换为:
image.png
从损失值越低越好的优化角度看,公式6的第一项倾向于拉低目标类别$y$的energy,而公式6第二项从形式来看相当于输入数据的free energy。第二项导致整体损失函数倾向于拉低目标类别$y$的energy,同时拉高其它标签的energy,可以从梯度的角度进行解释:
image.png|404

上述式子是对两项的梯度进行整合,分为目标类别相关的梯度和非目标相关的梯度。可以看到,目标类别相关的梯度是倾向于更小的energy,而非目标类别相关的梯度由于前面有负号,所以是倾向于更大的energy。另外,由于energy近似为$-f_y(x)=E(x,y)$,通常都是目标类别的值比较大,所以NLL损失整体倾向于拉低ID数据的energy。

使用 energy 进行OOD

分布外检测是一个二元分类问题,它依赖于一个分数来区分分布内和分布外的例子。评分函数应产生可区分分布内和分布外的值。一个自然的选择是使用数据$p(\mathbf{x})$的密度函数,并考虑具有低可能性的示例是OOD。可以通过诉诸基于能量的模型来获得判别模型的密度函数:
image.png
归一化密度函数$Z$(分母)(相对于x)可能难以计算,甚至在输入空间上可靠地估计。

为了减轻这一问题,我们的关键观察结果是,缺乏标准化根本不会影响OOD检测。具有较高出现概率的数据点相当于具有较低能量。要看到这一点,我们可以采取对数化方程:
image.png

image.png
正(分布内)样本具有更高的分数
能量分数本质上是非概率性的,可以通过 logsumexp 方便地计算
我们的方法不需要显式估计密度Z,因为Z与样本无关,并且不影响整体能量分数分布。

Energy Score与Softmax的关系:
image.png
可见,直接优化softmax等价于同时优化energy score和fmax

从上述式子可以看出,softmax置信度的对数实际上是free energy的特例,先将每个energy减去最大的energy进行偏移(shift),再进行free energy的计算,导致置信度与输入的概率密度不匹配。随着训练的进行,通常$f^{max}(x)$会变高,而$E(x;f)$则变低,所以softmax是有偏评价函数,置信度也不适用于OOD检测。

对比:
image.png
因此,与密度 p(x) 很好地对齐的能量得分不同,softmax 置信度得分不太能够可靠地区分分布内和分布外的示例。 为了通过一个真实的示例进行说明,图 2 显示了 SVHN 数据集 (OOD) 中的一个示例和分布内数据 CIFAR-10 中的另一个示例。 虽然它们的 softmax 置信度分数几乎相同(1.0 与 0.99),但负能量分数更容易区分(11.19 与 7.11)。 因此,在原始 Logit 空间(能量得分)而不是移动 Logit 空间(softmax 得分)中工作可以为每个样本产生更多有用的信息。 我们在 4.2 节的实验结果中表明,对于 OOD 检测,能量得分是比 softmax 得分更好的指标。
image.png
左边是softmax,右边的是energy。发现softmax得到的置信度几乎相等,但是energy得到的差值会大一些,提供了更多信息。

进行训练

虽然能量得分对于预训练的神经网络很有用,但虽然能量得分对于预训练的神经网络很有用,但分布内和分布外之间的能量差距可能并不总是对于分类来说是最佳的。 因此,我们还提出了一个能量有限(energy-bounded)的学习目标,其中神经网络经过微调,通过将较低的能量分配给分布内数据,将较高的能量分配给 OOD 数据来显式地创建能量间隙。 学习过程在对比塑造能量表面方面提供了更大的灵活性,从而产生更可区分的分布内和分布外数据。 具体来说,我们的基于能量的分类器是使用以下目标进行训练的:
image.png

其中 $F(x)$ 是分类模型的 softmax 输出,$D^{train}_{in}$ 是分布内训练数据。 总体训练目标结合了标准交叉熵损失以及以能量定义的正则化损失:

image.png

其中 $D^{\text{train}}_{\text{out}}$ 是未标记的辅助 OOD 训练数据。特别是,我们使用两个平方 Hinge 损失项以及独立的边界超参数 $m_{\text{in}}$ 和 $m_{\text{out}}$ 对能量进行正则化。

一方面,模型会惩罚产生能量高于 $m_{\text{in}}$ 的分布内样本;另一方面,模型会惩罚能量低于 $m_{\text{out}}$ 的分布外样本。换句话说,损失函数惩罚能量为 $E(x) \in [m_{\text{in}}, m_{\text{out}}]$ 的样本。模型微调后,下游 OOD 检测流程与 3.1 节的描述一致。

实验

分布内数据集

我们使用 SVHN [28]、CIFAR-10 [18] 和 CIFAR-100 [18] 数据集作为分布内数据。 我们使用标准分割,并分别用 $D_{train}^{in}$ 和 $D_{test}^{in}$ 表示训练集和测试集。

ID数据集包含CIFA-10、CIFAR-100,并且分割训练集和测试集。OOD测试数据集包含Textures、SVHN、Places365、LSUN-Crop、LSUN_Resize和iSUN。辅助用的OOD数据集则采用80 Million Tiny Images,去掉CIFAR里面出现的类别

分布外数据集

对于 OOD 测试数据集 Dtest out ,我们使用六个常见基准:Textures [5]、SVHN [28]、Places365 [49]、LSUN-Crop [46]、LSUN-Resize [46] 和 iSUN[45]。 所有图像的像素值通过 z 归一化进行归一化,其中参数取决于网络类型。 对于辅助异常数据集,我们使用 8000 万张微小图像 [38],这是从网络上抓取的大规模、多样化的数据集。 我们删除了该数据集中出现在 CIFAR-10 和 CIFAR-100 中的所有示例。

评估指标

我们测量以下指标:
(1)当分布内示例的真阳性率为95%时,OOD示例的误报率(FPR95);
(2) AUROC;
(3) 精确率-召回率曲线下面积 (AUPR)。

训练细节

image.png

训练结果

与softmax和OE

image.png

与其他OOD

image.png

能量微调是否会影响神经网络的分类精度?

可以提高

image.png

关于温度缩放

image.png