惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
博客园_首页
罗磊的独立博客
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
Last Week in AI
Last Week in AI
D
DataBreaches.Net
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
D
Docker
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
H
Help Net Security
T
The Blog of Author Tim Ferriss

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
异常检测 OCGAN
Yiwei Zhang · 2023-12-19 · via 又见苍岚

深度学习实现异常检测时常用重构的方法,但是过程中会隐含地学习到对检测不利的内容,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} $$

这里 $P_x$是 in-class 样本的分布。

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://www.zywvvd.com/notes/study/deep-learning/anomaly-detection/ocgan/ocgan/