【论文精读】Detecting Out-of-Distribution Examples with Gram Matrices 使用Gram矩阵检测分布外实例

文章目录


一、文章概览

(一)Gram矩阵

1、Gram(格朗姆)矩阵的定义

n维欧式空间中任意k个向量之间两两的内积所组成的矩阵,称为这k个向量的格拉姆矩阵(Gram matrix)。它的行列式则称为Gram(格朗姆)行列式。

Gram矩阵是两两向量的内积组成,所以Gram矩阵可以反映出该组向量中各个向量之间的某种关系。

2、Gram矩阵计算特征表示

  • 输入图像的feature map为[ ch, h, w]。
  • 经过flatten(即是将h*w进行平铺成一维向量)和矩阵转置操作,可以变形为[ ch, h*w]和[ h*w, ch]的矩阵。
  • 再对两个作内积得到Gram Matrices。 (蓝色条表示每个通道flatten后特征点,最后得到 [ch *ch ]的G矩阵):

在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,Gram矩阵中的元素表示了两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,对角线上的元素就体现了每个特征在图像中出现的量。

3、风格迁移中的Gram矩阵

Gram矩阵实际上是矩阵的内积运算,在风格迁移算法中,其计算的是feature map之间的偏心协方差(即没有减去均值的协方差矩阵)。在feature map 包含着图像的特征,每个数字表示特征的强度,Gram矩阵代表着特征之间的相关性,因此,Gram矩阵可以用来表示图像的风格,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。

深度学习中经典的风格迁移大体流程是:

  • 准备基准图像和风格图像;
  • 使用深层网络分别提取基准图像(加白噪声)和风格图像的特征向量(或者说是特征图feature map);
  • 分别计算两个图像的特征向量的Gram矩阵,以两个图像的Gram矩阵的差异最小化为优化目标,不断调整基准图像,使风格不断接近目标风格图像。

(二)ood检测

ood:标记不包含训练分布中建模的任何类的测试示例。

之前旨在改进 OOD 检测的工作可以大致分为几个主题:

  • 贝叶斯神经网络
  • 使用带有 OOD 示例的任何预先训练的 softmax 深度神经网络
  • 替代训练策略
  • 生成模型

(三)核心思路:扩展 Gram 矩阵以进行分布外检测

通过联合考虑输出层分配的类和中间层的活动模式来识别分布外的示例。 例如,如果图像被预测为狗,但中间活动模式在某种程度上与网络在训练期间看到的其他狗图像的活动模式不同,那么这就是 OOD 示例的有力指标。这有效地使我们能够检测网络做出的预测与其到达该预测的路径之间的不一致。

使用Gram矩阵描述中间特征表示。 为了描述激活路径,我们需要描述中间特征表示,并且作为描述这些表示的代理,我们使用格拉姆矩阵,因为它们不仅描述各个通道的激活,还总结通道之间的成对相互作用。另外,通过简单地将每个值与其在训练数据上观察到的各自范围进行比较,就可以识别出 Gram 矩阵中的异常情况。

(四)研究成果

通过 Gram 矩阵表征活动模式并识别 Gram 矩阵值中的异常可以产生较高的 OOD 检测率。

这个方法的优势在于:

  • 通过简单地将每个值与其在训练数据上观察到的各自范围进行比较,就可以识别出 Gram 矩阵中的异常情况。
  • 可以与任何预先训练的 softmax 分类器一起使用,既不需要访问 OOD 数据来微调超参数,也不需要访问 OOD 数据来推断参数。
  • 我们凭经验证明了跨各种架构和视觉数据集的适用性,并且对于检测远不分布示例的重要且令人惊讶的艰巨任务,它通常表现优于或等于最先进的 OOD 检测方法(包括那些假设可以访问 OOD 示例)。

二、模型细节

一种不需要访问任何 OOD 示例、不引入需要调整的超参数并且跨架构工作的方法。

Gram 矩阵可用于计算成对特征相关性,并且通常在 DNN 中用于编码纹理和图案等风格属性(Gatys 等人,2016)。我们扩展这些矩阵,如下所述,然后使用它们来计算网络多层特征相关性的类条件边界。从预先训练的网络开始,我们仅在训练集上计算这些边界,然后在测试时使用它们来有效地区分分布内样本和分布外样本。与其他 SOTA 算法不同,我们不需要"查看"任何分布外的样本来调整任何参数;唯一需要调整的是归一化因子,我们使用(分布内)测试集的随机选择的验证分区来计算该因子。

(一)符号定义

