吉游网提供最新游戏下载和手游攻略!

回顾深度学习的起源:用神经网络玩打砖块打砖块游戏手机

发布时间:2024-07-09浏览:1

深度学习现在非常火,在国际象棋上已经超越了人类,它的源头就是强化学习。强化学习最先引起人们关注是因为它成功学会了打砖块游戏。本文将详细介绍整个过程,并会介绍很多细节,以便你详细了解整个过程。我认为这是初学者学习AI的最佳学习材料。

首先介绍一下Brick Breaker这款游戏。如果你没有亲自玩过这款游戏,你肯定不知道它的很多细节。这款游戏由雅利达公司于1976年制作,是世界上最早的电子游戏之一。在雅利达游戏机上运行,​​其大小只有2k,是今天普通游戏大小的百万分之一甚至更小。见下面的游戏画面。

打砖块 截图

上方的数字055是得分,第二个数字2是剩余生命数。初始数字是5条生命。最右边的1是双人游戏,所以不用管它。外围左、右、上方的白色边缘是墙,球会在上面弹跳。下方没有墙,但有一个可移动的板,由玩家控制左右移动以阻挡球反弹回来。如果接球失败,就会摔倒并失去1条生命。

中间的彩色砖块一共有6层砖块,每层18块砖块。当小球击中砖块时,砖块消失,小球弹开。砖块越高,小球弹起的速度就越快。这就是游戏的难点所在,如果在击打上面的砖块时反应慢,就接不住小球。还有,小球从最上面的墙壁弹起后,接球的板子长度会变短,这也增加了难度。第一层和第二层砖块的得分为1,第三层和第四层砖块的得分为4,第五层和第六层砖块的得分为7,所以所有砖块打完后的得分为18*24,一共432分。所有砖块打完后会刷新一次,所以这个游戏的最高得分为864分。

此外,球从墙壁和砖块上反弹的方式与光反射相同,但在接球板上的反弹则具有一定的随机性,并不完全与光反射相同。此外,当接球板与球接触时,接球板的速度、方向和大小也会影响反弹方向。换句话说,反弹方向可以在一定程度上人为改变,但球的方向无法完全控制。

2015 年,DeepMind 研究员 Andriy Mnih 发布了一段视频,展示了他们如何利用神经网络玩这个游戏。以下是视频截图:

视频一开始是100轮训练的结果,得分很低,5分以内,打了几块砖,球也经常接不住。

训练 100 个 epoch

然后我们又训练了200轮,成绩接近10分。

训练 200 个 epoch

然后又训练了400个回合,成绩达到了17分。

训练400发子弹

打砖块游戏_打砖块游戏手机_小游戏打砖块

随后进行了600轮训练,神奇的情况出现了,此时得分达到了70分左右,视频中说神经网络找到并运用了最佳策略,突破了砖墙,将小球击入砖墙后面的空间,砖墙不断弹起,获得了高分。

训练600发子弹

这个视频当时引起了轰动,但是正如我们刚才对反弹细节的分析,反弹是随机的,不可能打到任何地方,并且控制得很好。如果我们自己玩这个游戏足够多次,或者复现DQN方法和用程序实验足够多次,你会发现,只要你的分数足够高,比如80分左右,上面那种撞穿墙壁反弹到后面的情况就很有可能出现,而且不需要你刻意控制反弹方向,它就会自然而然地发生。

与其说网络学会了某种高级策略,不如说游戏设计师把它设计得十分巧妙。后面砖墙到屋顶之间留出的空间就是一个独特而巧妙的设计,只要达到一定的分数,就会出现上述奇妙的情况。当然,这并不是否定神经网络的作用,它的确从零开始学会了玩这个游戏,并且已经超越了人类的水平。只是这里没有高级策略而已。后面还有其他证据可以证明这一点。

这个视频在训练了600轮之后就不行了,那么训练了800轮之后会怎么样呢?根据我的经验,学习波动很大,在突破砖墙,成绩有大幅度提升之后,成绩肯定会迅速下降,然后经过长时间的训练,成绩又会慢慢上升。最后能过关吗?我觉得DeepMind的第一版和第二版网络是不行的。当然,既然他们在围棋这么难的项目上都取得了突破,过这一关是没有问题的。

