Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly D

背景和问题:用autoencoder来检测异常主要是通过在正常数据上进行训练,然后用真实的数据来测试。这样做是基于假设:在正常数据中训练后得到模型,然后将异常数据输入模型,异常数据会出现较大的重建误差而不能重建,正常数据重建误差小可以得到重建数据。作者发现在现实情况中,有些异常的组成非常像正常数据,甚至有些异常输入模型后重建误差并不特别大,这样异常就得到了重建。因此如何解决这一问题呢?

方法:在encoder后加入一个memory module,该模块将encoder输出作为输入,从memory module中检索出与之最相似的行向量作为输出到decoder中。如何得到memory module中的矩阵呢?因为在正常数据中训练,所以训练时encoder输出是训练数据的典型特征,将该典型特征作为memory module中的矩阵。由于训练时是分批次的,所以可以更新该矩阵。

        训练后,假设来了一批数据,正常数据从memory module中挑出与之最相似的行向量来获得重建,重建误差自己就小;异常数据也从memory module中挑出与之最相似的行向量来重建,由于memory module记录的都是正常数据的典型特征,找出与异常最相似的特征后重建的数据必然是正常数据,这就导致了重建误差大,这样就把异常检测出来了。

       但是,这样还是会出现新的问题:一些异常还是可以通过将memory module中的矩阵的小元素进行组合而得以重建,因此要将memory module中的小元素设置为0即硬压缩(hard shrinkage operation,如下截图),这样就可以将小元素组合的可能性排除掉。

硬压缩采用的是分段函数,但分段函数不容易进行反向传播。因此,使用ReLU激活函数作为硬压缩操作:

压缩后,对进行了标准化:

训练策略:重建误差肯定是要有的

为进一步促进的稀疏性,并考虑到大于0且其一范数和为1,所以最小化其熵:。综合一下,就是将这两个损失加起来作为最后的训练目标函数。

图片数据集:mnist和cifar10.

视频数据集:我主要做图片分析,所以这个视频并不是很关注。

效果:

作者分析认为手机数字由于场景简单,所以效果好。

个人观点:这种检测方法,需要首先将异常和正常分开,然后再在正常数据中进行训练,训练后再把现实混杂的数据进行检测。这样做的一个问题是首先将异常和正常完全彻底分开,既然已经能够分开也就是能够区别出异常了,又这样号称无监督再检测,这里个人认为有矛盾。现实本就是混杂的,得到完全正常的数据非常难,所以作者采用的都是人造的数据集,这样保证了数据的纯正。

另:文章只指出了具体的思路和方法,一些细节并没有进行说明,我后续再补充。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值