实战|用GAN混搭出你自己的8-bit任天堂游戏

机器之心报道

参与:晏奇、微胖


玩了那么多年的任天堂,有没有想过自己动手攒一版属于自己的混搭版任天堂风游戏。本文是machine learning is fun作者的另一篇实操类文章,手把手交你用GAN来实现这个想法。

生成模型(Generative Model)能让计算机自己创造数据,比如照片、电影或音乐。

一年多以前,Alec Radford(在 Ian Goodfellow 的研究基础上)发表了一篇论文。这篇论文改变了每个人对于用机器学习搭建生成模型的想法。这种新系统被称为深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks,DCGANs )

通过一种巧妙的结合方式,让两个深度神经网络互相竞争,DCGANs 能够创造出足以令人信以为真、近乎真实相片的图片。所有这些卧室图片都出自 DCGAN:

实战|用GAN混搭出你自己的8-bit任天堂游戏

人工智能研究人员关注生成模型的原因在于,这些模型似乎朝着能消化真实世界原始数据、自动理解世界的人工智能系统,迈出了重要一步。

但是,让我们用生成模型做一件有点冒傻气的事情——创作八位(8-bit)电子游戏作品!(译者注:八位游戏,想想魂斗罗)

实战|用GAN混搭出你自己的8-bit任天堂游戏

这一游戏级别的所有艺术创作都是机器生成的。


生成模型的目标

所以,人工智能研究人员建造复杂的系统,生成看上去不错的卧室图片是为了什么?

这是因为如果你要生成关于一些东西的图片,得要先理解它们。

看看这张图片:

实战|用GAN混搭出你自己的8-bit任天堂游戏

一只狗。准确的说是……我的狗。

你马上就看出这是一幅狗的图片——一只有四条腿,一只尾巴,长有毛皮的东西。但是,对于一台计算机来说,这幅图仅仅是一个表征了每个像素颜色的数字网格,理解不了图片所代表的概念。

但是,现在请想象一下,给计算机展示上千张狗的图片,看完这些图片以后,计算机就能自己生成关于狗的新图片——包括不同品种的狗,不同角度看见的狗。我们甚至可以向计算机索要特定类型图片,比如,“一只小猎犬的侧面图。”

如果计算机能够做到这一点,并且生成的图像中,狗的腿、尾巴、耳朵数量都是对的,那么,这就可以证明计算机知道哪些部分可以组成一只狗,尽管没人对它解释过这些。因此,某种意义上,一个好的生成模型至少具有婴儿水平理解能力。

这就是为什么研究者们那对建立生成模型那么兴奋。它们看起来是一种训练计算机了解人类概念的方法,而且在训练过程中不需要将这些概念的含义明确教授给计算机。这是超越现有系统的巨大一步,现有系统只能从训练数据中学习,而且这些数据还需要人工费心费力的预先标记处理才行。

但是,如果这项研究得到的整个结果是一个能生成狗图像的程序,要等多少年我们才能有第一个由计算机生成的 Dog-A-Day 日历这样的副产品呢?

实战|用GAN混搭出你自己的8-bit任天堂游戏

没错,最终机器人会向每个人的工作挑战。

如果你能写一个理解狗的程序,那么为什么不写一个能理解其它任何事物的程序?或者是一个可以生成无数人握手照片的程序?我肯定有人会掏钱做这活儿的。

实战|用GAN混搭出你自己的8-bit任天堂游戏

我意思是……额,对于一家AI创业公司来说,这个点子的确很烂……但是我还听过更烂的创业点子,所以……没准能成功吧?

好吧,也许一个可以生成一堆无用图像的程序不会那么吸引人。但是考虑到生成模型仅在去年就频频出现进展,谁知道我们5或10年之后会怎样。如果有人开发了一种能产生整部电影,或音乐,或游戏的系统,那么将会发生什么?

如果你展望一下20到30年后,你已经能够想象一个100%由机器生成娱乐业的世界了。

视频游戏产业是第一个开始做用人工智能生成原始内容的严肃实验的娱乐产业领域。除了重叠在计算机游戏和机器学习工程师之间的文氏图(Venn diagram)以外,目前的AAA视频游戏大约有3亿多美元的市场,所以还有很大的投资激励来发展视频游戏开发自动化。

我们还在基于机器学习的生成模型的早期发展阶段,它们的实际使用领域目前来说很狭窄,但是有很多事情用它们来做会很有趣。我们现在就来看看我们能用其中一种模型来做什么。


DCGANs网络是如何工作的

为了得到DCGAN,我们先建立两个深度神经网络。然后我们让它们互相对抗,一直不断地让其试图战胜自己的对手。在这个过程中,它们二者都变得越来越强。

我们假设第一个深度神经网络是一名新警员正在接受假钞识别训练,它的工作是观察一幅图片来告诉我们这个图片是否包含了真钞。

