记忆自编码器 MemAE (Memory AutoEncoder)

2023-12-26 10:24:58 浏览数 (2)

记忆自编码器是对深度自编码器的改进,提高对异常数据的敏感程度,即两极分化正常样本和异常样本的重构误差,本文记录相关内容。

简介

是在 AE 上的改进,主要目的:

  • 异常检测(检测图像异常区域)
  • 特征提取(提取指定的特征)

基本原理是运用记忆模块调整模型的编码行为,在不过度影响模型拟合正常数据的同时限制其拟合能力。

原始论文

模型

  1. 编码器(Encoder)
z=f_e(x;theta_e)

theta_e 表示 Encoder 网络的权重,f_e(x;theta_e) 表示对输入变量 x 进行编码操作,降维输入图像张量

  1. 记忆模块(Memory Module)
  2. 解码器(Decoder)
hat{x}=f_d(hat{z};theta_d)

theta_d 表示 Decoder 网络的权重,f_d(hat{z};theta_d) 表示对输入变量hat{z} 进行解码操作,将数据还原成图像

记忆模块

memory 为一个包含 N 个行向量的矩阵Min R^{Ntimes C} , 每个行向量m_i 表示 M 记忆模块的行。

记忆模块的计算流程如下:

  1. 编码器输出张量 z 和记忆矩阵 M 内积和 softmax 归一化,输出 omega

$$ omega=frac{exp(z*m_i)}{sum_{i=1}^Nz*m_i} $$

说明: 论文公布的源代码里面没有使用论文描述的余弦相似度,而是输入值和记忆模块内积,再进行 softmax。作者的回答是使用余弦相似度,导致权重全都趋近 0,所以作者认为余弦相似度不适合该模型,所以改用矩阵内积。所以这里把计算公式修改成与源代码一致。 https://github.com/donggong1/memae-anomaly-detection/issues/12#issuecomment-659951371

  1. 利用设定阈值入,对omega 进行稀疏化,低于阈值入的元素置 0
hat{omega}_i=frac{max(omega_i-lambda,0)omega_i}{|omega_i-lambda| varepsilon}

记忆模块的损失函数:

$$ E(hat{omega^t})=sum_{i=1}^T-hat{omega}*log(hat{omega_i}) $$

损失函数是个针对记忆模块 1 的计算结果权重的信息熵,增加omega 的稀疏性,限制特征的个数,实现降维的同时,避免不重要信息的影响。

损失函数

熵函数取最小,提高记忆模块的稀疏性,增加模型的约束条件,避免过拟合,类似正则化项

$$ L(theta_e,theta_d,mathbf{M})=frac1Tsum_{t=1}^Tleft(RBig(mathbf{x}^t,mathbf{hat{x}}^tBig) alpha EBig(mathbf{hat{w}}^tBig)right) $$

其中R= | x- x|_2^2 表示重构误差,超参数alpha 原文作者选择的是 0.0002

参考资料

  • Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder (MemAE) for Unsupervised Anomaly Detection
  • https://crazyn2.github.io/post/memae/

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

0 人点赞