[0]深度学习神经网络AI玩转像素鸟 小游戏和机器学习结合初探

本文也被收录在我的微信公众号【硬核玩具】上面
前两篇文章的链接也在公众号文章里,公众号文章地址
试玩地址在下面:试玩地址
公众号名称:【硬核玩具】
直观的展示了机器学习的训练AI的过程
 

未命名-1.png

 
上两期编程主题的内容在这里:
#编程# 小游戏与神经网络AI的结合初试
#编程# 小游戏与神经网络AI的结合初试(二)Cocos小游戏
今天要分享的是像素鸟的AI,已经开发过程中遇到的问题。
神经网络是如何玩像素鸟的?
 
如果你想亲自玩一玩,我提供了在线地址:长按下面二维码识别后用浏览器打开就可以玩了(看AI如何自己训练,自己玩)。玩的时候请注意,照着下下张图的指示,先点红色的【YOU PLAY】按钮,然后点中间文字开始。
 
试玩地址在下面试玩地址 如果你是电脑的话,点进去按f12,然后Ctrl+Shift+M,切换成手机模式就能玩了。
QQ图片20210910112852.png





如果你想看试玩的视频,请看这里:
视频地址
 
 
这只像素鸟和之前两篇编程内容提到的小游戏还是有很大不同,这也花费了原计划两倍的时间——我的计划是每个周末都轮流使用国产三大小游戏引擎做一款小游戏并使用神经网络训练它,(如果你还不清楚什么是神经网络,请看前两期编程内容,链接在这里:
#编程# 小游戏与神经网络AI的结合初试
#编程# 小游戏与神经网络AI的结合初试(二)Cocos小游戏)
(链接在公众号里才有效)

如果说前面两篇文章介绍的三个游戏,其实使用深度学习是多此一举的。Laya开发的打方块游戏,本来就可以读取最近的方块,然后移动“炮台”到它下面;而Egret开发的“太空炮台”则是根据最近的陨石的坐标,换算出炮台应该转动的角度,神经网络训练的结果其实更像是三角函数Tan正切函数;而使用Cocos开发的一步两步则更简单,读取当前地形,然后决定是跳一步还是两步。坦率的说,这些游戏即使不使用任何AI,任何和神经网络相关的技术也能达成自动玩的目的,甚至会做的更好。和前两篇文章里说明的一样,这里还是要说明一下,这些游戏是用来测试和学习的。而训练这只AI也非常简单,可以使用模拟数据,使用循环来训练它们,即使是训练一千万次,也用不了一秒钟。(训练过程参考上面两篇链接)



然而到了像素鸟这里,这套规则不再适用,像素鸟这种游戏类型,它不是精确的输入输出对应,操作它跳跃的时机是模糊的,动态的,并不能简单的总结一个公式,告诉AI什么时候要跳,什么是对错。这种操作和上面的两篇文章中的三个游戏相比较,像素鸟是无监督学习,我不能直接告诉你,什么是对的,而是要在游戏中AI自己总结。所以在像素鸟这里,我使用了另一种遗传神经网络,也可以说是演化型神经网络来做为AI模型,因为游戏需要实际的玩才能判断优劣,而玩游戏需要大量的时间,所以同时生成50个AI,然后给它们设定了随机的参数,如果碰巧有AI活的比其他AI久,说明它的参数是相对正确的。等这50个AI全部Game Over以后,再以表现最好的AI为基础,以一定随机范围再生成50个AI(如果不随机的话,那么下一代AI将和上一代表现一样,就难以进步),重复这个步骤,迭代几次就生成了一个很强的AI,它几乎是可以一命通关。



总结来说,训练像素鸟的遗传神经网络算是真正具有实用潜力的一种AI神经网络模型,我会继续使用国产三大小游戏引擎,写小游戏并训练AI来玩它们。小游戏结合深度学习AI的目标又近了一步,并且深度学习和传统的行为树、转向集群等等AI还可以结合起来。如果你也对这种前景感兴趣的话,请订阅关注我的公众号【硬核玩具】,大家一起学习探索:
 
下面是一些常见的疑问:



使用深度学习的方式训练AI有什么意义?



现在的游戏,可以说基本都是传统型AI,比如行为树,状态机等等。游戏画面进步很大,但游戏AI很多年来都没什么大的进展。深度学习的AI可能会带来不一样的玩法。究竟能不能带来玩法变化,如何变化,需要大家一起来学习、研究、建议。







这个像素鸟AI项目是什么语言写的,会开源吗?



像素鸟是基于Laya2引擎编写的,AI内容是Typescript语言写成,我也是参考了国外的论文和其他语言比如JavaScript和python,然后把它们“翻译”改写成了Typescript语言,当然功能非常简单,我自己手动编写它们,仅仅是为了理解其中的概念和运作原理,以后可能也会用其他成熟的库,比如谷歌TensorFlow等等。开源是肯定会的,虽然可能对实际项目帮助不大,现有的代码还没有数据导入导出功能,每次运行都要从头开始训练。但对学习可能还是有帮助,后面我整理了代码就公布,代码很简单,主要是背后的数学意义还是需要各位理解。









你如何让AI理解游戏画面?如果是从内存读取的数据,那不是作弊吗?



常见的一种问题,我并没有让AI去理解游戏画面,我是从内存的变量里直接读取了地形的信息,在这个游戏里,我读取了最近的管道的高度,鸟和管道间的距离,还有鸟当前的高度,这几个参数传入进去,什么时候跳跃是神经网络做出的判断,概率大于50%的时候就跳。事实上,AI识图这是另一种神经网络——卷积神经网络,这个主题和训练AI玩小游戏没有相关性,但未来我也计划使用这种AI来进行游戏,但不是现在。如果由AI来识别游戏图像,然后AI来玩游戏的话,这里面就牵扯了两个不同的AI神经网络,一个是识别图像的卷积神经网络,另一个是专心玩游戏的遗传神经网络。对我们的像素鸟来说,识别图像并没有必要。另一个问题是,读取了内存中的地形信息,在这个游戏中并不能用来作弊,和最前面说的一样,像素鸟跳跃的时机有一定的动态性和模糊性,并不能按地形简单的总结一个公式来操作。所以最终训练的像素鸟和人类的操作很像,也会失误,也会有很惊险的操作。



未来代码会公布在GitHub,但关于代码的说明我还需要考虑,鉴于本公众号的大多数读者都没有编程的背景,而我们公众号的主旨是【硬核玩具】,如果代码太多了,硬核是够了,但就不是玩具了。所以我考虑可能更多会在技术论坛等等地方介绍具体的代码内容。



如果你对这些内容感兴趣,请关注我,(主要是公众号)。后面有更多游戏要训练
已邀请:

Laya_z

赞同来自:

感谢分享

要回复问题请先

商务合作
商务合作