论文链接:Auto-Encoding Variational Bayes

本文基本按照原文的思路用自己的话对其进行重述和讲解

动机

考虑以下问题情境:假设有独立同分布的数据集X=x(i),i=1,2,,N

数据点x(i)的生成分为两步:(1) 从先验分布$p{\theta^*}(z)z^{(i)}(2)p{\theta^*}(x|z)x^{(i)}$

其中隐变量z(i)和分布参数θ都是未知的,此时常常会遇到以下两种情况:

  • 难解性:似然的积分 $p\theta(x)=\int p{\theta}(z)p{\theta}(x|z)\mathrm{d}z使p{\theta}(z|x)=\frac{p{\theta}(x|z)p{\theta}(z)}{p_{\theta}(x)}$ 难以计算,导致不能用EM算法;平均场变分推理要求的积分难以计算
  • 大数据集:数据集非常大的情况下基于采样的方法(例如蒙特卡罗EM)效率很低,因此我们希望使用minibatch进行参数更新

我们主要关心在上述情况下的三个相关问题:

  • 如何对模型参数 θ 进行高效的极大似然估计(ML)或极大后验概率估计(MAP)
  • 如何对隐变量z进行高效的近似后验推断 pθ(z|x)
  • 如何对边缘似然logpθ(x)进行高效的推断

SGVB和AEVB

为了解决上述问题,我们引入一个识别模型$q{\phi}(z|x)p{\theta}(z|x)$的近似

我们将$q{\phi}(z|x)ProbablisticEncoderp{\theta}(x|z)$视作一个Probablistic Decoder

变分推断 中似然logpθ(x(i))可表示为

(1)logpθ(x(i))=DKL(qϕ(z|x(i))pθ(z|x(i)))+L(θ,ϕ;x(i))

其中L(θ,ϕ;x(i))变分下界,表示为

(2)logpθ(x(i))L(θ,ϕ;x(i))=Eqϕ(z|x(i))[logpθ(x(i),z)logqϕ(z|x(i))]

还可以表示为

(3)L(θ,ϕ;x(i))=Eqϕ(z|x(i))[logpθ(x(i)|z)+logpθ(z)logqϕ(z|x(i))]=Eqϕ(z|x(i))[logpθ(x(i)|z)]DKL(qϕ(z|x(i))pθ(z))

考虑用一个随机噪声变量ϵp(ϵ)和一个确定性的可微函数$g{\phi}(\epsilon,x)$来重参数化(reparameterize)随机变量$\hat{z}\sim q{\phi}(z|x)$,即

(4)z^=gϕ(ϵ,x)withϵp(ϵ)

此时用蒙特卡罗估计f(z)的期望,就发现参数ϕ从随机抽样中分离出来了,使得抽样变得可行

(5)Eqϕ(z|x(i))[f(z)]=Ep(ϵ)[f(gϕ(ϵ,x(i)))]1Ll=1Lf(gϕ(ϵ(l),x(i)))

将这个思路代入式(2)中,就得到了随机梯度变分贝叶斯(Stochastic Gradient Variational Bayes, SGVB)算法,即可以将梯度法应用于参数ϕ的优化

(6)L^A(θ,ϕ;x(i))=1Ll=1Llogpθ(x(i),z(i,l))logqϕ(z(i,l)|x(i))其中 z(i,l)=gϕ(ϵ(i,l),x(i))

一般来说,式(3)中的KL散度项$D{KL}(q{\phi}(z|x^{(i)})|p_{\theta}(z))$可以被解析地积分(论文附录B有解释),因此不用采样,于是根据式(3)有SGVB的另一个版本,且方差更小

(7)L^B(θ,ϕ;x(i))=DKL(qϕ(z|x(i))pθ(z))+1Ll=1Llogpθ(x(i)|z(i,l))其中 z(i,l)=gϕ(ϵ(i,l),x(i))

给定一个大小为N的数据集,我们可以使用minibatch构建整个数据集的变分下界,即

L(θ,ϕ;X)L^(θ,ϕ;XM)=NMi=1ML^(θ,ϕ;x(i))

其中minibatch XM是从数据集X中随机抽取的M个数据构成的,实验表明,若M足够大,则对每个数据点x(i)只需要令L=1即可

式(7)的后项显然就是Auto-Encoder的Negative reconstruction error,而前项KL散度则可视为正则项因此该算法也可称为自编码器变分贝叶斯(Auto-Encoding Variational Bayes, AEVB)

即输入样本x和噪声ϵ,$g{\phi}(\cdot)zEcoderp{\theta}(x|z)zx’$,对应Decoder

AEVB

重参数化

上面提到$z\sim q{\phi}(z|x)z\sim q{\phi}(z)使\epsilon\sim p(\epsilon)z=g_{\phi}(\epsilon,x)$进行重参数化

重参数化使得随机抽样与参数ϕ无关,从而使得抽样变得可行

举个例子,假设zp(z)=N(μ,σ2),令z=μ+σϵϵN(0,1),于是有

EN(z;μ,σ2)[f(z)]=EN(0,1)[f(μ+σϵ)]1Ll=1Lf(μ+σϵ(l))

一般的,针对给定的$q{\phi}(z|x)g{\phi}(\cdot)p(\epsilon)$的基本方法

  • 逆累积分布(ICDF)易处理:此时令ϵU(0,I),令$g{\phi}(\epsilon,x)q{\phi}(z|x)$的逆累积分布函数。例如:指数、柯西、瑞利分布等
  • 位置-尺度(location-scale)族:此时令ϵ为标准分布(location=0, scale=1),令gϕ()=location+scaleϵ。例如:高斯、均匀、拉普拉斯、t-分布等
  • 组合分布:一般可以将随机变量描述为ϵ的不同变换。例如:Gamma、Beta、F分布等

Variational Auto-Encoder

这里将给出一个使用神经网络实现AEVB的例子,称为变分自编码器VAE

假设先验$p{\theta}(z)=N(z;0,I)q{\phi}(z|x)p_{\theta}(z|x)$近似于具有对角方差的高斯分布,则

logqϕ(z|x(i))=logN(z;μ(i),(σ(i))2I)

其中均值μ(i)和方差σ(i)Encoder的输出,即它们是数据点x(i)和参数ϕ的函数

由于先验和近似后验假设都是高斯分布,因此式(7)中KL散度项可以直接计算(论文附录B),于是有

(7)L^(θ,ϕ;x(i))12j=1J(1+log((σj(i))2)(μj(i))2+(σj(i))2)+1Ll=1Llogpθ(x(i)|z(i,l))其中 z(i,l)=gϕ(ϵ(i,l),x(i)),ϵ(l)N(0,I)

tf2+keras有官方的VAE实现示例:Variational AutoEncoder Keras实现