由于我们是在图片中寻找物体,所以我们可以使用标准卷积神经网络( Convolutional Neural Network)来干这活儿。如果你不熟悉ConvNets,你可以参见我早先的文章。但是基本想法还是,给神经网络输入一幅图像,通过多层网络来处理它,这些多层网络逐渐识别图像中越发复杂的细节特征,然后输出一个单值(single value)——在这个例子中,即是:图像中是否包含了一幅有着真钞的图片

这第一个神经网络就被称为“判别网络”(Discriminator):

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:判别网络

现在,让我们假设第二个神经网络是一个假币伪造新手,正在学习造假技术。对于第二个神经网络,我们将反转一个标准的卷积神经网络中的各层,以此让每个信息都可以反向传递。于是,这第二个网络能输入一系列值并输出一张图片,而非“判别网络”那样输入一张图片然后输出一个值。

这是第二个神经网络,称为“生成网络”(Generator):

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:生成网络

所以,现在我们既有一个警员(即:判别网络)来搜寻假币,也有一个假币贩子(即:生成网络)来印刷假币。那我们就让他们互相练练手吧!

在第一回合中,生成网络将创造出悲剧般不堪的“假币”,它也就仅仅是把钱的各种元素组合在了一起。之所以这样是因为它现在还完全不知道钱应该长成什么样子。

生成器造出了它第一张(不堪入目)假美元

但是,现在我们的判别网络在执行验证假币这活儿时也表现出同样糟糕的能力,所以,它根本看不出是否是假币。

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:这货(判别网络)居然觉得这张美元真的!

现在,我们更进一步,告诉判别网络说这张美元实际上是伪造的。然后我们给它展示一张真的美元并问它:这张真的和刚才那张假的看起来哪些地方不一样。判别网络就开始寻找新的细节来帮助它自己区分真假二者。

例如,判别网络也许会注意到真钞上面有一个人而且假钞上没有。凭借这个知识,判别网络学会了如何区分真假。在验钞这件事上,它的能力有所提升。

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:判别网络终于变强了点!它现在可以识别那些制作很粗糙的假币了。

现在我们开始第二轮。我们告诉生成网络,它的假币图像突然因为被发现是伪造的而被拒绝了,于是它需要开始它自己的改进了。我们当然也告诉它说:判别网络现在通过寻找是否有脸来判断真伪,所以对于生成网络,最好的忽悠判别网络的办法就是在自己做的假币上放一张脸:

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:生成网络制作了一张稍微好点的假币

然后这张假币再次被误认为是真的!于是,判别网络不得不再看一遍真钞并找出一个新方法来分辨它和假钞的区别点。

这种在生成网络和判别网络之间来回对抗的游戏持续数千次,直到双方网络都成了专家。最终,生成网络可以生成非常逼真的假钞,而且判别网络也变身为能够鉴别哪怕是最细微错误的超级警探。

当两个网络都充分地训练,以至于人类都被产生的伪图像之逼真程度所震撼后,我们就可以用这些伪图像来做任何我们想做的事情。


将这项技术应用于视频游戏

所以现在我们知道“深度卷积生成对抗网络”(DCGANs)是如何工作的了。让我们来试试我们是否可以用它来生成上世纪80年代风的视频游戏图像。

实战|用GAN混搭出你自己的8-bit任天堂游戏

我们来创建一个DCGAN,它能基于真实游戏的截图来为生成虚构的任天堂(NES)视频游戏:

我们的想法是,如果我们能生成令人信以为真的虚视频游戏,我们就能从这些截图中复制粘贴其中的设计,并且把它用在我们自己制作的的复古风格的游戏中。由于这些生成的视频游戏从未存在过,所以它甚至都不会被偷走。(也许吧……以后可能讲不定)

视频游戏设计在那个年代是非常简单的。因为NES只有一点点内存(游戏占用的内存比这篇文章占的都少得多!),程序员必须要用大量的技巧来把游戏艺术装进内存里。为了最大化使用有限的空间,游戏使用Tile-based图形处理方法 ,也就是说游戏中每个屏幕图像都是由一些(一般来说是16*16的像素)重复的图形片(graphical tile)组成。

例如,游戏“塞尔达传说”(The Legend of Zelda)的开场画面就是仅仅由8个不同的tile组成的:

实战|用GAN混搭出你自己的8-bit任天堂游戏

这就是整个“塞尔达传说”游戏地图的tile:

实战|用GAN混搭出你自己的8-bit任天堂游戏

有时候这些tiles会交换它们周围的颜色来让不同的地区看上不不同,不过也仅仅是这样而已。

我们的目标是为我们的游戏创建一个类似的tiles。因此,我们并不真正关心我们生成的游戏截图是否看起来和真实世界一样,而是仅仅去搜寻可以在我们游戏中用16*16像素的tiles拼成的形状和图案——就像石头、水、桥等等,然后我们可以用那些tiles来建造我们自己的8-bit视频游戏画面。


获取数据

为了训练我们的系统,我们需要大量的数据。幸运的是我们有超过700款NES游戏可以提取数据。