后来 DeepMind 发表了相关论文,并开源了它的网络设计。接下来我们来看看 DeepMind 是如何利用神经网络来玩这个游戏的。它的程序由几部分组成,一部分是游戏模拟器,可以控制游戏的进程;第二部分是神经网络;第三部分是连接以上两部分的控制程序,负责把模拟器输出的图像输入到神经网络中,把网络的输出转换成游戏的输入。这样,网络就可以不断的玩这个游戏,训练自己。

网络输入是白墙范围内的游戏截图,是一张 210 x 160 像素的图片,经过压缩后转换成 84 x 84 的黑白图像输入到网络中。另一个输入是当前得分和剩余生命数。网络输出一共四个:接发牌板左移、接发牌板右移、发球,牌板原地不动。

可以看出,系统没有任何与打砖块游戏相关的信息,例如球拍的位置、球的位置、球的速度、砖块的位置等,只提供了图像和分数、生命值的信息。训练初期,它基本是随机移动的,比如它甚至不知道什么时候发球,可能表现为还没有发球,而是不停地左右移动球拍。

但它不断随机动作,最终会把球发出去,并最终随机接住球。经过几百次、几千次甚至更多的重复,接球的成功率会慢慢上升。根据我的经验,在一台最普通的笔记本电脑上,2010 年的主流配置,只用 CPU 运行它,运行两三个小时后就能看到明显的进步。此时,你可以成功接球三到五次左右,得分在十分左右。看着这个程序从一无所知到慢慢进步,非常令人震惊。这种感觉和 Alpha Zero 一样,在与自己比赛,不断提高自己。

纵轴为分数,横轴为训练次数。

但事情并不是一帆风顺的。看上图,经过3000次训练,平均得分都在10分以上,最高甚至达到了30分。随着越来越多的砖块被击倒,上层的砖块露出来了,球在撞到第三层砖块时弹起的速度要快得多,在撞到第五层砖块时弹起的速度甚至更快。然而挡板的速度是有限的,很可能来不及做出反应。这时候,第一策略:球下落时挡板要靠近球是不够的。需要第二策略:在球上升阶段将挡板放在中间,这样当球下落时才有足够的时间接住球。这才是真正的高级策略。

根据我的经验,使用DeepMind开源的网络结构(有两个不同版本的网络)学习上述高级策略比较困难,分数会在30-70之间波动,很难突破砖墙获得高分。而且由于网络使用ReLU激活神经元,如果学习率过大,就会无限大,网络会爆炸。为什么达不到DeepMind论文的效果呢?可能是硬件太弱,训练次数不够,也可能有其他原因,这个我还没搞清楚。

总结一下,我们可以使用非常普通的硬件,在 GitHub 上复现 DeepMind 的 DQN 代码来做自己的实验,几个小时之内就能看到分数稳步提升,达到人类玩家玩这个游戏的水平(30 分左右)并不难,但要达到 DeepMind 的水平(400 分左右)就比较难了。

当 DeepMind 取得 400 分成绩时,它转向围棋研究,而没有继续深挖 Breakout。事实上,这虽然是一个玩具项目,但难度还是比较大的,而且随着时间的推移难度越来越大,最高分是 864 分,距离 400 分还很远。这也间接证明了 DeepMind 的 DQN 并没有学到最先进的策略,无法主动控制小球的飞行方向。在后期,当剩下的砖块非常少时,就需要控制小球反弹的方向,否则就无法击中剩余的砖块。而且它的 400 分是几生积累下来的,而不仅仅是一生。

所以这是一个很好的人工智能入门项目,还有很大的探索空间,爱好者可以关注一下。

本文不涉及具体的网络结构和程序,因为这类文章已经很多了,但是讲到搬砖细节的文章就不多了。希望能丰富大家对这件事情的了解。如果有人想知道自己做实验的过程,然后在网上找了一大堆相关文章还是抓不住重点,或者遇到了爬不起来的坑,可以在评论里留言。如果人多的话我会再写一篇文章介绍实际的操作过程。

热点资讯