考虑的深度卷积网络有 L L L 层,第 l l l 层有 n l n_l nl 个通道,考虑 ∑ 1 < = l < = L n l ∗ ( n l + 1 ) 2 \sum_{1<=l<=L}\frac{n_l ∗(n_l +1)}{2} ∑1<=l<=L2nl∗(nl+1) 对特征图之间的特征共现。

  • F l ( D ) F_l(D) Fl(D):输入图像D的第l层特征图,存储在维度为 n l × p l n_l × p_l nl×pl 的矩阵中,其中 n l n_l nl 是第 l l l 层的通道数, p l p_l pl(每个通道的像素数)是特征图的高度乘以宽度。
  • D c , f ( D ) D_c , f (D) Dc,f(D): 输入图像 D 的预测类别
  • T r Tr Tr:所有训练示例的集合
  • V a Va Va:所有验证示例的集合。随机选择训练中未使用的 10% 的示例作为验证示例。

所有测试示例的集合与平常一样与 Tr 和 Va 不相交。并且假设只有测试集可能包含分布外示例。

(二)Gram 矩阵和高阶 Gram 矩阵

计算第 l l l层活动的Gram 矩阵d:( F l F_l Fl是之前定义的 n l × p l n_l × p_l nl×pl 矩阵。) G l = F l F l T G_l=F_lF_l^T Gl=FlFlT

计算具有更突出的特征图激活的高阶Gram 矩阵:
G l p = ( F l p F l p T ) 1 p G_l^p=(F_l^p{F_l^p}^T)^{\frac{1}{p}} Glp=(FlpFlpT)p1

(三)预处理

预处理计算特定于类别的相关性的最小值和最大值:

(四)计算分层偏差

给定 NS 特征相关性的特定于类的最小值和最大值,我们可以计算测试样本与训练时看到的图像相对于每一层的偏差。为了考虑值的范围,我们将偏差计算为相对于特征共现的最大值或最小值的百分比变化;观察到的相关值与训练期间观察到的最小和最大相关值的偏差可以计算为:

测试图像相对于给定层 l l l的偏差是相对于每个 Σ p ∈ P 1 2 n l ( n l + 1 ) Σ_{p∈P}\frac{1}{2}n_l(n_l + 1) Σp∈P21nl(nl+1) 相关值的偏差总和:

(五)测试图像的总偏差

测试图像的总偏差通过取分层偏差的总和来计算。然而,层向偏差的规模随着每一层的变化而变化,具体取决于层中的通道数、每个通道的像素数以及层中包含的语义信息。因此,我们将偏差归一化。

此外,我们可以通过将上述项除以 MSP 来考虑最大 softmax 概率 (MSP)。在某些情况下,这会略微提高检测率。

(六)阈值

作为标准,用于区分分布外数据和分布内数据的阈值 τ 计算为测试数据总偏差的第 95 个百分位数 (Δ(D) )。换句话说,计算阈值使得95%的测试样例的偏差小于阈值τ;基于阈值的判别器为:

(七)计算复杂度

对于单个示例,提取上对角线元素需要 O ( Σ l n l ( n l + 1 ) 2 ) O( Σ_l \frac{n_l (n_l +1)}{2}) O(Σl2nl(nl+1)) 。因此,偏差的预处理和测试时间计算都是通道数量的二次方。为了减少计算时间并使其与通道数量呈线性关系,我们实际上可以基于行总和而不是单个元素来计算偏差。

(八)与 Mahalanobis 检测的关系

共同点:两种算法都根据类条件分层偏差计算总偏差:

区别:

  • Mahalanobis 算法使用通道均值作为分层激活 Fl 的描述,我们使用高阶 Gram 矩阵作为 Fl 的(更紧密耦合)描述。
  • 计算缩放值和分层偏差的方式不同。

三、实验

(一)实验配置

  • 模型:DenseNet 和 ResNet
  • 数据集:各种计算机视觉基准数据集(例如:CIFAR-10、CIFAR-100、SVHN、TinyImageNet、LSUN 和 iSUN)
    • 在 CIFAR-10、CIFAR-100 数据集上训练的 ResNet34 和 DenseNet3 模型,分布外数据集为:TinyImagenet、LSUN 、SVHN和 iSUN。
    • 在 SVHN 数据集上训练的 ResNet34 和 DenseNet3 模型,分布外数据集为:TinyImagenet、LSUN 、CIFAR-10 和 iSUN。
  • 指标:
    • TNR@95TPR:当真阳性率 (TPR) 高达 95% 时,正确识别 OOD(负)示例的概率
    • 检测精度:区分分布内和分布外示例时在所有可能阈值上的最大可能分类精度。如果为分布内示例分配较高分数,即为: m a x τ 0.5 P i n ( f ( x ) ≥ τ ) + 0.5 P o u t ( f ( x ) < τ ) max_τ {0.5P_{in}(f (x) ≥ τ ) + 0.5P_{out}(f (x) < τ )} maxτ0.5Pin(f(x)≥τ)+0.5Pout(f(x)<τ);如果为分布内示例分配较高分数,即为: m a x τ 0.5 P i n ( f ( x ) ≤ τ ) + 0.5 P o u t ( f ( x ) > τ ) max_τ {0.5P_{in}(f (x) ≤τ ) + 0.5P_{out}(f (x)> τ )} maxτ0.5Pin(f(x)≤τ)+0.5Pout(f(x)>τ)。
    • AUROC:TPR 与 FPR 图下面积的度量。例如,对于那些为分布内示例分配较高分数的方法,这测量了 OOD 示例比分布内示例分配较低分数的概率。