我使用wget在 The Video Game Museum网站(抱歉爬取了你们的网站!)上下载了所有的NES游戏屏幕截图。在几分钟下载之后,我有了超过一万幅上百种不同NES游戏的屏幕截图:

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:只用差不多1万张游戏截图就可以组成训练数据集

现在,DCGANs仅针对很小的图像进行工作就行了——256*256像素左右。虽然NES游戏机的整个分辨率只有256*224像素,但是这不是个大问题。为了让事情变得简单,我把每个NES游戏截图都剪裁到了224*224像素大小。


设置DCGAN

在github上有一些DCGANs的开源实现,你可以试试。我用了Taehoon Kim的Tensorflow implementation。由于DCGANs是非监督式的,你需要做的事情就是把数据放到一个文件夹,调整基本参数,开始训练,然后等着看给你的结果。

这里是原始训练数据的一些样例:

实战|用GAN混搭出你自己的8-bit任天堂游戏

现在开始训练。一开始,从生成网络中输出的完全是纯噪音。但是随着生成网络学着做得越来越好,它慢慢开始生成有形状的图像。

经过了几轮更多的训练后,图像开始变得类似于恶梦版的经典任天堂游戏。

随着训练的深入,我们开始看见我们希望看见的砖和块。你也可以看见屏幕元素,比如生命条或者甚至一些文字:

实战|用GAN混搭出你自己的8-bit任天堂游戏

接下来就是比较复杂的地方了。我们怎么知道计算机正在创建一个全新的艺术而不是只是从训练图像中直接反复使用艺术设计呢?在其中两张图片中,你可以清晰的看见来自《超级马里奥3》的菜单栏和来自初版超级马里奥的标题栏。

反复训练数据绝对是可能发生的事情。 通过使用大的训练数据集而不是训练太长时间,我们可以尝试减少发生这种情况的机会。但这是一个棘手的问题,研究依然在进行中。

由于我不是为了美学来干这事,所以我调整模型一直到它产生出对于我来说看起来是原创的作品就可以了。但是我不能证明我这个“艺术设计”是完全原创的,除非通过搜寻训练数据来看是否有类似的艺术设计,从而才可以验证它的原创性。

进行了几个小时的训练,生成的包含16*16像素的“tiles”的图像在我看来还不错。我还在找一些关于石块、砖形、水形、灌木以及可以营造诡异气氛的tiles的变化版本。

接下来我需要预处理生成图像来保证它们只使用64种可在NES上处理的颜色:

实战|用GAN混搭出你自己的8-bit任天堂游戏

原始的NES系统只能显示这64种颜色。技术上讲,这儿其实只有54种独特的颜色,因为它们之中有一些是复制的。

然后我将在 Tiled Map Editor打开这些64色图像。因为,这样我就可以轻松地抓取一些符合我想要的16*16像素tiles了。

实战|用GAN混搭出你自己的8-bit任天堂游戏

图:我从生成的截图中抓取的tiles

然后,在 Tiled Map Editor里面,我可以把这些16*16像素的“tiles”排成一个水平布局,让人想起了NES的游戏《恶魔城》(Castlevania):

实战|用GAN混搭出你自己的8-bit任天堂游戏

看起来还听不错的!要知道,我没有用图像编辑器碰任何一个像素。每个“tiles”都直接来自于DCGAN的模型。

下面,让我们把我们的主角也放进来,再放一些《恶魔城》里的敌人,于是我们就看见了这个画面就像是在运动中一样:

实战|用GAN混搭出你自己的8-bit任天堂游戏

为了获得完整的效果,让我们来看看如果画面中加上了菜单元素看起来会怎样:

实战|用GAN混搭出你自己的8-bit任天堂游戏

想想这事机器创作的背后都有点冒冷汗……

我觉得这看起来很像我记忆中的NES游戏!我没说这是有史以来最棒的NES艺术设计,但肯定不是最差的:

实战|用GAN混搭出你自己的8-bit任天堂游戏

《猎豹人》(The Cheetahmen)不是个好游戏。


就这样?

我对这样的生成模型真的很兴奋。有一天,能用计算机来生成无数的艺术品这件事,想想就很迷人。但是当我和别人提到它,有时会听到这样的回答:“就这样?这也太基础了点吧。”

当然,现在对生成模型有大量的炒作。尽管很难被训练并且受限于产生很小的图像,GANs还是已经被称为人工智能的未来。实际上,现有的最好模型也只能生成邮票大小的突变狗图像:

实战|用GAN混搭出你自己的8-bit任天堂游戏

真实恶梦中才会出现的动物!照片源自Ian Goodfellow’s GAN Tutorial paper

但是几年前,我们还无法做到这件事情。能生成这样的图片,我们非常兴奋。

技术每天都在进步。这里我随便找了篇论文,这周发出来的,它用GANs来判断人脸的岁数。

如果我们按照这个节奏继续前进,不会太久,生成模型就会成为帮助我们搞创作的主流工具。现在开始研究是个绝佳时机!

gan

相关推荐