AI超越人类!让它学会玩Flappy Bird
目录
- Flappy Bird AI的简介
- 游戏背景和AI训练过程
- 使用Unity的机器学习进行训练
- 游戏设计和机器学习配置
- 通过不同难度级别进行渐进式学习
- 外部Build的训练和运行
- 结果展示与分析
- 机器学习的实际应用
- 结论
- 延伸阅读和资源
Flappy Bird AI:用机器学习训练AI玩游戏的实例
Flappy Bird是一款简单但富有挑战性的游戏,现在我要尝试构建一个AI来超越我的最高分,并达到超越人类的水平。在Unity中使用机器学习,实际上是非常简单的。尽管训练过程中会遇到一些有趣的问题,但总的来说很简单。
在这个项目中,我创建了一个完整的游戏,完全是从头开始制作的。你可以按下按钮跳跃,每穿过一对管子获得一分。随着时间的推移,管子之间的间隙变小,管子的高度变得越来越随机,使游戏变得更加困难。
为了实现完美的游戏表现,我使用Unity的ML-Agents工具包来训练AI的脑模型。如果你对这个工具包不熟悉,可以观看我之前的入门指南视频。一旦你了解了基础知识,使用Unity进行机器学习非常简单易用。
在训练AI之前,我们首先需要设定一个良好的训练环境,以便让AI能够学习。因此,我们需要确定AI需要了解什么以及它需要采取什么样的行动来完成任务。
Flappy Bird是一个相当简单的游戏,只有一个动作,即跳跃。添加动作非常简单,只需要将动作设置为离散型,有两个可能的值:跳跃或不跳跃。
观测是指AI收集有关环境的信息。在这种情况下,AI需要知道各个墙壁的位置。这可以通过添加射线感知传感器来实现,射线可以在鸟的前方以各种角度发射,并设置为检测检查点和墙壁。通过和实际游戏并行进行对比,可以确保射线能够正确识别出墙壁和检查点。
除此之外,我还添加了一些其他手动观察,包括对鸟的高度、下一根管子距离的了解,以及当前速度的归一化值。通过这些观察,AI应该有足够的信息来完成任务。
对于游戏的设置本身,像我之前提到的那样,在另一个视频中我从头开始创建了整个游戏。管子是在右侧生成的,并向左移动,一旦到达屏幕左侧就会被移除。一切都相当随机。
如果鸟触碰到管子,则游戏结束。在训练AI之前,我尝试直接使用最终游戏进行训练,但遇到了很多失败的尝试,因为AI经常撞到天花板或地面。
理论上,如果有足够的计算能力,我可以通过纯粹的暴力训练来训练它。但是,由于我只有一台普通的电脑,没有强大的GPU集群,所以我需要更聪明地处理训练方式。
因此,我最终采取了一种称为“课程学习”的方法,尽管ML-Agents实际上有一种适用于脚本课程的标准方法,但我在这里选择手动实现。
我首先让AI以完全没有管子的情况下进行训练,只有一个大的缺口。这样,我只需要教会AI避免顶部和底部就可以了。为了快速到达这一点,我使用了模仿学习的方法,我在另一个视频中详细解释了这个方法,并使用了相当高的强度,所以它几乎完全根据我的演示来学习。
在训练配置中,我同时启用了基于奖励的模仿学习和预测奖励,使用较高的强度。这样,目标是使AI能够像我告诉它的那样行为。然后,一旦AI摸清了避免顶部和底部的方法,我对管子之间的距离进行了一些调整,并将外部奖励的强度提高到1.0,同时将预测奖励和基于奖励的模仿学习的强度降低到0.4。这样,目标就是让AI基于自己的奖励来学习,并变得比我更加优秀。
结果非常有趣,一开始AI有些困惑,奖励下降得很快,但随后它开始从外部奖励中学习,并累积回报迅速提高。在这个阶段上,管子之间的距离始终在中间,然后我增加了一些随机性来调整管道的高度,即使缺口仍然很大。这样一来,环境就变得更加随机。
接着,我将基于奖励的模仿学习的强度都降低到0.1,所以演示对学习的影响几乎可以忽略不计。此时,我只希望AI能够从外部奖励中学习。这一次,AI在应对这种新的情况时没有任何问题,它立即适应了这些变化,并不断获得完美的分数。
之后,我又增加了更大的难度级别,并观察到相似的结果。AI会迅速适应新的困难,并不断提高表现。通过这种渐进的训练,AI已经变得非常优秀。
除了在Unity中进行训练之外,我们还可以将训练移植到外部Build中运行。这对于大型游戏项目来说非常重要,因为在游戏中很难轻松创建多个环境实例。通过将训练环境嵌入到外部build中,我们可以更高效地进行训练。
最后,我展示了AI的最终效果,它能够轻松地超过我的最高分,并不断取得更高的成绩。这个例子再次展示了机器学习的真实应用,以及通过适当的训练场景的构建,ML-Agents可以学习任何内容,只要给予足够的时间。
总结一下,机器学习在实际应用中非常简单易用。我只用了几个小时来编写AI代码和调整游戏以适应ML-Agents。然后,通过让训练在一段时间内持续运行,并逐渐增加难度,我成功训练出了一个优秀的AI。
以上是关于Flappy Bird AI的详细介绍。通过这个实例,可以看出机器学习的潜力和应用领域。如果你想深入了解更多关于机器学习和AI的内容,可以查看以下资源。
资源:
高亮
- Flappy Bird AI由Unity的ML-Agents工具包进行训练。
- 使用机器学习进行训练的关键是设置好训练环境。
- AI通过观测和执行动作来学习游戏规则。
- 逐渐增加难度可以让AI适应不同的游戏情况。
- 通过外部Build进行训练可以提高效率。
- AI最终可以超越人类,取得更高的成绩。
常见问题与解答
1. 为什么使用ML-Agents进行训练?
ML-Agents是Unity的官方工具包,可以方便地在Unity环境中进行机器学习训练。
2. 需要多长时间才能训练出一个优秀的AI?
训练时间取决于许多因素,包括硬件配置、训练环境设置和AI的复杂程度。通常需要几个小时到几天的时间。
3. 是否可以应用于其他类型的游戏?
是的,ML-Agents可以适用于各种类型的游戏,只需要相应地设置训练环境和观测动作。
4. AI是否能够适应新的游戏情况?
是的,通过逐渐增加难度,AI可以适应新的游戏情况,并不断改进表现。
5. 是否可以将训练迁移到外部Build中运行?
是的,通过将训练环境嵌入到外部Build中,可以更高效地进行训练,特别是对于大型游戏项目。
6. 如何评估AI的性能?
可以通过比较AI的得分和人类的最高得分来评估AI的性能。
7. 如何应用机器学习于其他领域?
机器学习在各个领域都有广泛的应用,包括医疗、金融、交通等。通过构建合适的数据集和训练模型,可以解决各种问题。
8. 除了Unity之外,还有其他机器学习平台吗?
是的,除了Unity的ML-Agents,还有许多其他流行的机器学习框架和平台,如TensorFlow、PyTorch和Scikit-learn。每个框架都有其自己的特点和适用范围,可以根据具体需求选择合适的平台。
9. 如何进一步学习机器学习和AI?
可以参考各种在线教程、文档和研究论文,也可以参加相关的培训和研讨会。不断实践和探索是提高机器学习和AI技能的关键。
10. 机器学习有哪些潜在的应用前景?
机器学习在各行各业都有广泛的应用前景,包括自动驾驶、智能助手、医疗诊断、金融预测等。随着技术的不断发展,机器学习将在未来发挥越来越重要的作用。