转载

OpenAI研究 宇宙

openai发布了 Universe,这是一个软件平台,用于测量和训练 AI 在全球游戏、网站和其他应用程序中的通用智能。

Universe 允许 AI 代理 像人类一样使用计算机:通过查看屏幕像素并操作虚拟键盘和鼠标。我们必须在我们期望它们解决的所有任务上训练 AI 系统,而 Universe 让我们可以训练一个单一的代理来完成人类可以用计算机完成的任何任务。

人类示威者玩的 Universe 游戏环境示例。

4 月,我们 推出了 Gym,这是一个用于开发和比较 强化学习 (RL) 算法的工具包。使用 Universe,任何程序都可以变成 Gym 环境。Universe 通过在VNC远程桌面后面自动启动程序来工作  ——它不需要对程序内部、源代码或机器人 API 的特殊访问。

今天的发布包含一千个 环境 ,包括 Flash 游戏、 浏览器任务以及 slither.io 和 GTA V等游戏。其中数百个已准备好用于强化学习,几乎所有都可以使用 universe  Python 库自由运行,如下所示:

import gym
import universe # register Universe environments into Gym

env = gym.make('flashgames.DuskDrive-v0') # any Universe environment ID here
observation_n = env.reset()

while True:
  # agent which presses the Up arrow 60 times per second
  action_n = [[('KeyEvent', 'ArrowUp', True)] for _ in observation_n]
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()
无效的
Universe Img 1
上面的示例代码将启动您的 AI 玩 Dusk Drive Flash 游戏。您的 AI 每秒将获得上述 60 次帧。您需要安装 Docker 和 universe。

我们的 目标 是开发一个单一的人工智能代理,可以灵活地将其过去在宇宙环境中的经验应用到快速掌握陌生、困难的环境,这将是迈向通用智能的重要一步。有很多方法可以提供 帮助:允许我们使用您的游戏、在 Universe 任务中训练代理、(很快)集成新游戏或(很快)玩游戏。

在 EA、Microsoft Studios、Valve、Wolfram 和许多其他公司的支持下,我们已经获得 Universe AI 代理的许可,可以自由访问游戏和应用程序,例如 Portal、  Fable Anniversary、  World of Goo、  RimWorld、  Slime Rancher、  Shovel Knight、  SpaceChem、  Wing Commander III、 命令与征服:红色警戒 2、 辛迪加、 魔毯、 镜之边缘、  Sid Meier 的半人马座阿尔法星和 Wolfram Mathematica。我们期待整合这些以及 更多.

Logo wall

背景

人工智能领域在过去几年中取得了飞速发展。计算机现在可以 以前所未有的准确度、 和 翻译 语言。他们还在学习 生成图像、 声音和 文本。强化学习系统,  AlphaGo,打败围棋世界冠军。然而,尽管取得了所有这些进步,我们正在构建的系统仍然属于“狭义人工智能”的范畴——它们可以在特定领域实现超人的表现,但缺乏在该领域之外做任何有意义的事情的能力。例如,AlphaGo 可以在围棋中轻松击败你,但你不能向它解释不同棋盘游戏的规则并期望它与你一起玩。

具有一般问题解决能力的系统——类似于人类常识,允许代理快速解决新的艰巨任务——仍然遥不可及。一个明显的挑战是我们的代理不会将他们的经验与他们一起带到新任务中。在一个标准的训练机制中,我们从头开始初始化智能体,让它们在数千万次试验中随机抽动,因为它们学会重复那些恰好导致有益结果的动作。如果我们要在普遍智能代理方面取得进展,我们必须让他们体验广泛的任务,这样他们才能发展出可以在新任务中有效重用的世界知识和问题解决策略。

宇宙基础设施

Universe 通过一个通用界面公开各种环境:代理通过观察屏幕像素并生成键盘和鼠标命令来操作远程桌面。环境公开了一个 VNC 服务器,  universe 库将代理变成了一个 VNC 客户端。

我们的 universe 设计目标是支持单个 Python 进程以每秒 60 帧的速度并行驱动 20 个环境。每个屏幕缓冲区都是 1024x768,因此单纯地从外部进程读取每一帧将占用 3GB/s 的内存带宽。 我们用 Go编写了一个面向批处理的 VNC 客户端,它在 Python 中作为共享库加载,并为每个环境增量更新一对缓冲区。在对 VNC 服务器、编码和未记录的协议选项的多种组合进行试验后,我们现在通常以每秒 60 帧的速度驱动数十个环境,延迟为 100 毫秒——几乎都是由于服务器端编码。

以下是我们当前实现的一些重要属性:

