重要引用:深度学习新星:GAN的基本原理、应用和走向 | 硬创公开课;生成对抗网络(GAN)相比传统训练方法有什么优势?;通过拳击学习生成对抗网络(GAN)的基本原理
最近总是听老板提起对抗学习,好奇之心,在网上搜集了一些相关资料,整理如下,大部分摘自重要引用的内容。
近年来,基于数据而习得“特征”的深度学习技术受到狂热追捧,而其中GAN模型训练方法更加具有激进意味:它生成数据本身。
GAN是“生成对抗网络”(Generative Adversarial Networks)的简称,由2014年还在蒙特利尔读博士的Ian Goodfellow引入深度学习领域。2016年,GAN热潮席卷AI领域顶级会议,从ICLR到NIPS,大量高质量论文被发表和探讨。Yann LeCun曾评价GAN是“20年来机器学习领域最酷的想法”。
在GAN这片新兴沃土,除了Ian Goodfellow所在的OpenAI在火力全开,Facebook的人工智能实验室也在这一领域马不停蹄深耕,而苹果近日曝出的首篇AI论文,就是基于GANs的变种“SimGAN”。从学术界到工业界,GANs席卷而来。
GANs是深度学习领域比较重要的一个模型,也是人工智能研究的一个重要工具。我们现在所追求的人工智能,一个很重要的特性就是能够像我们人类一样,理解周围复杂的世界。包括识别和理解现实中的三维世界,人类、动物和各种工具。这样才能在对现实世界理解的基础上,进行推理和创造。而正像著名物理学家,理查德•费曼说的一样,如果要真正理解一个东西,我们必须要能够把它创造出来。
正是基于这样的想法,机器学习以及人工智能的研究者们提出了概率生成模型,致力于用概率和统计的语言,描述周围的世界。
简单说, 概率生成模型的目的,就是找出给定观测数据内部的统计规律,并且能够基于所得到的概率分布模型,产生全新的,与观测数据类似的数据。
举个例子,概率生成模型可以用于自然图像的生成。假设给定1000万张图片之后,生成模型可以自动学习到其内部分布,能够解释给定的训练图片,并同时生成新的图片。与庞大的真实数据相比,概率生成模型的参数个数要远远小于数据的数量。因此,在训练过程中,生成模型会被强迫去发现数据背后更为简单的统计规律,从而能够生成这些数据。
现在比较流行的生成模型,其实可以分为三类:
GAN是更好的生成模型,在某种意义上避免了马尔科夫链式的学习机制,这使得它能够区别于传统的概率生成模型。传统概率生成模型一般都需要进行马可夫链式的采样和推断,而GAN避免了这个计算复杂度特别高的过程,直接进行采样和推断,从而提高了GAN的应用效率,所以其实际应用场景也就更为广泛。
其次GAN是一个非常灵活的设计框架,各种类型的损失函数都可以整合到GAN模型当中,这样使得针对不同的任务,我们可以设计不同类型的损失函数,都会在GAN的框架下进行学习和优化。
再次,最重要的一点是,当概率密度不可计算的时候,传统依赖于数据自然性解释的一些生成模型就不可以在上面进行学习和应用。但是GAN在这种情况下依然可以使用,这是因为GAN引入了一个非常聪明的内部对抗的训练机制,可以逼近一些不是很容易计算的目标函数。
“如果人工智能是一块蛋糕,那么强化学习是蛋糕上的一粒樱桃,监督学习是外面的一层糖霜,无监督/预测学习则是蛋糕胚。目前我们只知道如何制作糖霜和樱桃,却不知如何制作蛋糕胚。“——Facebook人工智能研究院的Yann LeCun
虽然还在快速的发展当中,但是GAN确实为无监督学习,提供了一个非常有潜力的解决方案。
而GAN的或者一般概率生成模型的训练目的,就是要使得生成的概率分布和真实数据的分布尽量接近,从而能够解释真实的数据。但是在实际应用中,我们完全没有办法知道真实数据的分布。我们所能够得到的只是从这个真实的数据分布中所采样得到的一些真实数据。
通过优化目标,使得我们可以调节概率生成模型的参数\theta,从而使得生成的概率分布和真实数据分布尽量接近。
那么怎么去定义一个恰当的优化目标或一个损失?传统的生成模型,一般都采用数据的似然性来作为优化的目标,但GAN创新性地使用了另外一种优化目标。首先,它引入了一个判别模型(常用的有支持向量机和多层神经网络)。其次,它的优化过程就是在寻找生成模型和判别模型之间的一个纳什均衡。
GAN所建立的一个学习框架,实际上就是生成模型和判别模型之间的一个模仿游戏。生成模型的目的,就是要尽量去模仿、建模和学习真实数据的分布规律;而判别模型则是要判别自己所得到的一个输入数据,究竟是来自于真实的数据分布还是来自于一个生成模型。通过这两个内部模型之间不断的竞争,从而提高两个模型的生成能力和判别能力。
如果我们把生成模型比作是一个伪装者的话,那么判别模型就是一个警察的角色。伪装者的目的,就是通过不断的学习来提高自己的伪装能力,从而使得自己提供的数据能够更好地欺骗这个判别模型。而判别模型则是通过不断的训练来提高自己判别的能力,能够更准确地判断数据来源究竟是哪里。
当一个判别模型的能力已经非常强的时候,如果生成模型所生成的数据,还是能够使它产生混淆,无法正确判断的话,那我们就认为这个生成模型实际上已经学到了真实数据的分布。
生成对抗网络的简单介绍如下,训练一个生成器(Generator,简称G),从随机噪声或者潜在变量(Latent Variable)中生成逼真的的样本,同时训练一个鉴别器(Discriminator,简称D)来鉴别真实数据和生成数据,两者同时训练,直到达到一个纳什均衡,生成器生成的数据与真实样本无差别,鉴别器也无法正确的区分生成数据和真实数据.GAN的结构如下图所示.
这里判别模型D实际上是对数据的来源进行一个判别:究竟这个数据是来自真实的数据分布Pdata,还是来自于一个生成模型G所产生的一个数据分布Pg。
判别模型D的训练目的就是要尽量最大化自己的判别准确率。当这个数据被判别为来自于真实数据时,标注 1,自于生成数据时,标注 0。而与这个目的相反的是,生成模型G的训练目标,就是要最小化判别模型D的判别准确率。在训练过程中,GAN采用了一种非常直接的交替优化方式,它可以分为两个阶段,第一个阶段是固定判别模型D,然后优化生成模型G,使得判别模型的准确率尽量降低。而另一个阶段是固定生成模型G,来提高判别模型的准确率。
下面这张图,可视化了GAN学习的过程,从左到右是随着训练过程的进展,依次得到的训练结果。
图(a)中黑色大点虚线P(x)是真实的数据分布,绿线G(z)是通过生成模型产生的数据分布(输入是均匀分布变量z,输出是绿色的曲线)。蓝色的小点虚线D(x)代表判别函数。
在图(a)中,我们可以看到,绿线G(z)分布和黑色P(x)真实分布,还有比较大的差异。这点也反映在蓝色的判别函数上,判别函数能够准确的对左面的真实数据输入,输出比较大的值。对右面虚假数据,产生比较小的值。但是随着训练次数的增加,图(b)和图(c)反映出,绿色的分布在逐渐靠近黑色的分布。到图(d),产生的绿色分布和真实数据分布已经完全重合。这时,判别函数对所有的数据(无论真实的还是生成的数据),输出都是一样的值,已经不能正确进行分类。G成功学习到了数据分布,这样就达到了GAN的训练和学习目的。
另外一点,是关于GAN的收敛性。如果G和D的学习能力足够强,两个模型可以收敛。但在实际中,GAN的优化还存在诸如不稳定等一些问题。如何平衡两个模型在训练中是一个很重要的问题。
GAN可以和CNN、RNN结合在一起。任何一个可微分的函数,都可以用来参数化GAN的生成模型和判别模型。那么,在实际中,我们就可以使用深度卷积网络,来参数化生成模型。另外,GAN和RNN结合在一起,用来处理和描述一些连续的序列数据,可以学习到序列数据的分布,同时也可以产生序列数据应用,包括对音乐数据或者是一些自然语言数据的建模和生成。
优点:
生成对抗网络相比其他生成模型的优点? Ian Goodfellow回答:
生成对抗网络(一种神经网络)的优缺点是什么? ——Ian Goodfellow回答:
优势:
超分辨率问题,实际上是一个病态问题,因为在图像分辨率降低的过程中,丢失的高频细节很难恢复。但是GAN在某种程度上可以学习到高分辨率图像的分布,从而能够生成质量比较好的高分辨率图像。
生成模型要将模糊的低分辨率图像作为输入,并输出一个高分辨率的清晰图像。而判别模型,就要判断所输入的图像究竟是“真实高分辨率图像”还是由低分辨率图像“转化来的高分辨率图像”。而这就大大简化了图像超分辨率模型的学习过程。因为传统上做一个图像超分辨率,都要去对一些高频细节进行建模,而这里生成模型训练目的就简化为迷惑判别模型。
为了使得整个GAN能够取得比较好的结果,我们常常要求生成模型和判别模型都要有很强的学习能力,所以在实际应用中,我们常常用一个多层的神经网络来参数化生成模型或者判别模型。
在 Twitter 这篇论文中,他们用一个16个残差块的网络来参数化生成模型。而判别模型使用的是一个VGG网络。这个实验结果也说明了使用GAN模型能够得到更好的结果。与以往基于深度学习模型做图像超分辨率的结果相比的话(比如SRResNet等),我们可以看到GAN的结果图能够提供更丰富的细节。这也就是GAN做图像生成时的一个显著优点,即能够提供更锐利的数据细节。
首先,图像到图像的翻译。比如说将语义标注图、灰度图或边缘图作为GAN的输入,那么我们希望它输出能够和输入图一致的真实图像,例如这里的街景图和彩色图。
其次,文本到图像的翻译。GAN的输入是一个描述图像内容的一句话,比如“一只有着粉色的胸和冠的小鸟”,那么所生成的图像内容要和这句话所描述的内容相匹配。
GAN可以用在特定的人脸图像生成上,例如戴着墨镜的人脸。还可用在图像语音分割上,通过引入对抗训练,得到更锐利的风格结果。GAN可以用于视频生成,通过过去的一些帧来预测未来的一些帧,从而捕捉到一些运动的信息。
将GAN应用在“人脸去遮挡”。我们引入了一种保持人的身份信息的GAN模型,实验结果证明,这个模型不仅能够检测和去掉在人脸上的遮挡,同时还能保持人的身份信息,从而提高人脸的识别准确率。
欲知标准 GAN 清楚且简单的实现(和其它类型的 GAN,如 InfoGAN 和 ACGAN)参阅: