神经网络玩个球!我搭建了一个会玩FIFA的AI。 Posted 2021-03-29 景略集智
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络玩个球!我搭建了一个会玩FIFA的AI。相关的知识,希望对你有一定的参考价值。
欢迎访问景略集智的官方网站(jizhi.im)。
小伙伴们,就在昨天晚上12点,集智课堂的团长优惠活动结束啦,不知道小伙伴们最后拿到本次活动最低价没有?没有拿到团长优惠的小伙伴也不要着急~因为下周一开始课程~~就更贵啦!(逃
下周开始集智课堂课程就要阶梯涨价啦,为了保证教学质量,在学生招满后,或在4月9号集智课堂停止售课,本学期最后一次低价就在25号,快快点击阅读原文进入商城,预购从速喵!
<span style="font-size: 14px;"><img src="https://pic4.zhimg.com/v2-475b2e0b41b8c2736c074d6f84db2205_b.jpg" data-caption="" data-size="normal" data-rawwidth="703" data-rawheight="258" class="origin_image zh-lightbox-thumb" width="703" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvv6ZlWcPCdpqcJxL5hkevKqt3iaJfOQ32UnXWO4rhWsOibrMbt01VOv7Q/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic4.zhimg.com/v2-475b2e0b41b8c2736c074d6f84db2205_b.jpg"/></span>
我们现在往往是通过手动编码一系列的规则,来创建游戏 AI 机器人。大部分情况下,这种方法让机器人模仿人类行为的效果也的确不错。
然而,对于大多数游戏来说,我们还是很容易就能把真正的人类的玩家与机器人区别开来。如果我们想让这些机器人表现地更像人类,那么不用手工编程去搭建它们情况会不会更好?如果我们只是让机器人通过观察人类如何玩游戏来学习游戏,那会是什么情形?
为了探究这个想法,我们需要一款在开发游戏之前人类已经在玩的游戏,以此来收集数据。毫无疑问,FIFA 就是一款很趁手的游戏,很适合这个问题的研究。通过玩游戏并记录我在游戏中的行为和决策,让我能训练一个端到端的深度学习机器人,而不必对游戏的单一规则进行硬编码。
<span style="font-size: 14px;"><img src="https://pic1.zhimg.com/v2-f4a350f8857d4232d00c1e87d5974603_b.jpg" data-size="normal" data-rawwidth="1200" data-rawheight="675" class="origin_image zh-lightbox-thumb" width="1200" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvq5bM65EYVPb35N8zibmuOvddwgh8lQOI9HVyvHVSSpyjbqPKLNCwEGw/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic1.zhimg.com/v2-f4a350f8857d4232d00c1e87d5974603_b.jpg"/></span>
FIFA
玩游戏的机制
基本机制是,我们无需获取 FIFA 的内部代码就能构建这样一款机器人。好消息是,机器人也不想看这些信息。我们只需要将游戏窗口的简单截图输入到机器人的游戏引擎中,然后它会处理这些视觉信息,输出它想要采取的动作,并通过按键模拟传达给游戏。不断重复这个步骤。
<span style="font-size: 14px;"><img src="https://pic3.zhimg.com/v2-e3c5582b4d5dba7a8f5467a3c1afa29a_b.jpg" data-caption="" data-size="normal" data-rawwidth="1125" data-rawheight="632" class="origin_image zh-lightbox-thumb" width="1125" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvYLyXv6OuibWYTKUdoE6B5Ea0icXELHTyoqw5cLSpNGdc92kFE4zcXUTg/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic3.zhimg.com/v2-e3c5582b4d5dba7a8f5467a3c1afa29a_b.jpg"/></span>
现在我们有了一个框架,可以将输入提供给机器人并让其输出控制游戏,现在我们来看有趣的一部分:学习游戏智能。这是通过以下两个步骤完成的:
使用卷积神经网络来理解截图
使用基于对图像理解的长短期记忆网络来输出适当的动作
步骤一:训练卷积神经网络(CNN)
卷积神经网络以“能够高准确率检测图像中的物体”而著称。加上一些快速的 GPU 和智能网络架构,我们就可以得到一个可以实时运行的卷积神经网络模型。
<span style="font-size: 14px;"><img src="https://pic3.zhimg.com/v2-337399da38aab695ab77624730126f9d_b.jpg" data-caption="" data-size="normal" data-rawwidth="900" data-rawheight="296" class="origin_image zh-lightbox-thumb" width="900" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbv3tooTXZ4b8zxPjtXneb6SQmHOnu9KaDfekicS7BpCkqfoXYso7lDhPg/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic3.zhimg.com/v2-337399da38aab695ab77624730126f9d_b.jpg"/></span>
为了让我们的机器人了解输入的图像,我用了一个极其轻量和快速的卷积神经网络,称之为MobileNet。从该网络提取的特征地图显示模型能高度理解图像,例如玩家和其他感兴趣的对象位于屏幕上的位置。该特征图随后与 Single-Shot Multi-Box 一起用于检测球场上的球员以及球和球门。
<span style="font-size: 14px;"><img src="https://pic2.zhimg.com/v2-afb3746a3ea517183742a04c76f521b0_b.jpg" data-caption="" data-size="normal" data-rawwidth="777" data-rawheight="400" class="origin_image zh-lightbox-thumb" width="777" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvIsXafTAtxQov4yoIZLv3r6GeUUbhE8DJ3N25Gb9icHQiaT6uN3IgWKNQ/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic2.zhimg.com/v2-afb3746a3ea517183742a04c76f521b0_b.jpg"/></span>
步骤二:训练长短期记忆网络(LSTM)
<span style="font-size: 14px;"><img src="https://pic1.zhimg.com/v2-6528eae85ea0707b30ea3aa0d2f525bb_b.jpg" data-caption="" data-size="normal" data-rawwidth="900" data-rawheight="370" class="origin_image zh-lightbox-thumb" width="900" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvmo0Mz8kWLEibNZSqjf0GnHhoticmVyKxTdH5DibXARPAVibyU6tzVlhycQ/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic1.zhimg.com/v2-6528eae85ea0707b30ea3aa0d2f525bb_b.jpg"/></span>
现在我们对图像有了一个了解,可以继续下去了,也能决定我们接下来的操作。但是,我们不能仅仅依靠一个模型就得出结果。我们更希望看到这些图片的短序列。这就是为什么我们在图形中引入长短期记忆网络,因为它们以能够模拟数据中的时间序列而出名。我们将连续的帧用作序列中的时步,并且使用卷积神经网络模型为每个帧提取特征映射。然后将这些映射同时输入到长短时记忆模型中。
<span style="font-size: 14px;"><img src="https://pic1.zhimg.com/v2-f95a038e2460f405cfff725eef4bc2be_b.jpg" data-caption="" data-size="normal" data-rawwidth="740" data-rawheight="417" class="origin_image zh-lightbox-thumb" width="740" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvIOF6X6RC6hBDSXxsn0tZY7QBjsTrWD2ZjiagWUKGsTfRvGf7dib32wpA/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic1.zhimg.com/v2-f95a038e2460f405cfff725eef4bc2be_b.jpg"/></span>
第一个长短期记忆模型负责学习玩家需要做什么动作。这样就需要它是一个多级分类模型。第二个长短时记忆模型获得相同的输入,并且在横传、突破、传球及射门这一系列的动作中做出相应响应(与游戏手柄的按键对应),这就是另一个多级分类模型。然后机器人将这两个模型产生的输出转换为按键来控制游戏中的动作。
这些网络模型已经通过手动播放游戏并记录输入图像和目标按键得到了训练。而收集这几个带有标签的数据并不像是一件苦差事!
评估机器人的性能
我不知道该用一些什么准确参数来判断机器人的表现,所以让它直接去玩这个游戏。仅仅训练了 400 分钟,机器人已经学会跑向对手的球门,前方传球并在发现有机会时进行射门。在截至写作时为止,它已经在 FIFA 18的初学者模式中的大约 6 场比赛中打入了 4 球,比 17/18 赛季 Paul Pogba 还多出 1 球。
<span style="font-size: 14px;"><img src="https://pic2.zhimg.com/v2-ad22f4b39f5044ea3e46909f8e93831a_b.jpg" data-size="normal" data-rawwidth="590" data-rawheight="350" class="origin_image zh-lightbox-thumb" width="590" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvhS6VFkic1utfSKGS5srgngicKhKI27ex72fjibpWdibibWI0I4Sia67aK01A/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic2.zhimg.com/v2-ad22f4b39f5044ea3e46909f8e93831a_b.jpg"/></span>
Paul Pogba:???
我们的机器人与 FIFA 内置机器人对战的视频可以在我的 YouTube 频道中看到:
结语
我对这种构建游戏机器人的方案的初步印象肯定是兹瓷的。在有限的训练中,机器人已经掌握了基本的比赛规则:向目标点移动并将球射入网中。我相信用更多时长的数据训练后,它的表现会非常接近人类水平,而这样的数据对游戏开发者来说是很容易收集的。此外,将模型训练拓展到从真实世界的比赛画面中学习,将使游戏开发者能够让机器人的行为更加自然和真实。所以现在,如果有 EA 体育的任何人在阅读此内容的话,你懂的······
附本项目 GitHub 代码库:
ChintanTrivedi/DeepGamingAI_FIFA
参考资料: https://towardsdatascience.com/building-a-deep-neural-network-to-play-fifa-18-dce54d45e675
<span style="font-size: 14px;"><img src="https://pic4.zhimg.com/v2-6dbb99e8fe24e92fa071b2d8a5966775_b.jpg" data-caption="" data-size="normal" data-rawwidth="750" data-rawheight="1334" class="origin_image zh-lightbox-thumb" width="750" data-original="http://mmbiz.qpic.cn/mmbiz_jpg/Sv0PmQ9Wxw51IpFxiauv3jbxZQAp8EFbvHgk3sbicNhN5FDE52crfN3G9jgTaR1Tx0tGxibBibLUAficI1FDPY3BPMg/0?wx_fmt=jpeg" data-type="png" data-ratio="0.66796875" _src="https://pic4.zhimg.com/v2-6dbb99e8fe24e92fa071b2d8a5966775_b.jpg"/></span>
扫描下方二维码加入用户群吧!
( 若过期请主页回复【用户群】 )
官方微博:@景略集智
商务合作:chenyang@jizhi.im
投稿转载:kexiyang@jizhi.im
景略集智-业界领先的人工智能教育、求职平台
以上是关于神经网络玩个球!我搭建了一个会玩FIFA的AI。的主要内容,如果未能解决你的问题,请参考以下文章
现有n堆球,其中n是偶数,第i堆中有 ai 个球。现需要将其中 n / 2 堆中的球数全变成完 全平方数,另外的 n / 2 全不为完全平方数。
趣谈网络协议-UDP协议:因性善而简单,难免碰到“城会玩”
事后诸葛亮分析
BZOJ2554Color 概率神题
UEFA/FIFA 分数 API [关闭]
Keras 模型精度没有提高