生成模型是一种无监督学习方法。其定义是给一堆由真实分布产生的训练数据,我们的模型从中学习,然后以近似于真实的分布来产生新样本。
生成模型分为显式和隐式的生成模型:
为什么生成模型重要:
生成样本,着色问题,强化学习应用,隐式表征推断等。
PixelRNN和PixelCNN是使用 概率链式法则来计算一张图片出现的概率。其中每一项为给定前i-1个像素点后第i个像素点的条件概率分布。这个分布通过神经网络RNN or CNN来建模,再通过最大化图片x的似然来学习出RNN or CNN的参数。
pixelRNN中,从左上角开始定义为“之前的像素”。由于RNN每个时间步的输出概率都依赖于之前所有输入,因此能够用来表示上面的条件概率分布。
训练这个RNN时,一次前向传播需要从左上到右下串行走一遍,然后根据上面的公式求出似然,并最大化似然以对参数做一轮更新。因此训练非常耗时。
PixelCNN中,使用一个CNN来接收之前的所有像素,并预测下一个像素的出现概率:
相比于pixelRNN,pixelCNN在训练时可以并行的求出公式中的每一项,然后进行参数更新,因此其训练速度要比pixelRNN快多了。
然而,无论是pixelRNN还是pixelCNN,其在预测时都需要从左上角开始逐个像素点地生成图片,因此预测阶段都比较慢。
参考:这篇博客对VAE的讲解非常好,《只知道GAN你就OUT了——VAE背后的哲学思想及数学原理》http://geek.csdn.net/news/detail/201178
自编码器是为了无监督地学习出样本的特征表示,原理如下:
如上图,自编码器由编码器和解码器组成,编码器将样本x映射到特征z,解码器再将特征z映射到重构样本。为了能够使z解码后能够恢复出原来的x,我们最小化x与重构样本之间的l2损失,进而可以训练出编码器和解码器的参数。
VAE的思想是,既然我们无法直接获得样本x的分布,那么我们就假设存在一个x对应的隐式表征z,z的分布是一个简单的高斯分布(或者其他简单的分布,总之是人为指定的)。z经过解码网络后,能够映射得到x的近似真实分布。这样的话我们就可以通过在标准正态分布上采样得到z,然后解码得到样本近似分布,再在此分布上采样来生成样本。
现在的问题是,有一堆样本,我们如何从中学习出解码网络的参数,使得在标准高斯分布上采样得到的z,经过解码后得到的x的分布,刚好近似于x的真实分布呢?
我们的方案是最大化样本x的似然P(x)(可以仔细思考下,为什么最大化似然能够使得得到的解码器具有上面的性质)。
对样本x的似然P(x)做一个推导:
这里引入了一个分布q(z|x),我们可以用一个网络来建模这个分布,也就是后面的编码网络。这里我们暂时只把它当作一个符号,继续推导即可:
对第一项,我们有:
这样我们就得到了VAE的核心等式:
注意到这个式子的第三项中,含有p(z|x),而
由于这个积分无法求解出来,因此我们没办法求第三项的梯度。幸运的是,由于第三项是一个KL散度,其恒大于等于0,因此前两项的和是似然的一个下界。因此我们退而求其次,来最大化似然的下界,间接达到最大化似然的目的。
现在我们引入编码器网络来对q(z|x)建模,我们的训练框架如下:
这个框架就非常类似于自编码器。其中最大化下界的第一项表示我们要能从解码器最大概率地重构出x,这一步等价于去最小化 与样本x的均方误差。最小化下界的第二项则限定了z要遵循我们事先给它指定的分布。
需要注意的是,这个框架里面,梯度无法通过“采样“这个算子反向传播到编码器网络,因此我们使用一种叫做重采样的trick。即将z采样的算子分解为:
这样梯度不需要经过采样算子就能回流到编码器网络中。
(4)VAE的优缺点
相比变分自编码器,理解GAN如何工作非常简单。在GAN中我们定义了两个网络:生成器和判别器。
判别器负责辨别哪些样本是生成器生成的假样本,哪些是从真实训练集中抽出来的真样本。
生成器负责利用随机噪声z生成假样本,它的职责是生成尽可能真的样本以骗过判别器。
这种对抗形式的目标可以写成如下形式:
因此训练GAN的方法是交替的训练生成器和判别器,在生成器上做梯度下降,在判别器上做梯度上升:
这里有个trick:我们观察生成器的损失函数形状如下:
发现当生成器效果不好(D(G(z)接近0)时,梯度非常平缓;当生成器效果好(D(G(z)接近1)时,梯度很陡峭。这就与我们期望的相反了,我们希望在生成器效果不好的时候梯度更陡峭,这样能学到更多。因此我们使用下面的目标函数来替代原来的生成器损失:
这样就使得在生成器效果不好时具有较大的梯度。
因此,GAN的训练过程如下:
训练完毕后,就可以用生成器来生成比较逼真的样本了。
a 传统的GAN生成的样本还不是很好,这篇论文在GAN中使用了CNN架构,取得了惊艳的生成效果:
Radford et al, “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”, ICLR 2016
b Wasserstein GAN 一定程度解决了GAN训练中两个网络如何平衡的问题。
c 用GAN来做text->image
等等
各个生成模型的优缺点:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章