GANomaly: Semi-Supervised AnomalyDetection via Adversarial Training GANomaly:基于对抗训练的半监督异常检测

本文主要是介绍GANomaly: Semi-Supervised AnomalyDetection via Adversarial Training GANomaly:基于对抗训练的半监督异常检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Samet Akcay 1, Amir Atapour-Abarghouei 1,和Toby P. breckon 1,2英国杜伦大学计算机科学系

术语:exemplary data 示例数据、within this challenging context 在这种具有挑战性的背景下、

Abstract

我们引入了一种新的异常检测模型,通过使用条件生成对抗网络,联合学习高维图像空间的生成和潜在空间的推断。在生成器网络中使用编码器-解码器-编码器子网络使模型能够将输入图像映射到低维向量,然后用于重建生成的输出图像。附加编码器网络的使用将此生成的图像映射到其潜在表示。训练过程中最小化这些图像与潜在向量之间的距离,助于学习正态样本的数据分布。在推断时,与学习到的数据分布的更大距离度量表明该分布是异常。对来自不同领域的几个基准数据集的实验表明,模型的有效性和优于先前最先进的方法。

1 Introduction

监督方法在很大程度上依赖于大型的标记数据集。我们的评估中考虑的一个具体应用是航空或边境安全的x射线筛查。模型在正常样本(a)上进行训练,并在正常和异常样本(b)上进行测试。当模型的输出大于某个阈值a (x) > φ时,就会检测到异常

如上图所示,异常检测任务的正式问题定义如下:给定一个数据集D,其中包含大量用于训练的正常样本X,以及相对较少的用于测试的异常样本X^,对模型f的参数θ进行优化。f在训练过程中学习正常样本的数据分布pX,在测试过程中通过输出异常分数A(x)将异常样本识别为离群值,其中x为给定的测试示例。较大的A(x)表示测试图像中可能存在异常,因为f在训练过程中学习最小化输出分数。A(x)具有一般性,它可以检测出不符合pX的不可见异常

各种应用领域中的异常检测模型[2-4,23,39],相当多的工作对文献中的方法进行了分类[9,19,28,29,33]。生成对抗网络(GAN)已成为跨无监督和半监督问题的领先方法。正如[23]中所述,对抗训练也在最近的异常检测工作中被采用。

  • 使用单色图像作为我们方法的输入,仅从正常(非异常)训练示例集中提取
  • 我们的方法不需要两阶段的训练,并且对于模型训练和后来的推理(运行时测试)都是有效的。
  • 关键新颖之处在于我们在编码器-解码器-编码器管道中使用对抗性自编码器,捕获图像和潜在向量空间中的训练数据分布。(实际上只基于正常的训练数据示例)

本文主要贡献:

  • 半监督异常检测:在编码器-解码器-编码器管道中的新型对抗性自编码器,捕获图像和潜在向量空间中的训练数据分布,产生优于当代基于GAN和传统基于自编码器的方法的结果。
  • 功效:一种高效和新颖的异常检测方法,在统计和计算上都有更好的表现。
  • 可再现性:简单有效的算法,使结果可通过code公开复制。

Our Approach: GANomaly

GAN

这项工作最初的主要目标是产生逼真的图像。想法是两个网络(生成器和鉴别器)在训练过程中相互竞争,前者试图生成图像,而后者决定生成的图像是真还是假。

  • 生成器:是一个类似解码器的网络,它从潜在空间中学习输入数据的分布。这里的主要目标是对捕获原始真实数据分布的高维数据进行建模。
  • 鉴别器网络通常有一个经典的分类架构,读取输入图像,并确定其有效性(即真假)。

为了解决训练不稳定性问题,已经提出了几种经验方法[7,38],著名研究是Radford和Chintala[34]的深度卷积GAN (Deep Convolutional GAN, DCGAN),他们通过去除完全连接层,在整个网络中使用卷积层和批处理归一化,引入了一个全卷积生成网络。通过使用Wasserstein损失,GAN的训练性能得到进一步提高。

Adversarial Auto-Encoders (AAE)

  • 由两个子网络组成,即编码器和解码器。
  • 该结构将输入映射到潜在空间,并重新映射回输入数据空间,称为重建。
  • 训练具有对抗设置的自编码器不仅可以更好地重建,而且可以控制潜在空间。

实验设置

有一个大的训练数据集D,只包含M个正常图像较小的测试数据集        且给定数据集

  1. 首先对D建模以学习其流形
  2. 在推理阶段检测D^中的异常样本作为异常值
  3. 模型f学习正态数据分布并最小化输出异常分数A(x)
  4. 对于给定的测试图像^x, a (^x)的高异常分数表示图像中可能存在异常
  5. 评价标准为分数的阈值(φ),其中A(^x) > φ表示异常