(二)实验结果

表中显示了模型架构和训练数据集的所有组合的 OOD 检测性能比较。 ODIN 的超参数以及 Mahalanobis 的超参数和参数是使用 OOD 数据集的随机样本进行调整的。

  • 在总共 32 种组合中,作者所提出的方法在其中 22 种中优于之前的竞争方法, 7 场比赛达到标准杆,其中 3 场比赛取得第二高成绩。
  • 如果使用 FGSM 对抗性示例而不是真实的 OOD 示例对 Mahalanobis 和 ODIN 算法的超参数和/或参数进行微调,则它们的性能会下降。

(三)消融实验

  • Q1 如果考虑严格对角元素或严格非对角元素而不是完整的Gram格拉姆矩阵会怎样?
  • Q2 如果偏差是根据平均值而不是极值计算的,会发生什么?
  • Q3 如果我们在聚合时不对分层偏差进行归一化,会发生什么情况?

为了回答Q1-Q3,作者进行了12个实验:Q1的3个选择×Q2的2个选择×Q3的2个选择。研究结果发现,虽然没有一条规则是不被例外打破的,但我们提出的组合------即使用完整的 Gram 矩阵、使用最小/最大度量以及使用归一化,通常比我们尝试过的任何其他组合都更稳健。

在回答 Q4 和 Q5 时,我们考虑通过回答 Q1-Q3 确定的最稳健的设置。

  • Q4 哪些层表示最有用?

    • 较低级别的表示在区分分布内和分布外数据集方面提供了更多信息。
    • Cifar-100 的高级表示和低级表示之间的检测能力差异比 Cifar-10 更大。
  • Q5 哪些阶的 Gram 矩阵最有用?

    • 高阶 Gram 矩阵在区分分布内和分布外方面提供更多信息
    • 忽略阶数大于 4 时的变化,我们发现 TNR @ 95TPR 随着阶数的增加而增加,最终饱和。

四、局限性和未来的工作

(一)近分布异常值

近分布异常值与远分布异常值的区分: 遵循 Hendrycks 等人的惯例,CIFAR10 与 CIFAR100 任务可以被视为近分布异常值,其余任务视为远分布异常值。然而,近分布异常值和远分布异常值们之间的区别并没有明确定义。 "Near-OOD"往往隐含地用来指代那些与训练集非常相似的示例,如果不了解分布内示例的结构,就不可能检测到它们。

研究现状:

  • 传统上,OOD 检测算法是通过考虑远分布离群值来评估的。并且,由于提出一种通用算法来检测这些远离分布的例子一直具有挑战性,促使早期的论文对远离分布的例子的来源做出假设。
  • 检测近分布异常值的任务比检测远分布异常值更具挑战性。

本文的方法也是在检测远分布分类器,并且与几乎所有其他当前远 OOD 检测器一样,它对于近 OOD 示例表现不佳。

(二)改进的 δl

高阶 Gram 矩阵估计与改进的 δl 估计相结合,将来可能有助于获得更好的结果。比如说均值偏差在某些特定情况下会有优势:对于ResNet和DenseNet结构,考虑偏离均值可将SVHN vs CIFAR-10任务的TNR@TPR95提高到94%。

(三)隐式置信度预测

softmax 预测(使用 OE 训练时)和分层偏差包含互斥的信息,此外,使用经过异常值暴露训练的网络的度量与使用经过交叉熵损失训练的网络获得的结果相当。鉴于使用内部特征表示可靠地检测 OOD 示例而不对数据源做出任何假设的可行性已被证明,未来一个自然的研究问题是训练程序和/或网络架构的修改是否可以隐式产生对异常更敏感的可靠置信度估计在中间特征表示中。

参考:
格拉姆矩阵(Gram matrix)详细解读

相关推荐
浊酒南街6 分钟前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.9-4.10
人工智能·深度学习·神经网络·cnn
懒惰才能让科技进步27 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Ni-Guvara41 分钟前
函数对象笔记
c++·算法
Chef_Chen1 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
泉崎1 小时前
11.7比赛总结
数据结构·算法
你好helloworld1 小时前
滑动窗口最大值
数据结构·算法·leetcode
孙同学要努力2 小时前
《深度学习》——深度学习基础知识(全连接神经网络)
人工智能·深度学习·神经网络
AI街潜水的八角2 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
白榆maple2 小时前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少2 小时前
数据结构——线性表与链表
数据结构·c++·算法