GAN

来源:互联网 发布:手机淘宝买东西视频 编辑:程序博客网 时间:2024/05/29 12:30

到底什么是生成式对抗网络GAN

它要解决的问题是如何从训练样本中学习出新样本,训练样本是图片就生成新图片,训练样本是文章就输出新文章等等。

最终的目的是generator的输出给discriminator时很难判断是真实or伪造的

男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

……

男:这次你看我拍的行不行?

女:你看看你的后期,再看看YYY的后期吧,呵呵

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

男:这次呢?

女:嗯,我拿去当头像了

    上面这段对话讲述了一位"男朋友摄影师"的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。

首先,先介绍一下生成模型(generativemodel),它在机器学习的历史上一直占有举足轻重的地位。当我们拥有大量的数据,例如图像、语音、文本等,如果生成模型可以帮助我们模拟这些高维数据的分布,那么对很多应用将大有裨益。

    针对数据量缺乏的场景,生成模型则可以帮助生成数据,提高数据数量,从而利用半监督学习提升学习效率。语言模型(languagemodel)是生成模型被广泛使用的例子之一,通过合理建模,语言模型不仅可以帮助生成语言通顺的句子,还在机器翻译、聊天对话等研究领域有着广泛的辅助应用。

那么,如果有数据集S={x1…xn},如何建立一个关于这个类型数据的生成模型呢?最简单的方法就是:假设这些数据的分布P{X}服从g(x;θ),在观测数据上通过最大化似然函数得到θ的值,即最大似然法:

 

    GAN的工作原理是这样的:

    文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。于是两者的交流过程类似于:男生拍一些照片->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。

    我们将视线回看到生成模型,以图像生成模型举例。假设我们有一个图片生成模型(generator),它的目标是生成一张真实的图片。与此同时我们有一个图像判别模型(discriminator),它的目标是能够正确判别一张图片是生成出来的还是真实存在的。那么如果我们把刚才的场景映射成图片生成模型和判别模型之间的博弈,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->····

    这个场景直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种相互学习的过程听起来是不是很有趣?

    上述这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成式对抗网络(GAN)。用数学语言描述整个博弈过程的话,就是:假设我们的生成模型是g(z),其中z是一个随机噪声,而g将这个随机噪声转化为数据类型x,仍拿图片问题举例,这里g的输出就是一张图片。D是一个判别模型,对任何输入xD(x)的输出是0-1范围内的一个实数,用来判断这个图片是一个真实图片的概率是多大。令PrPg分别代表真实图像的分布与生成图像的分布,我们判别模型的目标函数如下:

类似的生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

这个最大最小化目标函数如何进行优化呢?最直观的处理办法就是分别对Dg进行交互迭代,固定g,优化D,一段时间后,固定D再优化g,直到过程收敛。

    

    一个简单的例子如下图所示:假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。可以看出,在训练开始时,判别模型是无法很好地区分真实样本和生成样本的。接下来当我们固定生成模型,而优化判别模型时,优化结果如第二幅图所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,在这个过程中,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合

 

参考文献:

1.WassersteinGAN

https://arxiv.org/abs/1701.07875

2.UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarialNetworks

https://arxiv.org/abs/1511.06434

3.Improvedtechniquesfortraininggans

https://arxiv.org/abs/1606.03498

4."GenerativeAdversarialNetworks,"NIPS2016tutorialbyIanGoodfellow

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

 

 

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

 

不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

 

前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现。

自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以来,生成式对抗网络 GAN 广受关注,加上学界大牛 Yann Lecun 在 Quora 答题时曾说,他最激动的深度学习进展是生成式对抗网络,使得 GAN 成为近年来在机器学习领域的新宠,可以说,研究机器学习的人,不懂 GAN,简直都不好意思出门。

首先来看下第一篇论文,了解一下 GAN 的过程和原理:

GAN 启发自博弈论中的二人零和博弈(two-player game),GAN 模型中的两位博弈方分别由生成式模型(generative model)和判别式模型(discriminative model)充当。生成模型 G 捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声 z 生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D 输出大概率,否则,D 输出小概率。可以做如下类比:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。如图所示:

在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直到双方达到一个动态的平 衡(纳什均衡),此时生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。

上述过程可以表述为如下公式:

当固定生成网络 G 的时候,对于判别网络 D 的优化,可以这样理解:输入来自于真实数据,D 优化网络结构使自己输出 1,输入来自于生成数据,D 优化网络结构使自己输出 0;当固定判别网络 D 的时候,G 优化自己的网络使自己输出尽可能和真实数据一样的样本,并且使得生成的样本经过 D 的判别之后,D 输出高概率。

生成对抗网络框架

  传统的生成模型都需要先定义一个概率分布的参数表达式,然后通过最大化似然函数来训练模型,比如深度玻尔兹曼机(RBM)。这些模型的梯度表达 式展开式中通常含有期望项,导致很难得到准确解,一般需要近似,比如在RBM中,利用Markov chain 的收敛性,可以得到符合给定分布下的随机样本。为了克服求解准确性和计算复杂性的困难,J牛创造性的提出来了生成对抗网络。GAN模型不需要直接表示数据 的似然函数,却可以生成与原始数据有相同分布的样本。
  与常规的深度学习模型(比如cnn、dbn、rnn)不同,GAN模型采用了两个独立的神经网络,分别称为"generator"和 "discriminator",生成器用于根据输入噪声信号生成'看上去和真实样本差不多'的高维样本,判别器用于区分生成器产生的样本和真实的训练样 本(属于一个二分类问题)。其模型结构框架如下,


GANs是基于一个minimax机制而不是通常的优化问题,它所定义的损失函数是关于判别器的最大化和生成器的最小化,作者也证明了GAN模型最终能够收敛,此时判别器模型和生成器模型分别取得最优解。记x表示样本数据,p(z)表示生成器的输入噪声分布,G(z;θg)表示噪声到样本空间的映射,D(x)表示x属于真实样本而不是生成样本的概率,那么GAN模型可以定义为如下的优化问题,

从以上公式可以看出,在模型的训练过程中,一方面需要修正判别器D,使值函数V最大化,也即使得D(x)最大化和D(G(z))最小化,其数学意义即最大化判别器分类训练样本和生成样本的正确率,另一方面需要修正生成器G,使值函数V最小化,也即使得D(G(z))最大化,其数学意义即生成器要尽量生成和训练样本非常相似的样本,这也正是GAN名字中Adversarial的由来。J牛提出了交替优化D和G(对D进行k步优化,对G进行1步优化),具体的训练过程如下,

 