实验方法概述

包含两个编码器,一个解码器和鉴别器网络,在三个子网络中使用。

  1. 自编码器网络G。作为模型的生成器部分,学习输入数据表示,并分别通过使用编码器和解码器网络重建输入图像。
  2. 编码器网络E。对网络g重建的图像^x进行压缩。子网络E通过参数化明确地学习最小化距离。
  3. 鉴别器网络D。目标是将输入x和输出^x分别分类为真或假。该子网是DCGAN中引入的标准鉴别器网络。

模型训练

组合三个损失函数来制定目标函数,每个损失函数都优化单个子网络。

  1. Adversarial Loss 敌对损失:
  2. Contextual Loss 上下文损失:
  3. Encoder Loss 编码器损失:为输入瓶颈特征,为生成图像的编码特征。

生成器的目标函数:。1、2损失可以强制生成器生成真实且符合上下文的图像。

 模型检验

  1. 对于测试样本x^的异常分数定义:
  2. 特征缩放异常分数控制在[0,1]范围内:,最终会产生一个异常得分向量S',用于测试集D^的最后评估

所用数据集

  • MNIST。

        将一个类别视为异常,而将其余类别视为正常类别。我们总共有十组数据,每组数据都将个别数字视为异常。

  • CIFAR10。

        将一个类视为异常,其余类视为正常。然后,我们通过在后一种标签上训练模型来检测从前一类中提取的异常值。

  • University Baggage Anomaly Dataset | (UBA) 大学行李异常数据集。
  • Full Firearm vs. Operational Benign | (FFOB) 。

对以上4类数据集进行训练集和测试集分割的步骤如下:对正常样本进行分割,分别将80%和20%的样本视为训练集和测试集的一部分。然后我们将MNIST调整为32 ×32,UBA和FFOB分别调整为64 × 64。

我们的对抗训练也是基于标准的DCGAN方法进行一致的比较。因此,我们的目标是展示我们的多网络架构的优势,而不使用任何技巧来改进GAN训练

还与传统的变分自编码器架构(VAE)进行了比较,显示我们的多网络架构的优势。

Results

knife的性能相对较低可能是因为它的形状简单,导致过拟合,从而导致高误报。就整体性能而言,我们的方法优于其他模型,在UBA和FFOB数据集上的AUC分别为0.666和0.882。

图5描述了超参数的选择最终如何影响模型的整体性能。

  • 在图5 (a)中,我们看到,对于具有异常数字2的MNIST数据集,当潜在向量z的大小为100时,可以实现最佳性能。图5 (b)展示了调整公式4中的损失函数对整体性能的影响。当wbce = 1, wrec = 50, wenc = 1时,模型AUC最高。我们根据经验观察到其余数据集的调优模式相同。

  • 图6提供了推理阶段(a)的异常分数直方图和从鉴别器网络的最后一层卷积提取的特征的t-SNE可视化(b)。这两幅图都显示了潜在向量z和特征f(:)空间之间的明显分离。

  • 表2说明了基于GAN的模型的运行时性能。与其他方法相比,AnoGAN[39]的计算成本相当高,因为每个示例都需要对潜在向量进行优化。对于EGBAD[40],我们报告了与原始论文相似的运行时性能。另一方面,我们的方法实现了最高的运行时性能。UBA和FFOB数据集的运行时性能与MNIST相当,尽管它们的图像和网络大小是MNIST的两倍。

  • 真实图像和虚假图像,它们分别是我们模型的输入和输出。对于MNIST数据中的2类,MNIST数据集相对来说没有挑战性,并且模型学习了足够的信息,能够生成在训练期间未见过的样本。
  • 尽管模型无法区分图像空间中的异常,但潜在向量空间中的距离为检测异常提供了足够的细节。图7 (b-c)说明该模型无法产生异常对象。
  • 总的来说,这些结果表明,我们的方法在统计和计算上都优于领先的最先进的方法。

Conclusion

  1. 引入了一种新的编码器-解码器-编码器架构模型。用于通过对抗性训练框架实现的一般异常检测。
  2. 在不同复杂性的数据集基准和x射线安全筛查的操作异常检测环境中进行的实验表明,所提出的方法优于当代最先进的基于GAN的异常检测方法和传统的基于自编码器的异常检测方法,具有对任何异常检测任务的泛化能力。

这篇关于GANomaly: Semi-Supervised AnomalyDetection via Adversarial Training GANomaly:基于对抗训练的半监督异常检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348985

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon