一个懂写代码的程序员平常是怎么玩游戏的?想知道吗,一个网名叫做 Code Bullet 的澳大利亚程序员就经常自己在家制造和训练 AI 帮他打游戏。看过他训练出的 AI 玩的游戏,感觉…再也不想玩游戏了呢。先来看 AI 玩 Flappy bird 会怎样。小哥使用的是 NEAT(neuro evolution of augmenting topologies)算法,也就是增强拓扑的神经演化算法。
NEAT 是一种结合神经网络和遗传算法(genetic algorithm)的好算法。遗传算法是什么?遗传算法类似于一个代码进化系统,它是一种优胜劣汰 AI 的算法。你要做的,就是告诉计算机,什么是“成功”的标准,还要告诉 AI,它可以看到什么,可以做什么。成功的 AI 可以进行一次繁殖,留下后代,不成功的 AI 就当场去世了。
为了模拟演化,子代 AI 还会和爸爸/妈妈有一点点的不同,类似于遗传突变。
神经网络则是一种具有学习能力的算法,它模拟的是生物神经网络的结构,可以根据经验不断调整。在 Flappy bird 里,小哥设定 AI 可以看到鸟鸟和柱子的距离、鸟鸟相对于柱子的速度等信息。剩下的该怎么玩 AI 自便。在每一代的 AI 里,玩得最好的可以进行繁殖,并把自己的优秀基因遗传给下一代。当然了,下一代也不会照单全收,还是会有小小的突变。第六代目就可以妥妥地拿下 2000 分了...
好的,小哥用 NEAT 玩坏的第二个游戏,就是 Chrome 浏览器连不上网时候出现的彩蛋小游戏——跳跳恐龙。你还不知道有这个游戏?你能玩到第几关呢?好的,发现自己技术太差以后,小哥就自行复制出了游戏,并开始无情的 AI 模式了。第一代 AI 有 500 只,每一只控制着一只恐龙。发挥最好的 AI 可以进入繁殖阶段,不行的 AI 就莫得繁殖。而且下一代的策略会和上一代有一点点不同,类似于遗传突变。
上面的那些网络就是控制这些 AI 的神经网络,它会一代代地发生变化。这个神经网络的输入信号就是每个 AI 看到的东西,输出就是每个 AI 的动作。新的神经网络连接的出现代表着 AI 学会了某种特定的策略。第一代的基本设定很简单,就是不停地随便乱跳。就和你一开始玩的时候一样。如果你仔细看上面的图,会发现有只 AI 是一直趴着前进的。
_(:з」∠)_就这样,傻 fufu 的 AI 被一代代刷掉之后,终于有只 AI 搞明白要看清楚距离再跳了。好的,玩过这个游戏的人知道,到了一定时间,速度会变得飞快,而且一些鸟鸟飞得太高踩不到,所以在大鸟鸟面前要主动弯腰。利用遗传算法训练到第八代 AI 的时候,它们看起来就已经很聪明了。但是第八代还是没学会在踩不扁的大鸟鸟面前低头。
到了 25 代,AI 终于学会了,如果你不能碾压别人,那就要立刻向大佬低头,晚 0.1 秒都不行。到了第 40 代 AI,见识一下什么叫做恐怖。第 25 代 AI 妥妥地拿下了 2 万分。后来因为小哥的电脑实在吃不消了才没有继续刷出高分。还有这个世界最难游戏。小哥也是因为自己玩得太烂,于是决定用遗传算法算法来海选 AI 帮自己刷分。每个 AI 依照一套指令(术语叫做 vector)。
和自然选择理论一致,适合度最高的 AI 可以繁殖,做不到的 AI 就只能去死了。小哥规定,AI 要在有限的步数之内完成特定的指令。完成的指令越多,就可以获得更多的步数。一伙 AI 冲上场的画面。有不怕死的已经当场去世了。注意到头是绿的 AI 吗?它们是上一代 AI 里最优秀的后代。终于到了第 50 代,第 50 代啊同志们,有一个 AI 来到了终点。老母亲的泪目。
也是用 NEAT 算法训练的 AI 玩越野赛车。从没眼看的个位数代目——再到彪悍的十七代目——再来看看 AI 玩贪吃蛇。小哥先利用遗传算法和深度学习(deep learning)训练出了几条优秀的 AI 贪吃蛇,然后利用融合(fusion)的方法把它们的“大脑”合体。相当于一个贪吃蛇的身体里藏着好几条蛇。人类是不是管这个叫做精分?
小哥另外让高级版的贪吃蛇 AI 在不同贪吃蛇 AI 附体时对外展现出不同的颜色。比如,在发现食物,并且确定能够吃到的时候变成绿色,蓝色表示它确定能离食物越来越近,白色表示它看不到食物在哪里,只能尽量不让自己死掉。这个精分版的贪吃蛇 AI 是这样玩的。总之,小哥用 NEAT 算法的套路玩转了各种你耳熟能详的小游戏。效果都是杠杠的。除了 NEAT 算法,他还用其他算法破解了另一些游戏。
比如,小哥还教 AI 玩 55 x 55 x 55 的魔方。小哥说不能做更大的魔方了,它电脑要中风了。小哥用 Q 学习(Q-Learning)练的玩钢琴块游戏的 AI。Q 学习属于增强学习算法,增强学习算法就是要记录学习过的策略,并且根据奖励(目标)来调整策略的算法。AI 的目标是找到屏幕上的黑框,然后使劲地摁就好了。一键玩到电脑中风的样子——你玩过扫雷吧。小哥也造了一个扫雷 AI。
看 AI 玩 64 x 36 的扫雷觉得莫名舒爽有木有?好的,看完了上面这些 AI 打游戏的精彩片段我们知道,永远也不要嘲笑一个会繁殖的 AI 和一个玩不好游戏的程序员。