将军。代理可以使用此界面(最初是为人类设计的)与任何现有的计算机程序进行交互,而无需模拟器或访问程序的内部结构。例如,它可以玩任何电脑游戏、与终端交互、浏览网页、在 CAD 软件中设计建筑物、运行照片编辑程序或编辑电子表格。

为人类所熟悉。由于人们已经非常熟悉像素/键盘/鼠标的界面,因此人类可以轻松地操作我们的任何环境。我们可以将人类表现作为有意义的基线,并通过简单地保存 VNC 流量来记录人类演示。我们发现在切换到 RL 以针对给定的奖励函数进行优化之前,演示对于使用具有行为克隆的明智策略(即使用监督学习来模仿人类的行为)来初始化代理非常有用。

VNC 作为标准。VNC 的许多实现都可以在线获得,有些实现默认打包到最常见的操作系统中,包括 OSX。甚至还有 JavaScript中的 VNC 实现,它允许人们在不安装任何新软件的情况下提供演示——这对于 Amazon Mechanical Turk 等服务很重要。

易于调试。我们可以在训练或评估代理时对其进行观察——我们只需将 VNC 客户端附加到环境的(共享)VNC 桌面即可。我们还可以保存 VNC 流量以供将来分析。

我们都很惊讶我们能让 VNC 工作得这么好。随着我们扩展到更大的游戏,我们很有可能会开始使用额外的后端技术。但初步迹象表明,我们可以将现有实施推向更远:通过正确的设置,我们的客户可以诱使 GTA V 在公共互联网上以每秒 20 帧的速度运行。

环境

我们已经将大量环境集成到 Universe 中,并将这些视为开始。每个环境都打包为一个 Docker 镜像,并托管 两个 与外界通信的服务器:发送像素和接收键盘/鼠标命令的 VNC 服务器,以及发送强化学习任务奖励信号的 WebSocket 服务器(以及任何辅助信息,如文本或诊断)并接受控制消息(如要运行的特定环境 ID)。

雅达利游戏

Universe 包括来自 Arcade Learning Environment 的 Atari 2600 游戏。这些环境现在在 quay.io/openai/universe.gym-core  Docker 镜像中异步运行,并允许代理通过网络连接,这意味着代理必须处理滞后和低帧率。在云端的本地网络上运行,我们通常看到每秒 60 帧,观察滞后 20 毫秒,动作滞后 10 毫秒;在公共互联网上,这会下降到每秒 20 帧、80 毫秒的观察滞后和 30 毫秒的动作滞后。

人类示威者通过 VNC 玩 Atari 游戏。

Flash游戏

我们将 Flash 游戏作为扩展 Universe 的起点——它们在 Internet 上无处不在,通常具有比 Atari 更丰富的图形,但仍然非常简单。到目前为止,我们已经筛选了超过 30,000 个,估计还有一个数量级。

 我们最初的 Universe 版本包括 1,000 个 Flash 游戏(100 个具有奖励功能),我们在权利持有者的同意下在quay.io/openai/universe.flashgames Docker 镜像中分发 。此图像启动 TigerVNC 服务器并启动 Python 控制服务器,该服务器使用 Selenium 打开 Chrome 浏览器到包含所需游戏的容器内页面,并自动点击启动游戏所需的任何菜单。

人类示威者通过 VNC 玩 Flash 游戏。

提取奖励。虽然没有奖励功能的环境可用于无监督学习或生成人类演示,但 RL 需要奖励功能。与 Atari 游戏不同,我们不能简单地从进程内存中读取成功标准,因为每个游戏存储此信息的方式差异太大。幸运的是,许多游戏都有一个屏幕分数,我们可以将其用作奖励函数,只要我们能够解析它即可。而现成的 OCR 如 Tesseract 在具有干净背景的标准字体上表现出色,但它很难处理多种游戏中常见的多种字体、移动背景、华丽动画或遮挡对象。我们开发了一个基于卷积神经网络的 OCR 模型,该模型在 Docker 容器的 Python 控制器内运行,解析分数(来自通过 VNC 自循环维护的屏幕缓冲区),并通过 WebSocket 通道将其传达给代理。

我们的得分 OCR 模型正在运行。人工集成商为分数提供了边界框。OCR 模型以每秒 60 帧的速度解析分数。

浏览器任务

人类共同将互联网建设成一个巨大的信息宝库,专为人类视觉消费而设计。Universe 包括基于浏览器的环境,需要 AI 代理像人一样阅读、导航和使用网络——使用像素、键盘和鼠标。

今天,我们的代理主要学习与常见的用户界面元素(如按钮、列表和滑块)进行交互,但在未来他们可以完成复杂的任务,例如在互联网上查找他们不知道的内容、管理您的电子邮件或日历、完成 可汗学院 课程,或处理 Amazon Mechanical Turk 和 CrowdFlower 任务。

