前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >异常检测 OCGAN

异常检测 OCGAN

作者头像
为为为什么
发布2023-12-20 10:06:48
1900
发布2023-12-20 10:06:48
举报
文章被收录于专栏:又见苍岚又见苍岚

深度学习实现异常检测时常用重构的方法,但是过程中会隐含地学习到对检测不利的内容,OCGAN 尝试克服该问题。

简介

当前的方法认为latent representation包含这in-class样本的信息,从而对于in-class样本,其reconstruction的效果好而out-of-class样本的则差,进而能达到检测异常的目的。

然而,这种假设并不总是有效的,该文章发现了此类现场并尝试解决。

问题复现

对于传统的 AE 模型,以手写数字辨识为例,对于简单的数字(如0,1),模型可以获得很高的准确率;但对于较为复杂的数字(如8),其检测的准确率会有所折扣。这是因为8的latent representation不仅仅包含了其自身的信息,还包含了其他数字(例如1,3,6,7)的信息。

因此哪怕仅用 8 训练的模型也可以重构一些其他数字

方法介绍

论文的方案是使用一个denoising auto-encoder来学出in-class的latent representation。论文的提出的方法可以直接限制latent space,让其只能表示in-class的信息。该方法包括一下几个部分:

  • 利用 tanh() 函数让latent space限制在(-1, 1)之间。
  • 训练一个discriminator让in-class样本的latent representation的分布接近与Uniform(-1, 1)。
  • 再训练一个discriminator让latent通过generator (decoder)生成的图片更加真实。
  • 使用一种基于gradient descent的技术来找出latent space中会让generator生成out-of-class样本的点,并把它们再传回网络中训练,使其能够生成in-class样本。

OCGAN由4部分组成:

  • 1个denoising auto-encoder
  • 2个discriminators
  • 1个classifier
Denoising auto-encoder

与普通的 auto-encoder 相比,denoising 版本更不容易 overfitting,模型的泛化能力更强。

同时,通过 tanh() 函数把 latent space 限制在了(-1, 1)^d(d是latent space的维度)。

这里的噪声采用的是零均值高斯白噪声,并取方差为2。那么对于输入图片x和噪音n,Loss的计算式为:

l_{\mathrm{MSE}}=||x-\mathrm{De}(\mathrm{En}(x+n))||_2^2
Latent Discriminator

我们期望 latent space上的任何一个样本透过生成器之后都能生成in-class样本,而不是仅仅局限于某一片区域。于是我们要限制latent space的分布是均匀的。

设计该判别器的目的就是为了让latent space接近均匀分布。

Discriminator有两种输入:

  • in-class样本的latent representation
  • 从均匀分布中生成的sample

判别器Loss如下

\begin{array}{rl}l_{\mathbf{latent}}=-(\mathbb{E}{s\sim\mathbb{U}(-1,1)}[\log D_l(s)]+\mathbb{E}{x\sim p_x}[\log(1-D_l(\operatorname{En}(x+n)))])\end{array}

这里

Discriminator要让D(s) 和 D(En(x+n)) 的差距变大,于是期待D(s)的值大而D(En(x+n))的值小。

我们让它和auto-encoder的网络一起训练:

\max_{\mathbf{En}}\min_{D_l}l_{\mathbf{latent}}

这里的max是指我们期待让encoder产生的latent space分布接近均匀分布,从而骗过discriminator(即让discriminator的loss变大)。

Visual Discriminator

我们希望从latent space上随机的sample,经过generator(decoder)之后,其重建图像能尽可能像真实的图片。

该 discriminator 的任务就是区分 real images 和 fake images, 其Loss如下:

\begin{array}{rcl}l_\mathrm{visual}=-(\mathbb{E}{s\sim\mathbb{U}(-1,1)}[\log D_v(\mathrm{De}(s))]+\mathbb{E}{x\sim p_l}[\log(1-D_v(x))])\end{array}

这里x是real images,s是latent space上的一个随机样本。

与latent discriminator类似,我们让它和atuto-encoder网络一起训练:

\max_\text{Dе}{ \min _ { D _ v }}l_{\text{visual}}

同样的,我们希望decoder生成的图像和真实图像越接近越好,从而骗过discriminator(即让其loss变大)。

Informative Mining

由于我们不可能把latent space上的点都采样一遍并丢进网络训练,很有可能latent space上存在我们训练时没有采样到的区域,在它们上的latent representation输入到decoder中并不能得到in-class的结果。论文中把这些不好的图片成为informative-negative samples。

或许降低latent space的维度我们有可能把l它遍历一遍,但这样又会导致latent representation包含的信息不够。

论文中提出的方法是主动找到这些不满足条件的区域,并把上面的samples丢到网络里训练,从而让该区域符合条件。对于generator,其输入是从该区域上产生的sample,而对于两个discriminators,其输入依然是latent space上的随机sample。

为了找到不符合要求的样本,我们需要一个classifier。我们首先从latent space上随机得到一堆samples,然后过一遍generator生成图片。classifier的任务就是评估这些图片的质量并根据其Loss来优化latent space。

个人认为是为了补足理论上空间分布过大采取的补救措施

Classifier

Classifier要区分两类:

  • positive: in-class 样本的重建图像
  • negative: 从latent space随机产生的样本送入generator得到的图像

它采用的cross entropy loss。注意其训练和generator和discriminators是分开的。

参考资料

文章链接: https://cloud.tencent.com/developer/article/2372746

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 问题复现
  • 方法介绍
    • Denoising auto-encoder
      • Latent Discriminator
        • Visual Discriminator
          • Informative Mining
            • Classifier
            • 参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档