当前位置:   article > 正文

GAN网络(论文阅读):Generative Adversarial Nets

GAN网络(论文阅读):Generative Adversarial Nets

研究问题

本文提出通过对抗过程来估计生成模型,同时训练两个模型,分别为生成模型G和辨别模型D。前者用来抓取数据的分布,后者用来估计样本是从G得来还是根据真实数据生成。G的训练过程是使D出错的概率最大化。最终使G赢,即G生成的数据D判别不出来。

一.Introduction

第一段:The promise of deep learning is to discover rich, hierarchical models that represent probability distributions over the kinds of data encountered in artificial intelligence applications.(深度学习的前景就是发现丰富的有层次的模型,这些模型表示在人工智能领域中遇到各种数据的概率分布。)深度学习在判别模型方面成果比较突出,但是在生成模型方面差些,原因就是在最大似然估计中的概率计算难以估计,同时难以在生成环境中利用分段线性单元的好处。这篇文章的关键是不用近似似然函数而可以用别的方法来得到一个计算上更好的模型。
第二段:提出本文框架,且每个模型都是MLP,名字叫做GAN。介绍GAN,该框架中有两个模型,分别是生成模型G和判别模型D,将G比作制作假币的造假者,D比作区分真币假币的警察,最终目的是G赢,使得D不能区分真币假币,从而使G能够生成数据。
第三段:框架下的生成模型是MLP,输入为随机噪音的分布,MLP可以将噪音映射到想拟合的分布中去,同理如果判别模型也是MLP,这个框架就是一种特例叫做adversarial nets(对抗网络模型)。由于两个模型都是MLP,可以使用反向传播和Dropout来训练两个模型。

二.Related work

第一段:最初的方法是构造一个分布函数,学习其中参数,使其参数的似然函数最大化,该方法的优点是明确的知道分布是什么,缺点是当维度比较高时,计算很复杂。提出Generative machines(生成模型),当前方法是不需要构造这个分布函数,而是学习一个模型去近似结果,优点就是计算方便,缺点是不知道具体的分布是什么。
第二...段:由于对f的期望求导等价于对f本身求导,所以可以使用误差的反向传递来对GAN求解。VAEs与GAN类似,也使用到判别模型来帮助生成模型,例如NCE也使用到了类似的思路,但是其损失函数比较复杂,所以求解效果也没有GAN好。Predictability Minimization(PM)算法和GAN的区别:其实GAN就是Predictability Minimization反过来。Adversarial examples和GAN的区别:Adversarial examples是说通过构造一些和真实样本很像的假样本,能够糊弄到分类器,从而测试整个算法的稳定性。

三.Adversarial nets(主要讲解GAN目标函数以及对目标函数的求解)

生成器G:
生成器需要学习一个在数据X上的Pg分布。GAN主要用于生成图片上,以打游戏为例,显示器的分辨率是4k,每秒输出60张图片,想要生成器生成与游戏一样的图片,那么X就是看到4k分辨率的图片,大概是800万像素,具体说每个像素就是一个随机变量,那X就是800万维的多维随机变量,X中每个维度的值都是由Pg来控制。
生成器如何输出X:首先在输入分布为Pz的噪音变量z上定义先验,生成模型就是将z映射成x,生成模型是MLP,需要学习参数θg。同样以游戏为例,第一种方法是反汇编游戏编码,类似与构造分布函数的方法,但是在计算上比较困难。第二种方法就是不管游戏程序,而是使用若干维向量表示游戏背后的逻辑,再学习一个映射MLP,将Z映射为X,使其相似,好处是计算简单,坏处是并不知道MLP背后的真正的分布。
辨别器D:
辨别器同样也是一个MLP,需要学习参数θd,其输入就是800万像素的图片,输出为一个标量,这个标量用来判断X是有真实采样的数据还是由生成器生成的数据。并且在输入时给数据一个标号(真实数据为1,生成数据为0),进而训练出一个两类的分类器。在训练D的同时训练G,G用来最小化log(1-D(G(z)))【其中z是噪声,G(z)表示将z强行映射为x,得到生成器生成图片,D(G(z))表示判别器来判断是否为生成的图片,若为真实数据则值为1,生成的数据返回0。】当判别器效果比较好时,D(G(z))值为0,则log(1-D(G(z)))值为0,当判别器效果不好,会输出一个大于0 的数,则log(1-D(G(z)))值就为一个负数,在极端情况下,会得到负无穷大,此时判别失误。所以训练G最小化log(1-D(G(z)))的意义就是使判别器尽量犯错,使得D区分不出来是真实的数据还是生成器生成的数据。
总:我们需要训练两个模型,分别为G和D。价值函数为V(D,G),公式右侧两项都是期望,其中x为采样真实分布,z为噪声分布,在D优秀的情况下,右侧两项应都为0,在D有误分类时,右侧会变成负值。想要D完美判别,需要最大化D最小化G。目标函数中既有min又有max,表示两个模型在对抗,D尽量使数据分开,G尽量使生成数据分不出来,在博弈论中叫两人的minmax游戏。当达到一个均衡,D不能往前进步,G也不能往前进步了,此时叫做纳什均衡。


