若干生成对抗网络模型简介

Posted 统计学习与视觉计算组

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了若干生成对抗网络模型简介相关的知识,希望对你有一定的参考价值。

  

    生成对抗网络GAN(generative adversarial networks)是目前人工智能学界一个十分热门的研究方向。著名学者Yann Lecun甚至称之为“过去十年机器学习领域提出的最引人瞩目的思想(This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion)”。做为目前最为火热的生成式模型之一——另一个有名的生成式模型为变分自编码器VAE(Variational Auto-Encoder),GAN模型目前已经被广泛应用于图像生成、图像转换、图像上色、超分辨率甚至文本生成、动作行为预测等多种机器学习任务当中。围绕着各个任务当中出现的各种问题,关于GAN模型的理论研究也日新月异,层出不穷。本文从基本的GAN模型开始,介绍若干个比较著名的生成对抗网络模型,既有理论研究,也有作者认为比较有趣的GAN应用,并在文末附上DeepHunt给出的GAN及其上百种变体对应的论文列表,以供感兴趣的读者进一步研究。



1.GAN(Generative Adversarial Nets)

        2014年的nips会议上,仍然是一名学生的Ian Goodfellow发表了石破天惊的论文《Generative Aeversarial Nets》,提出用一种对抗学习的方式来训练一个强大的生成模型,这也就是现在大名鼎鼎的GAN模型。论文里的生成器以随机噪声为输入,即可输出逼真的mnist数据集中的数字图片。对抗学习的思路新颖、简单、效果非凡,短短几年之内迅速成为人工智能领域最火热的研究方向,而Goodfellow也获得了“GANs之父”的称号。关于GANs的研究日新月异,几乎每天都有人提出新的理论或者应用,仅在deephunt上给出的gan zoo当中,就已总结了比较重要的一百种左右关于GANs的研究论文。在马上到来的CVPR2018盛会上,在官方给出的已接受的论文当中,生成对抗网络强势出击,大有对深度学习取而代之的趋势,甚至有人预测,GANs是下一代的深度学习。

若干生成对抗网络模型简介

        什么是生成对抗网络呢?简而言之,就像博弈双方的两人,GAN设定参与游戏双方分别为一个生成器G和一个判别器D,生成器以随机噪声为输入,尽可能的输出真实的数据,也就是我们想要的数据。而判别器的目的,则是判断输入给它的数据是真实数据还是G生成的数据(即伪造数据)。二者如同博弈一般,朝着各自的目的迭代地交替训练、更新。当最终判别器无法判断输入数据是真实数据还是生成数据时,即可认为G可以生成真实数据,或者说G成功模拟了从随机噪声到目标数据的这样一个概率分布(做实验的时候,我们一般通过肉眼来判断生成器生成的图片效果如何)。理论上讲,我们可以使用任何能达到上述目的的函数来作为生成器G和判别器D,比如对于mnist数据集的数据,我们可以使用多层感知机来作为G和D,而二者的目标函数如下:

若干生成对抗网络模型简介

        上面的公式,看起来较为复杂,我们可以将D和G的目标函数分开,单独来看。D的目标函数如下:

若干生成对抗网络模型简介

        上面公式就是通常判别函数的目标函数,判别器的目标是最大化上式。而生成器G的目标是最小化下式,为了方便描述,在本文我们称其为第一种目标函数:

若干生成对抗网络模型简介

        简单理解,其实就是和D的目标相反,D要尽可能的分开真实数据和生成数据,而G就尽可能朝着让D无法区分的方向去更新。作者在论文中也给出了另一种G的损失函数,道理其实一致,如下,我们称之为第二种目标函数:

