首发于 智能单元
AI玩跳一跳的终极奥义:首个端到端神经网络,看AI在玩游戏时注意什么

AI玩跳一跳的终极奥义:首个端到端神经网络,看AI在玩游戏时注意什么

本文首发于新智元!
相对新智元的原文略有删改!

1 前言

微信跳一跳自发布以来,迅速成为了人们茶余饭后的休闲利器,同时也演变成了各路程序员的竞技场。程序员们争先开发出各种牛逼外挂,让计算机自己来玩跳一跳,把小游戏玩出了新的境界。

然而,在深度学习如此火热,AlphaZero已经征服各种棋类,Atari游戏已经被计算机吊打的情况下,目前出来的各种外挂版本,大多采用传统的方法来实现,比如使用传统计算机视觉的颜色,边缘检测等方法来寻找棋子的位置。传统做法,虽然已能够在游戏中取得较好分数,但是代码复杂,需要针对不同手机设置不同的参数,简单点说就是逼格不够,不够AI。

那么,到底能不能用纯深度神经网络来玩跳一跳呢?

答案当然是Yes。

在本文中,我们祭出微信跳一跳AI的终极奥义:仅使用一个端到端的神经网络,就能玩!

2 代码

Talk is easy, show me the code!

So, here is the code?:

这个git仅包含所需的运行代码,就两个文件一个ios,一个android。

使用方法非常简单:

(1)安装iOS或Android开发所需的软件及依赖,具体详见:

(2) 安装本代码所需的PyTorch深度学习框架:

(3) 手机连接好电脑,注意iphone需要在run_ios.py中更改一下WebDriverAgentRunner运行后得到的ip。打开微信跳一跳,然后在Terminal中输入:

python run_ios.py

或者

python run_android.py


接下来就是见证奇迹的时刻!


再看看代码,也就是100行!惊不惊喜!意不意外!

这到底是怎么实现的呢?

下面我们来解密实现方法!

3 端到端神经网络玩跳一跳是怎么实现的?

估计有很多朋友的第一反应是:难道是用深度增强学习(Deep Reinforcement Learning),也就是AlphaGo的方法?

老实说我一开始也是打算这么干的,但是具体分析一下发现并不是那么好做。首先是我们获取不了游戏内部数据,不方便获取Reward,即使我们要自己设定一个Reward,比如计算棋子离盒子正中心的位置,我们依然需要通过计算机视觉分析的方式实现,违背了我们纯端到端神经网络实现的初衷。其次是跳一跳这个小游戏,玩的速度很慢,基本上一步要一秒多。而使用深度增强学习最大的问题就是需要训练几十万步。这样看来,要用深度增强学习训练出一个能玩的网络,大概要训练到明年吧!

因此,我们不用深度增强学习,而改用模仿学习(Imitation Learning)!并且使用模仿学习中最简单的行为克隆(Behavior Cloning)方法。简单的说,就是收集很多好的游戏输入输出数据,然后使用监督学习训练。

本质上说,这种模仿学习的做法就是把人工编写的复杂程序存进一个神经网络中!

好了,确定了方法论。下面就可以开始具体实施了。

3.1 构造游戏数据库

从哪里搞到很多的游戏输入输出数据呢?别忘了,传统方法都已经可以玩到10000分以上了,我们完全可以用传统方法来收集数据。在这里,我基于下面的代码稍作修改收集数据:

这个代码加了点小AI,训练了通过线性回归训练了一个简单的线性模型来估计跳跃距离和按压时间的关系,相对人工设定的参数会好一些。

一个用线性模型玩跳一跳的结果


有了这个,我们就可以将每一次跳跃的屏幕截图及按压时间记录下来:

其中图像先做一下预处理,居中裁成正方形,方便之后的训练,而按压数据则存在Json中,一个图片名称对应一个按压时间。图片名称很简单,直接使用的截图时间。

就这样,我们让微信跳一跳跳了n个小时,终于收集到了5000多个数据样本。

有了数据库,下面就是如何训练了。

3.2 构造端到端神经网络模型及训练

这里我构造了一个5层的卷积神经网络,每一层神经网络包含一个64 通道的3x3 卷积核的卷积层,一个BatchNorm,一个ReLU及一个2x2的Max-Pooling层。具体如下图所示:

