本文最后更新于:2024年1月14日 晚上

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

简介

是在 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 个行向量的矩阵$M\in R^{N\times 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})=\frac1T\sum_{t=1}^T\left(R\Big(\mathbf{x}^t,\mathbf{\hat{x}}^t\Big)+\alpha E\Big(\mathbf{\hat{w}}^t\Big)\right) $$

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

参考资料



文章链接:
https://www.zywvvd.com/notes/study/deep-learning/anomaly-detection/memae/memae/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

记忆自编码器 MemAE (Memory AutoEncoder)
https://www.zywvvd.com/notes/study/deep-learning/anomaly-detection/memae/memae/
作者
Yiwei Zhang
发布于
2023年12月19日
许可协议