使用神经网络+遗传算法玩转Flappy Bird | 教程

2017 年 8 月 21 日 量子位 专注报道AI

问耕 编译整理
量子位 出品 | 公众号 QbitAI

震惊!《Flappy Bird》火了这么多年,竟然没有中文名字。

没事。这不妨碍各路AI大触用这款游戏练手。比方说今天这个HTML5教程,就是教你使用神经网络+遗传算法,搭建一个玩转小鸟的AI。

提前说一下,教程最后有这个AI的代码下载。所有的代码都是使用Phaser框架使用HTML5完成的。另外,神经网络使用了突触神经网络(Synaptic Neural Network)库,而不是从零开始搭建。

Demo

上面是Demo演示的截图,访问下面这个网址,能够看到这套算法的实际效果。

http://www.askforgametask.com/html5/tutorials/flappy/

不方便观看上面在线Demo,或者没有耐心的同学,可以选择观看下面这个视频演示短片,中间有几倍速度的画面快进。


算法

这套系统的算法,主要是基于NeuroEvolution(神经进化)。这种机器学习方法,使用遗传算法(GA)等进化方法来训练人工神经网络(ANN)。

也就是说,这个例子中的机器学习=遗传算法+神经网络

人工神经网络

人工神经网络是机器学习算法的一个子集,它受到生物神经网络结构和功能的启发,这些网络是由很多彼此发送信号的神经元组成。

一个神经网络由输入层,一个或多个隐藏层,以及输出层组成。每层都有一些神经元,输入和输出层的神经元直接与外部环境相连。

在这个项目中,每个智能体(也就是小鸟)都有自己的神经网络作为闯关的AI大脑。这些大脑由三层组成,结构如下:

  1. 一个输入层,两个神经元,代表小鸟到豁口的水平距离和垂直距离

  2. 一个隐藏层,六个神经元

  3. 一个输出层,一个神经元,执行如下动作:如果输出>0.5就飞一下

上述文字,也可以用下面这张图表示:

遗传算法

我们在这里使用遗传算法,来训练和改进神经网络。

遗传算法顾名思义,是一种借鉴了自然选择和遗传过程的基于搜索的优化技术。这种算法使用相同的选择、组合交叉和变异的组合,来进行初始的随机演化。

以下是我们遗传算法实现的主要步骤:

  1. 使用随机神经网络创建10个初始的小鸟(种群)

  2. 让小鸟使用他们自己的神经网络,同时起飞玩游戏

  3. 对于每个小鸟,计算适应度函数来衡量飞行质量

  4. 当所有小鸟死亡时,使用遗传算子把当前种群评估到下一代

  5. 重复步骤2

适应度函数

对于上面的第3步,我们深入谈一下适应度函数的细节,以及如何定义。

由于我们想要使用最好的个体(小鸟)来进化种群,所以需要定义一个适应度函数。

一般来说,适应度函数用来衡量对象的质量。我们队每一只小鸟都进行测量,并从中选择合适的个体,用以生成下一代种群。

在这个项目中,我们按照小鸟的飞行距离给予奖励。另外,我们会根据小鸟和下一个豁口的距离给予惩罚。按照这种方式,就可以区别哪些飞行了同样距离的小鸟。

替代策略

对于上面第4步中遗传算法,下面是实现的步骤。基本上,最好的小鸟个体会生存下来,它们的后代会取代表现最差的那些。

  1. 现有种群的个体按照适应度进行排序

  2. 选择前四名给予奖励,直接把它们传给下一代种群

  3. 排名最高的两个个体,进行交叉组合,生成一个后代

  4. 前四名中随机选择两个个体,交叉组合产生三个后代

  5. 前四名中随机选择两个个体,生成两个直接复制的后代

  6. 对于每个后代,施加一些随机变异

代码

上述代码,可以访问如下地址获取:

https://github.com/ssusnic/Machine-Learning-Flappy-Bird

结论

在这个教程中,我们成功的让AI学会玩Flappy Bird这个游戏。在几次迭代之后,我们可以得到一个几乎无敌的小鸟。为了实现这一目标,我们采用了两种机器学习算法:人工神经网络+遗传算法。

如果你对这个项目感兴趣,未来可以尝试改变代码中的一些参数,看看会发生什么。例如,可以改变隐藏层中的神经元数量或者每一代种群的个体数量。当然还可以对适应度函数进行修改,比方加入障碍物之间的距离、重力等等因素。

以及,你可以尝试把类似的理念应用到其他游戏中去!

祝好运~

加入社群

量子位AI社群7群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot2入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot2,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI

վ'ᴗ' ի 追踪AI技术和产品新动态


登录查看更多
1

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
257+阅读 · 2020年6月10日
【UCLA】基于深度神经网络的工业大模型预测控制,36页ppt
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
MATLAB玩转深度学习?新书「MATLAB Deep Learning」162页pdf
专知会员服务
98+阅读 · 2020年1月13日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
人工智能学习笔记,247页pdf
专知会员服务
174+阅读 · 2019年12月14日
脉冲神经网络(SNN)概述
人工智能前沿讲习班
60+阅读 · 2019年5月30日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
《常用算法之智能计算 (四) 》:遗传算法
数盟
4+阅读 · 2018年12月21日
GAFT:一个使用 Python 实现的遗传算法框架
Python开发者
10+阅读 · 2017年8月1日
神经网络理论基础及 Python 实现
Python开发者
6+阅读 · 2017年7月15日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
7+阅读 · 2019年4月8日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
4+阅读 · 2018年4月10日
Arxiv
5+阅读 · 2018年1月16日
Arxiv
3+阅读 · 2017年8月15日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
257+阅读 · 2020年6月10日
【UCLA】基于深度神经网络的工业大模型预测控制,36页ppt
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
MATLAB玩转深度学习?新书「MATLAB Deep Learning」162页pdf
专知会员服务
98+阅读 · 2020年1月13日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
人工智能学习笔记,247页pdf
专知会员服务
174+阅读 · 2019年12月14日
相关资讯
脉冲神经网络(SNN)概述
人工智能前沿讲习班
60+阅读 · 2019年5月30日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
《常用算法之智能计算 (四) 》:遗传算法
数盟
4+阅读 · 2018年12月21日
GAFT:一个使用 Python 实现的遗传算法框架
Python开发者
10+阅读 · 2017年8月1日
神经网络理论基础及 Python 实现
Python开发者
6+阅读 · 2017年7月15日
相关论文
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
7+阅读 · 2019年4月8日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
4+阅读 · 2018年4月10日
Arxiv
5+阅读 · 2018年1月16日
Arxiv
3+阅读 · 2017年8月15日
Top
微信扫码咨询专知VIP会员