Out-of-distribution Detection系列专栏(九)

目录

前言

Out-of-distribution detection in classifiers via generation

Motivation

Approach

Discussion


前言

本次专栏中继续介绍一种OOD样本的生成方法,在该篇文章中,作者将OOD样本划分成两大类别,也就是我们之前一直讲的ID流形之外的简单OOD样本与ID流形边缘的困难OOD样本。这两个概念就是源于本篇我们要介绍的文章。然后,文章的名字依旧非常长,甚至直白到很难给它一个合适的缩写。

Out-of-distribution detection in classifiers via generation

论文链接:https://arxiv.org/pdf/1910.04241.pdf

Motivation

在上一次的专栏中,我们介绍过一个生成OOD边缘样本的方法,而在本文中,作者更进一步,首先将OOD样本分成两类:其一是分布在ID数据流形之外的样本,其二是分布在ID数据流形边缘的样本。针对这两类OOD样本,作者分别提出了对应的生成方法,并结合ID数据和这些得到的OOD数据,训练一个二分类器,从而判断数据是否是OOD。通过这样直接分类的方法来提升OOD检测的能力就是本文想要实现的,而最大的贡献或者说难点就在于如何对应生成这两类样本。

上面的示意图展示了作者提到的两类OOD样本点分布状态:一类分布在ID数据流形之外,另一类分布在ID数据流形的边缘。下面四幅图是作者生成的真实数据集上两类样本的效果图:

 接下来,我们详细说明文章中如何生成这两类样本。

Approach

作者首先训练了一个自编码器。用h来表示编码器,它将输入图像映射到隐空间,得到特征向量,可以表示为:h:X\rightarrow Z。用g来表示解码器,它将隐空间向量映射为重构图像,可以表示为:g:Z\rightarrow \hat{X}

生成第一类OOD样本:

首先介绍如何获得第一类样本,也就是分布在ID数据流形之外的OOD数据。

对于任意的输入样本x,通过z=h(x)可以获得对应的特征向量,进一步利用\hat{x}=g(z)可以得到重构图像。这里,如果将输入图像沿着与z处梯度垂直的方向推出一段距离,那么得到的\tilde{x}将不在ID数据的流形上,这样我们就获得了第一类OOD数据。

J(x)=\frac{\partial g(z)}{\partial z}\mid_{z=h(x)}

在获得梯度方向后,我们要沿着与梯度方向垂直的方向去移动,也就是J(x)的零空间。零空间指的就是与J(x)垂直的向量构成的空间。文章中用N(x)来表示。对任意的v(x)\sim N(x),都可以使得输入图像远离ID数据流形:

\tilde{x}=x+\beta \cdot v(x)

生成第二类OOD样本:

作者使用马氏距离来衡量样本到ID数据分布的距离。对于任意的输入x,我们通过编码器h将其映射到特征空间或者叫做隐空间。另一方面,我们也可以获得所有训练的ID数据在隐空间的特征表示,从而计算出均值向量\hat{\mu_z}与特征的协方差矩阵\hat{\Sigma}_z,有了这两个参数,就可以计算任意输入样本到ID数据特征分布的马氏距离:

r^2=(h(x)-\hat{\mu}_z)^T\hat{\Sigma}_z^{-1}(h(x)-\hat{\mu}_z)

根据上述平方马氏距离,就可以判断一个特征向量是否远离ID数据的特征分布。从而,我们可以在空间Z中采样随机噪声,然后计算其与ID特征分布的马氏距离,若大于某个阈值,则为ID分布的边缘,对应生成的样本可以看作是OOD样本,也就是分布在ID数据边缘的样本。

训练分类器:

有了第一类OOD数据和第二类OOD数据,再结合原始的ID数据,我们可以很容易的训练一个二分类器,分类器输出的置信度结果可以用于计算AUROC和AUPR。下面给出作者在MNIST还有Fashion-MNIST上的实验结果:

 总之从实验结果来看,本文中提出的方法要比之前的好一些。

Discussion

通过这一次专栏以及上一期专栏,我们可以看到引入人工生成的OOD样本对于提升OOD检测的性能是有帮助的。另外,这两次专栏中提到的生成方法,最大的也是共同的缺陷就在于图像生成困难,在MNIST或者是Fashion-MNIST等小数据集上效果还不错,但是对于ImageNet或者是LSUN等大尺寸图像,就比较难以应用。可以考虑使用图像特征进行辅助判断,在下面的这篇文章中,作者就是从特征角度出发,很好的提升了OOD检测的效果,链接如下:

https://arxiv.org/pdf/2112.11648.pdf

### 关于Out-of-Distribution (OOD) 检测 #### OOD概念定义 在机器学习领域,尤其是深度学习中,模型通常被训练用于识别来自特定数据分布的样本。然而,在实际应用场景下,输入的数据可能并不遵循训练集中的分布模式。这些不遵循预期分布规律的新颖或者异常样例被称为Out-of-Distribution(OOD)[^1]。 #### 处理方法概述 为了有效应对OOD问题,研究人员提出了多种策略和技术来增强模型对于未知类别或异常情况下的鲁棒性和泛化能力: - **基于置信度的方法**:通过评估模型给出的概率分布特性(如熵),可以判断测试实例是否属于已知分类之外。当预测结果显示出较高的不确定性时,则认为该样本可能是OOD [^3]。 - **证据理论驱动的学习框架**:引入狄利克雷先验作为不确定性的表示形式,并调整网络结构使其能够显式地估计这种不确定性水平。这种方法允许区分高可信度的正常类成员与其他潜在的异常点 。 - **对比学习与自监督机制**:利用未标记的大规模数据集构建辅助任务,从而让特征提取器学会捕捉更广泛而稳定的语义信息,有助于提高对不同域间变化的适应力 [^2]。 #### PyTorch实现案例 针对上述提到的技术路线之一——基于置信度的OOD检测方案,下面提供了一个简单的Python代码片段展示如何计算并筛选出疑似OOD样本的过程: ```python import torch.nn.functional as F def detect_ood(logits, threshold=0.9): probs = F.softmax(logits, dim=-1) max_probs, _ = torch.max(probs, dim=-1) ood_mask = max_probs < threshold return ood_mask.cpu().numpy() ``` 此函数接收神经网络最后一层输出logits以及设定好的阈值参数threshold,默认情况下取值为0.9;返回布尔数组指示哪些位置对应着可能存在的OOD项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值