没有任何公式——直观的理解变分自动编码器VAE




autoencoders作为一种非常直观的无监督的学习方法是很受欢迎的,最简单的情况是三层的神经网络,第一层是数据输入,第二层的节点数一般少于输入层,并且第三层与输入层类似,层与层之间互相全连接,这种网络被称作自动编码器,因为该网络将输入编码成一个隐藏代码,然后从隐藏表示中译码出来。通过简单的测量重构误差和反传网络参数能够很好的训练该类网络。

上图是另一种版本的自动编码器,称为“变分自动编码器-VAE”,不同点在于其隐藏代码来自于训练期间学习到的概率分布。

 

90年代,一些研究人员提出一种概率解释的神经网络模型,在该模型中,提供了适当的贝叶斯方法。然而,学习这些模型的参数是困难的,直到深度学习研究的新进展导致了用于这种概率方法能更有效的学习参数。

 

概率解释通过假设每个参数的概率分布来降低网络中每个参数的单个值的刚性约束。例如,如果在经典神经网络中计算权重w_i=0.7,在概率版本中,计算均值大约为u_i = 0.7和方差为v_i = 0.1的高斯分布,即w_i =N0.7,0.1)。这个假设将输入,隐藏表示以及神经网络的输出转换为概率随机变量。这类网络被称为贝叶斯神经网络或BNN

 

学习的目标是找到上述分布的参数。这种学习被称为“推理”,贝叶斯网络中的推论对应于计算潜在变量相对于数据的条件概率。这类模型引入了变分逼近推理方法后,将该计算问题转换为优化问题,可以使用随机梯度下降法来解决。

 

在贝叶斯网络中,网络可以基于分布参数重新参数化。在变分自动编码器中,仅在隐藏节点上假设这些分布。因此,编码器变成一个变分推理网络,而且译码器变成一个将隐藏代码映射回数据分布的生成网络。

 

将分布的均值和方差视为传统网络的参数,并将方差乘以来自噪声发生器的样本以增加随机性。通过参数化隐藏分布,可以反向传播梯度得到编码器的参数,并用随机梯度下降训练整个网络。此过程能够学习到隐藏代码的均值与方差值,这就是所谓的重新调参技巧

 

在经典版的神经网络中,可以用均方误差(MSE)简单测量网络输出与期望的目标值之间的误差。但在处理分布时,MSE不再是一个好的误差度量,因此用KL­散度测量两个分布之间的差异。事实证明变分近似和真实后验分布之间的距离不是很容易被最小化。它包括两个主要部分。因此,可以最大化较小的项(ELBO)。从自动编码器的角度来看,ELBO函数可以看作是输入的重建代价与正则化项的和。

 

在最大化ELBO之后,数据的下限接近数据分布,则距离接近零,间接地最小化了误差距离。最大化下界的算法与梯度下降的完全相反。沿着梯度的正方向达到最大值,这整个算法被称为自动编码变分贝叶斯

 

下面是一个伪代码,可以看到VAE的架构:

文本框: network= {    # encoder   encoder_x = Input_layer(size=input_size, input=data)   encoder_h = Dense_layer(size=hidden_size, input= encoder_x)    # the re-parameterized distributions that are inferred from data    z_mean = Dense(size=number_of_distributions, input=encoder_h)   z_variance = Dense(size=number_of_distributions, input=encoder_h)   epsilon= random(size=number_of_distributions)    # decoder network needs a sample from the code distribution   z_sample= z_mean + exp(z_variance / 2) * epsilon    #decoder   decoder_h = Dense_layer(size=hidden_size, input=z_sample)   decoder_output = Dense_layer(size=input_size, input=decoder_h) }  cost={   reconstruction_loss = input_size * crossentropy(data, decoder_output)   kl_loss = - 0.5 * sum(1 + z_variance - square(z_mean) - exp(z_variance))   cost_total= reconstruction_loss + kl_loss }  stochastic_gradient_descent(data, network, cost_total)

 

该笔记是基于此keras例子。编码器的所得学习潜在空间和在MNIST数据集上训练的简单VAE的结果如下。

VAE Latent space

VAE generated samples

 

文章原标题《An intuitive understanding ofvariational autoencoders without any formula》,作者:HamidrezaSaghir ,译者:海棠

 

注解1

引入变分分布q,则ELBO由边缘对数似然率的下界确定。由log函数的凹性,且由Jensen等式得到:,进而:

ELBO与边缘概率p(x)之间的差别是真实后验分布与近似后验分布之间的距离,即. 或者说ELBOKL项之间的距离是对数归一化p(x)

 

如今我们定义了一个损失函数,还需要计算该损失函数的梯度,以进行SGD优化。该梯度不易解析求解,但可用MCMC直接从q(z|x)抽样得到其估计值。因为MCMC可能从很少的数值中抽样,所以这一方法有很大的方差。

 

这正是采用重新调参技巧的原因。假定随机变量z=g(x, )x和已知iid抽样  的确定性函数,增加了z的随机性。重新调参将不可导的随机变量z转换成了x和一个随机变量的可导函数,于是ELBO的梯度为。这个对梯度的估计叫做随机梯度变分贝叶斯SGVB,实验证明其方差较小。SGVB也叫黑盒推断方法,因为它不管我们在生成和推断网络中采用何种函数,只需计算在处采样的梯度。现在,如果我们选择深度网络做为我们的似然率和近似后验分布函数,则ELBO的所有3都是可导的了。于是,我们有了一个端到端的可导模型。

 

注解2

在上述ELBO的推导中,第1项是变分后验分布的熵,第2项是联合分布的对数。联合分布可被写做p(x,z)=p(x|z)p(z),于是ELBO可写做

1项是对数似然率,即重建代价。第2项是先验分布和后验分布之间的KL发散,即不允许后验分布偏离先验分布太多的正则化项。如果只用第1项做为代价函数,而不用正则化项,则对最大似然率的学习会出现过拟合。

 

注解3VAE可能遇到的问题

KL发散度量两种分布之间的距离,但是它不是一个真的距离,因为它不对称. 因此我们选择的距离的方向对最小化的结果有关系。例如,最小化KL(p|q),原本p具有高概率,而我们选择q有高概率,则当p有多个模式时,q会将多个模式模糊混合。反之,最小化KL(q|p),原本p有小概率,而我们选择q有小概率,则当p有多个模式时,KL发散的最小化会产生单一模式(模式折叠)。在VAE中我们实际上是最小化KL(q|p),因此模式折叠是个常见问题。另外,由于真实分布的复杂性,我们也会见到模糊问题。下图从深度学习的观点给出了这两个问题的示意。

alt text

 

references:

[1] Kingma,Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprintarXiv:1312.6114 (2013).

[2] Rezende,Danilo Jimenez, Shakir Mohamed, and Daan Wierstra. “Stochastic backpropagationand approximate inference in deep generative models.” arXiv preprintarXiv:1401.4082 (2014).

[3]https://hips.seas.harvard.edu/blog/2013/01/24/complexity-of-inference-in-bayes-nets/

[4]https://www.cs.princeton.edu/courses/archive/fall11/cos597C/lectures/variational-inference-i.pdf


Hamidreza Saghir

Written by Hamidreza Saghir

Machine LearningResearcher - PhD Candidate at University of Toronto

猜你喜欢

转载自blog.csdn.net/u014195530/article/details/69569451