机器心脏报告
觉得用雅达利游戏来研究人工智能有点太“接地气”了?现在我们可以用模拟器了。
对于很多80、90后来说,任天堂代表了他们很大一部分青春,我们熟悉的很多游戏最初都是搭载在这款8位游戏掌机上的,包括大家熟知的《马里奥》、《塞尔达》系列,而对于国内玩家来说,玩得最多的应该就是《宠物小精灵》系列了。
这款游戏机自发布至今已有 30 年,但人们对它的热情丝毫未减。昨天,一个使用 编写的模拟器问世了。
我的青春回来了?作者在网上发布的帖子很快收获了数千个赞。
项目作者之一Mads宣布PyBoy 1.0版本正式发布。
PyBoy 是什么?
简单来说,它是一款完全从头编写的 Game Boy 模拟器,支持通过 API 编写脚本。研究人员添加了类型定义,使其可以使用编译后的软件,从而实现与用 C 和 C++ 编写的模拟器相当的性能。
项目链接:
特征
PyBoy 的设计目标是易于访问,因此它支持并鼓励人们进行实验性研究,例如机器人技术和人工智能。研究人员正在构建游戏专用的包装器,目前它允许程序员与俄罗斯方块和超级马里奥进行交互,而无需深入了解 Game Boy。您可以参考此文档:。
该项目的作者还希望学习和尝试更多奇特的功能,并基于大学项目的研究,他们在模拟器中添加了倒带功能,这意味着您可以在任何游戏中倒带时间。
PyBoy 模拟器架构
任天堂在1990年为Game Boy申请了专利,下图是专利中CPU、RAM、卡带、显示器之间的集成与连接。
Game Boy 专利的架构图。
在此基础上,PyBoy 项目成员为游戏中的每个组件创建了类,从而在“主机系统”(系统运行)上为“客户端系统”打下了基础。客户端系统是一个虚拟的 Game Boy 硬件,理论上可以运行为 Game Boy 编写的所有软件。
下图展示了PyBoy模拟器中的所有类及其关系:
PyBoy 对强化学习的意义以及与其他环境的比较
这些年很多人开发了模拟器,现在也有可以在电脑、手机上运行的工具。为什么要写一个呢?当然是用来训练人工智能的。
想玩游戏吗?对于现在的人来说,入门可能有点困难。
最接近通用人工智能——强化学习
通用人工智能的概念是指机器能够成功完成人类所能做的任何智力任务。目前我们对人工智能的研究距离这个目标还很远。吴恩达此前就曾表示,深度学习只做高维的“曲线”。
与依赖预先收集的数据(甚至可能需要大量的人工标注)的机器学习算法不同,强化学习是一种仅通过环境奖励进行训练的算法,其工作机制类似于人体内的多巴胺系统。强化学习是目前最接近人类从经验中学习能力的机器学习算法,特别适用于智能代理需要根据其环境做出决策的场景。
下图展示了 RL 代理如何仅使用游戏图像作为输入来学习马里奥控制策略。
为什么对 RL 的如此多研究都是在 Atari 上进行的,而不是在其他更实际的问题上进行的?
RL 研究使用 Atari 作为基准的原因有几个:
Atari 环境允许我们使用相同的算法测试多个不同的环境,验证 RL 算法的通用性;
由于输入只是游戏图像,增加了问题的复杂性;
Atari 为研究人员提供了一个公认的测试平台,可以公平地比较不同算法之间的性能。
强化学习需要大量的交互数据进行学习,在现实环境中进行实际测试之前,Atari 提供了安全、快速、低成本的测试平台用于算法的初步验证。
以下是 Atari 环境的一些示例:
Atari、PySC2 和其他环境与 PyBoy 的比较
上一节介绍了在 Atari 环境中训练 RL 智能体的诸多优势,然而随着 RL 的发展,这种相对简单的环境已经不再适合新的 RL 研究,前不久提出的 Atari 环境的表现超过了人类玩家的平均水平,这也预示着 Atari 环境上的 RL 研究正在逐渐走向尾声。
更困难的环境包括与暴雪合作的 PySC2,需要代理学习复杂的协调和对抗策略。虽然在这个环境中取得了令人印象深刻的成果,但仍有许多问题需要解决。以下是 PySC2 环境的示意图。
PyBoy 环境的难度介于 Atari 和 PySC2 之间,这为我们验证 RL 性能提供了新的基准。在将 RL 应用于更复杂的现实问题之前,我们可以先在这个中等难度的环境中进行低成本、高效的测试。
正如特斯拉人工智能和自动驾驶愿景总监所说,“大家可以尝试一下 BB 枪”。
介绍
如何安装?
如果您已经配置了工作环境,安装非常简单:
通过包管理器安装 SDL2(sudo apt -dev 或 brew sdl2)
使用 pip pyboy 安装 Pyboy
PyBoy 可以直接从终端 $ pyboy file.rom 或在脚本中使用:
from pyboy import PyBoy
pyboy = PyBoy('ROMs/gamerom.gb')while not pyboy.tick():
pass
该项目支持 macOS、Pi()、Linux()和 10。
PyBoy API 文档
如果用户需要创建自己的机器人或 AI,所有外部组件都可以在 PyBoy()中找到。各种类及其用法非常详细,这里就不一一描述了。(如下图结构索引所示)
简短示例
PyBoy 可以作为对象加载。因此,它可以从另一个脚本初始化,并可以由该脚本控制和探测。查看 .py 以了解与游戏交互的粗略“机器人”。当然,所有外部组件都可以在 PyBoy 文档中找到。
有关 Game Boy 的常规文档,请查看 Pan Docs,其中包含有关每个主题的详细信息。
下面是从屏幕读取数据的简短演示,代码也可以在.py 中找到:
import osimport sys
from pyboy import PyBoy, WindowEvent
# Makes us able to import PyBoy from the directory below
file_path = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, file_path + "/..")
# Check if the ROM is given through argvif len(sys.argv) > 1:
filename = sys.argv[1]else:
print("Usage: python mario_boiler_plate.py [ROM file]")
exit(1)
quiet = "--quiet" in sys.argv
pyboy = PyBoy(filename, window_type="headless" if quiet else "SDL2", window_scale=3, debug=not quiet, game_wrapper=True)
pyboy.set_emulation_speed(0)assert pyboy.cartridge_title() == "SUPER MARIOLAN"
mario = pyboy.game_wrapper()
mario.start_game()
assert mario.score == 0assert mario.lives_left == 2assert mario.time_left == 400assert mario.world == (1, 1)assert mario.fitness == 0 # A built-in fitness score for AI development
last_fitness = 0print(mario)
pyboy.send_input(WindowEvent.PRESS_ARROW_RIGHT)for _ in range(1000):
assert mario.fitness >= last_fitness
last_fitness = mario.fitness
pyboy.tick()
if mario.lives_left == 1:
assert last_fitness == 27700assert mario.fitness == 17700 # Loosing a live, means 10.000 points in this fitness scoringprint(mario)
breakelse:
print("Mario didn't die?")
exit(2)
mario.reset_game()assert mario.lives_left == 2
pyboy.stop()
如果您在加载了 Super Mario Land ROM 的情况下运行上述代码,您将获得以下图像和终端输出。请注意,Mario 的形态显示为索引 0、1、16 和 17。
关于作者
该项目的作者Asger Lund、Mads和均来自丹麦,毕业于丹麦哥本哈根大学的Mads表示,其实这个模拟器可以追溯到2015年他在大学期间做的一个项目。
模拟器的 1.0 版本已经发布,但开发者还有很多工作要做。项目开发人员表示,目前可以推进的方向包括为模拟器添加声音、颜色、模拟连接和更多游戏包装,当然还有在上面训练神经网络的示例。
希望在人们的努力下,游戏中的游戏也能重生,更重要的是,它现在担负着训练人工智能的任务。
在CVPR 2020的首场线上分享会中,我们邀请到了北京大学智能科学系陈翰廷(论文第一作者)老师,以“加法神经网络:深度学习中真的需要乘法吗?”为主题进行分享,欢迎读者报名参加。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。