这里配图是其他地方复制来的,不要介意,原理都是一样,这是另一个类似的实例,最后面也有它的源码。
欢迎来体验这个完整的基于HTML5的例子!这个例子将为您带来一个使用机器学习算法游玩Flappy Bird游戏的Demo。这个实验的目标是,我们希望使用神经网络和遗传算法来构建一个人工智能游戏控制器。
因此为了实现我们的目标,我们需要构建一个AI机器人,它能够学习如何去完美地游玩Flappy Bird,然后我们希望它所控制的小鸟能够顺利地飞跃一个个障碍,而且根据我们的剧本,它可以永远飞下去。
你不仅在这里可以了解有关这个项目的全部思想,你还可以在这篇教程的末尾下载所有的源代码。项目中的所有代码都给予支持HTML5的Phaser框架,除此以外,为了避免重复造轮子,我们还使用了Synaptic.js这样一个神经网络库来实现我们的神经网络。
首先,让我们先来看一看这个算法的实际运行情况:
作为上面Demo的补充,在这里你可以浏览一个简短的小视频来进一步增加了解。这个视频展示了一些算法中的基本思想,对于那些大牛来说,看看这个会更快地理解哦。
根据Arthur Samuel在1959年的定义,机器学习是这样的一种科学,即使得计算机无需特定编程就能完成某些工作。一般而言,机器学习就是从一个初始的随机系统出发,使用一系列的微调学习过程来得到系统逐步改善的工作。
因此,我们的目标就是实现一个能够调整模型参数、从一个复杂系统逐步得到可靠结果的人工智能系统。为了实现这一点,机器学习算法会使用各种各样的手段。
对于我们现在这个项目而言,我们所使用的机器学习算法(ML)主要是基于神经元进化思想(NeuroEvolution或neuro-evolution)。这种模式的机器学习采用了一些演化算法——比如说遗传算法(GA)——来训练人工神经网络(ANN)。
也就是说,对于我们这个项目而言,我们可以说ML = GA + ANN。
人工神经网络时机器学习算法的一个超集,它受生物学上神经网络的架构和功能的启发而诞生。神经网络由许许多多的神经元构成,而这些神经元彼此可以发送信号。
因此,为了构建一个人工大脑,我们需要模拟神经元并将它们连接起来来形成一个神经网络。
一个普通的人工神经网络由一个输入层、一个或多个隐藏层和一个输出层构成。每个层拥有多个神经元。输入和输出神经元和外部环境直接相连,最后,隐藏神经元连接在它们之中。
在这个项目中,每个单元(也就是每个鸟)拥有其自己的神经网络来作为游玩游戏的大脑,每个神经网络包含以下三层:
距离最近障碍物的横向距离 距离最近障碍物的高度差
如果output > 0.5则鸟儿扇动翅膀(也就是向上飞一下)否则不做任何动作
下面的图片展示了这个例子中的神经网络架构。
当我们在讨论机器学习算法的时候,我们通常说遗传算法是用来训练和提升神经网络的。
遗传算法是一种搜索优化技术,它受自然选择和遗传过程启发而诞生。于自然界类似,遗传算法也使用选择、基因交换、基因突变的思想来让初始的随机种群进行正向演化。
我们所实现的遗传算法主要分为以下几步。
作为遗传算法中第三步的补充,我们在这里提供一些更多的有关于适应度函数的信息——它是什么而且怎么去定义它。
我们希望使用表现最好的单元来让种群得到进化,因而我们需要来定义一个适应度函数。
一般地,适应度函数是衡量对象性能的一个标准。当我们能够为每一只鸟打分的时候,我们就能够选择出适应度最高的单元并使用它们来迭代出下一个种群。
在这个例子中,我们首先使用鸟儿飞过的距离来给鸟儿打分。同样的,我们使用鸟儿与最近障碍物之间的距离来对其进行分数惩罚。这样我们就能从两个飞行距离相同的鸟儿之间找出差别。
总结一下,我们的适应度函数体现了鸟儿飞过的总距离和其与最近的障碍物距离的差。
作为遗传算法中第四步的补充,从种群淘汰中进行自然演化过程需要若干个步骤。简而言之,最好的单元会生存下来,然后其「子女」会以下述方式替代其他表现不好的单元。
您可以访问这个地址来下载这个讲解的源代码:
https://github.com/ssusnic/Machine-Learning-Flappy-Bird
在这个教程中我们成功实现了一个能够游玩Flappy Bird游戏的AI机器人。经过几步训练迭代,我们就可以得到一个游戏高手。为了实现这个目标,我们使用了两种主要的机器学习算法:人工神经网络和遗传算法。
如果你有兴趣的话,你可以试着修改代码中的部分参数然后来看看会发生什么事情。比如说,你可以修改隐藏层中的神经元数量或是修改种群规模。同样的,你也可以以一些方式修改适应度函数。更进一步,你还可以修改某些物理参数,比如说障碍物之间的距离、重力参数等等。
当然,你也可以试试在其他游戏中试试我们提供的这些方案,希望你能有好的收获。
来自原文:
http://imgtec.eetrend.com/blog/10750
https://jizhi.im/blog/post/machine-learning-algorithm-flappy-bird