变分自编码器(VAE)学习
我看了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))=∫1√2πσ2e−(x−μ)2/2σ2(loge−(x−μ)2/2σ2/√2πσ2e−x2/2/√2π)dx=∫1√2πσ2e−(x−μ)2/2σ2log{1√σ2exp{12[x2−(x−μ)2/σ2]}}dx=12∫1√2πσ2e−(x−μ)2/2σ2[−logσ2+x2−(x−μ)2/σ2]dx=12[−logσ2+μ2+σ2−1]
重参数
VAE
可以生成新的X就是因为他从隐空间取z的时候是随机选取的,但是随机选取z会导致无法反向求导,所以就使用一个重参数技巧.
从N(μ,σ2)中采样一个z,就相当于从N(0,1)中采样一个ϵ,然后令z=μ+ϵ∗σ.
本质结构
本质上VAE
就是训练出一个后验分布q(Z|X),然后生成器从后验分布中随机取元素(相当于加噪声)并解码出对应的ˉX.代码上实现起来相当简单,但是背后的数学思想是非常难理解的,现在我还是一知半解.