生成式对抗网络(Generative Adversarial Networks,GANs)

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/u010089444/article/details/78946039

1. 简介

首先简要介绍一下生成模型(Generative model)与判别模型(Discriminative mode)的概念:

  • 生成模型:对联合概率进行建模,从统计的角度表示数据的分布情况,刻画数据是如何生成的,收敛速度快,例如朴素贝叶斯,GDA,HMM等。
  • 判别模型:对条件概率P(Y|X)进行建模,不关心数据如何生成,主要是寻找不同类别之间的最优分类面,例如LR,SVM等。

判别模型在深度学习乃至机器学习领域取得了巨大成功,其本质是将样本的特征向量映射成对应的label;而生成模型由于需要大量的先验知识去对真实世界进行建模,且先验分布的选择直接影响模型的性能,因此此前人们更多关注于判别模型方法。生成式对抗网络(Generative Adversarial Networks,GANs)是蒙特利尔大学的Goodfellow Ian于2014年提出的一种生成模型, 在之后引起了业内人士的广泛关注与研究。

GANs中包含了两个模型,一个是生成模型G,另一个是判别模型D,下面通过一个生成图片的例子来解释两个模型的作用:

  • 生成模型G:不断学习训练集中真实数据的概率分布,目标是将输入的随机噪声转化为可以以假乱真的图片(生成的图片与训练集中的图片越相似越好)
  • 判别模型D:判断一个图片是否是真实的图片,目标是将生成模型G产生的“假”图片与训练集中的“真”图片分辨开。

GANs的实现方法是让DG进行博弈,训练过程中通过相互竞争让这两个模型同时得到增强。由于判别模型D的存在,使得 G 在没有大量先验知识以及先验分布的前提下也能很好的去学习逼近真实数据,并最终让模型生成的数据达到以假乱真的效果(即D无法区分G生成的图片与真实图片,从而GD达到某种纳什均衡)。

2. 生成对抗网络

GANs中生成模型和判别模型的选择没有强制限制,在Ian的论文中,判别模型D和生成模型G均采用多层感知机。GANs定义了一个噪声pz(x) 作为先验,用于学习生成模型G 在训练数据x上的概率分布pgG(z)表示将输入的噪声z映射成数据(例如生成图片)。D(x)代表x 来自于真实数据分布pdata而不是pg的概率。据此,优化的目标函数定义如下minmax的形式:

图片名称

原论文在参数的更新过程,是对D更新k次后,才对G更新1次。上式中的minmax可理解为当更新D时,需要最大化上式,而当更新G时,需要最小化上式,详细解释如下:

  • 在对判别模型D的参数进行更新时:对于来自真实分布pdata的样本x而言,我们希望D(x)的输出越接近于1越好,即logD(x)越大越好;对于通过噪声z生成的数据G(z)而言,我们希望D(G(z))尽量接近于0(即D能够区分出真假数据),因此log(1D(G(z)))也是越大越好,所以需要maxD

  • 在对生成模型G的参数进行更新时:我们希望G(z)尽可能和真实数据一样,即pg=pdata。因此我们希望D(G(z))尽量接近于1,即log(1D(G(z)))越小越好,所以需要minG。需要说明的是,logD(x)是与G(z)无关的项,在求导时直接为0。

原论文中对GANs理论上的有效性进行了分析,即当固定G更新D时,最优解为D(x)=pdata(x)pdata(x)+pg(x);而在更新G时,目标函数取到全局最小值当且仅当pg=pdata。最后两个模型博弈的结果是G可以生成以假乱真的数据G(z)。而D难以判定G生成的数据是否真实,即D(G(z))=0.5

下面这张图解释了这一博弈过程:

图片名称

第一阶段只有判别模型D参与。将训练集中的样本x作为D的输入,输出0-1之间的某个值,数值越大意味着样本x为真实数据的可能性越大。在这个过程中,我们希望D尽可能使输出的值逼近1。第二阶段中,判别模型D和生成模型G都参与,首先将噪声z输入GG从真实数据集里学习概率分布并产生假的样本,然后将假的样本输入判别模型D,这一次D将尽可能输入数值0。所以在这个过程中,判别模型D相当于一个监督情况下的二分类器,数据要么归为1,要么归为0。

