本文转自:https://mp.weixin.qq.com/s?__biz=MzIwMTgwNjgyOQ==&mid=2247484846&idx=1&sn=c2333a9986c19e7106ae94d14a0555b9
能根据文字生成图片的 GAN,深度学习领域的又一新星
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 领域,成为深度学习领域一颗冉冉升起的新星,未来的发展潜力更是被无数人看好。
GAN :基于概率的生成模型
什么是 GAN?用 Ian Goodfellow 自己的话来说:“生成对抗网络是一种生成模型(Generative Model),其背后基本思想是从训练库里获取很多训练样本,从而学习这些训练案例生成的概率分布。”
而实现的方法,是让两个网络相互竞争,‘玩一个游戏’。其中一个叫做生成器网络( Generator Network),它不断捕捉训练库里真实图片的概率分布,将输入的随机噪声(Random Noise)转变成新的样本(也就是假数据)。另一个叫做判别器网络(Discriminator Network),它可以同时观察真实和假造的数据,判断这个数据到底是不是真的。
用 Adit Deshpande 的话解释更加清晰:
“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做图像生成时的一个显著优点,即能够提供更锐利的数据细节。
对抗式学习和人类的反馈式学习
相比强化学习(RL)而言,对抗式学习似乎更接近人类的学习方式。RL通过最大化(平均)最终奖励来达到训练目的。当前的状态也许与奖励无关,但最终的结局一定会由“奖励函数”给出。但是除非你是在玩游戏,否则很难写出一个奖励函数来精确衡量来自周边环境的反馈。
那么我们是如何学习写字的?除非你念的是要求很严格的小学,否则学习写字的过程很难说是最大化某个与书写字母有关的函数。最可能的情况是你模仿老师在黑板上的书写笔顺,然后内化这一过程 。
你的生成网络书写字母,而你的识别网络(对抗方)观察你的字体和教科书中理想字体的区别。
针对三年级学生的对抗式训练
我们并不知道我们的大脑是如何使用“行为人-批评家”的模式来学习的,但是可以确定的是在有一个专家即时反馈的条件下,我们可以更有效率地学习新东西。
当学习编程或攀岩时,如果你一直接收某个专家的“beta(反馈建议)”,则可以进步得更快。在你获得足够的经验能够自我反馈批评之前,有一个外部的批评家来纠正你每一小步的错误可以更容易训练你大脑的生成网络。即使有一个内部批评家在监督你,学习一个有效的生成网络仍然需要认真的练习。
一个问题自然而然地出现了——到底哪种网络能够真正理解所面临问题,是生成器还是识别器?或者说究竟谁更会写字,是写字的学生,还是教写字的老师?
现实世界通常是老师更会写字,但在之前的例子中,应该是学生更会写字。因为一个用于识别产品评论的识别器只需知道一些常见的语法错误,就能投入使用。正如一个人像米开朗基罗一样画画,一个人仅仅是抬头看看西斯廷大教堂的天花板(上面有米开朗基罗的画),谁需要更多的技巧呢?
比如,手机图像软件 Prisma 在有对抗方的框架下,训练生成网络,进行不同风格的创作。大多数风格正是通过这种方式生成了那些曲折的线条。我希望他们能增加训练 GAN 的时间,这样 GAN 不仅能认出照片中的阴影,并给其涂上不同的颜色,还可能以一个印象派艺术家的风格完成这些任务。当它偶尔可以正确地区分光线和阴影的时候,那么它就是令人惊叹的。
顺着这条思路想下去可以得出一个很自然的结论,生成式对抗方法,可以让人工智能有能力做实验和A/B测试。一个人工智能模型给出了一个很好的解决方案,然后它搜集反馈来了解这个生成方案和标准答案是否相符,或与其他它正在学习或已经内化的人工智能模型比较,观察得出的结果是否相符。在这一过程中,你没必要去设计一个损失函数,因为虽然可能会花上一点时间,但这个人工智能模型终将找到自己的评判标准。
在不完美中继续前行
作为一个生成模型,GAN模型避免了一些传统生成模型在实际应用中的一些困难,巧妙地通过对抗学习来近似一些不可解的损失函数。
自然 GAN 也并不完美。一个是优化过程中存在不稳定性,很容易坍缩到一个鞍点上;其次是 GAN 的可解释性比较差;再次,需要提高训练过程中的稳定性和GAN 模型的延展性,尤其在处理大规模数据的时候。
当然也有很多人对 GAN 的收敛性和可推广性持悲观态度,他们认为,由于这种跷跷板式的训练方法——一会儿训练生成方,一会儿训练识别方,如此反复——并不能保证收敛于一个稳定解,更别提一个最优解了。
自然目前还有很多不尽如人意的地方,但我们看到 GAN 应用在无监督学习或自监督学习上并提供有效的解决方案的可能性。同时 GAN 还可以建立与强化学习之间的联系,应用在强化学习上。
GAN 的诞生给我们带来的一个迷人的发现是,深度学习系统的可塑性极强。经典的机器学习认为目标函数和约束条件都是固定的观念,或者认为最优算法是固定的观念,此时并不适用于机器学习领域了。
正如 Yan Lecun 所说:“ GAN 为创建无监督学习模型提供了强有力的算法框架,有望帮助我们为 AI 加入常识。我们认为,沿着这条路走下去,有不小的成功机会能开发出更智慧的 AI 。”
深度学习新星:GAN
- DataCastle -