Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。
作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。
2016 年的最后一个月,OpenAI 在 NIPS 2016 来临之际发布 Universe,一个在世界范围内的游戏、网站及其他应用上衡量和训练 AI 通用智能的平台。
Universe 可以让一个 AI agent 像人一样来使用电脑:观看屏幕像素并操作一个虚拟键盘和鼠标。我们必须在期望其解决的广泛任务上训练出 AI 系统,而 Universe 就可以让单个 agent 在任何人类可以通过计算机完成的任务上进行训练。
4 月份,我们启动了 Gym,这是用来开发和比较强化学习算法的工具。而借助 Universe,任何程序都可以被转换成一个 Gym 的环境。Universe 通过自动启动程序在一个 VNC 远程桌上进行工作——所以它不需要对程序内部、源码或者 bot API 的特别访问。
今天的发布内容包括一千个环境如 Flash Game,Browser task,以及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()
我们的目标是开发出一个单个 AI agent 可以灵活地应用其过去的经验在 Universe 环境中去快速地精通不熟悉、困难的环境,这实际上是向通用智能跨出的主要一步。有很多可以帮上忙的方法:给予我们对游戏的权限,在 Universe 任务上训练 agent,整合新的游戏,或者玩这些游戏。
EA, Microsoft Studios, Valve, Wolfram 还有其他一些参与者帮助下,我们已经赋予了 Universe AI 安全权限,使得 Universe AI agent 可以自由访问游戏和应用,如 Portal, Fable Anniversary, World of Goo, RimWorld, Slime Rancher, Shovel Knight, SpaceChem, Wing Commander III, Command & Conquer: Red Alert 2, Syndicate, Magic Carpet, Mirror's Edge, Sid Meier's Alpha Centauri, 以及 Wolfram Mathematica. 我们非常期待整合这些以及 更多.
背景
人工智能领域在过去数年中经历了快速的发展。计算机现在能够以空前的准确度 看, 听, 和 翻译语言。他们同样可以学习 生成图像, 声音, 和 文本了。强化学习系统,AlphaGo,击败了围棋世界冠军。但是,虽说有这些成就,我们目前能够构建出来的系统仍旧落在“狭义人工智能”的范畴之内——他们可以在一个特定领域内取得超人的性能,但是却没有在超出这些领域外做出明智行动的能力。例如,AlphaGo 可以轻易在围棋上击败你,不过你并不能告诉它一种不同的棋类游戏的规则,指望它陪你来一局新游戏。
拥有通用问题解决能力的系统——这种能力人类天生俱来,我们常常称之为常识,可以让一个 agent 快速解决一个新的困难任务——仍旧超出了我们的能力范围。显著的挑战就是我们的 agent 不能够将其经验带到新的任务上。在标准的训练环境下,我们从一片空白开始初始化 agent,让它们通过数千万次的尝试来随机调整,学会重复那些碰巧产生回报收益的行动。如果我们希望获得通用的智能 agent,我们必须允许它们经历更加宽广的任务,这样才能开发可以有效重用在新的任务上的世界知识和问题解决策略。
Universe 构架
Universe 通过一个常用的接口来获取非常丰富的环境:agent 通过观察屏幕像素并产生一个键盘和鼠标命令来操作一个远程桌面。环境暴露了一个 VNC 服务器,Universe 库将 agent 转化成了一个 VNC 客户端。
我们设计目标是提供一个单一的 python 进程来以每秒 60 帧的速度并行驱动 20 个环境。每个屏幕的缓冲区是 1024x768,所以简单地从外部进程读每个帧会消耗掉 3GB/s 内存带宽。我们用 Go 写了一个面向批的 VNC client,这个可以作为一个 python共享库载入,并对每个环境增量更新一对缓冲区。在尝试很多 VNC服务器、编码和非证明过的协议选项的组合后,我们现在按照 100 ms 延迟,按照每秒 60 帧的速度驱动数十个环境——这些几乎均由服务器端的编码所造成。
下面是我们当前实现的几个重要特点:
- 通用(General)。agent 可以使用这个接口(开始时设计为人类使用)来和任何已有的计算机程序进行交互而不需要模拟器或者访问程序的内部。例如,它可以玩任何的计算机游戏,和一个终端交互,访问网页,在 CAD 软件中设计房子,操作一个图片编辑程序,或者编辑一张电子表格。
- 被人类熟悉。因为人们对图像像素/键盘/鼠标这样的接口已经非常熟悉,人类可以轻易操作任何一个环境。我们可以使用人类的表现作为一个基准,并通过简单地保存 VNC traffic 来记录人类的展示。我们已经发现在切换到强化学习来优化给定的奖励函数前采用人类的展示在明智地按照行为复制的方式来初始化 agent 时效果很好(比如说,使用监督学习来模仿人类行为)。
- VNC 标准。很多 VNC 的实现可以在网上找到,有些已经被打包进入了最常见的操作系统,包括 OSX。甚至还有 JavaScript 的 VNC 实现,这可以让我们在不需要安装任何新的软件的情况上获得人类的展示——这个对于像 Amazon Mechanical Turk 这样的服务尤为重要。
- 方便 Debug。我们可以在训练或者评价 agent 的时候观测它——仅仅通过附加了一个 VNC 客户端到环境的(共享) VNC 桌面上。我们同样可以保存 VNC traffic 供后期分析。
我们对将 VNC 运行得如此好非常吃惊。当扩展到更大的游戏上的时候,其实我们有想要更加妥当点的计划使用另外的后端技术,但是初步迹象表明,我们可以将已有的实现推进得更远,现在客户端可以让 GTA V 按照每秒 20 帧的速度运行在公有网络上。
环境
我们已经整合了大量环境到 Universe,将这些看做是一个起点。每个环境打包成一个 Docker 镜像和 Host two servers 可以与外界进行交流:VNC server 发送像素接受键盘鼠标命令,WebSocket server 发送奖励信号给强化学习任务(以及任何的额外信息,如文本或者诊断信息)并接受控制消息(如运行的特定环境的 ID) 。
Atari games
Universe 包含了 Arcade Learning Environment 中 Atari 2600 游戏。这些环境现在异步运行在quay.io/openai/universe.gym-core Docker 镜像上,可以让 agent 通过网络进行连接,所以说 agent 必须处理延迟和低帧率。在本地网络上,我们能够有 60 帧每秒,观察延迟 20 ms,行动延迟是 10 ms; 在公网上会下降到 20 帧每秒, 80 ms 的观测延迟和 30 ms 的行动延迟。
Flash games
转向 Flash游戏是我们扩展 Universe 的起点——他们大量存在于因特网上,通常比 Atari 的图像更为丰富,但是还是比较简单。我们筛选了超过 30000 个游戏,估计还有一个高一量级的游戏数量。
我们初始 Universe 发布了 1000 个 Flash 游戏(其中 100 个有奖励函数),我们在 quay.io/openai/universe.flashgamesDocker image with consent from the rightsholders. 这个镜像启动了一个 TigerVNC 服务器和启动了 Python 控制服务器, Selenium 来打开一个 Chrome 浏览器在一个包含容器的页面显示相应的游戏并自动点击任何需要启动游戏的按钮。
抽取奖励 尽管没有奖励函数的环境可以被用来进行无监督学习或者生成人类展示,强化学习需要一个奖励函数。不像 Atari 游戏,我们不能简单地从进程内存中读出成果的标准,因为每个游戏存储的信息方式有太多差异了。幸运的是,很多游戏有屏幕上的分数,这个可以被用作奖励函数,只要我们可以解析出来这个值。尽管像 Tesseract 这样的 OCR 可以在干净背景下标准字体上有很好的效果,但是在另外不同的字体、移动的背景,快速的动画,或者游戏中常见的吸收物品上却是很痛苦。我们开发了一个卷积神经网络 OCR 模型在 Docker 容器的 python 控制器上运行,将分数从 VNC self-loop 维护的屏幕缓冲区解析出来,并将其通过 WebSocket channel 交还给 agent。
Browser tasks
人类集体将互联网建成了一个拥有巨大宝库,设计成可见的消费。Universe 包含基于浏览器的环境�,要求 agent 像人那样去读、浏览和使用互联网——借助于像素、键盘和鼠标。
今天我们的agent 大多数学会去和常见的用户接口元素,比如按钮、下拉列表和滑块进行交互,但在未来他们可以完成复杂的任务,比如说在互联网上查找他们不知道的东西, 管理邮件或者日历,完成可汗学院课程或者进行 Amazon Mechanical Turk 和 CrowdFlower 任务.
Mini World of Bits. 我们首先创建了一个新的基准测试集刻画了浏览器交互的显著挑战。我们称此为 Mini World of Bits。我们将它看作MNIST的类比,并相信掌握好这些环境会给出有价值的信号给模型,而训练技术会在整个网站或者更加复杂的任务上效果很好。目前初始的 Mini World of Bits benchmark 包含 80 个环境从简单的(如点击特定的按钮)到困难的(如在一个模拟的邮件客户端回复一个联系人)。
Real-world browser tasks. 我们已经在更加实际的浏览器任务进行探索。agent 获得一个指令,在一个网站上执行行动的序列。一个这样的环境将给 agent 一个目标航班订单的细节,然后要求它操作用户接口搜索这个航班(我们使用这些网站 cached 的记录来避免被封杀或者直接购买真实的机票)
Future integrations
我们可以整合任何游戏、网站或者可以运行在一个 Docker 容器上或者说 Windows 虚拟机上的应用。我们希望获得社区的支持来持续扩展 Universe 环境,比如完成合作方的游戏整合,Android 应用(模拟器可以在 Docker 内运行,fold.it,Unity 游戏,HTML5 游戏,在线教育游戏及其实人类所想到的任何事。
微软 Project Malmo 团队将会与 Universe 整合,我们期待支持更多其他的 AI 框架。
运行一个环境
尽管差异性很大,但是运行 Universe 环境不需要太复杂的步骤。你仅要安装 Docker 和 Universe:
$ git clone https://github.com/openai/universe && pip install -e universe
我们将每个相似环境的集合打包进一个“runtime”,这是一个暴露两个端口:5900(用于 VNC 协议交换像素/键盘/鼠标)和 15900(用于 WebSocket 控制协议)。例如,quay.io/openai/universe.flashgames Docker 镜像就是一个 runtime 可以服务很多不同的 Flash 游戏环境。
启动一个 runtime 你可以用下面的命令启动你的第一个 runtime:
# -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 或者基于浏览器的 VNC 客户端端口是 15900 提供 web 服务。默认的密码是 openai
。OSX 同样有一个原生 VNC 观察器,可以通过打开 vnc://localhost:5900
访问。(不幸的是, OSX 观察器并没有实现 Tight 编码,而这是很多大型游戏的最佳选择)
编写自己的 agent 你可以很方便地写出自己的 agent,使用你习惯的框架比如说 Tensorflow 或者 Theano。(我们已经给出了一个 TensorFlow 的agent.)在每个时间步,agent 的观测包含一个 NumPy 的像素矩阵,agent 必须释放一个 VNC 事件列表(鼠标/键盘和行动)。例如,下面的 agent 会激活 Dusk Drive 并持续按下前进命令:
import gym
import universe # register Universe environments into Gym
env = gym.make('flashgames.DuskDrive-v0') # any Universe environment ID 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 连接打开状态,并观测 agent 玩游戏的情况,甚至使用键盘和鼠标与 agent 以 co-op 模式共同游戏。
环境管理 由于环境运行为服务器进程,他们可以在远程机器上运行,可能是一个集群抑或甚至是一个公共的互联网。我们将一些管理远程 runtime 的方式记录在这里。在 OpenAI,我们使用“allocator” HTTP 服务,在需要的 Kubernetes 集群上供给 runtime,我们可以使用它来连接单个 agent 进程到数百个模拟环境上。
检验 Universe 基础设施
展望
研究进程需要有意义的性能度量。在接下来的几周里,我们会发布迁移学习基准测试集,让大家可以确定自己真的在通用问题解决能力上取得了进步。
Universe 从计算机视觉的 ImageNet 数据集的历史中获得启发。李飞飞和合作者们精心设计了 ImageNet 基准数据集,错误率从 2010 年的 28% 急剧下降到了 2016 年的 3%,这达到了(在某种程度上甚至是超过了)人类水平。
如果 AI 社区用 Universe 达成了如上的成就,那么我们将会在面对普遍领域的通用智能系统研究开发上取得真正的进展。
Help us improve Universe
没有社区的帮助 Universe 是不可能成功的。有很多贡献力量的方式(其中最伟大的方式就是加入我们)
给于我们使用你的游戏、程序、网站或者 app 的权限
如果你的程序会产出好的 AI 训练任务,那么我们很想要得到你的许可将其封装进 Universe。好的候选是有一个屏幕上的数字(比如游戏的分数)这可以被解析成一个奖励,或者一个良定义的目标函数,当然可以是原生的也可以是用户自定义的。
在 Universe 任务上训练 agent
AI 进步需要整个社区的合作,我们欢迎社区在这些任务上的 agent 训练。我们已经发布了一个 starter agent 可以作为构建自身 agent 的起点。在接下来的几周,我们会发布觉得可以作为开始时采用的细分基准测试集。
整合新的环境(正在加入)
我们有很多超过自己处理能力的等待整合进 Universe 的环境。在后面,我们会发布环境整合工具,所以任何想要贡献新的环境整合的朋友都可以来。同时,我们也将运行beta版本 供环境整合。
贡献展示(正在加入)
我们编译了一个在 Universe 环境中人类展示大数据集,这个会公开发布。如果你想要通过玩游戏参与来帮助科学研究,请在这里报名。
Credits
- Acquisition & partnerships: Erin Pettigrew, Jack Clark, Jeff Arnold
- Core infrastructure: Greg Brockman, Catherine Olsson, Alex Ray
- Demonstrations: Tom Brown, Jeremy Schlatter, Marie La, Catherine Olsson
- Distributed training infrastructure: Vicki Cheung, Greg Brockman, Jonas Schneider
- Documentation & communications: Jack Clark, Andrej Karpathy, Catherine Olsson
- Environment integrations: Alec Radford, Jonathan Gray, Tom Brown, Greg Brockman, Alex Ray, Catherine Olsson, Trevor Blackwell, Tambet Matiisen, Craig Quiter
- Initial agent results: Rafal Jozefowicz, Dario Amodei, Ilya Sutskever, Jonathan Ho, Trevor Blackwell, Avital Oliver, Yaroslav Bulatov
- Remote environment management: Vicki Cheung, Greg Brockman, Catherine Olsson, Jie Tang
- RL baselines: Dario Amodei, Harri Edwards
- Website: Ludwig Petterson, Jie Tang, Tom Brown, Alec Radford, Jonas Schneider, Szymon Sidor
- World of Bits: Andrej Karpathy, Tianlin (Tim) Shi, Linxi (Jim) Fan, Jonathan Hernandez, Percy Liang
The following partners have been key to creating Universe: EA, Valve, Microsoft, NVIDIA, Kongregate, Newgrounds, Yacht Club Games, Zachtronics, Ludeon Studios, Monomi Park, 2D Boy, Adam Reagle, Alvin Team, Rockspro, Anubhav Sharma, Arkadium, Beast Games, Char Studio, Droqen, Percy Pea, deeperbeige, Denny Menato, Dig Your Own Grave, Free World Group, Gamesheep, Hamumu Software, Hemisphere Games, Icy Lime, Insane Hero, inRegular Games, JackSmack, Nocanwin, Joe Willmott, Johnny Two Shoes, The Gamest Studio, László Cziglédszky, Madalin Games, Martian Games, Mateusz Skutnik, Mikalay Radchuk, Neutronized, Nitrome, ooPixel, PacoGames, Pixelante, Plemsoft, Rob Donkin, robotJam, Rumble Sushi 3D, SFB Games, Simian Logic, Smiley Gamer, Sosker, tequibo, kometbomb, ThePodge, Vasco Freitas, Vitality Games, Wolve Games, Xform Games, XGen Studios