GAN在分类问题方面的应用

  早期的GAN模型主要应用于无监督学习任务,即生成和训练样本有相同分布的数据,可以为1维信号或者二维图像。将GAN应用于分类问题时,需要 对网络做改动,这里简单讲解一下已有的两篇文章中提出的方案,"Improved Techniques for Training GANs"和"Semantic Segmentation using Adversarial Networks",前者可以归类于半监督分类算法,而后者则属于有监督分类算法。

半监督分类方法

  将GAN应用于半监督分类任务时,只需要对最初的GAN的结构做稍微改动,即把discriminator模型的输出层替换成softmax分 类器。假设训练数据有c类,那么在训练GAN模型的时候,可以把generator模拟出来的样本归为第c+1类,而softmax分类器也增加一个输出 神经元,用于表示discriminator模型的输入为"假数据"的概率,这里的"假数据"具体指generator生成的样本。因为该模型可以利用有 标签的训练样本,也可以从无标签的生成数据中学习,所以称之为"半监督"分类。定义损失函数如下,其中Lunsupervised是一个标准的GAN优化问题,关于该模型的具体训练方法可以参见原文。

有监督分类方法

  可想而知,在应用于基于像素的有监督分类问题时(文章中的训练数据集类似于人脸识别数据集,区别在于单幅图像的标签y和输入人脸图像大小相 同),GAN中的生成器模型是没有什么作用的。原作者所提出的网络框架包含了两个分类器模型,其中一个用于对单幅图像进行基于像素的分类,另外一个分类器 也称作对抗网络,用于区分标签图和预测出来的概率图,引入对抗网络的目的是使得得到的概率预测图更符合真实的标签图,具体的网络结构如下,


  记训练图像为{xn,yn,n=1,...,N}sx表示预测出来的概率图,a(x,y)表示对抗网络预测y是x的真实标签图的概率,θs,θa分别表示segmentation模型和adversarial模型的参数,那么损失函数可以定义如下,


其中,Lmce(y1,y)表示预测的概率图y1和真实标签图y之间的multi-class cross entropy损失,而Lbce(z1,z)=[zlnz1+(1z)ln(1z1)], 即表示binary cross entropy 损失。与GAN的训练方法类似,这里的模型训练也是通过迭代训练adversarial模型和segmentation模型来完成的。在训练 adversarial模型时,等价于优化如下表达式,其物理意义是使得adversarial模型对概率图和真实标签图的区分能力更强。

 

 

在训练segmentation模型时,等价于优化如下表达式,其物理意义是使得生成的概率图不仅和对应标签图相似,而且adversarial模型很难区分的开

 

 

 

参考资料:Generative Adversarial Nets, Ian J. Goodfellow.
     Improved Techniques for Training GANs. Tim Salimans, Ian Goodfellow.
     Semantic Segmentation using Adversarial Networks. Pauline Luc.

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

对抗网络

基本思想

假设有一种概率分布M,它相对于我们是一个黑盒子。为了了解这个黑盒子中的东西是什么,我们构建了两个东西G和D,G是另一种我们完全知道的概率分布,D用来区分一个事件是由黑盒子中那个不知道的东西产生的还是由我们自己设的G产生的。

不断的调整G和D,直到D不能把事件区分出来为止。在调整过程中,需要:

  • 优化G,使它尽可能的让D混淆。
  • 优化D,使它尽可能的能区分出假冒的东西。

当D无法区分出事件的来源的时候,可以认为,G和M是一样的。从而,我们就了解到了黑盒子中的东西。

简单的例子说明


且看上面四张图a,b,c,d. 黑色的点状线代表M所产生的一些数据,红色的线代表我们自己模拟的分布G,蓝色的线代表着分类模型D。

a图表示初始状态,b图表示,保持G不动,优化D,直到分类的准确率最高
c图表示保持D不动,优化G,直到混淆程度最高。d图表示,多次迭代后,终于使得G能够完全你和M产生的数据,从而认为,G就是M。

形式化

将上述例子所描述的过程公式化,得到如上公式。公式中D(x)表示x属于分布M的概率,因而,优化D的时候就是让V(D,G)最大,优化G的时候就是让V(D,G)最小。其中,x~pdata(x) 表示x取自真正的分布。
z~pz(z) 表示z取自我们模拟的分布。G表示生成模型,D表示分类模型。

上述即是G和D的训练过程。其中在每次迭代中,梯度下降K次来训练D,然后梯度下降一次来训练G,之所以这样做,是因为D的训练是一个非常耗时的操作,且在有限的集合上,训练次数过多容易过拟合。

证明

这篇论文中的思想就如上所述,但是有意思的是还有两个证明来从理论上论证了对抗网络的合理性。

命题一

第一个证明是,当G固定的时候,D会有唯一的最优解。真实描述如下:

证明如下:

  • 首先,对V(G,D)进行变换
  • 对于任意的a,b R2 \ {0, 0}, 下面的式子在a/(a+b)处达到最优。

得证!

定理一

根据证明一,可以对V(G,D)中最大化D的步骤进行变换。

从而得到定理

直接带入pg=pdata可得-log4,当入pg!=pdata时,得到

命题二

命题二原文如下:

这个定理的证明需要用到凸函数的某个似乎是很明显的定理,即,通过凸函数的上确界的次导数可以找到函数在最大值时的导数。这个理论应用到G和D中就是在G不变时,D是拥有唯一的最优值的凸函数,因而可以得到。 但因为我对凸优化理论尚不熟悉,所以没有理解透彻这个地方。

实验