下图给出了一个更为直观的解释:

图片名称

其中,蓝色虚线为判别模型D的分布,黑色虚线为真实数据的分布pdata,绿色实线为生成模型G学习的分布pg。下方的水平线为均匀采样噪声z的区域,上方的水平线为数据x的区域。朝上的箭头表示将随机噪声转化成数据,即x=G(z)。从图(a)到图(b)给出了一个GANs的收敛过程。图(a)中pgpdata存在相似性,但还未完全收敛,D是个部分准确的分类器。图(b)中,固定G更新D,收敛到 D(x)=pdata(x)pdata(x)+pg(x) 。图(c)中对G进行了1次更新,D的梯度引导G(z)移向更可能分类为真实数据的区域。图(d)中,训练若干步后,若GD均有足够的capacity,它们接近某个稳定点,此时pg=pdata。判别模型将无法区分真实数据分布和生成数据分布,即D(x)=0.5

论文中给出的算法流程如下:

图片名称

3. GANs的应用

对抗网络的一个主要缺点是训练过程不稳定,为了提高训练的稳定性,文献[2]提出了 Conditional Generative Adversarial Nets (CGAN),通过把无监督的 GAN 变成半监督或者有监督的模型,从而为 GAN 的训练加上一点目标,其优化的目标函数为:

图片名称

CGAN在生成模型G和判别模型D的建模中均引入了条件变量 y,这里y可以是label或者其他数据形态,将y和GAN原有的输入合并成一个向量作为CGAN的输入。这个简单直接的改进被证明很有效,并广泛用于后续的相关工作中。CGAN模型的示意图如下所示:

图片名称

文献[3]提出了一种Deep Convolutional Generative Adversarial Networks(DCGAN),将对抗网络与卷积神经网络相结合进行图片生成,DCGAN模型的结构如下:

图片名称

DCGANs的基本架构就是使用几层“反卷积”(Deconvolution)。传统的CNN是将图像的尺寸压缩,变得越来越小,而反卷积是将初始输入的小数据(噪声)变得越来越大(但反卷积并不是CNN的逆向操作),例如在上面这张图中,从输入层的100维noise,到最后输出层64x64x3的图片,从小维度产生出大的维度。反卷积的示意图如下所示,2x2的输入图片,经过3x3 的卷积核,可产生4x4的feature map:

图片名称

由于反卷积存在于卷积的反向传播中。其中反向传播的卷积核矩阵是前向传播的转置,所以其又可称为transport convolution。只不过我们把反向传播的操作拿到了前向传播来做,就产生了所谓的反卷积一说。但是transport convolution只能还原信号的大小,不能还原其值,因此不是真正的逆操作。

DCGAN的另一个改进是对生成模型中池化层的处理,传统CNN使用池化层(max-pooling或mean-pooling)来压缩数据的尺寸。在反卷积过程中,数据的尺寸会变得越来越大,而max-pooling的过程并不可逆,所以DCGAN的论文里并没有采用池化的逆向操作,而只是让反卷积的滑动步长设定为2或更大值,从而让尺寸按我们的需求增大。另外,DCGAN模型在GD上均使用了batch normalization,这使得训练过程更加稳定和可控。

文献[3]将GANs应用于文本转图像(Text to Image),从而可根据特定输入文本所描述的内容来产生特定图像。因此,生成模型里除了输入随机噪声之外,还有一些特定的自然语言信息。所以判别模型不仅要区分样本是否是真实的,还要判定其是否与输入的语句信息相符。网络结构如下图所示:

图片名称

以下是实验的结果,同时可看到模型仍然存在Mode Collapse的问题:
图片名称

4. 文献

  1. Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]// International Conference on Neural Information Processing Systems. MIT Press, 2014:2672-2680.
  2. Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.
  3. Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.
  4. Reed S, Akata Z, Yan X, et al. Generative adversarial text to image synthesis[J]. arXiv preprint arXiv:1605.05396, 2016.
展开阅读全文

没有更多推荐了,返回首页