天津渔网价格虚拟社区

自制AI队友:创建一个会玩《FIFA 18》的深度神经网络

论智2018-10-10 15:01:08
来源:Medium
编译:Bot

编者按:为了创建游戏中的AI机器人,游戏开发者通常会根据规则手工编写一系列代码。在大多数情况下,这种方法能使机器人在模仿人上做到极尽逼真,但它们本质上和人还是有较大区别,大部分玩家还是一眼就能分辨出这个队友/敌人究竟是真人还是AI。

那么,除了手动写规则,或是写一些硬编码,我们还有别的方式能使游戏AI更仿真吗?如果我们想让AI通过观察人类行为学会打游戏,我们该怎么做?

为了探索这些问题,我们首先需要一个能提供大量比赛数据的游戏,比如《FIFA》。所以接下来我们就以《FIFA》系列的最新版《FIFA 18》为例,用记录了玩家行为和决定的大量游戏录像训练一个端到端的深度学习机器人。需要注意一点是,我们不会针对单个游戏规则编写硬编码。

Github地址:github.com/ChintanTrivedi/DeepGamingAI_FIFA.git

玩游戏的机制

因为我们不能访问游戏的内部代码,所以为机器人构建基本的游戏机制是一个首要任务。这其实也是种优势,这个项目的一个前提就是不依赖任何游戏内部信息。因此,我们的机器人只会看到简单的游戏窗口屏幕截图,玩家看到的是什么,它看到的就是什么。它会通过处理这些视觉信息输出想要采取的动作,并用手柄模拟器把指令传达给游戏。之后不断刷新图像,重复循环。

如上图所示,现在我们建立了一整个为机器人提供输入,并由它输出操控游戏角色的指令的框架。这时我们就来到了一个有趣的环节:学习游戏智能。它可以被分为两个步骤:(1)用卷积神经网络理解截图;(2)用长短期记忆网络理解图像内容并做出决策。

第1步:训练卷积神经网络(CNN)

CNN以其能高精度检测图像中物体的能力而闻名。在它的基础上,我们辅之以高性能的GPU、更智能的神经网络架构,我们就能获得一个可以实时运行的CNN模型。

为了让我们的机器人了解输入的图像,我们可以使用这个名为MobileNet的轻量级、高速CNN。该网络能在高度理解截图的前提下从图中抓取特征图,例如玩家或玩家关注的角色在屏幕上的位置。之后再结合物体检测模型SSD检测球场上的球员、球以及球门。

第2步:训练长期短期记忆网络(LSTM)

现在我们已经理解了图像,也就是说机器人拥有了进行决策的能力。但是我们不希望只让它看到一个个检测框然后采取行动,我们希望它能看到图像的短序列。这就是为什么引入LSTM的原因——它们能够模拟视频数据中的时间序列。我们把连续的帧用作时间步长,并用CNN模型从每一帧中提取特征映射,再把这些同时馈入两个LSTM网络。

第一个LSTM负责了解玩家需要做什么动作,因此,这就是一个多类分类模型。第二个LSTM得到的输入和第一个相同,但它必须决定采取什么动作来实现横传、直塞、短传、射门:另一个多类分类模型。我们把这两个分类问题的输出转换为按键,以此达到控制游戏的目的。

评估机器人的性能

除了让AI机器人直接上赛场,其实我们也找不出任何测试性能的方法。在训练了400分钟后,机器人学会了向对方球门靠近、向前方传球并在发现球门时射门。在《FIFA 18》的新手模式下,我们的机器人在6常比赛中打进了4粒球,比17/18赛季的Paul Pogba还多出1球。

(口音听不太清,请自己练听力)


小结

这只是一种创建机器人的方法,就结果来看,它还是挺积极的。训练中也曾出现两个问题,一是机器人分不清敌我双方,另一个则是它把球踢过半场就开始往回跑。关于第一点,作者的解决方案是把截图和按键信息作为监督学习的训练数据,并始终用相同的主队和不同的客队比赛,久而久之,机器人就能分出哪些是自己人,哪些是对手。而关于第二点,一位网友提出了一种更为简单的解决方案,就是以中线为界把球场分为两部分,翻转一侧的截图并调整方位,起到事半功倍的效果。

在有限的训练下,机器人已经掌握了基本的比赛规则:朝球门移动并把球踢进网里。如果再经过一段时间的训练,相信它能比现有的游戏AI更接近人类,而且更容易创建。此外,如果我们能扩展一下这个实验,用真实的比赛数据来训练它,相信机器人的行为能更自然和现实。所以也许游戏开发商们可以换种方式来做AI了,你说对吗,EA?

原文地址:towardsdatascience.com/building-a-deep-neural-network-to-play-fifa-18-dce54d45e675