[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised

本文主要是介绍[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码地址:https://github.com/donggong1/memae-anomaly-detection

问题提出

''It has been observed that sometimes the autoencoder “generalizes” so well that it can also reconstruct anomalies well, leading to the miss detection of anomalies ‘’

“The assumption that anomaly incurs higher reconstruction error might be somehow questionable since there are no training samples for anomalies and the reconstruction behavior for anomaly inputs should be unpredictable."

当前基于reconstruction error的方法,因为ae存在的泛化性能,导致anomaly data也可能具有较小的重构损失,检测效果较差。

问题解决

  • 通过memory机制改善autoencoder

在训练过程中利用训练样本更新一个memory bank,该memory bank用来表示normal样本的prototype。测试过程中,memory bank固定,对某一个测试样本搜索一些prototypes并加权求和,代表该测试样本,并进行重构误差计算。(因为是利用normal prototype进行重构,因此对于异常样本,重构损失肯定会增加

  • attention based memory addressing来寻找most relevant items in memory bank
  • hard shrinkage operator to induce sparsity of memory addressing weights

模型结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80zIWhcX-1631793091790)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916185940401.png)]

  • encoder
    f e : X → Z z = f e ( x ; θ e ) f_e : X \rightarrow Z \\ z = f_e(x;\theta_e) fe:XZz=fe(x;θe)
    z既是x的表征,同时也作为query,在memory bank中搜索最相关的prototype

  • decoder
    x ^ = f d ( z ^ ; θ d ) \hat{x}=f_d(\hat{z};\theta_d) x^=fd(z^;θd)
    其中 z ^ \hat{z} z^是相关prototype经过加权求和所得的表征。

  • memory module

    包含了memory bank用来存储prototype和一个attention-based addressing operator用来计算权重。

    M ∈ R N × C M \in R^{N \times C } MRN×C表示memory bank,也就是保留有N个prototypes,则
    z ^ = ∑ i N w i m i \hat{z} = \sum_i^Nw_im_i z^=iNwimi
    其中权重由encode z经过attention获得:

    利用memory item与query(z)的相似度求权重:
    w i = e x p ( d ( z , m i ) ) ∑ i N e x p ( d ( z , m j ) ) w_i = \frac{exp(d(z,m_i))}{\sum_i^Nexp(d(z,m_j))} wi=iNexp(d(z,mj))exp(d(z,mi))
    其中相似度度量是通过余弦相似度获得。

论文中提到这样的memory module带来的优势如下:

  • 在训练阶段,模型限制retrieve的memory items尽可能少,以此来有效利用memory items,使得prototype最具有代表性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKo3RVCi-1631793091792)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916192722800.png)]

论文展示了模型中的prototype解码之后的图片,可以看到较能代表训练数据

  • 在测试阶段,模型对normal样本可以正常reconstruct,但是对于异常样本,因为memory construct的表征 z ^ \hat{z} z^是正常数据的加权求和,因此重构得到的图片也会接近训练样本,导致重构误差较大。如下图,可以看到当输入一个异常样本,重构的图片在提出的模型下会很接近正常样本。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHUrIBB8-1631793091793)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916193046517.png)]

  • hard shrinkage for sparse addressing

    文章中提到,如果对memory的权重没有限制的话,一个较复杂的加权和仍然可能使得异常样本重构误差较小,因此期望限制所利用的memory items,利用hard shrinkage operation来增加w的稀疏性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyMTJH1v-1631793091794)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916193938004.png)]

​ 这样的非连续操无法进行反向传播,因此考虑利用一个Relu激活函数:

在这里插入图片描述

​ 实际的操作将阈值设定为[1/N , 3/N]之间,再对操作后的权重进行归一化。

​ 在训练过程中,除了这样一个hard shrinkage操作,论文还提出可以最小化 w ^ i \hat{w}_i w^i的熵,以此来提升其稀疏性。
E ( w ^ ) = ∑ i T − w i ^ l o g ( w i ^ ) E(\hat{w}) = \sum_i^T-\hat{w_i}log(\hat{w_i}) E(w^)=iTwi^log(wi^)
​ 整体损失函数如下,前一部分为重构损失(L2范数)
L = 1 T ∑ t T ( R ( x , x ^ ) + α E ( w ^ ) ) L = \frac{1}{T}\sum_t^T(R(x,\hat{x})+\alpha E(\hat{w})) L=T1tT(R(x,x^)+αE(w^))

实验部分

论文的实验对图像、视频以及文本类数据进行了大量的实验,实验结果如下:

  • 图像

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7drcUZun-1631793091796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194843613.png)]

  • 视频

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTWJgi4y-1631793091796)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194922229.png)]

  • 文本(KDDCUP)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcscjCDT-1631793091797)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210916194957397.png)]

这篇关于[异常检测]Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是