由于输出的按压时间是一个单值,非常简单,我们使用Mean Square Error来作为模型的损失函数Loss。因此,我们的模型是一个简单的回归模型。我们使用构建的数据库进行训练。在训练之前,我们对图像数据进行预处理,将其压缩成224x224的RGB图像,然后再输入到神经网络。我们采用Adam作为优化器,学习率设定为0.001,训练200个episode,一个episode随机遍历整个数据集一遍。

具体的训练代码见:

4 神经网络在玩游戏的过程中思考了吗?

上面就是端到端神经网络的实现方法,看起来过于简单了。只玩到这不太符合我们的Geek精神。因此,我们不禁要问:神经网络在玩游戏的过程中思考了吗?是不是神经网络也思考了传统做法中我们人考虑的问题,比如确定棋子和盒子的位置。为了验证这一点,我们做的一个额外的实验,构建一个带有注意力(Attention)机制的神经网络进行训练。我们使用一个4层的U-Net来输出一个和图像输入维度一致的注意力蒙版(Attention Mask),然后将原有图像与注意力蒙版相乘(Element-wise Product)就得到带蒙版的图像,即仅考虑注意力区域的图像。然后将带蒙版图像输入到4层卷积全连接后输出按压时间。具体网络结构如下图所示:

注意力蒙版每一个维度的值我们限制为[0,1],越趋于1就表示越关注,反之亦然。基于这样的网络模型训练后,我们就可以来看看神经网络关注了什么。下面是一些对应的截图:

可以看出,神经网络一定程度上自动捕捉了棋子和盒子的位置信息,特别注意棋子上头的高亮,这非常符合人玩游戏的方式,也符合传统做法的方法。一定程度上说明整个端到端神经网络内部也会自动捕捉到这些重要的位置信息!

5 小结

微信跳一跳的终极奥义就介绍到这了!大家肯定会惊讶于深度学习的神奇之处。老实说只看运行的代码我也非常惊讶。但是再看看训练的方式似乎不过如此。这大概也是深度学习的魅力吧!

希望这个Work能给大家带来更多欢乐!

4617作文网1518起名字测试打分数给宝宝起大名周公解梦破解大全查询安卓版儿童的名字怎么起钗头凤周易起个和凤凰有关的名字舞蹈服装公司名字起名大全周易合八字算命名扬天下周易起名网是真的吗造梦西游外传内购破解版起名字刘雨什么好听算死命第二季五行缺土字 起名起名字唐姓女生孩子起汽修店名带熙字的男孩起名字机械加工厂起名大全批八字算命安卓版奶制品公司起名周易免费名字在线算命婚姻生辰八字易周贷耿姓起名字女孩名字姓尹的男宝起名姓氏曲起名字男孩算人的一生命运周易起名网免费取名生辰八字巨字起名字婚宴厅起名周公解梦梦见烧香淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男子给前妻转账 现任妻子起诉要回网友建议重庆地铁不准乘客携带菜筐月嫂回应掌掴婴儿是在赶虫子重庆警方辟谣“男子杀人焚尸”国产伟哥去年销售近13亿新的一天从800个哈欠开始男孩疑遭霸凌 家长讨说法被踢出群高中生被打伤下体休学 邯郸通报男子持台球杆殴打2名女店员被抓19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警两大学生合买彩票中奖一人不认账德国打算提及普京时仅用姓名山西省委原副书记商黎光被逮捕武汉大学樱花即将进入盛花期今日春分张家界的山上“长”满了韩国人?特朗普谈“凯特王妃P图照”王树国3次鞠躬告别西交大师生白宫:哈马斯三号人物被杀代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了房客欠租失踪 房东直发愁倪萍分享减重40斤方法“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火手机成瘾是影响睡眠质量重要因素考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼网友洛杉矶偶遇贾玲呼北高速交通事故已致14人死亡西双版纳热带植物园回应蜉蝣大爆发男孩8年未见母亲被告知被遗忘张立群任西安交通大学校长恒大被罚41.75亿到底怎么缴沈阳一轿车冲入人行道致3死2伤奥运男篮美国塞尔维亚同组周杰伦一审败诉网易国标起草人:淀粉肠是低配版火腿肠外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万杨倩无缘巴黎奥运男子被猫抓伤后确诊“猫抓病”春分“立蛋”成功率更高?记者:伊万改变了国足氛围奥巴马现身唐宁街 黑色着装引猜测

4617作文网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化