我看了VAE之后忽然对神经网络的非监督学习以及概率模型很感兴趣,但是无奈概率模型真的好难懂啊. 今天尝试一边描述VAE一边真正的理解他. 参考总结自:https://spaces.ac.cn/archives/5253

介绍

变分自编码器是传统编码器的一个变体,从深度学习的角度来说就是改变了loss函数使生成器可以 生成与原样本不相同但又属于相同分布的样本.

术语表:

  • 编码器:

    在概率模型中,编码器称为推理网络,他将参数化潜在特征的后验近似z,然后将参数输出到分布q(z|x),也可以说q(z|x)x的后验分布.

  • 解码器:

    解码器是根据z重构x的,分布为p(x|z).

推导

在传统的编码器中,解码器p(x|z)是易于训练的,但是q(z|x)是难以学习的.根据贝叶斯定理,我们可以把后验分布转写成另一种形式,但是p(x)也并不知道,所以利用联合概率分布近似代替p(x): q(z|x)=p(x|z)p(z)p(x)=p(x|z)p(z)zp(x|z)p(z)

为了近似求出后验分布,我们还需要一种方法将估计出的分布与真实分布进行比较,所以使用KL分歧来衡量两个概率分布的相似程度.如果相同,则分歧为0,如果大于0,则分布不同. 因此使用如下方式使用KL分歧: 由于我们考虑的是各分量独立的多元正态分布,因此只需要推导一元正态分布的情形即可: KL(N(μ,σ2)N(0,1))=12πσ2e(xμ)2/2σ2(loge(xμ)2/2σ2/2πσ2ex2/2/2π)dx=12πσ2e(xμ)2/2σ2log{1σ2exp{12[x2(xμ)2/σ2]}}dx=1212πσ2e(xμ)2/2σ2[logσ2+x2(xμ)2/σ2]dx=12[logσ2+μ2+σ21]

重参数

VAE可以生成新的X就是因为他从隐空间取z的时候是随机选取的,但是随机选取z会导致无法反向求导,所以就使用一个重参数技巧.

N(μ,σ2)中采样一个z,就相当于从N(0,1)中采样一个ϵ,然后令z=μ+ϵσ.

本质结构

本质上VAE就是训练出一个后验分布q(Z|X),然后生成器从后验分布中随机取元素(相当于加噪声)并解码出对应的ˉX.代码上实现起来相当简单,但是背后的数学思想是非常难理解的,现在我还是一知半解.