迷你比特世界。我们首先着手创建一个新的基准,以在简单的设置中捕捉浏览器交互的显着挑战。我们将此基准称为 Mini World of Bits。我们将其视为 MNIST的类比,并相信掌握这些环境可为模型和训练技术提供有价值的信号,这些模型和训练技术将在完整的网站和更复杂的任务上表现良好。我们最初的 Mini World of Bits 基准测试包含 80 个环境,从简单(例如单击特定按钮)到困难(例如在模拟电子邮件客户端中回复联系人)。

人类示威者完成迷你世界任务。

真实世界的浏览器任务。我们已经开始研究更现实的浏览器任务。代理接受指令,并在网站上执行一系列操作。一种这样的环境将所需航班预订的详细信息交给代理,然后要求它操纵用户界面来搜索航班。(我们使用这些网站的缓存记录来避免向它们发送垃圾邮件,或预订大量真实航班。)

人类示威者根据指示在各种网站上完成航班预订任务:“旧金山到波士顿,12 月 5 日出发,12 月 10 日返回”。

未来的整合

这个基础设施是通用的:我们可以集成任何可以在 Docker 容器(最方便)或 Windows 虚拟机(不太方便)中运行的游戏、网站或应用程序。我们希望社区的 帮助 继续扩展 Universe 环境的广度,包括完成我们 合作伙伴 游戏、Android 应用程序(模拟器可以在 Docker 中运行)、  fold.it、Unity 游戏、HTML5 游戏、在线教育游戏的集成,以及人们想到的其他任何东西。

Microsoft 的 Project Malmo 团队将与 Universe 集成,我们也期待支持其他 AI 框架。

人类示威者正在玩我们合作伙伴的一些游戏和应用程序。

运行环境

尽管种类繁多,但运行 Universe 环境需要的设置最少。您只需要安装 Docker 和 universe

$ git clone https://github.com/openai/universe && pip install -e universe
无效的