早期的训练中,D可以很轻松的分辨出来G和M中不同的样本,从而会饱和,所以用logD(G(z))来代替log(1-D(G(z)),这样可以为早期的学习提供更加好的梯度。

实验就是去拟合Guassian Parzen Windown,具体细节略过。结果如下:

优势和劣势

优势:

  • Markov链不需要了,只需要后向传播就可以了。
  • 生成网络不需要直接用样本来更新了,这是一个可能存在的优势。
  • 对抗网络的表达能力更强劲,而基于Markov链的模型需要分布比较模糊才能在不同的模式间混合。

劣势:

  • 对于生成模型,没有直接的表达,而是由一些参数控制。
  • D需要和G同步的很好才可以。

各种生成模型的对比如下:

参考

  • Ian J. Goodfellow. Generative Adversarial Nets.
  • 深度 | OpenAI Ian Goodfellow的Quora问答:高歌猛进的机器学习人生
  • 生成式对抗网络GAN研究进展(二)——原始GAN

到底什么是生成式对抗网络GAN

它要解决的问题是如何从训练样本中学习出新样本,训练样本是图片就生成新图片,训练样本是文章就输出新文章等等。

最终的目的是generator的输出给discriminator时很难判断是真实or伪造的

男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

……

男:这次你看我拍的行不行?

女:你看看你的后期,再看看YYY的后期吧,呵呵

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

男:这次呢?

女:嗯,我拿去当头像了

    上面这段对话讲述了一位"男朋友摄影师"的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。

首先,先介绍一下生成模型(generativemodel),它在机器学习的历史上一直占有举足轻重的地位。当我们拥有大量的数据,例如图像、语音、文本等,如果生成模型可以帮助我们模拟这些高维数据的分布,那么对很多应用将大有裨益。

    针对数据量缺乏的场景,生成模型则可以帮助生成数据,提高数据数量,从而利用半监督学习提升学习效率。语言模型(languagemodel)是生成模型被广泛使用的例子之一,通过合理建模,语言模型不仅可以帮助生成语言通顺的句子,还在机器翻译、聊天对话等研究领域有着广泛的辅助应用。

那么,如果有数据集S={x1…xn},如何建立一个关于这个类型数据的生成模型呢?最简单的方法就是:假设这些数据的分布P{X}服从g(x;θ),在观测数据上通过最大化似然函数得到θ的值,即最大似然法:

 

    GAN的工作原理是这样的:

    文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。于是两者的交流过程类似于:男生拍一些照片->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。

    我们将视线回看到生成模型,以图像生成模型举例。假设我们有一个图片生成模型(generator),它的目标是生成一张真实的图片。与此同时我们有一个图像判别模型(discriminator),它的目标是能够正确判别一张图片是生成出来的还是真实存在的。那么如果我们把刚才的场景映射成图片生成模型和判别模型之间的博弈,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->····

    这个场景直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种相互学习的过程听起来是不是很有趣?

    上述这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成式对抗网络(GAN)。用数学语言描述整个博弈过程的话,就是:假设我们的生成模型是g(z),其中z是一个随机噪声,而g将这个随机噪声转化为数据类型x,仍拿图片问题举例,这里g的输出就是一张图片。D是一个判别模型,对任何输入xD(x)的输出是0-1范围内的一个实数,用来判断这个图片是一个真实图片的概率是多大。令PrPg分别代表真实图像的分布与生成图像的分布,我们判别模型的目标函数如下:

类似的生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

这个最大最小化目标函数如何进行优化呢?最直观的处理办法就是分别对Dg进行交互迭代,固定g,优化D,一段时间后,固定D再优化g,直到过程收敛。

    

    一个简单的例子如下图所示:假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。可以看出,在训练开始时,判别模型是无法很好地区分真实样本和生成样本的。接下来当我们固定生成模型,而优化判别模型时,优化结果如第二幅图所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,在这个过程中,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合

 

参考文献:

1.WassersteinGAN

https://arxiv.org/abs/1701.07875

2.UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarialNetworks

https://arxiv.org/abs/1511.06434

3.Improvedtechniquesfortraininggans

https://arxiv.org/abs/1606.03498

4."GenerativeAdversarialNetworks,"NIPS2016tutorialbyIanGoodfellow

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

 

 

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

 

不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

 

前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现。

自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以来,生成式对抗网络 GAN 广受关注,加上学界大牛 Yann Lecun 在 Quora 答题时曾说,他最激动的深度学习进展是生成式对抗网络,使得 GAN 成为近年来在机器学习领域的新宠,可以说,研究机器学习的人,不懂 GAN,简直都不好意思出门。

首先来看下第一篇论文,了解一下 GAN 的过程和原理:

GAN 启发自博弈论中的二人零和博弈(two-player game),GAN 模型中的两位博弈方分别由生成式模型(generative model)和判别式模型(discriminative model)充当。生成模型 G 捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声 z 生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D 输出大概率,否则,D 输出小概率。可以做如下类比:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。如图所示:

在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直到双方达到一个动态的平 衡(纳什均衡),此时生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。

上述过程可以表述为如下公式:

当固定生成网络 G 的时候,对于判别网络 D 的优化,可以这样理解:输入来自于真实数据,D 优化网络结构使自己输出 1,输入来自于生成数据,D 优化网络结构使自己输出 0;当固定判别网络 D 的时候,G 优化自己的网络使自己输出尽可能和真实数据一样的样本,并且使得生成的样本经过 D 的判别之后,D 输出高概率。

生成对抗网络框架

  传统的生成模型都需要先定义一个概率分布的参数表达式,然后通过最大化似然函数来训练模型,比如深度玻尔兹曼机(RBM)。这些模型的梯度表达 式展开式中通常含有期望项,导致很难得到准确解,一般需要近似,比如在RBM中,利用Markov chain 的收敛性,可以得到符合给定分布下的随机样本。为了克服求解准确性和计算复杂性的困难,J牛创造性的提出来了生成对抗网络。GAN模型不需要直接表示数据 的似然函数,却可以生成与原始数据有相同分布的样本。
  与常规的深度学习模型(比如cnn、dbn、rnn)不同,GAN模型采用了两个独立的神经网络,分别称为"generator"和 "discriminator",生成器用于根据输入噪声信号生成'看上去和真实样本差不多'的高维样本,判别器用于区分生成器产生的样本和真实的训练样 本(属于一个二分类问题)。其模型结构框架如下,


GANs是基于一个minimax机制而不是通常的优化问题,它所定义的损失函数是关于判别器的最大化和生成器的最小化,作者也证明了GAN模型最终能够收敛,此时判别器模型和生成器模型分别取得最优解。记x表示样本数据,p(z)表示生成器的输入噪声分布,G(z;θg)表示噪声到样本空间的映射,D(x)表示x属于真实样本而不是生成样本的概率,那么GAN模型可以定义为如下的优化问题,

从以上公式可以看出,在模型的训练过程中,一方面需要修正判别器D,使值函数V最大化,也即使得D(x)最大化和D(G(z))最小化,其数学意义即最大化判别器分类训练样本和生成样本的正确率,另一方面需要修正生成器G,使值函数V最小化,也即使得D(G(z))最大化,其数学意义即生成器要尽量生成和训练样本非常相似的样本,这也正是GAN名字中Adversarial的由来。J牛提出了交替优化D和G(对D进行k步优化,对G进行1步优化),具体的训练过程如下,

 

GAN在分类问题方面的应用

  早期的GAN模型主要应用于无监督学习任务,即生成和训练样本有相同分布的数据,可以为1维信号或者二维图像。将GAN应用于分类问题时,需要 对网络做改动,这里简单讲解一下已有的两篇文章中提出的方案,"Improved Techniques for Training GANs"和"Semantic Segmentation using Adversarial Networks",前者可以归类于半监督分类算法,而后者则属于有监督分类算法。

半监督分类方法

  将GAN应用于半监督分类任务时,只需要对最初的GAN的结构做稍微改动,即把discriminator模型的输出层替换成softmax分 类器。假设训练数据有c类,那么在训练GAN模型的时候,可以把generator模拟出来的样本归为第c+1类,而softmax分类器也增加一个输出 神经元,用于表示discriminator模型的输入为"假数据"的概率,这里的"假数据"具体指generator生成的样本。因为该模型可以利用有 标签的训练样本,也可以从无标签的生成数据中学习,所以称之为"半监督"分类。定义损失函数如下,其中Lunsupervised是一个标准的GAN优化问题,关于该模型的具体训练方法可以参见原文。

有监督分类方法

  可想而知,在应用于基于像素的有监督分类问题时(文章中的训练数据集类似于人脸识别数据集,区别在于单幅图像的标签y和输入人脸图像大小相 同),GAN中的生成器模型是没有什么作用的。原作者所提出的网络框架包含了两个分类器模型,其中一个用于对单幅图像进行基于像素的分类,另外一个分类器 也称作对抗网络,用于区分标签图和预测出来的概率图,引入对抗网络的目的是使得得到的概率预测图更符合真实的标签图,具体的网络结构如下,


  记训练图像为{xn,yn,n=1,...,N}sx表示预测出来的概率图,a(x,y)表示对抗网络预测y是x的真实标签图的概率,θs,θa分别表示segmentation模型和adversarial模型的参数,那么损失函数可以定义如下,


其中,Lmce(y1,y)表示预测的概率图y1和真实标签图y之间的multi-class cross entropy损失,而Lbce(z1,z)=[zlnz1+(1z)ln(1z1)], 即表示binary cross entropy 损失。与GAN的训练方法类似,这里的模型训练也是通过迭代训练adversarial模型和segmentation模型来完成的。在训练 adversarial模型时,等价于优化如下表达式,其物理意义是使得adversarial模型对概率图和真实标签图的区分能力更强。

 

 

在训练segmentation模型时,等价于优化如下表达式,其物理意义是使得生成的概率图不仅和对应标签图相似,而且adversarial模型很难区分的开

 

 

 

参考资料:Generative Adversarial Nets, Ian J. Goodfellow.
     Improved Techniques for Training GANs. Tim Salimans, Ian Goodfellow.
     Semantic Segmentation using Adversarial Networks. Pauline Luc.

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

对抗网络

基本思想

假设有一种概率分布M,它相对于我们是一个黑盒子。为了了解这个黑盒子中的东西是什么,我们构建了两个东西G和D,G是另一种我们完全知道的概率分布,D用来区分一个事件是由黑盒子中那个不知道的东西产生的还是由我们自己设的G产生的。

不断的调整G和D,直到D不能把事件区分出来为止。在调整过程中,需要:

  • 优化G,使它尽可能的让D混淆。
  • 优化D,使它尽可能的能区分出假冒的东西。

当D无法区分出事件的来源的时候,可以认为,G和M是一样的。从而,我们就了解到了黑盒子中的东西。

简单的例子说明


且看上面四张图a,b,c,d. 黑色的点状线代表M所产生的一些数据,红色的线代表我们自己模拟的分布G,蓝色的线代表着分类模型D。

a图表示初始状态,b图表示,保持G不动,优化D,直到分类的准确率最高
c图表示保持D不动,优化G,直到混淆程度最高。d图表示,多次迭代后,终于使得G能够完全你和M产生的数据,从而认为,G就是M。

形式化

将上述例子所描述的过程公式化,得到如上公式。公式中D(x)表示x属于分布M的概率,因而,优化D的时候就是让V(D,G)最大,优化G的时候就是让V(D,G)最小。其中,x~pdata(x) 表示x取自真正的分布。
z~pz(z) 表示z取自我们模拟的分布。G表示生成模型,D表示分类模型。

上述即是G和D的训练过程。其中在每次迭代中,梯度下降K次来训练D,然后梯度下降一次来训练G,之所以这样做,是因为D的训练是一个非常耗时的操作,且在有限的集合上,训练次数过多容易过拟合。

证明

这篇论文中的思想就如上所述,但是有意思的是还有两个证明来从理论上论证了对抗网络的合理性。

命题一

第一个证明是,当G固定的时候,D会有唯一的最优解。真实描述如下:

证明如下:

  • 首先,对V(G,D)进行变换
  • 对于任意的a,b R2 \ {0, 0}, 下面的式子在a/(a+b)处达到最优。

得证!

定理一

根据证明一,可以对V(G,D)中最大化D的步骤进行变换。

从而得到定理

直接带入pg=pdata可得-log4,当入pg!=pdata时,得到

命题二

命题二原文如下:

这个定理的证明需要用到凸函数的某个似乎是很明显的定理,即,通过凸函数的上确界的次导数可以找到函数在最大值时的导数。这个理论应用到G和D中就是在G不变时,D是拥有唯一的最优值的凸函数,因而可以得到。 但因为我对凸优化理论尚不熟悉,所以没有理解透彻这个地方。

实验

早期的训练中,D可以很轻松的分辨出来G和M中不同的样本,从而会饱和,所以用logD(G(z))来代替log(1-D(G(z)),这样可以为早期的学习提供更加好的梯度。

实验就是去拟合Guassian Parzen Windown,具体细节略过。结果如下:

优势和劣势

优势:

  • Markov链不需要了,只需要后向传播就可以了。
  • 生成网络不需要直接用样本来更新了,这是一个可能存在的优势。
  • 对抗网络的表达能力更强劲,而基于Markov链的模型需要分布比较模糊才能在不同的模式间混合。

劣势:

  • 对于生成模型,没有直接的表达,而是由一些参数控制。
  • D需要和G同步的很好才可以。

各种生成模型的对比如下:

参考

  • Ian J. Goodfellow. Generative Adversarial Nets.
  • 深度 | OpenAI Ian Goodfellow的Quora问答:高歌猛进的机器学习人生
  • 生成式对抗网络GAN研究进展(二)——原始GAN

到底什么是生成式对抗网络GAN

它要解决的问题是如何从训练样本中学习出新样本,训练样本是图片就生成新图片,训练样本是文章就输出新文章等等。

最终的目的是generator的输出给discriminator时很难判断是真实or伪造的

男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

……

男:这次你看我拍的行不行?

女:你看看你的后期,再看看YYY的后期吧,呵呵

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

男:这次呢?

女:嗯,我拿去当头像了

    上面这段对话讲述了一位"男朋友摄影师"的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。

首先,先介绍一下生成模型(generativemodel),它在机器学习的历史上一直占有举足轻重的地位。当我们拥有大量的数据,例如图像、语音、文本等,如果生成模型可以帮助我们模拟这些高维数据的分布,那么对很多应用将大有裨益。

    针对数据量缺乏的场景,生成模型则可以帮助生成数据,提高数据数量,从而利用半监督学习提升学习效率。语言模型(languagemodel)是生成模型被广泛使用的例子之一,通过合理建模,语言模型不仅可以帮助生成语言通顺的句子,还在机器翻译、聊天对话等研究领域有着广泛的辅助应用。

那么,如果有数据集S={x1…xn},如何建立一个关于这个类型数据的生成模型呢?最简单的方法就是:假设这些数据的分布P{X}服从g(x;θ),在观测数据上通过最大化似然函数得到θ的值,即最大似然法:

 

    GAN的工作原理是这样的:

    文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。于是两者的交流过程类似于:男生拍一些照片->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。

    我们将视线回看到生成模型,以图像生成模型举例。假设我们有一个图片生成模型(generator),它的目标是生成一张真实的图片。与此同时我们有一个图像判别模型(discriminator),它的目标是能够正确判别一张图片是生成出来的还是真实存在的。那么如果我们把刚才的场景映射成图片生成模型和判别模型之间的博弈,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->····

    这个场景直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种相互学习的过程听起来是不是很有趣?

    上述这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成式对抗网络(GAN)。用数学语言描述整个博弈过程的话,就是:假设我们的生成模型是g(z),其中z是一个随机噪声,而g将这个随机噪声转化为数据类型x,仍拿图片问题举例,这里g的输出就是一张图片。D是一个判别模型,对任何输入xD(x)的输出是0-1范围内的一个实数,用来判断这个图片是一个真实图片的概率是多大。令PrPg分别代表真实图像的分布与生成图像的分布,我们判别模型的目标函数如下:

类似的生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

这个最大最小化目标函数如何进行优化呢?最直观的处理办法就是分别对Dg进行交互迭代,固定g,优化D,一段时间后,固定D再优化g,直到过程收敛。

    

    一个简单的例子如下图所示:假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。可以看出,在训练开始时,判别模型是无法很好地区分真实样本和生成样本的。接下来当我们固定生成模型,而优化判别模型时,优化结果如第二幅图所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,在这个过程中,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合

 

参考文献:

1.WassersteinGAN

https://arxiv.org/abs/1701.07875

2.UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarialNetworks

https://arxiv.org/abs/1511.06434

3.Improvedtechniquesfortraininggans

https://arxiv.org/abs/1606.03498

4."GenerativeAdversarialNetworks,"NIPS2016tutorialbyIanGoodfellow

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

 

 

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

 

不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

 

前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现。

自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以来,生成式对抗网络 GAN 广受关注,加上学界大牛 Yann Lecun 在 Quora 答题时曾说,他最激动的深度学习进展是生成式对抗网络,使得 GAN 成为近年来在机器学习领域的新宠,可以说,研究机器学习的人,不懂 GAN,简直都不好意思出门。

首先来看下第一篇论文,了解一下 GAN 的过程和原理:

GAN 启发自博弈论中的二人零和博弈(two-player game),GAN 模型中的两位博弈方分别由生成式模型(generative model)和判别式模型(discriminative model)充当。生成模型 G 捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声 z 生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D 输出大概率,否则,D 输出小概率。可以做如下类比:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。如图所示:

在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直到双方达到一个动态的平 衡(纳什均衡),此时生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。

上述过程可以表述为如下公式:

当固定生成网络 G 的时候,对于判别网络 D 的优化,可以这样理解:输入来自于真实数据,D 优化网络结构使自己输出 1,输入来自于生成数据,D 优化网络结构使自己输出 0;当固定判别网络 D 的时候,G 优化自己的网络使自己输出尽可能和真实数据一样的样本,并且使得生成的样本经过 D 的判别之后,D 输出高概率。

生成对抗网络框架

  传统的生成模型都需要先定义一个概率分布的参数表达式,然后通过最大化似然函数来训练模型,比如深度玻尔兹曼机(RBM)。这些模型的梯度表达 式展开式中通常含有期望项,导致很难得到准确解,一般需要近似,比如在RBM中,利用Markov chain 的收敛性,可以得到符合给定分布下的随机样本。为了克服求解准确性和计算复杂性的困难,J牛创造性的提出来了生成对抗网络。GAN模型不需要直接表示数据 的似然函数,却可以生成与原始数据有相同分布的样本。
  与常规的深度学习模型(比如cnn、dbn、rnn)不同,GAN模型采用了两个独立的神经网络,分别称为"generator"和 "discriminator",生成器用于根据输入噪声信号生成'看上去和真实样本差不多'的高维样本,判别器用于区分生成器产生的样本和真实的训练样 本(属于一个二分类问题)。其模型结构框架如下,


GANs是基于一个minimax机制而不是通常的优化问题,它所定义的损失函数是关于判别器的最大化和生成器的最小化,作者也证明了GAN模型最终能够收敛,此时判别器模型和生成器模型分别取得最优解。记x表示样本数据,p(z)表示生成器的输入噪声分布,G(z;θg)表示噪声到样本空间的映射,D(x)表示x属于真实样本而不是生成样本的概率,那么GAN模型可以定义为如下的优化问题,

从以上公式可以看出,在模型的训练过程中,一方面需要修正判别器D,使值函数V最大化,也即使得D(x)最大化和D(G(z))最小化,其数学意义即最大化判别器分类训练样本和生成样本的正确率,另一方面需要修正生成器G,使值函数V最小化,也即使得D(G(z))最大化,其数学意义即生成器要尽量生成和训练样本非常相似的样本,这也正是GAN名字中Adversarial的由来。J牛提出了交替优化D和G(对D进行k步优化,对G进行1步优化),具体的训练过程如下,

 

GAN在分类问题方面的应用

  早期的GAN模型主要应用于无监督学习任务,即生成和训练样本有相同分布的数据,可以为1维信号或者二维图像。将GAN应用于分类问题时,需要 对网络做改动,这里简单讲解一下已有的两篇文章中提出的方案,"Improved Techniques for Training GANs"和"Semantic Segmentation using Adversarial Networks",前者可以归类于半监督分类算法,而后者则属于有监督分类算法。

半监督分类方法

  将GAN应用于半监督分类任务时,只需要对最初的GAN的结构做稍微改动,即把discriminator模型的输出层替换成softmax分 类器。假设训练数据有c类,那么在训练GAN模型的时候,可以把generator模拟出来的样本归为第c+1类,而softmax分类器也增加一个输出 神经元,用于表示discriminator模型的输入为"假数据"的概率,这里的"假数据"具体指generator生成的样本。因为该模型可以利用有 标签的训练样本,也可以从无标签的生成数据中学习,所以称之为"半监督"分类。定义损失函数如下,其中Lunsupervised是一个标准的GAN优化问题,关于该模型的具体训练方法可以参见原文。

有监督分类方法

  可想而知,在应用于基于像素的有监督分类问题时(文章中的训练数据集类似于人脸识别数据集,区别在于单幅图像的标签y和输入人脸图像大小相 同),GAN中的生成器模型是没有什么作用的。原作者所提出的网络框架包含了两个分类器模型,其中一个用于对单幅图像进行基于像素的分类,另外一个分类器 也称作对抗网络,用于区分标签图和预测出来的概率图,引入对抗网络的目的是使得得到的概率预测图更符合真实的标签图,具体的网络结构如下,


  记训练图像为{xn,yn,n=1,...,N}sx表示预测出来的概率图,a(x,y)表示对抗网络预测y是x的真实标签图的概率,θs,θa分别表示segmentation模型和adversarial模型的参数,那么损失函数可以定义如下,


其中,Lmce(y1,y)表示预测的概率图y1和真实标签图y之间的multi-class cross entropy损失,而Lbce(z1,z)=[zlnz1+(1z)ln(1z1)], 即表示binary cross entropy 损失。与GAN的训练方法类似,这里的模型训练也是通过迭代训练adversarial模型和segmentation模型来完成的。在训练 adversarial模型时,等价于优化如下表达式,其物理意义是使得adversarial模型对概率图和真实标签图的区分能力更强。

 

 

在训练segmentation模型时,等价于优化如下表达式,其物理意义是使得生成的概率图不仅和对应标签图相似,而且adversarial模型很难区分的开

 

 

 

参考资料:Generative Adversarial Nets, Ian J. Goodfellow.
     Improved Techniques for Training GANs. Tim Salimans, Ian Goodfellow.
     Semantic Segmentation using Adversarial Networks. Pauline Luc.

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

对抗网络

基本思想

假设有一种概率分布M,它相对于我们是一个黑盒子。为了了解这个黑盒子中的东西是什么,我们构建了两个东西G和D,G是另一种我们完全知道的概率分布,D用来区分一个事件是由黑盒子中那个不知道的东西产生的还是由我们自己设的G产生的。

不断的调整G和D,直到D不能把事件区分出来为止。在调整过程中,需要:

  • 优化G,使它尽可能的让D混淆。
  • 优化D,使它尽可能的能区分出假冒的东西。

当D无法区分出事件的来源的时候,可以认为,G和M是一样的。从而,我们就了解到了黑盒子中的东西。

简单的例子说明


且看上面四张图a,b,c,d. 黑色的点状线代表M所产生的一些数据,红色的线代表我们自己模拟的分布G,蓝色的线代表着分类模型D。

a图表示初始状态,b图表示,保持G不动,优化D,直到分类的准确率最高
c图表示保持D不动,优化G,直到混淆程度最高。d图表示,多次迭代后,终于使得G能够完全你和M产生的数据,从而认为,G就是M。

形式化

将上述例子所描述的过程公式化,得到如上公式。公式中D(x)表示x属于分布M的概率,因而,优化D的时候就是让V(D,G)最大,优化G的时候就是让V(D,G)最小。其中,x~pdata(x) 表示x取自真正的分布。
z~pz(z) 表示z取自我们模拟的分布。G表示生成模型,D表示分类模型。

上述即是G和D的训练过程。其中在每次迭代中,梯度下降K次来训练D,然后梯度下降一次来训练G,之所以这样做,是因为D的训练是一个非常耗时的操作,且在有限的集合上,训练次数过多容易过拟合。

证明

这篇论文中的思想就如上所述,但是有意思的是还有两个证明来从理论上论证了对抗网络的合理性。

命题一

第一个证明是,当G固定的时候,D会有唯一的最优解。真实描述如下:

证明如下:

  • 首先,对V(G,D)进行变换
  • 对于任意的a,b R2 \ {0, 0}, 下面的式子在a/(a+b)处达到最优。

得证!

定理一

根据证明一,可以对V(G,D)中最大化D的步骤进行变换。

从而得到定理

直接带入pg=pdata可得-log4,当入pg!=pdata时,得到

命题二

命题二原文如下:

这个定理的证明需要用到凸函数的某个似乎是很明显的定理,即,通过凸函数的上确界的次导数可以找到函数在最大值时的导数。这个理论应用到G和D中就是在G不变时,D是拥有唯一的最优值的凸函数,因而可以得到。 但因为我对凸优化理论尚不熟悉,所以没有理解透彻这个地方。

实验

早期的训练中,D可以很轻松的分辨出来G和M中不同的样本,从而会饱和,所以用logD(G(z))来代替log(1-D(G(z)),这样可以为早期的学习提供更加好的梯度。

实验就是去拟合Guassian Parzen Windown,具体细节略过。结果如下:

优势和劣势

优势:

  • Markov链不需要了,只需要后向传播就可以了。
  • 生成网络不需要直接用样本来更新了,这是一个可能存在的优势。
  • 对抗网络的表达能力更强劲,而基于Markov链的模型需要分布比较模糊才能在不同的模式间混合。

劣势:

  • 对于生成模型,没有直接的表达,而是由一些参数控制。
  • D需要和G同步的很好才可以。

各种生成模型的对比如下:

参考

  • Ian J. Goodfellow. Generative Adversarial Nets.
  • 深度 | OpenAI Ian Goodfellow的Quora问答:高歌猛进的机器学习人生
  • 生成式对抗网络GAN研究进展(二)——原始GAN

到底什么是生成式对抗网络GAN

它要解决的问题是如何从训练样本中学习出新样本,训练样本是图片就生成新图片,训练样本是文章就输出新文章等等。

最终的目的是generator的输出给discriminator时很难判断是真实or伪造的

男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

……

男:这次你看我拍的行不行?

女:你看看你的后期,再看看YYY的后期吧,呵呵

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

男:这次呢?

女:嗯,我拿去当头像了

    上面这段对话讲述了一位"男朋友摄影师"的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。

首先,先介绍一下生成模型(generativemodel),它在机器学习的历史上一直占有举足轻重的地位。当我们拥有大量的数据,例如图像、语音、文本等,如果生成模型可以帮助我们模拟这些高维数据的分布,那么对很多应用将大有裨益。

    针对数据量缺乏的场景,生成模型则可以帮助生成数据,提高数据数量,从而利用半监督学习提升学习效率。语言模型(languagemodel)是生成模型被广泛使用的例子之一,通过合理建模,语言模型不仅可以帮助生成语言通顺的句子,还在机器翻译、聊天对话等研究领域有着广泛的辅助应用。

那么,如果有数据集S={x1…xn},如何建立一个关于这个类型数据的生成模型呢?最简单的方法就是:假设这些数据的分布P{X}服从g(x;θ),在观测数据上通过最大化似然函数得到θ的值,即最大似然法:

 

    GAN的工作原理是这样的:

    文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。于是两者的交流过程类似于:男生拍一些照片->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出"自己男朋友"拍的照片和"别人家的男朋友"拍的照片的区别。

    我们将视线回看到生成模型,以图像生成模型举例。假设我们有一个图片生成模型(generator),它的目标是生成一张真实的图片。与此同时我们有一个图像判别模型(discriminator),它的目标是能够正确判别一张图片是生成出来的还是真实存在的。那么如果我们把刚才的场景映射成图片生成模型和判别模型之间的博弈,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->····

    这个场景直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种相互学习的过程听起来是不是很有趣?

    上述这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成式对抗网络(GAN)。用数学语言描述整个博弈过程的话,就是:假设我们的生成模型是g(z),其中z是一个随机噪声,而g将这个随机噪声转化为数据类型x,仍拿图片问题举例,这里g的输出就是一张图片。D是一个判别模型,对任何输入xD(x)的输出是0-1范围内的一个实数,用来判断这个图片是一个真实图片的概率是多大。令PrPg分别代表真实图像的分布与生成图像的分布,我们判别模型的目标函数如下:

类似的生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

这个最大最小化目标函数如何进行优化呢?最直观的处理办法就是分别对Dg进行交互迭代,固定g,优化D,一段时间后,固定D再优化g,直到过程收敛。

    

    一个简单的例子如下图所示:假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。可以看出,在训练开始时,判别模型是无法很好地区分真实样本和生成样本的。接下来当我们固定生成模型,而优化判别模型时,优化结果如第二幅图所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,在这个过程中,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合

 

参考文献:

1.WassersteinGAN

https://arxiv.org/abs/1701.07875

2.UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarialNetworks

https://arxiv.org/abs/1511.06434

3.Improvedtechniquesfortraininggans

https://arxiv.org/abs/1606.03498

4."GenerativeAdversarialNetworks,"NIPS2016tutorialbyIanGoodfellow

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

 

 

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

 

不要怂,就是GAN (生成式对抗网络) (一): GAN 简介

 

前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现。

自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以来,生成式对抗网络 GAN 广受关注,加上学界大牛 Yann Lecun 在 Quora 答题时曾说,他最激动的深度学习进展是生成式对抗网络,使得 GAN 成为近年来在机器学习领域的新宠,可以说,研究机器学习的人,不懂 GAN,简直都不好意思出门。

首先来看下第一篇论文,了解一下 GAN 的过程和原理:

GAN 启发自博弈论中的二人零和博弈(two-player game),GAN 模型中的两位博弈方分别由生成式模型(generative model)和判别式模型(discriminative model)充当。生成模型 G 捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声 z 生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D 输出大概率,否则,D 输出小概率。可以做如下类比:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。如图所示:

在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直到双方达到一个动态的平 衡(纳什均衡),此时生成模型 G 恢复了训练数据的分布(造出了和真实数据一模一样的样本),判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。

上述过程可以表述为如下公式:

当固定生成网络 G 的时候,对于判别网络 D 的优化,可以这样理解:输入来自于真实数据,D 优化网络结构使自己输出 1,输入来自于生成数据,D 优化网络结构使自己输出 0;当固定判别网络 D 的时候,G 优化自己的网络使自己输出尽可能和真实数据一样的样本,并且使得生成的样本经过 D 的判别之后,D 输出高概率。

生成对抗网络框架

  传统的生成模型都需要先定义一个概率分布的参数表达式,然后通过最大化似然函数来训练模型,比如深度玻尔兹曼机(RBM)。这些模型的梯度表达 式展开式中通常含有期望项,导致很难得到准确解,一般需要近似,比如在RBM中,利用Markov chain 的收敛性,可以得到符合给定分布下的随机样本。为了克服求解准确性和计算复杂性的困难,J牛创造性的提出来了生成对抗网络。GAN模型不需要直接表示数据 的似然函数,却可以生成与原始数据有相同分布的样本。
  与常规的深度学习模型(比如cnn、dbn、rnn)不同,GAN模型采用了两个独立的神经网络,分别称为"generator"和 "discriminator",生成器用于根据输入噪声信号生成'看上去和真实样本差不多'的高维样本,判别器用于区分生成器产生的样本和真实的训练样 本(属于一个二分类问题)。其模型结构框架如下,


GANs是基于一个minimax机制而不是通常的优化问题,它所定义的损失函数是关于判别器的最大化和生成器的最小化,作者也证明了GAN模型最终能够收敛,此时判别器模型和生成器模型分别取得最优解。记x表示样本数据,p(z)表示生成器的输入噪声分布,G(z;θg)表示噪声到样本空间的映射,D(x)表示x属于真实样本而不是生成样本的概率,那么GAN模型可以定义为如下的优化问题,

从以上公式可以看出,在模型的训练过程中,一方面需要修正判别器D,使值函数V最大化,也即使得D(x)最大化和D(G(z))最小化,其数学意义即最大化判别器分类训练样本和生成样本的正确率,另一方面需要修正生成器G,使值函数V最小化,也即使得D(G(z))最大化,其数学意义即生成器要尽量生成和训练样本非常相似的样本,这也正是GAN名字中Adversarial的由来。J牛提出了交替优化D和G(对D进行k步优化,对G进行1步优化),具体的训练过程如下,

 

GAN在分类问题方面的应用

  早期的GAN模型主要应用于无监督学习任务,即生成和训练样本有相同分布的数据,可以为1维信号或者二维图像。将GAN应用于分类问题时,需要 对网络做改动,这里简单讲解一下已有的两篇文章中提出的方案,"Improved Techniques for Training GANs"和"Semantic Segmentation using Adversarial Networks",前者可以归类于半监督分类算法,而后者则属于有监督分类算法。

半监督分类方法

  将GAN应用于半监督分类任务时,只需要对最初的GAN的结构做稍微改动,即把discriminator模型的输出层替换成softmax分 类器。假设训练数据有c类,那么在训练GAN模型的时候,可以把generator模拟出来的样本归为第c+1类,而softmax分类器也增加一个输出 神经元,用于表示discriminator模型的输入为"假数据"的概率,这里的"假数据"具体指generator生成的样本。因为该模型可以利用有 标签的训练样本,也可以从无标签的生成数据中学习,所以称之为"半监督"分类。定义损失函数如下,其中Lunsupervised是一个标准的GAN优化问题,关于该模型的具体训练方法可以参见原文。

有监督分类方法

  可想而知,在应用于基于像素的有监督分类问题时(文章中的训练数据集类似于人脸识别数据集,区别在于单幅图像的标签y和输入人脸图像大小相 同),GAN中的生成器模型是没有什么作用的。原作者所提出的网络框架包含了两个分类器模型,其中一个用于对单幅图像进行基于像素的分类,另外一个分类器 也称作对抗网络,用于区分标签图和预测出来的概率图,引入对抗网络的目的是使得得到的概率预测图更符合真实的标签图,具体的网络结构如下,


  记训练图像为{xn,yn,n=1,...,N}sx表示预测出来的概率图,a(x,y)表示对抗网络预测y是x的真实标签图的概率,θs,θa分别表示segmentation模型和adversarial模型的参数,那么损失函数可以定义如下,


其中,Lmce(y1,y)表示预测的概率图y1和真实标签图y之间的multi-class cross entropy损失,而Lbce(z1,z)=[zlnz1+(1z)ln(1z1)], 即表示binary cross entropy 损失。与GAN的训练方法类似,这里的模型训练也是通过迭代训练adversarial模型和segmentation模型来完成的。在训练 adversarial模型时,等价于优化如下表达式,其物理意义是使得adversarial模型对概率图和真实标签图的区分能力更强。

 

 

在训练segmentation模型时,等价于优化如下表达式,其物理意义是使得生成的概率图不仅和对应标签图相似,而且adversarial模型很难区分的开

 

 

 

参考资料:Generative Adversarial Nets, Ian J. Goodfellow.
     Improved Techniques for Training GANs. Tim Salimans, Ian Goodfellow.
     Semantic Segmentation using Adversarial Networks. Pauline Luc.

 

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

 

 

对抗网络

基本思想

假设有一种概率分布M,它相对于我们是一个黑盒子。为了了解这个黑盒子中的东西是什么,我们构建了两个东西G和D,G是另一种我们完全知道的概率分布,D用来区分一个事件是由黑盒子中那个不知道的东西产生的还是由我们自己设的G产生的。

不断的调整G和D,直到D不能把事件区分出来为止。在调整过程中,需要:

  • 优化G,使它尽可能的让D混淆。
  • 优化D,使它尽可能的能区分出假冒的东西。

当D无法区分出事件的来源的时候,可以认为,G和M是一样的。从而,我们就了解到了黑盒子中的东西。

简单的例子说明


且看上面四张图a,b,c,d. 黑色的点状线代表M所产生的一些数据,红色的线代表我们自己模拟的分布G,蓝色的线代表着分类模型D。

a图表示初始状态,b图表示,保持G不动,优化D,直到分类的准确率最高
c图表示保持D不动,优化G,直到混淆程度最高。d图表示,多次迭代后,终于使得G能够完全你和M产生的数据,从而认为,G就是M。

形式化

将上述例子所描述的过程公式化,得到如上公式。公式中D(x)表示x属于分布M的概率,因而,优化D的时候就是让V(D,G)最大,优化G的时候就是让V(D,G)最小。其中,x~pdata(x) 表示x取自真正的分布。
z~pz(z) 表示z取自我们模拟的分布。G表示生成模型,D表示分类模型。

上述即是G和D的训练过程。其中在每次迭代中,梯度下降K次来训练D,然后梯度下降一次来训练G,之所以这样做,是因为D的训练是一个非常耗时的操作,且在有限的集合上,训练次数过多容易过拟合。

证明

这篇论文中的思想就如上所述,但是有意思的是还有两个证明来从理论上论证了对抗网络的合理性。

命题一

第一个证明是,当G固定的时候,D会有唯一的最优解。真实描述如下:

证明如下:

  • 首先,对V(G,D)进行变换
  • 对于任意的a,b R2 \ {0, 0}, 下面的式子在a/(a+b)处达到最优。

得证!

定理一

根据证明一,可以对V(G,D)中最大化D的步骤进行变换。

从而得到定理

直接带入pg=pdata可得-log4,当入pg!=pdata时,得到

命题二

命题二原文如下:

这个定理的证明需要用到凸函数的某个似乎是很明显的定理,即,通过凸函数的上确界的次导数可以找到函数在最大值时的导数。这个理论应用到G和D中就是在G不变时,D是拥有唯一的最优值的凸函数,因而可以得到。 但因为我对凸优化理论尚不熟悉,所以没有理解透彻这个地方。

实验

早期的训练中,D可以很轻松的分辨出来G和M中不同的样本,从而会饱和,所以用logD(G(z))来代替log(1-D(G(z)),这样可以为早期的学习提供更加好的梯度。

实验就是去拟合Guassian Parzen Windown,具体细节略过。结果如下:

优势和劣势

优势:

  • Markov链不需要了,只需要后向传播就可以了。
  • 生成网络不需要直接用样本来更新了,这是一个可能存在的优势。
  • 对抗网络的表达能力更强劲,而基于Markov链的模型需要分布比较模糊才能在不同的模式间混合。

劣势:

  • 对于生成模型,没有直接的表达,而是由一些参数控制。
  • D需要和G同步的很好才可以。

各种生成模型的对比如下:

参考

  • Ian J. Goodfellow. Generative Adversarial Nets.
  • 深度 | OpenAI Ian Goodfellow的Quora问答:高歌猛进的机器学习人生
  • 生成式对抗网络GAN研究进展(二)——原始GAN
原创粉丝点击