在追求人工智能的过程中,我们最重要的进度衡量标准是代理在广泛的环境中实现目标的能力。用于构建此类环境的现有平台通常受到其所基于的技术的约束,因此只能提供评估进度所必需的部分方案。为了克服这些缺点,我们介绍了Unity的使用,Unity是一种广为人知的综合游戏引擎,可用于创建更加多样化,复杂的虚拟仿真。我们描述了旨在简化这些环境的创作而开发的概念和组件,这些概念和组件主要用于强化学习领域。
我们还介绍了一种实用的方法来打包和重新分发环境,以尝试提高实验结果的鲁棒性和可重复性。为了说明与其他解决方案相比,我们使用Unity的多功能性,我们重点介绍了已经使用已发表论文中的方法创建的环境。我们希望其他人可以从我们如何将Unity适应我们的需求中汲取灵感,并期望随着熟悉程度的提高,我们的方法将出现越来越多样化和复杂的环境。
在追求人工智能(AGI)时,我们寻求创建可在多种环境中实现目标的代理。当我们的代理人掌握我们创建的环境时,我们必须不断创建新的环境,以探究尚未体验的认知能力。
游戏一直是人工智能(AI)研究的挑战,最著名的棋类游戏是步步高,国际象棋和围棋。像《太空入侵者》,《雷神之锤III》竞技场,《 Dota 2》和《星际争霸II》这样的视频游戏最近也越来越受到AI研究的欢迎。游戏之所以理想,是因为它们具有明确的成功衡量标准,可以根据经验对进度进行评估,并可以直接以人类为基准。
随着AGI研究的发展,研究社区对更复杂的游戏的兴趣也随之增加。同时,将单个视频游戏转换为研究环境所需的工程工作变得难以管理。通用游戏引擎越来越成为创建各种交互式环境的最具可扩展性的方式。
许多AGI研究已经在基于Minecraft的游戏引擎(例如Project Malmo)中进行; ViZDoom,基于Doom;和基于Quake III Arena的DeepMind Lab。这些引擎可以编写脚本以快速创建新环境-由于许多引擎是为较旧的硬件编写的,因此它们能够在现代硬件上以极快的速度运行,从而消除了性能瓶颈。
但是这些游戏引擎缺少一些重要功能。例如,DeepMind Lab在学习导航方面非常出色,但是在学习常识性概念(例如对象如何移动以及如何相互影响)方面却表现不佳。
在DeepMind,我们使用Unity,这是一种灵活且功能丰富的游戏引擎。 Unity的逼真的物理模拟使特工能够体验到更接近现实世界的环境。现代渲染管线提供了更细微的视觉线索,例如逼真的照明和阴影。 Unity脚本使用C#编写,易于阅读,并且与定制引擎不同,它提供对所有游戏引擎功能的访问。多平台支持使我们可以在笔记本电脑上在家中或在Google数据中心上大规模运行环境。最后,随着Unity引擎的不断发展,我们可以在不花费大量工程时间的情况下对自己进行验证。
Unity包含一个称为ML-Agents的即用型机器学习工具包,该工具包专注于简化使现有游戏可作为学习环境使用的过程。 DeepMind专注于构建各种大规模运行的异构环境,因此,我们改为使用dm_env_rpc(请参见下文)。
传统的视频游戏是实时渲染的:屏幕上的一秒钟等于模拟中的一秒钟。但是对于AI研究人员而言,游戏只是数据流。游戏的处理速度通常比实时处理要快得多,而且游戏速度有时会发生巨大变化,这没有问题。
此外,许多强化学习算法可随多个实例扩展。也就是说,一个AI可以同时玩数千种游戏,并一次从中学习。
因此,我们针对吞吐量而不是延迟进行了优化。也就是说,我们会尽可能多地更新游戏,而不必担心以一致的速度生成这些更新。我们在一台计算机上运行多个游戏,每个处理器内核一个游戏。只要游戏通常能够快速运行,垃圾收集等功能所造成的停顿就不会引起我们的关注,这对于传统游戏制造商来说是一个普遍的头痛。
游戏输出图像,文本和声音供玩家查看和收听,并从某种游戏控制器获取输入命令。这些数据的结构对于AI研究人员很重要。例如,文本通常单独显示,而不是绘制到屏幕上。由于这种数据格式的灵活性非常重要,因此我们创建了一个名为dm_env_rpc的新开源库,该库用作环境和代理之间的边界。
通过使用dm_env_rpc,我们可以将环境容器化并公开发布。容器化意味着使用像Docker这样的技术来打包预编译的环境二进制文件。容器化可以使我们的研究得到独立验证。与开放源代码相比,这是一种更可靠,更方便的方法来重现实验,而开放源代码可能会因编译器或操作系统差异而混淆。有关如何容器化环境的更多详细信息,请参阅我们在dm_memorytasks上的工作。