论文名称:Variational Autoencoder based Anomaly Detection using Reconstruction Probability
发表时间:2015.12 立即下载
[1] An, Jinwon, and Sungzoon Cho. “Variational autoencoder based anomaly detection using reconstruction probability.” Special Lecture on IE 2.1 (2015): 1-18.
提出基于 VAE 的异常检测算法,并说明其优点:与自动编码器和PCA相比,VAE的优势在于它提供了一个概率度量,而不是作为异常分数的重建误差,我们称之为重建概率。概率比重建误差更具原则性和客观性,不需要模型特定的阈值来判断异常。
可以用在自己论文中
Hawkins defined an anomaly as an observation which deviates so much from the other observations as to arouse suspicions that it was generated by a different mechanism[5].
使用正常数据进行训练,训练过程中 decoder 和 encoder 共同确定隐变量的参数(即多个正态分布的 σ \sigma σ 和 μ \mu μ)。对应图片中的
ϕ , θ ← \phi,\theta \leftarrow ϕ,θ← train a variational autoencoder using the normal dataset X
对于N个测试数据循环遍历,对于每个测试数据 x i x^i xi 操作如下:
对于每个测试数据 x i x^i xi,通过训练好的 VAE 模型得到 μ z ( i ) \mu_z{(i)} μz(i) 和 σ z ( i ) \sigma_z{(i)} σz(i)。
根据刚刚得到 μ z ( i ) \mu_z{(i)} μz(i) 和 σ z ( i ) \sigma_z{(i)} σz(i) 得到关于z的正态分布 N ( μ z ( i ) , σ z ( i ) ) N(\mu_z(i),\sigma_z(i)) N(μz(i),σz(i)) ,从中抽取样本 L。
对于抽取样本L中的每一个数据 z ( i , l ) z^{(i, l)} z(i,l),关于 l l l 的循环:
进行 decode 操作,得到 x ^ \hat x x^,这里可能是为了表示 μ ( l ) \mu (l) μ(l)、 σ ( l ) \sigma(l) σ(l) 与 x ^ ( i ) \hat x(i) x^(i) 的关系,记作 μ x ^ ( i , l ) \mu_{\hat x}{(i,l)} μx^(i,l) 和 σ x ^ ( i , l ) \sigma_{\hat x}{(i,l)} σx^(i,l)
循环结束后得到多个 μ x ^ ( i , l ) \mu_{\hat x}{(i,l)} μx^(i,l) 和 σ x ^ ( i , l ) \sigma_{\hat x}{(i,l)} σx^(i,l). 其实就是多个 x ^ \hat x x^
通过多个 x ^ i \hat x_i x^i 与训练好的 VAE 模型生成原来的测试数据 x i x_i xi,并计算重构概率(reconstruction probability)。
这里计算的重构概率是对 E q φ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] E_{q_φ(z|x)}[log p_\theta(x|z)] Eqφ(z∣x)[logpθ(x∣z)] 的 蒙特卡罗估计(Monte Carlo estimate),当数据的重构概率很高时被归类为异常。
6.3.2 Reconstruction Probability
重构概率的计算公式在上图中(Algrithm 4)给出,这里特地摘出来方便编码:
r e c o n s t r u c t i o n p r o b a b i l i t y ( i ) = 1 L ∑ l = 1 L p θ ( x ( i ) ∣ μ x ^ ( i , l ) , σ x ^ ( i , l ) ) reconstruction\ probability(i)=\frac{1}{L} \sum^L_{l=1}{p_\theta (x^{(i)}|\mu_{\hat x^{(i,l)}},\sigma_{\hat x^{(i,l)}}}) reconstruction probability(i)=L1l=1∑Lpθ(x(i)∣μx^(i,l),σx^(i,l))
即 μ x ^ ( i , l ) , σ x ^ ( i , l ) = g ϕ ( x ∣ z ( i , l ) ) \mu_{\hat{x}^{(i,l)}},\sigma_{\hat{x}^(i,l)} =g_\phi(x|z^(i,l)) μx^(i,l),σx^(i,l)=gϕ(x∣z(i,l)) 这行的理解。
按照上面摘录的代码,对于每一份测试数据只对应一份隐变量 z z z,也就是说,对每个测试数据其实只经历过一次 encode 得到 μ \mu μ 和 σ \sigma σ ,然后再进行pdf 计算等等,重复 L 次。
然后 L 次计算一模一样,参数一样,数据一样,结果也一样。也就是说,对于上面那份源码 L=100 与 L=10 的结果是一模一样的。感兴趣的伙伴可以测试一下。
解决方法
算法的本意应该是,根据每个输入数据 x i x_i xi 对应的 μ \mu μ 和 σ \sigma σ 可以得到一个 z z z 的分布(注意可以是多元高斯分布),然后再从这个分布中采样 L L L 次,得到 L L L 组 μ ^ \hat\mu μ^ 与 σ ^ \hat\sigma σ^ 然后再分别计算概率密度(即输入数据 X X X 在这 L L L 组中的概率密度),再求均值。