2014 年 6 月,Ian Goodfellow 等学者发表了论文《Generative Adversarial Nets》,题目即“生成对抗网络”,标志着 GAN 的诞生。算法
2015 年还名不见经传的 GAN ,在 2016 年开挂般地掀起了一波深度学习的高潮,除了 OpenAI 火力全开以外,Facebook 的人工智能实验室也在这一领域快马加鞭地深耕,而苹果不久前的首篇AI论文,就是基于 GAN 的变种“SimGAN”。编程
2016年,GAN 热潮席卷 AI 领域各大顶级会议,从 ICLR 到 NIPS,大量高质量论文被发表和探讨。Yann LeCun 曾评价 GAN 是“ 20年来机器学习领域最酷的想法”,并在 2016 巴塞罗那的 NIPS 上提到将“预测学习(Predictive Learning)"落脚到 GAN 。网络
在大数据的圈子,一般有人说“谁掌握了数据,谁就占据了将来高地”。因而,基于数据而习得“特征”的深度学习技术受到热捧,而 GAN 的训练方法更加激进:它生成数据自己。框架
从学术界到工业界,GAN 热潮席卷整个 AI 领域,成为深度学习领域一颗冉冉升起的新星,将来的发展潜力更是被无数人看好。dom
GAN :基于几率的生成模型机器学习
什么是 GAN?用 Ian Goodfellow 本身的话来讲:“生成对抗网络是一种生成模型(Generative Model),其背后基本思想是从训练库里获取不少训练样本,从而学习这些训练案例生成的几率分布。”svn
而实现的方法,是让两个网络相互竞争,‘玩一个游戏’。其中一个叫作生成器网络( Generator Network),它不断捕捉训练库里真实图片的几率分布,将输入的随机噪声(Random Noise)转变成新的样本(也就是假数据)。另外一个叫作判别器网络(Discriminator Network),它能够同时观察真实和假造的数据,判断这个数据究竟是不是真的。函数
用 Adit Deshpande 的话解释更加清晰:post
“GAN 的基本原理是它有两个模型:一个生成器,一个判别器。判别器的任务是判断给定图像是否看起来‘天然’,换句话说,是否像是人为(机器)生成的。而生成器的任务是,顾名思义,生成看起来‘天然’的图像,要求与原始数据分布尽量一致。学习
GAN 的运做方式可被看做是两名玩家之间的零和游戏。原论文的类比是,生成器就像一支造假币的团伙,试图用假币蒙混过关。而判别器就像是警察,目标是检查出假币。生成器想要骗过判别器,判别器想要不上当。当两组模型不断训练,生成器不断生成新的结果进行尝试,它们的能力互相提升,直到生成器生成的人造样本看起来与原始样本没有区别。”
GAN 首先是一种几率生成模型,几率生成模型能够用于天然图像的生成。假设给定1000万张图片以后,生成模型能够自动学习到其内部分布,可以解释给定的训练图片,并同时生成新的图片。
与庞大的真实数据相比,几率生成模型的参数个数要远远小于数据的数量。所以,在训练过程当中,生成模型会被强迫去发现数据背后更为简单的统计规律,从而可以生成这些数据。
除了 GAN ,如今比较经常使用的变分自动编码模型(VAE)、自回归模型(Auto-regressive)也属于几率生成模型。
GAN 是更好的生成模型,在某种意义上避免了马尔科夫链式的学习机制,这使得它可以区别于传统的几率生成模型。传统几率生成模型通常都须要进行马可夫链式的采样和推断,而 GAN 避免了这个计算复杂度特别高的过程,直接进行采样和推断,从而提升了 GAN 的应用效率,因此其实际应用场景也就更为普遍。
GAN 的基本原理
GAN 模型包括了一个生成模型 G 和一个判别模型 D,GAN 的目标函数是关于 D 与 G 的一个零和游戏。也是一个最小-最大化问题。
这里判别模型 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 经过对抗式训练生成图片
准确来说,对抗式训练为指导人工智能完成复杂任务提供了一个全新的思路,某种意义上他们(人工智能)将学习如何成为一个专家。
举个对抗式训练的例子,当你试图经过模仿别人完成某项工做时,若是专家都没法分辨这项工做是你完成的仍是你的模仿对象完成的,说明你已经彻底掌握了该工做的所需的技巧。对于像写论文这样复杂的工做,这个例子可能不适用,毕竟每一个人的最终成果多少有些不一样,但对于中等难度的任务,好比造句或写一段话,对抗式训练大有用武之地,事实上它如今已是计算机生成真实图像的关键所在了。
咱们知道,OpenAI 对生成模型格外偏心,他们的动力可总结为理查德·费曼的一句名言:“不是我创造的,我就不能理解。”,费曼这里实际上是指“首要原则”的思考方法:经过构建验证过的概念来理解事物。
在 AI 领域,或许就是指:若是一个机器可以生成具备高度真实感的模型,那么它就发展出了对预测模型的理解。而这刚好是 GAN 所采起的方法。
GAN 解决问题的方式是用不一样的目标分别训练两种不一样的网络。
• 一种网络创造答案(生成方)
• 另外一种网络分辨前者创造的答案与真实答案的区别(对抗方)
GAN 的诀窍是这样的:训练两种网络进行竞争,一段时间后,两种网络都没法在对抗中取得进步,或者生成方变得很是厉害以致于即便给定足够的线索和时间,其对抗网络也没法分辨它给的答案是真实的仍是合成的。
这其中有不少有趣的细节,但咱们暂时先忽略这些细节。GANs 能够在给定绘制图像类别和随机种子(random seed)的条件下,自主完成图像的绘制。
论文《Generative Adversarial Text to Image Synthesis》介绍了如何经过 GAN 进行从文字到图像的转化。比方说,若神经网络的输入是“粉色花瓣的花”,输出就会是一个包含了这些要素的图像。该任务包含两个部分:1. 利用天然语言处理来理解输入中的描述。2. 生成网络输出一个准确、天然的图像,对文字进行表达。
为实现这些目标,生成器和判别器都使用了文字编码技术:经过循环文字编码器(recurrent text encoder)生成的文字属性,来做为条件对 GAN 进行训练。这使得 GAN 可以在输入的文字描述和输出图像之间创建相关性联系。
好比咱们给定“红脚鹬”、“蚂蚁”、“修道院”和“火山”,利用 GAN 就能够生成如下的图片。
是否是让人有眼前一亮的感受呢?不少人都画不出这么好的图吧,固然,这是比较理想的状况,还有一些常常被搞砸的状况(以下图),不过这已经让研究者们很是欣喜了。
目前的共识是,这些生成模型并不能准确捕捉到给定任务的“语义”:也就是说它们其实并不能很好地理解“蚂蚁”、“红脚鹬”、“火山”等词的意义,但却可以很好地模仿和预测。这些图片并非机器基于原有训练图片库的再创造,而是根据通用模型所推断出的很是接近现实的结果。
这种使用对抗性网络的方法,异于经典的机器学习方法。咱们有两个相互竞争的神经网络,但又好像在共同协做达成一种“泛化能力”。在经典机器学习领域,研究人员先定义一个目标函数,而后使用他最喜欢的优化算法。但这其中有一个问题,那就是咱们没法准确得知所定的目标函数是不是正确的。而 GAN 使人惊喜的地方在于,它甚至可以习得本身的目标函数。
GAN 的超分辨率应用
这是推特 Cortex 研究团队进行的一项研究,在 2016 年 9 月发表。它的主要贡献是开发出全新的损失函数(loss function),使得 GANs 能对大幅降采样后的图像,恢复它的生动纹理和小颗粒细节。
在机器学习中,实现超分辨率须要用成对样本对系统进行训练:一个是原始高清图像,一个是降采样后的低分辨率图像。本研究中,低分图像被做为输入喂给生成器,它重建出高分辨率图像。而后,重建图片和原始图片被一块儿交给判别器,来判断哪一幅是原始图像。
生成模型要将模糊的低分辨率图像做为输入,并输出一个高分辨率的清晰图像。而判别模型,就要判断所输入的图像到底是“真实高分辨率图像”仍是由低分辨率图像“转化来的高分辨率图像”。而这就 大大简化了图像超分辨率模型的学习过程。由于传统上作一个图像超分辨率,都要去对一些高频细节进行建模,而这里生成模型训练目的就简化为迷惑判别模型。
在 Twitter 的论文中,他们用一个16个残差块的网络来参数化生成模型。而判别模型使用的是一个VGG网络。这个实验结果也说明了使用GAN模型可以获得更好的结果。与以往基于深度学习模型作图像超分辨率的结果相比的话(好比SRResNet等),咱们能够看到 GAN 的结果图可以提供更丰富的细节。 这也就是GAN作图像生成时的一个显著优势,即可以提供更锐利的数据细节。
对抗式学习和人类的反馈式学习
那么咱们是如何学习写字的?除非你念的是要求很严格的小学,不然学习写字的过程很难说是最大化某个与书写字母有关的函数。最可能的状况是你模仿老师在黑板上的书写笔顺,而后内化这一过程 。
你的生成网络书写字母,而你的识别网络(对抗方)观察你的字体和教科书中理想字体的区别。
针对三年级学生的对抗式训练
咱们并不知道咱们的大脑是如何使用“行为人-批评家”的模式来学习的,可是能够肯定的是在有一个专家即时反馈的条件下,咱们能够更有效率地学习新东西。
当学习编程或攀岩时,若是你一直接收某个专家的“beta(反馈建议)”,则能够进步得更快。在你得到足够的经验可以自我反馈批评以前,有一个外部的批评家来纠正你每一小步的错误能够更容易训练你大脑的生成网络。即便有一个内部批评家在监督你,学习一个有效的生成网络仍然须要认真的练习。
一个问题天然而然地出现了——到底哪一种网络可以真正理解所面临问题,是生成器仍是识别器?或者说究竟谁更会写字,是写字的学生,仍是教写字的老师?
现实世界一般是老师更会写字,但在以前的例子中,应该是学生更会写字。由于一个用于识别产品评论的识别器只需知道一些常见的语法错误,就能投入使用。正如一我的像米开朗基罗同样画画,一我的仅仅是抬头看看西斯廷大教堂的天花板(上面有米开朗基罗的画),谁须要更多的技巧呢?
好比,手机图像软件 Prisma 在有对抗方的框架下,训练生成网络,进行不一样风格的创做。大多数风格正是经过这种方式生成了那些曲折的线条。我但愿他们能增长训练 GAN 的时间,这样 GAN 不只能认出照片中的阴影,并给其涂上不一样的颜色,还可能以一个印象派艺术家的风格完成这些任务。当它偶尔能够正确地区分光线和阴影的时候,那么它就是使人惊叹的。
顺着这条思路想下去能够得出一个很天然的结论,生成式对抗方法,可让人工智能有能力作实验和A/B测试。一我的工智能模型给出了一个很好的解决方案,而后它搜集反馈来了解这个生成方案和标准答案是否相符,或与其余它正在学习或已经内化的人工智能模型比较,观察得出的结果是否相符。在这一过程当中,你不必去设计一个损失函数,由于虽然可能会花上一点时间,但这我的工智能模型终将找到本身的评判标准。
在不完美中继续前行
做为一个生成模型,GAN模型避免了一些传统生成模型在实际应用中的一些困难,巧妙地经过对抗学习来近似一些不可解的损失函数。
天然 GAN 也并不完美。一个是优化过程当中存在不稳定性,很容易坍缩到一个鞍点上;其次是 GAN 的可解释性比较差;再次,须要提升训练过程当中的稳定性和GAN 模型的延展性,尤为在处理大规模数据的时候。
固然也有不少人对 GAN 的收敛性和可推广性持悲观态度,他们认为,因为这种跷跷板式的训练方法——一下子训练生成方,一下子训练识别方,如此反复——并不能保证收敛于一个稳定解,更别提一个最优解了。
天然目前还有不少不尽如人意的地方,但咱们看到 GAN 应用在无监督学习或自监督学习上并提供有效的解决方案的可能性。同时 GAN 还能够创建与强化学习之间的联系,应用在强化学习上。
GAN 的诞生给咱们带来的一个迷人的发现是,深度学习系统的可塑性极强。经典的机器学习认为目标函数和约束条件都是固定的观念,或者认为最优算法是固定的观念,此时并不适用于机器学习领域了。
正如 Yan Lecun 所说:“ GAN 为建立无监督学习模型提供了强有力的算法框架,有望帮助咱们为 AI 加入常识。咱们认为,沿着这条路走下去,有不小的成功机会能开发出更智慧的 AI 。”
深度学习新星:GAN
- DataCastle -