若干生成对抗网络模型简介

        从G和D的损失函数我们可以发现,判别器D在整个GAN模型的训练中起到了至关重要的作用。无论是生成器还是判别器,都是依靠判别器最终产生的梯度进行反向传播,交替更新G和D,从而使得整个模型的效果越来越好。所以,判别器在整个模型的训练中起着指导作用,判别器判别能力太差时,产生的梯度不准,G无法朝着正确的方向更新权重;判别器的判别能力太强时,给出的结果不是接近0就是接近1,产生的梯度几乎消失,G也无法更新。我们常用造假者和打假者的关系来描述GAN模型,G如同一个造假者,D如同一个打假者。当打假者能力太差的时候,我们的造假者不需要提高自己的水平,也能蒙混过关,所以造假者的造价水平无法提升;当打假者能力太强的时候,造假者无论怎么造假,都会被打假者火眼金睛一眼识别,所以造假者无所适从,不知道该如何提升自己的性能。G和D的关系,正像文章开头给出的电影《猫鼠游戏》的海报一样,造假者和打假者在不断地对抗中,互相成长。

        关于算法的收敛性,作者在论文里也给出了证明,感兴趣的小伙伴可以去阅读。

        判别器、生成器、对抗训练,然后你就能得到一个模拟真实分布的生成器G,这就是强大的Generative Adversarial Nets!



2.DCGAN(Unsupervised Representation Learning with Convolutional Generative Adversarial Networks)

        伴随着深度神经网络的热潮席卷整个人工智能领域,很自然的有人想到用深度卷积神经网络来作为G和D,这就是DCGAN了。

若干生成对抗网络模型简介

        DCGAN的生成器G结构如上图所示,一目了然。作者尝试了多种网络的组合方案,几乎是用枚举的方式,发现上面结构效果最好。在DCGAN中,G和D结构基本对称(本文没画出D的网络结构,上图从右往左反着看基本就是D的结构了),很像一个函数和它的反函数。作者同时给出了他们一些构造网络的经验。这些经验为什么好,作者并没有给出证明,感兴趣的小伙伴可以阅读原文。为什么这里我不再介绍了呢?因为随着研究的深入,大家发现这些经验也须并不是构造一个有效GAN模型的根本。



3.WGAN(Wasserstein GAN)

        稍微了解一点GAN的同学就知道,GAN的训练总是伴随着几个最主要的问题:

        1)训练难,不稳定,像段誉刚学会的六脉神经,时灵时不灵,并且判别器的损失不能指示整个训练的进程,让我们的训练难上加难;

        2)模式崩溃(mode collapse)。举例来说,我想生成mnist中0-9的10种数字,经过100个epoch的训练后突然发现,生成器无论输入什么,都只生成0这一个数字,其他9个数字再也不出现了。生成器生成的G已经很真了,对于判别器来讲,生成的结果好吗?好。可是对于我们来说,0-9只生成一个数字是我们想要的结果吗?不是。

        为什么会这样呢?WGAN的作者,针对GAN中Goodfellow给出的损失函数,做了深入的研究,并给出了结论。WGAN的论文,此处不再做详细解读,推荐大家阅读https://zhuanlan.zhihu.com/p/25071913这篇专栏,这篇专栏的作者已经对WGAN论文做了深入浅出地讲解,非常值得一看。WGAN指出了GAN一些问题,并提出了一些优化,总结下来如下:

        1).对于GAN中第一种损失函数来说,判别器训练的越好,生成器梯度消失越严重,使得训练难以进行。这一点如何解决呢?可以同时在真实数据和生成数据上加噪声,使得判别器无法将其完美区分,从而产生梯度。然后随着训练的进行,慢慢将噪声去掉。

        2).对于第二种损失函数,其等价于最小化一个不合理的距离度量,导致梯度的不稳定以及mode collapse;

        3).使用一个Lipschitz连续的函数作为判别器D来指示训练进程。什么样的函数是Lipschitz连续呢?判别器D的梯度有界即符合这一要求。具体做法,可以在训练的过程中,将所有w限制在一个范围,比如[-0.1,0.1]之间,超过这个范围的w直接clip到这个范围。

上面是WGAN的理论结果,对于我们训练神经网络来说,需要怎么做呢?

        1).判别器最后一层去掉sigmoid;

        2).生成器和判别器的loss不取log;

        3).每次更新判别器的参数之后把它们的绝对值截断到一个固定常数c;

        4).不使用基于动量的优化算法,包括momentum和Adam,推荐RMSProp,SGD。(这一点是作者的训练经验,和本文理论无关,其实很多效果不错的GAN模型还是使用Adam算法优化)



