Variational Autoencoder
理解VAE先别从网络结构上理解。 计算: p(z∣X)=p(X)p(X∣z)p(z)=∫Pxz(X∣z;θ)Pz(z)dzp(X∣z)p(z) 用KL divergence来衡量两个分布的信息损失: KL(qλ(z∣x)∣∣p(z∣x))=Eq[logqλ(z∣x)]−Eq[logp(x,z)]+logp(x) 。 稍作变换: logp(x)−KL(qλ(z∣x)∣∣p(z∣x))=Eq[logp(x,z)]−Eq[logqλ(z∣x)]=Eq[logp(x,z)]−KL(qλ(z∣x)∣∣p(z))=ELBO(λ)
右边就是要优化的:
右边第一项的log似然的期望最大化 -- 这是decoder
右边第二项的KL散度最小化 -- 这是encoder
所以跟AUtoEncoder扯上关系了。
注意:
decoder过程p(X∣z) ,并不是衡量x 与 x^的误差,而是极大似然logp(x,z)=logp(x∣z)p(z)
encoder输出正太分布均值和方差,但是做了reparemerization trick,见下面。
变分自编码器(Variational Auto-Encoder,VAE)
优化目标
从神经网络结构角度:每个样本xi的loss为: li(θ,ϕ)=−Ez∼qθ(z∣xi)[logpϕ(xi∣z)]+KL(qθ(z∣xi)∣∣p(z)) 右边第一项为重构x的loss,第二项为正则项。
从概率的角度: p(x,z)=p(x∣z)p(z) 把联合概率用 likelihood 和 prior 。 p(z∣x)=p(x)p(x∣z)p(z) 推理部分包含了先验概率,不好求,于是用变分近似,用qλ(z∣x) 去近似 p(z∣x)。 用KL divergence来衡量两个分布的信息损失: KL(qλ(z∣x)∣∣p(z∣x))=Eq[logqλ(z∣x)]−Eq[logp(x,z)]+logp(x) 。 抛开先验概率这项 ,定义:ELBO(λ)=Eq[logp(x,z)]−Eq[logqλ(z∣x)] , 得 logp(x)=ELBO(λ)+KL(qλ(z∣x)∣∣p(z∣x)) , 通过Jensen’s inequality ,KL divergence始终大于等于0,所以最小化KL divergence,等价于最大化ELBO 。
对于单个样本,ELBOi(λ)=Eqλ(z∣xi)[logp(xi∣z)]−KL(qλ(z∣xi)∣∣p(z)) , 然后用stochastic gradient descent 求解。 稍微改写下,包含inference和 generative network parameters ,ELBOi(θ,ϕ)=Eqθ(z∣xi)[logpϕ(xi∣z)]−KL(qθ(z∣xi)∣∣p(z)) , 到这里 ELBOi(θ,ϕ)=−li(θ,ϕ) 。
附KL两个多维正太分布:
the reparametrization trick
encoder的参数是正太分布 P(Z∣X) 的mean和standard devation (协方差矩阵的主对角线,可以就用一个向量表示), 可以通过z=μ+σ⊙ϵ 得到。

图来自VAE(4)——实现 有更细节的图 Caffe code to accompany my Tutorial on Variational Autoencoders
VAE.py
encoder.py
generator.py
参考佳文
The Unreasonable Confusion of Variational Autoencoders Tutorial on Variational Autoencoders VAE(3)——公式与实现 变分自编码器(Variational Autoencoder, VAE)通俗教程
https://yq.aliyun.com/articles/68410 没有任何公式——直观的理解变分自动编码器VAE
Last updated