小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
本文主要调研一下gan在异常检测的方法。
训练阶段:
可以通过网络仅仅学习负样本(正常数据)的数据分布,得到的模型G只能生成或者重建正常数据。
测试阶段:
使用测试样本输入训练好的模型G,如果G经过重建后输出和输入一样或者接近,表明测试的是正常数据,否则是异常数据。
模型G的选择:
一个重建能力或者学习数据分布能力较好的生成模型,例如GAN或者VAE,甚至encoder-decoder。
这一块说明图像上的异常检测 用GAN和自编码器的本质实际一致的。都是经过一种重构。
第一篇把gan用于异常检测。
AnoGAN ( Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery )
训练:和普通的gan一样,从z出发生成图像。
测试:
如果想判断一个图像是不是异常,思想是利用z重构出一个一样的图像。 所以:随机采样一个高斯噪声向量z,想要通过已经训练好的G生成一幅和测试图像x对应的正常图像G(z)。G的参数是固定的,它只能生成落在正常数据分布的图像。但此时仍需进行训练,把z看成待更新的参数,通过比较G(z)和x的差异去更新,从而生成一个与x尽可能相似、理想对应的正常图像。
所以损失:一个是和原始图像的差距,一个是判别器判别出来的差距。
更新z就通过2个的加权和去更新。
分数也通过loss大小衡量。
一个很明显的缺陷::每次一个新的图像的异常检测都需要不断的去更新Z!!耗时间。
针对上述缺陷的改进:
EFFICIENT GAN-BASED ANOMALY DETECTION
红框中的编码器,避免了去更新参数z的过程。因为我们现在直接编码得到了和x对应的z。
测试时,判断图像的异常与否的分值计算方法,可选择可AnoGAN基本一样的方法。
Adversarially Learned Anomaly Detection
第二种方法的加强版,也是基于BiGAN,并且在稳定训练上做了些功夫。如下所示,
中间红框部分就是论文2.采用了提升稳定性的方法:
Dxx判别器的思想来自:C. Li, H. Liu, C. Chen, Y. Pu, L. Chen, R. Henao, and L. Carin,“Alice: Towards understanding adversarial learning for join distribution matching,” in Advances in Neural Informatio Processing Systems 30, 2017, pp. 5495–5503
检测时的方法:
不是直接用的判别器的损失,用的是判别器提取出的特征的损失,即判别器的倒数第二层。
GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training
训练时,约束正常的数据编码得到潜在空间表示z1,和对z1解码、再编码得到的z2,差距不会特别大,理想应该是一样的。
所以训练好后,用正常样本训练好的 G只能重建正常数据分布,一旦用于从未见过的异常样本编码、解码、再经历编码得到的潜在空间Z差距是大的。
当两次编码得到的潜在空间差距大于一定阈值的时候,就判定样本是异常样本。
只在正常的样本上训练。
核心结构
1.Adversarial Auto-Encoders (AAE)
在AE的基础上加对抗学习的优势在于,控制了隐空间的语义也要相同。直接的AE只是l2 loss
训练:
1.feature matching loss for adversarial learning:
在判别器部分,不是用output去更新D的参数,而是用上一层,特征匹配差距更新参数。前面提到的几个都是这样做的。
(因为特征间的差距可以提高稳定性)
Contextual Loss:
Ladv足够去欺骗D了。但是针对输入的x,无法学习到上下文信息。
Encoder Loss:
上面介绍的两个损失可以迫使生成器生成不仅逼真的图像而且上下文相关的信息。这个的目的是 让生成器学习到的编码后的特征和 原始图像的 编码的特征相近。 通过这样,生成器就学会了如何 去 编码正常的样本。(也就是AE里的decoder学会如何编码正常的样本)
总的loss:
综上:
Adversarial Loss 用于特征间的差距可以提高稳定性,语义上的一致性。
Contextual Loss: 上下文的一致性
Encoder Loss:这个的目的是 让生成器学习到的编码后的特征和 原始图像的 编码的特征相近
参考