4.WGAN-GP(Improved Training of Wasserstein GANs)

        WGAN提出将判别器的梯度截断到常数c的操作来提升GAN的性能,但是这样存在另一个问题:经过梯度截断操作的判别器,其梯度大部分分布在[-c,c]区间的边界,这样其实限制了判别器的拟合能力。如下图。

若干生成对抗网络模型简介

        所以WGAN-GP作者进一步提出一种约束D梯度的方法,其损失函数如下:

若干生成对抗网络模型简介

        通过这种操作,梯度在c周围分布的更均匀,并且不暴力的约束判别器的拟合能力,使得WGAN-GP的性能进一步提升。下图展示了不同结构的G和D时,WGAN-GP的性能。可以看出,G和D不需要经过精心设计,即使使用101层的残差网络作为G和D,WGAN-GP模型结果仍然令人满意。

若干生成对抗网络模型简介


5.CGAN(Conditional Generative Adversarial Nets)

        上面都在讲如何让GAN模型更稳定,但是生成器生成的图片种类却是无法控制的,怎么让生成器生成我们想要的那种图片呢?同样有很多研究围绕这个问题展开,比如CGAN,结构如下:CGAN对生成器和判别器的输入数据做了条件约束:仅仅生成真实数据还不行,还要生成这个条件下的真实数据。

若干生成对抗网络模型简介



6.CycleGAN(Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks)

        最后介绍一个目前为止我最喜欢的GAN模型:CycleGAN。首先看一下它的实验效果。

总体效果:

若干生成对抗网络模型简介

卫星图像和地图的互相转化:

若干生成对抗网络模型简介

标注数据和真实场景互相转化

若干生成对抗网络模型简介

若干生成对抗网络模型简介

若干生成对抗网络模型简介

  真实场景照片和指定的画家风格转化

若干生成对抗网络模型简介

若干生成对抗网络模型简介

若干生成对抗网络模型简介

若干生成对抗网络模型简介

若干生成对抗网络模型简介

真实场景和油画的相互转化

若干生成对抗网络模型简介

马和斑马

若干生成对抗网络模型简介

夏天和冬天

若干生成对抗网络模型简介

苹果和橘子互变

若干生成对抗网络模型简介

甚至可以做背景虚化

若干生成对抗网络模型简介

        以上这些令人叹为观止的效果,统统可以用CycleGAN来实现,最重要的是:这些实验在训练的时候不需要“x-y”这样一对一的样本对来训练,而只需要这两类数据的两个数据集X、Y即可。

若干生成对抗网络模型简介

        如何实现的呢?作者提出了一个简单而巧妙的idea:假如生成器G可以实现G(x)=y,生成器F可以实现F(y)=x,那么无论x和y是生成数据的还是真实数据,都应该满足F(G(x))=x,G(F(y))=y,即x或者y经过一轮循环映射之后,仍然还原为它自身,经过这种“循环一致性(cycle consistency)”约束,我们就可以建立起两个域X和Y上对应的映射。整个网络的损失函数,也就呼之欲出了:

        前两项为常规对抗损失,最后一项为循环一致性损失,具体为:

        你可以发挥想象力,将CycleGAN应用在各种有意思的地方,除了论文里的应用,还有比如表情严肃的人-友爱微笑的人,男人-女人,猫-狗,乖巧好学

生-纹身社会人,普通人日常-美国总统日常,甚至……等等等等。



        GAN模型是一种新兴且极富潜力的生成模型,其所能完成的任务,只有你想不到,没有你做不到。感兴趣的同学就抓紧时间,赶快投身科研吧!

The GAN Zoo

https://deephunt.in/the-gan-zoo-79597dc8c347

以上是关于若干生成对抗网络模型简介的主要内容,如果未能解决你的问题,请参考以下文章

什么是生成对抗网络?

Keras深度学习实战(19)——使用对抗攻击生成可欺骗神经网络的图像

生成式对抗网络模型综述

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

生成对抗网络是什么?

一文读懂生成式对抗网络模型