我们将每个类似环境的集合打包成一个“运行时”,这是一个暴露两个端口的服务器:5900(用于 VNC 协议交换像素/键盘/鼠标)和 15900(用于 WebSocket 控制协议 。例如,  quay.io/openai  /universe.flashgames Docker 镜像是一个可以为许多不同的 Flash 游戏环境提供服务的运行时。

启动运行时。您可以从控制台启动您的第一个运行时,如下所示:

# -p 5900:5900 and -p 15900:15900 expose the VNC and WebSocket ports
# --privileged/--cap-add/--ipc=host needed to make Selenium work
$ docker run --privileged --cap-add=SYS_ADMIN --ipc=host \
    -p 5900:5900 -p 15900:15900 quay.io/openai/universe.flashgames
无效的

这将下载并运行 Flash 游戏 Docker 容器。您可以通过将自己的 VNC 查看器连接到端口 5900 来查看和控制远程桌面,例如通过 TurboVNC或 通过端口 15900 上的网络服务器提供的 基于浏览器的 VNC 客户端。默认密码是 openai。OSX 还有一个本地 VNC 查看器,可以通过在终端中运行 open vnc://localhost:5900 来访问它。(不幸的是,OSX 查看器没有实现 Tight 编码,这是大型游戏的最佳选择。)

编写自己的代理您可以使用自己喜欢的框架(例如TensorFlow 或 Theano)轻松编写自己的代理 。(我们提供了一个起始 TensorFlow 代理。)在每个时间步,代理的观察包括一个 NumPy 像素数组,并且代理必须发出 VNC 事件列表(鼠标/键盘操作)。例如,以下代理将激活 Dusk Drive 并不断向前推进:

import gym
import universe # register Universe environments into Gym

env = gym.make('flashgames.DuskDrive-v0') # any Universe [environment ID](https://github.com/openai/universe/blob/master/universe/__init__.py#L297) here
# If using docker-machine, replace "localhost" with your Docker IP
env.configure(remotes="vnc://localhost:5900+15900")
observation_n = env.reset()

while True:
  # agent which presses the Up arrow 60 times per second
  action_n = [[('KeyEvent', 'ArrowUp', True)] for _ in observation_n]
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()
无效的

您可以保持自己的 VNC 连接处于打开状态,并观看代理游戏,甚至可以在人/代理合作模式下与代理一起使用键盘和鼠标。

环境管理。因为环境作为服务器进程运行,所以它们可以在远程机器上运行,可能在集群内,甚至在公共互联网上。我们记录了几种管理 远程 运行时的方法。 在 OpenAI,我们使用“分配器”HTTP 服务,它按需在Kubernetes集群中提供运行时 ,我们可以使用它来将单个代理进程连接到数百个同时环境。

验证 Universe 基础设施

Universe 智能体必须处理传统 RL 智能体无法避免的现实世界的肮脏:智能体必须实时运行并考虑波动的动作和观察滞后。虽然 Universe 的全部复杂性旨在超出当前技术的范围,但我们也确保它有可能在今天取得进展。

宇宙乒乓。我们的第一个目标是解决 gym-core.PongDeterministic-v3问题。Pong 是最简单的 Atari 游戏之一,但作为 Universe 任务,它有可能变得棘手,因为代理必须学会以 4 倍实时执行非常精确的操作(因为环境使用 4 的标准跳帧)。我们使用这种环境来验证 Universe 的可变延迟仍然允许学习精确和快速的反应。今天的版本包括 universe-starter-agent,它需要一个小时来训练 Pong 得分为 21 分中的 +17。玩相同版本的 Pong 的人类只能在 -21 到 21 之间的范围内达到 -11 分,由于游戏的高速。

额外的实验。我们将 RL 应用于几个赛车 Flash 游戏,这些游戏在应用了一些标准技巧(例如奖励归一化)后起作用。我们尝试 RL 的一些浏览器任务存在困难的探索问题,但可以通过人类演示数据的行为克隆来解决。

我们的一些成功代理商如下所示。虽然解决 Universe 需要的代理远远超出当前技术的范围,但这些视频表明,许多有趣的 Universe 环境可以通过 当今的 算法富有成效地处理。

三个训练有素的特工玩几个赛车 Flash 游戏。这些代理中的每一个都使用相同的代码和超参数。
一个代理人接受了大约 2 小时人类演示的行为克隆训练(左),两个代理人接受了强化学习训练(中、右)以识别和点击特定按钮并玩井字游戏。这些代理中的每一个都使用与 Flash 游戏代理相同的代码和超参数。

远程培训。我们还在  我们的物理 基础设施 (可以访问 Titan X GPU)和云环境中试验了slither.io代理。通常,代理将以每秒 5 帧的速度控制 32 个同时发生的环境——观察的频率要高得多,但较低的帧率有助于当今的 RL 算法,这些算法在许多时间步上都存在依赖性。

我们的代理在公共互联网上的“反应时间”平均约为 150 毫秒:观察到达需要 110 毫秒,计算操作需要 10 毫秒,操作生效需要 30 毫秒。(相比之下,人类的 平均反应时间 约为 250 毫秒。)本地网络的反应时间降至 80 毫秒,单台机器的反应时间降至 40 毫秒。

代理人玩slither.io(左),仅使用屏幕像素和鼠标。目标是吃水果并避免撞到其他蛇。我们使用 JavaScript 来简化颜色。我们还展示了控制蛇(右)的神经网络每一层的激活。

期待

研究进展需要有意义的绩效衡量。在接下来的几周内,我们将发布一个迁移学习基准,让研究人员能够确定他们是否在一般问题解决能力方面取得了进展。

 Universe 从计算机视觉社区中 ImageNet数据集的历史中汲取灵感 。李飞飞 和她的合作者故意将 ImageNet 基准设计得几乎不可能,但错误率从 2010 年的 28% 迅速下降到 2016 年的 3%,达到(或在某些情况下甚至超过)人类水平的 表现 。

如果 AI 社区对 Universe 做同样的事情,那么我们将在具有广泛的通用智能的系统方面取得真正的进步。

帮助我们改进 Universe

Universe 只有在社区的帮助下才会成功。贡献的方式有很多种(其中一种特别好的方式是 加入我们):

授予我们使用您的游戏、程序、网站或应用程序的权限。

如果您的程序能够为 AI 提供良好的训练任务,那么我们很乐意  其打包到 Universe 中。好的候选人有一个屏幕上的数字(例如游戏分数),可以将其解析为奖励或明确定义的目标,可以是本机的也可以是用户定义的。

在 Universe 任务上训练代理。

人工智能的进步需要整个社区的协作,我们欢迎社区帮助培训代理完成这些任务。我们已经发布了一个 入门代理 ,它应该是构建您自己的代理的有用起点。在接下来的几周内,我们将发布我们认为是正确起点的子基准。

整合新环境。(即将推出)

我们有更多的环境等待整合,超出了我们自己的处理能力。在接下来的几周内,我们将发布我们的环境集成工具,这样任何人都可以贡献新的环境集成。与此同时,我们将为环境集成商运行测试  。

贡献示范。(即将推出)

我们正在编制一个关于宇宙环境的人类示范的大型数据集,该数据集将公开发布。如果您想为科学而玩游戏,请注册我们的 测试版