Auto-Encoding Variational Bayes学习笔记
有人讲AEV与GAN是现在生成网络中的两个趋势,关于GAN我在很早之前就已经简单的介绍过了,有兴趣的同学可以看我的这篇博客稍微做一下了解“Generative Adversarial nets(GAN)学习笔记”
关于AEV,我最近才开始了解,一开始的了解并不是十分的充分,通过几天的攻坚战也是把这块的硬骨头给成功的啃下来了。这里给大家分享一下我的心路历程:
1)什么是变分自动编码器
变分自动编码器(AEV)就是用于生成模型,结合了深度模型以及静态推理。简单来说就是通过映射学习将一个高位数据,例如一幅图片映射到低维空间Z。与标准自动编码器不同的是,X和Z是随机变量。所以可以这么理解,尝试从P(X|Z)中去采样出x,所以利用这个可以生成人脸,数字以及语句的生成。
2)直接上干货(我觉得这篇论文最重要的部分就是公式推导,我就不饶圈子了,直接推给你看)
上图直接明了的介绍了AEV,有朋友能直接看懂吗?假设我们有一堆图片X,图片分为很多类,那么Z就是决定X属性的神秘原因(内在因素),专业术语为隐藏因素。也就是说只要得到了Z,我们就可以获知X的相关属性。
那么怎么得到Z呢?开始推导,如果我们知道了z关于x的后验概率,那么已知x的分布,关于z的部分就很容易可以通过相应的公式获得。但是这个p(z|x)后验概率本身是不好求的。所以聪明的人们就想说使用深度网络来推导q(z|x)来逼近p(z|x),通过·深度网络来来学习参数,一步步优化q这个逼近概率。通过这个方法我们就可以获得z的近似分布,从而把z给找出来。
为了使得q和p这两个之间的距离尽可能的小,作者还特地引入了KL散度,也许有朋友不了解什么叫KL散度,简单来说他就是衡量两个分布之间的距离,值越小两者越相近,值越大两者差距越大。首先假设对x的分布概率P(x)进行推导:
这里的Lv被称为变分下界,什么意思呢,如上公式所示,p(x)最后被拆分为第一项Lv和第二项关于p和q的散度,而散度是一个肯定大于等于零的数,所以最后可以推导出L大于等于Lv,所以称Lv为L的变分下界。
又因为p(x)是固定的,所以L也是固定的,又因为我们想要最大化p和q之间的散度,所以换个思路就是要最大化Lv这个变分下界,所以我们接下来对这个变分下界来进行一波分析。
要最大化这个,也就是说要最小化绿色方框中的内容,最大化红色方框中的内容。作者是将q利用一个深度网络来实现,而z本身的分布是服从高斯分布的,这也就是要让生成网络也就是所谓编码器的输出尽可能的服从高斯分布。
已知P(z)是服从正态高斯分布的:
然后依据KL散度的定义,第一项可以分解为如下:(将第一项称为L1)
然后分成两项分别对他进行分别求导:
所以最后得出L1的值:
我们的目的就是将上面这个式子,最大化。
接下来我们来最大化稳重的红色部分,关于p和q的公式如下:
对于对数似然期望的求解会是一个十分复杂的过程,所以采用MC算法,将L2等价于:
也就是说作者构建了一个加码器,用来对随机采样的z进行处理,最终生成x。由于随机采样的部分无法使用随机梯度下降,所以在这里作者使用了重新参数化的方法,让编码器只输出正太分布的均值和方差,用于一个高斯噪声通过输出的均值和方差来构造z 。示意图如下:
到这里,两个要优化的目标已经全部解释好了,然后局可以训练模型了。最终的解码器也就是我们希望获得的模型,可以对应输入的高斯分布获得相应的图片。