如何用算法玩转“飞翔小鸟”(上)
2019年08月31日 由 sunlei 发表
926873
0
关于未来的领域有许多研究的主题,都是非常有前途的领域,比如机器学习现在是我们日常生活的一部分,几乎存在于我们所有的软件中。神经网络,机器学习这种大领域,就像我们今天要做的那样,可以被嘲笑,但是我们要在更有趣的应用程序中实现,如电子游戏。对于像你和我这样的好奇和热情的程序员来说,神经网络是一个无限的游乐场,所以让我们来发现这个游乐场吧!
如何阅读这篇文章?
由于理论是好的,但实践也不算太差,你在阅读“#LAB”时会发现,其中包含与主题相关的理论和技术信息,但这与我们最初的问题直接相关,所以每个人都很高兴。我也是。
神经网络部分
什么是神经网络?
人工神经网络是一种计算机系统,其设计灵感来自生物神经元功能。换句话说,人工神经网络是一组正式的相互连接的神经元通过在学习阶段调整权重系数来解决复杂的问题,比如知道今晚吃什么。
稍微澄清一下…
对于那些从2013年就没有离开过房间的人来说,FlappyBird是一款二维移动游戏,玩家在游戏中化身为一只小鸟,在遇到不同的障碍物时必须避开它们并前进。玩家只能依靠“跳跃”命令和重力来控制我们可爱的小鸟。今天的目标是了解创建一个能够自动玩我们的超级游戏的算法所需的所有元素,这已经很好了…
更严重的是……
因此,计算机需要知道什么时候激活跳跃控制,什么时候什么都不做。然后,一个二进制问题出现在我们面前:
- 1:启动“跳转”命令。
- 0:什么也不做。
因此,输出值将等于1或0,这取决于我们神经网络的输入参数。
#LAB :在神经网络领域,这些问题被简单地称为“二元分类问题”,这些情况下,我们的神经网络的输出层可以采取两种不同的形式。在这两种情况中,输出层只包含一个节点,该节点将根据神经网络的输入参数返回介于0和1之间的值。如果该值大于0.5,则输出“value”将等于1,否则将等于0。在另一种情况下,输出层包含两个具有标签“1”或“0”的节点。根据输入参数,一个输出节点的值将比另一个更突出,从而可以根据强节点的标签将1或0的标签分配给输出值。
由于这两个选项之间没有真正的区别,所以在大多数情况下可以任意选择解决方案,但是在我们的情况下,我们将选择第一个选项,在我们的考虑下,它仍然更容易理解和实现。
然而,我们总是可以询问关于输出值的问题,如果我们的神经网络没有输入参数,它就不存在。对于我们的项目,将在每对障碍物中间放置一个点,以创建声明输入值的基础。然后计算出我们的甜心小鸟和著名点之间的水平距离和垂直距离,这些值将构成神经网络的两个输入参数。
我们已经很久没有做过“实验”了,不是吗?
#LAB:在每个神经网络中,输入层和输出层之间有一个或多个层。这些被称为“隐藏层”的实体代表了神经网络的核心。它们在神经网络中的数量和每个节点内的节点数量取决于神经网络正在实现的问题。有多种神经网络结构,每种结构都比其他结构更适合某些问题,但人们可以认为问题越复杂,隐藏的层就越多。
我们的模型有两个输入节点和一个输出节点,这使得它成为一个相当简单的模型。我们将采用一个更基本的体系结构,其中包含由5个节点组成的隐藏层。
另一个呢?
#LAB:在一个神经网络中,每个分支代表一个称为权重系数的值,借助于一个称为“正向传播”的过程来推导输出节点的值。另一个称为“反向传播”的过程使基于训练集的权重系数调整成为可能,以提高神经网络的性能。我们称之为“学习阶段”,即对整个训练集执行正向和反向传播过程的阶段。
然而,由于在我们的例子中不应该使用训练集,显然,我们将使用一种能够自动调整权重系数的遗传算法。
今天的学习先告一段落,明天我将继续更新能够自动调整权重系数的遗传算法部分。