本文转自微信公众号:大数据文摘 (bigdatadigest),作者 :Sumeet Agrawal,编译:糖竹子、阮雪妮、Saint、钱天培。
还记得《射雕英雄传》中老顽童发明的“左右互搏术”吗?
表面上看,左手与右手互为敌手,斗得不可开交。实际上,老顽童却凭借此练就了一门绝世武功。
这样的故事似乎只能发生在小说中。然而,近年来兴起的一项机器学习算法却将“左右互搏术”变为了现实。
这项神奇的算法正是生成对抗网络(GANs)。
生成对抗网络由蒙特利尔大学的IanGoodfellow最先提出,目前是“教”电脑完成人类工作最有效的方法之一。它的核心想法正是令内部功能相互竞争,达到提升它们各自功能的效果。
生成对抗网络由两个相互竞争的神经网络模型组成,就好比周伯通的左右手。一个神经网络(生成器)不断学习怎样生成新的样本以欺骗判别器,另一个网络(判别器)则不断学习怎样区别生成样本数据和真实数据。在百万轮“较量”后,生成器就可以输出与真实数据几乎无差别的样本。
生成对抗网络别出心裁的思想让它在学界扬名立万。在业界,生成对抗网络也带来了无数强大、有趣的应用。
今天,大数据文摘就将带你走近生成对抗网络在产业界的十大神奇应用。
对抗生成网络(概念模型)
NO. 10 照猫画虎:自动生成游戏用户界面
排在榜单第十位的GANs应用是,游戏用户界面自动生成。
这一应用背后的脑洞如下:如果我们能够生成逼真的游戏配图,那么我们就可以把这些配图中的部分截取拼接在一起,从而设计出一个全新的游戏界面。
作为输入的游戏背景图像
在生成式对抗网络(GAN)训练过程中生成的背景图像
可以用于制作全新游戏的独特背景
为实现这一目标,该程序会搜集大量现有游戏的图像,然后生成由这些图像片段所构成的独一无二的新图像。这些图像之后便可以被用作新游戏的背景了。
来源&更多信息:
No. 9 千面神君:用GANs生成以假乱真的人脸
接下来,我们要为你介绍一款能够伪造人脸图像的AI——Neural Face。Neural Face使用了Facebook 人工智能研究团队开发的深度卷积神经网络(DCGAN)。
由生成式对抗网络(GANs)产生的独特人脸
研发团队用由100个0到1的实数组成的1个向量Z来代表每一张图像。
通过计算出人类图像的分布,生成器就可以用高斯分布(Gaussian Distribution)根据向量Z来生成图像。在此过程中,生成器学习生成新的人脸图像来欺骗判别器,同时判别器也能更好地区分加工生成的人脸图像和真实的人脸图像。
来源&更多信息:
GitHub:https://github.com/carpedm20/DCGAN-tensorflow
Page:http://carpedm20.github.io/faces/
No. 8 破涕为笑:改变照片中的面部表情和特征
在这一应用中,你只需要提供一些样本图像,研究人员就能生成表情各异的人脸图像。比如,你可以让一个面无表情的人露出笑容。
让面无表情的人露出笑容,给不戴眼镜的人加副眼镜
实现这一应用的基本思想方法是:将图像的每一列用向量X来表示,计算每一个X的平均值,从而得到一个Y向量。
然后,对向量Y进行一些加法和减法运算,生成一个单一的图像向量Z(如:戴眼镜的男性-不带眼镜的男性+不带眼镜的女性)。最后,把这个图像向量Z输入生成器中。
将一张头像靠左的人脸图像变为靠右的图像
实际上,我们还可以用该模型实现包括旋转、放缩、位置变换在内的多种操作。以位置变换为例,我们可以将一张头像靠左的人脸图像转变为靠右的图像。
为此,我们可以先把向头像靠左和靠右的人脸图像作为样本,对它们取平均值,得到一个“翻转图像”向量。然后,沿着坐标轴对图像向量进行插值(https://zh.wikipedia.org/wiki/%E6%8F%92%E5%80%BC),我们就可以将这种“转变”应用到新的人脸图像上了。
来源&更多信息:
GitHub:https://github.com/Newmu/dcgan_code
Paper:https://arxiv.org/pdf/1511.06434.pdf
Blog:https://hackernoon.com/how-do-gans-intuitively-work-2dda07f247a1
NO. 7 脑洞大开: 用GANs创造出迷幻图像
接下来,我们将为你介绍Google Brain研发的Google Deep Dream。这一应用基于 GoogleNet对物体本质的“认知”可视化。
通过此方法,GANs能够学会生成一些“迷幻”的图片。这些如梦似幻的图像是图片分类器故意过度处理图像的结果。
Deep Dream 用普通图像生成迷幻图片
Deep Dream在图像中“找”到了塔、建筑、鸟和昆虫
当你向Google Deep Dream输送一张图像后,该应用就会开始在图像中寻找各类曾被训练识别的物体。神经网络会将一些毫不相关的物体联系起来,这就好比人们把云想象成小狗、小鸟。然后,Google Deep Dream 会对其联想出的物体作增强处理。
举个例子,当神经网络第一次作出图像识别时,它会认为这张图有40%的可能是一只小狗,而经过一轮处理后,神经网络就会认为可能性增加到了60%。这个过程会不断重复,直到输入图片已被修改得非常像一条狗了。
就这样,它一步步地把原图像调整成另外一张图像。换句话说,创造出了“四不像”的图片。
来源&更多信息:
GitHub:https://github.com/google/deepdream
Blog:https://research.googleblog.com/2015/06/inceptionism-going-deeper-into-neural.html
NO.6 狸猫换太子:改变图像/视频内容
通过图片生成另一张图片是生成网络的另一项有趣应用。凭借此技术,我们可以将一段视频中的动物换成另一种动物,或者将图片里的季节换成另一季节。
该应用的核心在于,使用一组训练图像对来学习映射输入和输出图像。然而,在许多情况下,配对训练图像并不容易获得。为了克服这一问题,我们可以采用“双边镜像绘图”的方式,将一种变换的输入作为另一中变换的输出。这样,我们就能通过无监督学习克服相本容量小的问题了。
下面就是一些例子:
动物变形—通过侦测视频中的奔跑的马给它添加斑马条纹,将马变斑马图像
季节转换—在图像中改变季节,例如将冬季转为夏季,或将冬季转为春季
来源&更多信息:
Page:https://junyanz.github.io/CycleGAN/
GitHub:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
NO.5 化零为整:通过轮廓生成逼真图像
修改逼真图像是一项富有挑战性的工作,它要求在写实的基础上以用户控制的方式改变图像的外观。这一任务的技术含量相当高,一位艺术家可能要经过多年训练才能到达稳定的水准。
GANs 能够从轮廓中生成逼真的图像
给出一件物品的轮廓,这一模型就能够识别出这个物品,并能够生成栩栩如生的物品图像。
在该论文中 (https://arxiv.org/pdf/1609.03552v2.pdf),作者提出一种使用生成对抗网络,从数据中直接学习自然图像流形的方法。模型能够自动调整输出结果,以保证内容尽可能真实,同时所有操作均以约束优化法进行表达,且基本能被实时应用。
这个方法也可以将一张图片变得更像另一张图片,或者根据用户的涂鸦产生全新的图像。
来源&更多信息:
Paper:https://arxiv.org/pdf/1609.03552v2.pdf
GitHub:https://github.com/junyanz/iGAN
Page:https://people.eecs.berkeley.edu/~junyanz/projects/gvm/
NO.4 见字如面:GANs用文本生成图片
下面这项应用既有趣又实用。通过训练,GANs能够依据文字描述自动合成拟真图像。
最近,深层卷积生成对抗网络(DCGANs)用一些特定类别的图像,如人脸,唱片封面,室内空间合成了令人叹服的图像。
这个模型是用由文本和与之对应的图像组成的样本数据进行训练的。给定一个物体的文本描述,这个模型会尝试根据这一描述生成图像。
左栏为文字描述,右栏为机器想象出的图片
左栏的描述从上到下分别为:
- “这只充满朝气的红色小鸟有着尖尖的黑色的喙”,
- 这只黄橙色的鸟有着黑色的翅膀
- 这只天蓝色小鸟的腹部是白色的
在这项工作中,我们首先要获取描述图像的文本,学习文本,抓住重要的视觉细节,然后再利用这些特征文本来合成能够迷惑人们的逼真图像。
来源&更多信息:
Paper:https://arxiv.org/pdf/1605.05396.pdf
GitHub:https://github.com/paarthneekhara/text-to-image
No. 3 未卜先知:通过“场景动态”(Scene Dynamics)预见视频下一秒将发生什么
理解物体运动和场景动态是计算机视觉中的核心问题。不管是视频识别任务(如行动分类)还是视频生成任务(如未来预测)都需要转换场景的模型。但由于物体和场景改变的方式多种多样,构建这样一个动态模型是很有挑战性的。
生成火车站、沙滩、婴儿和高尔夫的预测短视频
为实现这一目标,我们需要一个能将前景和背景区分开来的模型。在保持背景的静止的基础上,神经网络能够了解哪些物体是运动的,哪些物体是静止的。
上面的预测视频便是生成模型想象出来的。尽管这些预测并没有实际发生,基于它们的训练场景类别,这些动作还是相当合理的。
来源&更多信息:
Paper:http://carlvondrick.com/tinyvideo/paper.pdf
GitHub:https://github.com/cvondrick/videogan
Page:http://carlvondrick.com/tinyvideo/
NO. 2 依葫芦画瓢:用GANs完成模仿学习
GANs也可以帮助研发自学习人工智能机器人。此前,该领域的研究多涉及奖励机制的应用。
运用GANs的方法,科研人员向人工智能主体输入真实的演示数据,然后人工智能主体就能通过数据学习尝试模仿相同的动作。
一个AI主体正尝试模仿人类跑步
该模型展示了模仿学习的一种新方法。标准加强学习模型通常要求建立一个奖励函数,用于向代理机器反馈符合预期的行为。然而,这种方式在实践中为了纠正细节问题会在试错过程上消耗大量精力。
取而代之的模仿学习,则是让人工智能主体从实例中学习(例如远程遥控机器或者人类活动提供的案例),省去了设计奖励函数的麻烦。
来源&更多信息:
Blog:https://blog.openai.com/generative-models/
GitHub:https://github.com/openai/imitation
No. 1 自学成才:让“好奇”驱动计算机学习
在很多现实世界的情境中,对人工智能主体的外部奖励是非常少的,或者说根本没有。如此一来,一段被动的程序就会因为它自身的固有属性,无法进化和学习。
在这种情况下,“好奇心”可以作为内置的奖励信号激励人工智能主体去探索它周边的环境、学习在将来对它可能有帮助的技能。在这种情况下主动学习者比被动学习者的表现要好。
在这样的模型中,“好奇心”被设定为 AI预测它自身行为后果能力中的误差。当然了,在这样的语境下,AI也可以通过程序员建立的奖励机制开展学习。
让我们用小孩学习的过程来作个类比。一个不受大人监护的小孩不知道摸热炉子的后果。不过一旦他这样做了,他就会明白他不应该这样做——因为疼痛,也因为了解了摸热炉子和感受到所谓疼痛之间的因果关系。
贪吃蛇游戏:通过“好奇心驱动学习”(curiosity driven learning),贪吃蛇学着去收集那些能增加它的报酬的绿球,并避开那些会减少其报酬的红球。
好奇心驱动的学习(curiositydriven learning)以下面三点作为基础:
- 极少的外部奖励——有了“好奇心”,达成目标所需与外界环境的互动更少了。
- 没有外部奖励的探索,是“好奇心”使AI主体的探索行为更高效。
- 对未知场景中(例如同一个游戏中的新关卡)的泛化处理。此时AI主体利用过往经验探索新大陆,这会比它从零开始探索要快很多。
来源&更多信息:
GitHub:https://github.com/pathak22/noreward-rl
Paper:https://pathak22.github.io/noreward-rl/resources/icml17.pdf
Website:https://pathak22.github.io/noreward-rl/index.html#demoVideo
结语
看完了以上这些应用,你是不是对生成式对抗网络刮目相看了呢。然而,这些只不过是生成式对抗网络初试身手罢了。相对于生成式对抗网络所能完成的工作而言,这些应用只是冰山一角。生成式对抗网络为我们提供了一个强有力的训练神经网络的方法,让机器能够完成任何一个人类能够完成的复杂任务。
生成式对抗网络(GANs)向我们证明了:创造力不再是人类所独有的特质了。
最后,如果你想更深入地学习生成模型(generative model)和深度卷积生成式对抗网络(DCGAN),不妨继续阅读下面的这些资源:
1.Dev Nag的50行代码看生成式对抗网络
2. Ian Goodfellow’s的生成式对抗网络的keynote(一个技术性较强的视频)
3. Siraj Raval’s的生成式对抗网络视频教程(一个简短而有趣的视频)
https://www.youtube.com/watch?v=deyOX6Mt_As
原文链接:https://medium.com/archieai/a-dozen-times-artificial-intelligence-startled-the-world-eae5005153db