[水文]生成模型2 - Variational Autoencoders

笔记和个人的理解,初学者,可能有重大错误,兼听则明。主要参考[1][2]

1导语


                                                                              1.1

我们回顾一下上图,是生成模型在最大似然底下的分支。上一篇粗略地讲了分支1中的PixelRNN,这一篇主要讲分支二中的VAE。在电影电视中,我们经常可以看到警方为了追捕嫌疑,会请受害人拼出嫌疑人的样貌。他的脸型是什么样的,鼻子是什么样子,发型是什么样子等等。在这些低维的特征上配置不同的参数,再加一些特殊化或者随机化的改动我们就可以拼出各式各样的人脸,其实也就达到了生成人脸图像的目的。从这个思路出发,如果用一个机器学习系统去学习生成图片,我们需要解决两个问题,第一个需要学习这些特征,第二个就是由于要生成很多图片,这些特征对应的配置是好抽样的,并且抽出来的配置都能很好地生成类似图像,不能把人的鼻子长度搞成了两三米,或者一个小孩的脸上有很多皱纹。

 

VAE采用的是带有隐变量(latentvariable)的图模型,训练的时候先用编码神经网络编码成隐藏的变量z,然后再通过解码网络去还原出原来的图像,z就是对应我们上面说的参数。生成图像的时候只需要解码网络就可以了,解码网络的输入就是我们对z的一个抽样。而VAE的精巧之处在于它使得z的每一维分布服从于高斯分布,这就让解码的时候非常方便,另外特征的学习也融合到了解码网络中,解决了我们上面说到的两个问题。


                                                 1.2

 

1 VAE

我们假设训练的样本集(图片集)X包括了N个独立分布的x(N张图片),根据最大似然我们训练的目标是要最大化p(x),p代表概率,由于样本是由生成网络生成的,当然这个概率也就依赖于生成网络的参数θ,所以呢为了方便理解,我们把这个概率写成pθ(x),另外根据概率公式可以得到


公式1是我们要最大化的东西,但是这个积分是不可解的(intractable),所以呢我们也就不能微分,也就不能用梯度下降的方式去做。既然不可解,只能去估计了。

首先我们考虑一个基本的问题,用学习的方式去生成新样本,我们得知道训练样本中x对应的z。前面已经说了人工设计的方式缺点太多,所以呢还得通过学习的方式。

1.1 EM-GMM


EM是解决这样一个问题的方法,它采用的是一个迭代的过程。比如混合高斯模型中,如上图,观测点x的分布服从于


可以这种理解,每一个点的产生都经过了这样的过程,先以概率Phi选择第k个高斯模型,然后再根据这个高斯分布产生当前的数据。那么这里所有的均值方差,phi都是我们需要求解的参数,而隐藏的变量z指示的是当前的样本x到底是来自于哪个分布。EM首先初始化一个theta,就是随机初始化所有的均值方差,可以看到它不能很好的拟合这些分布,然后通过迭代的E stepM step来迭代改进这些以求解z和参数

1Evaluate step


先评估下在当前的高斯混合模型中,当前的点在各个高斯分布上的概率,比如说某个点90%的概率来自高斯模型1,10%的概率来着高斯模型2

2


然后M步就是重新计算所有的参数使得我们的似然性最大。比如特殊情况下高斯模型1百分百概率包含了且仅包含了m个点,那么我们就可以利用最大似然重新估计它的均值和方差就为这些点的均值和方差。

可惜EM不能用在我们的这个情况中。因为在E step中由于我们问题的复杂性,后验概率也是不可求解的。

 

1.2 蒙特卡洛抽样法

另外一种是利用蒙特卡洛的方式,这个方法在很多领域都有应用,例如强化学习中的价值估计,其实就是抽样的方法,但是这种方法比较慢,VAE采用的下面的变分法,在PRML书中也有一章的讲解。

 

3变分法

可以参考[3]。这个方法用个q(z)去估计,在这个问题中q(z)也要依赖于x,如果用神经网络(也就是前面说到的编码网路)等去实现,那也会有自己的参数 Φ,为了清晰,我们将这些依赖加上qΦ(z|x),估计的好坏用的是评估概率分布相似性的KL距离。KL距离非负,但不对称。




经过这么一步转化后,我们可以发现一个有意思的现象,上述公式的左边是我们整个任务的目标。而由于DKL(q||p)非负,可以得到


右边我们称之为variational lower bound。如果我们尽量最大化右边的式子,那么左边的式子也就是我们的目标也会更大,并且会在q完美拟合p的时候两者相等。

另外根据右边的公式,我们可以设计出如图1.2encoding-decoding网络。首先有个encoding网络,它的目标是分析出样本对应的隐藏变量,它的输入是样本x,输出是对应xz,它的优化目标就是上面公式右方的最后一项


那么我们怎么知道真实z的分布呢。在VAE中,作者对这个做了一个非常简单的假设,那就是z是一个高维的标准正态分布N(0,I).虽然不知道作者的初衷,但有可能是因为简单容易计算,并且如果通过一个非常复杂的映射公式,我们可以将一个正态分布映射到其他任意复杂的同等维度的分布(怎么证明?)。下图是文献1的一个例子,将一个高斯分布z通过变换g(z) = z/10 + z/abs(z)映射到一个环

 

接下来就是解码网络,解码网络就是从编码网络中得到的z再恢复出样本x,它训练的目标就是使得恢复出来的跟原始的一致。最后的网络可以参考下图左图。由于左边的网络不可反向传播,因此用了一个小技巧转换成右图。

 

网络中有很多已经开源的代码,大家可以试一试。本人没有试,不过在代码中一个小技巧就是为了保证方差为正,先求标准差,再平方。

 

 

参考文献

[1]Tutorial on Variational  Autoencoders

[2]Notes on VariationalAutoencoders

[3]https://en.wikipedia.org/wiki/Variational_Bayesian_methods

[4]https://hsaghir.github.io/data_science/denoising-vs-variational-autoencoder/?spm=5176.100239.blogcont68410.21.Gfvb1C


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值