记忆自编码器是对深度自编码器的改进,提高对异常数据的敏感程度,即两极分化正常样本和异常样本的重构误差,本文记录相关内容。
是在 AE 上的改进,主要目的:
基本原理是运用记忆模块调整模型的编码行为,在不过度影响模型拟合正常数据的同时限制其拟合能力。
\theta_e 表示 Encoder 网络的权重,f_e(x;\theta_e) 表示对输入变量 x 进行编码操作,降维输入图像张量
\theta_d 表示 Decoder 网络的权重,f_d(\hat{z};\theta_d) 表示对输入变量\hat{z} 进行解码操作,将数据还原成图像
memory 为一个包含 N 个行向量的矩阵M\in R^{N\times C} , 每个行向量m_i 表示 M 记忆模块的行。
记忆模块的计算流程如下:
$$ \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
记忆模块的损失函数:
$$ 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