解释图1:x和z都是一维标量,图中黑点组成的高斯分布代表真实数据,绿色表示生成器生成的图片,蓝色代码判别器的输出。
(a)第一步:对噪声均匀采样,生成器G将均匀分布z映射为高斯分布(绿色),此时判别器效果一般。
(b)第二步:更新辨别器D,两个高斯分布的最高点表示真实数据和生成数据最可能出现的地方,所以在真实数据置1,生成数据处置0,这样尽可能将两种数据区分开。
(c)第三步:更新生成器G,使G尽量糊弄D使得D区分不了生成的数据,(即将生成的数据高斯分布向左移,尽量拟合真实数据的高斯分布),让D犯错
(d)第四步:不断地调整D和G,使得生成模型能够将来自均匀分布的随机噪声z能够映射成为与真实数据差不多融合的高斯分布,即无论是从真实数据的黑点中采样还是在生成数据的绿点中采样,判别器都无法判别(无论哪个分布,D的输出都是0.5)。这是GAN想要的结果,生成器生成的数据和真实数据区分不出来,D无能为力。
具体算法:第一行是一个for循环,循环里面又有一个k次的循环,每次循环采样m个噪声样本m个真实数据的样本,得到一个2m的小批量,将其放入价值函数对θd求梯度进而更新辨别器,重复k次,再去m个噪声样本,放入价值函数的第二项中(想要更新G,价值函数第一项中没有G,所以只需要放入第二项),对θg求梯度来更新生成器。
每次循环时,先迭代更新D再更新G。k是超参数,决定了D的更新程度,K的大小需要适中,k太小,表示D没有更新好,对于新数据,生成器生成的图片已经改变了,但是D并没有做出相应反应,此时再更新G来糊弄D没有意义;当k太大,表示D已经更新到完美了,log(1-D(G(z)))就会变成0 ,对0 求导没有意义导致G更新困难。外层循环迭代N次直到完成,如何判断是否收敛,一个是往上走(max),一个是往下走(min),有两个模型,所以如何判断收敛并不容易,整体来说,GAN的收敛是非常不稳定的。
在价值函数的第二项中存在问题,在早期G比较弱的时,生成的数据和真实数据相差很大,D就容易训练的比较好,很容易区分,就会导致log(1-D(G(z)))变成0 ,这样很难求梯度来优化G,所以更新G时,将优化函数改为log(D(G(z)))。

四.Theoretical Results(理论结果)

该部分有两个结果,第一是当且仅当生成器学到的分布和真实数据的分布一样时,目标函数有全局的最优解;第二是当前的算法可以求出最优解。

4.1 Global Optimality of pg = pdata(Pg=Pdata的全局最优性)

命题1:当G是固定的情况下,最优的判别器D的计算公式为Pdata(x) / ( Pdata(x)+Pg(x))。【Pdata(x) 表示将x在真实数据中的分布的概率,Pg(x)表示x在生成器所拟合的分布的概率。由于分布概率都是大于0小于1,所以公式中每一项都是大于0小于1,进而公式结果也是大于0小于1 】当Pdata(x) =Pg(x)时,公式输出为1/2,即不管对什么输入,最优判别器的输出都是1/2,表示D不能区分两种数据。
这个结论比较有用, 可以看出D是怎样训练出来的,从两个分布中分别采样出数据,用目标函数训练出一个二分类器,如果分类器输出的值为1/2,表明分类器不能区分,即这两个分布是重合的,否则就可以分辨出来。
定理1:当且仅当Pg=Pdata(生成器的分布等于真实数据的分布),C(G)取得全局最小值。
补充KL散度:用来衡量两个分布,表示在知道p的情况下至少需要多少个比特才能够将q描述出来。JS散度和KL散度的区别:JS散度是对称的,而KL不是对称的,不能将p和q进行互换,但是对于JS散度,将p和q进行互换也是可以保持不变的,所以说它是一个对称的散度,而KL是一个不对称的散度。可以将C(G)等式换成两个JS散度。

4.2 Convergence of Algorithm 1(算法的收敛性)

命题2:当G和D有足够容量时,并且在算法1的每一步都允许D是可以达到最优解的情况下,若按照Ex∼pdata [log D∗G(x)] + Ex∼pg[log(1 − D∗G(x))]对G进行优化,则最后Pg是会收敛到Pdata。
证明:将价值函数(目标函数)看作是Pg(模型或者分布)的函数,Pg是一个函数,则价值函数就是一个关于函数的函数,其输入不是一个值,而是一个closure(闭包),包含一个数和一个计算,之前是在高维的值的空间中做迭代,现在是在一个函数空间中做梯度下降。由于假设每次对D优化到极致,但事实并没有,只是迭代了k次,存在缺陷。

五.Experiments

实验生成的数字图片还可以,其他图片并不太好,分辨率很低。

六.Advantages and disadvantages

缺点:整个训练比较复杂,G和D需要比较好的均衡,否则生成图片效果很差。
优点:由于生成器没有去看真实样本的数据,没有拟合真实数据的特征,所以会生成一些比较锐利的边缘,但后期并不认同。

七.对于GAN本身算法而言,它开创了一个领域,并影响了未来很多工作:

(1)它是无监督学习,不需要标号
(2)使用一个有监督学习的损失函数来实现无监督学习,使用标号(表示来自生成数据或者真实数据)来自于数据,使得训练更加高效,这也是自监督学习(BERT)的灵感来源。

创新点

1.应用统计学中two sample test,假如需要判断两个数据是不是来自于同一个分布,就可以训练一个二分类器,当分类器输出为1/2表示两个分布是重合的,否则就可以分辨出来。该方法比较实用,比如在一个训练集上训练一个模型后把它部署到另外一个环境中,需要看当前的测试数据和训练数据是否一致时,就可以训练一个二分类器,可以避免新的环境和模型不匹配的问题。
2.使用监督学习的损失函数来优化无监督学习,使得训练更加高效,例如BERT应用。

知识点补充:

1.机器学习中两大类:分辨模型和生成模型。前者用于判断数据的类别或者预测实数值;后者用于生成数据。
2.在框架中,如果生成模型和判别模型都是MLP,则其为adversarial nets(对抗网络模型)。由于都是MLP,即可以使用反向传播和Dropout来进行训练。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/841312
推荐阅读
  

闽ICP备14008679号