产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

Bengio 团队提出 BabyAI:首个有人类参与的 AI 语言学习平台

  • 2018-11-12
  • 本文字数:6506 字

    阅读完需:约 21 分钟

Bengio团队提出BabyAI:首个有人类参与的AI语言学习平台

简介

如何训练智能体去理解人类的自然语言指令?无论从实用技术还是科学研究的角度看,该问题都十分重要。虽然人工智能技术在不断演进,但是如何实现可更好地理解自身需求的智能助手的问题仍然未得到很好的解决。从另一方面看,心理学、认知科学和语言学研究等领域也在研究类似问题,但是这些研究主要针对人类儿童阶段。要实现扎实的语言学习能力,需要将计算机科学与对人类语言的识别研究结合起来。


近期,蒙特利尔大学 Yoshua Bengio 研究团队实现了一种称为“BabyAI”的研究平台。该平台将人类加入到了语言学习过程中,并通过模拟人类专家去训练神经网络学习者(Learner)。BabyAI 构建了一个二维的网格世界,通过合成指令让智能体巡航该网格(包括房门开锁)并移动物体到指定的位置。BabyAI 中提供了课程学习(curriculum learning)和交互教学(interactive teaching)方法,用于模拟人类参与智能体训练循环中的一些关键过程,由此改进了一些前期研究。


已有多项研究提出使用课程学习(curriculum learning)训练机器学习模型的方法。BabyAI 的理念是,正如人类之间教学一样,通过逐步增加任务的难度可以提高人类和机器的学习效率。为推进课程学习,当前 BabyAI 实现了 19 个层级,逐层增大了环境和语言的难度。


交互教学(interactive teaching)指的是根据学习者当前可达到的水平因材施教。因材施教是人类教师的一个重要能力,现有的研究提出了一些有效的交互式智能体训练方法。为了支持交互实验,BabyAI 实现了一种启发式专家智能体,能够实时提供新的演示,为学习者给出如何继续操作的建议。


研究指出,将人类加入到语言学习循环中所面对的主要障碍,在于所需的数据量以及人类与机器之间的交互。尽管现有研究表明,目前在模仿学习(IL,Iimitation Learning)和强化学习(RL,Reinforcement Learning)中使用深度学习方法对一些语言学习的设置和应用卓有成效,但这通常需要提供大量的数据,以数百万次回报函数查询的形式,或是数十万次演示(Demonstration)的 形式。为展示 BabyAI 平台如何适用于数据效率研究,论文中给出了多个用例,并通过实验确定了使用 IL 和 RL 求解每个层级所需的最小样本数量。论文以此为基线,进而确定了使用预先训练和交互 IL 对数据需求的降低情况。

BabyAI 平台的组成

BabyAI 平台由一个高效的模拟网格环境(MiniGrid)和一系列遵循指令的任务组成。其中的任务组合称为“层级”(level),而任务是使用一种被称为“Baby 语言”的人工语言形式化表示的。BabyAI 平台中还包括了一种名为“启发式专家”的组件,该重要组件用于评估在教学循环中加入人类的作用。BabyAI 的所有代码已经在 GitHub 开源,项目地址是https://github.com/mila-udem/babyai

2.1 模拟网格环境 MiniGrid

数据效率的计算代价非常高,因为需要多次运行各种规模的数据。BabyAI 环境的设计目标是实现一种最小化且高效的环境,这对于当前通用的智能体学习方法提出了多个挑战。为此,BabyAI 给出了一种称为“MiniGrid”的二维模拟网格环境。在 MiniGrid 中,环境表示为不同颜色的各种实体,包括智能体、球、箱子、门和钥匙等,如图一所示。智能体可向对象执行拾起(PickUp)、放下(Drop)和移动(Move)等操作,房门(door)可使用与其颜色相匹配的钥匙(Key)开锁。在每一步,智能体会接收到其可视区域的一个表示,以及一条文本字符串形式的 Baby 语言指令。



图一 使用 MiniGrid 环境构建的三个 BabyAI 层级,分别为 GoToObj(图 a)、PutNextLocal(图 b)和 BossLevel(图 c)。其中,红色三角表示智能体,浅灰色阴影区域表示智能体能部分观察到的可视区域。


MiniGrid 是一种快速和轻量级的环境。在当前的多核笔记本上,可实现每秒 3000 帧的通量。该环境支持快速地开展实验。MiniGrid 环境开源在线提供,并支持与 OpenAI Gym 的集成。具体细节可以参见原论文附录。

2.2 Baby 语言

BabyAI 给出了一种称为“Baby”的人工合成语言,用于向智能体发出指令,并自动检验指令的执行情况。Baby 语言是英语的一个相对较小的子集,便于人类理解,并可提供丰富的语义组合。在 Baby 语言中 ,智能体根据指令走向对象(GoTo)、拿起对象(PickUp)、打开房门(Open),并将对象置于其它对象旁边(Put)。Baby 语言还可以表达多个任务的组合,例如,“开门后将一个红色的球置于绿色的箱子旁”。图二给出了 Baby 语言的 BNF 语法,图三显示了使用 Baby 语言生成的一些例子。为了使得指令便于人类阅读,Baby 语言中添加了一些结构上的限制。例如,连接符(connector)以“then”和“after”的形式给出,指令中只能包括不多于一个“then”和“after”。Baby 语言可组合生成 2.48x10^19 种指令。



图二 Baby 语言的 BNF 语法



图三 Baby 语言指令的一些例子


BabyAI 平台还给出了验证器,用于检查在给定环境中执行一系列动作的智能体是否成功地完成了给定指令,并实现了目标。语言中的描述符用于表示一个或者多个对象。例如,如果一个智能体按指令走向“红色的房门”,那么在指令执行时,智能体可能会走向环境中任何一个红色的房门。连接符“then”和“after”用于构建按顺序完成的指令子目标序列,而“and”表示必须完成所连接的各个子目标,但是没有完成顺序上的限制。注意,Baby 语言并未明确指定指令执行的具体细节。例如,智能体要实现打开房门的目标,必须首先找到相应的钥匙;或者智能体要完成一个指令,必须移除行进路径上的所有阻碍物。对此无需在指令中明确指明。

2.3 BabyAI 的层级

大量现有文献研究表明,使用课程(curriculum)在很大程度上能促进神经网络对复杂任务的学习。为了支持课程以提高数据效率,BabyAI 提供了一系列的层级。在每一层级中,设定了不同复杂度的环境,智能体只需要理解 Baby 语言的部分有限子集。或者说,层级发布了一些任务,而每个任务是指令和环境初始状态的组合。在构建每个层级时,考虑了选取所需的技能(competency)子集,并实现了仅处理这些技能的智能体便可求解的任务生成器。技能定义了智能体可做的事情,列举为:


  • 巡航房间(ROOM):巡航一个 6x6 大小的房间。

  • 忽略干扰箱子(DISTR-BOX):环境巡航,即使其中存在着多个以灰色干扰箱子表示的对象。

  • 忽略干扰者(DISTR):和 DISTR-BOX 一样,但是干扰者可以是任何对象,包括箱子、钥匙,或是任何颜色的球。

  • 巡航迷宫(MAZE):巡航由 6x6 房间组成的 3x3 迷宫,其中的各个房间通过房门随机连通。

  • 去除路障(UNBLOCK):巡航环境,即便需要移动一些阻碍行进路线的对象。

  • 房门开锁(UNLOCK):在指令明确指定的情况下,找到钥匙,开锁房门。

  • 通过猜测开锁房门(IMP-UNLOCK):以猜测的方式执行指令。智能体需要识别需要开锁的房门,找到相应的钥匙,并进一步执行指令。

  • GoTo 指令(GOTO):理解“go to”。例如,“走向红色的球”。

  • Open 指令(OPEN):理解“open”。例如,“打开右侧的房门”。

  • Pickup 指令(PICKUP):理解“pick up”。例如,“拿起一个箱子”。

  • Put 指令:理解“put”。例如,“将球放在蓝色钥匙旁”。

  • 定位语言(LOC):理解指向对象的指令。引用对象时不仅通过对象的形状和颜色,而且使用对象的相对于智能体初始位置的定位。例如,“走到面前的红色球处”。

  • 命令序列(SEQ):理解组合指令中需要智能体按顺序执行一组指令语句。例如,“在开门后将红色球置于绿色箱子旁”。


表一 BabyAI 的层级和各层级所需的技能



表一列出了当前 BabyAI 的所有层级,以及解决各个层级所需的技能。每个层级构建了通关该层级所需的技能过程,直至最终抵达需要掌握所有技能的 BossLevel。

2.4 启发式专家

启发式专家(或称为机器人)是 BabyAI 的一个关键组成。在语言学习中,启发式专家模拟了人类教师的角色。该机器人会为每个 BabyAI 层级生成给定环境状态下的演示或建议动作。在这些演示或动作中,BabyAI 学习者是通用的,可以扩展应用于更复杂的新任务上,而机器人则是使用任务的知识构造的。机器人表示了参与语言学习中的人类,实现在理解给定层级中任务并教授初学者的功能。机器人可直接访问指令树,所以无需去解析 Baby 语言。从实现机制看,机器人的执行使用了一种表示指令和子目标的堆栈。这种基于堆栈的设计,机器人可以中断正在做的事情,去实现新的子目标,然后再恢复执行原始的任务。例如,智能体在走向指定目标的过程中,可能需要探索环境去发现对象。


机器人实现的子目标包括:


  • Open:打开智能体面前的房门。

  • Pickup:执行 PickUp 操作。

  • Drop:执行 Drop 操作。

  • GoToObj:走向一个符合给定描述(类型、颜色)的对象。

  • GoNextTo:走向给定位置近邻的单元。

  • GoToAdjPos:走向对象近邻位置。该目标对于实现 PutNext 指令是必要的。

  • Explore:探索环境中未被前期行动探索的部分。这是机器人内部逻辑中最复杂的部分。


Baby 语言的所有指令均可分解为一些内部的子目标,机器人理解如何完成这些子目标。很多子目标在堆栈上执行时,也会推出一些新的子目标。在机器人的设计中,一个核心问题是如何追踪未被机器人探索的环境单元。探索行动是“Explore”子目标的一部分,实现为递归运算。例如,探索环境可能需要打开一个房门,或是移动挡在路上的某个对象。打开锁着的房门则需要找到相应的钥匙,这本身需要探索并移动一些阻碍物。机器人设计中的另一个核心问题是最短搜索路径问题。在巡航对象定位最近的房门时,或是巡航最近邻的未探索元素时,都要用到最短路径算法。

实验

实验通过训练每个级别的模拟学习基线,评估 BabyAI 各个层级的困难度。实验还估计了求解一些较简单层级所需要的数据量,并通过使用基础课程学习和交互式教学方法评估了数据量需求的降低程度。实验用的所有代码以及容器化的预训练模型均在线获取。

3.1 实验设置

BabyAI 平台的每一步输入默认为 7x7x3 环境的符号观察值 x(即对部分和局部环境状态的自中心视图)和可变长度的指令 c。实验中使用由标准组件组成的基本模型,预测基于 x 和 c 的下一个动作 a。具体而言,实验使用了 GRU 对指令和卷积网络编码,采用前期研究提出的两个批量标准化 FiLM 层联合处理观察和指令,使用 LSTM 存储整合 FiLM 模块在每步所生成的表示(representation)。在实验中使用了两个版本的模型,分别称为 Large 模型和 Small 模型。在 Large 模型中,存储 LSTM 具有 2048 个单元,指令 GRU 是双向的,并具有 256 个单元。此外,还使用了注意机制(attention mechanism,Bahdanau 等于 2015 年 提出)聚焦于 GRU 的相关状态。Small 模型使用了具有 128 个单元的较小内存,并使用单向 GRU 对指令编码,没有使用注意机制。


3.2 基线结果

为了获得 BabyAI 所有层级的基线结果,在实验中使用 IL 训练 Large 模型,并在每个层级使用一百万个由启发式专家生成的演示过程(demonstration episode)。模型训练进行了大约一个星期,表二给出了在具有 512 个过程的验证集上的最终成功率。从表二可见,对于所有只有单个房间的层级,求解的成功率是 100%。通常,层级中的演示过程越长,越难以求解。


表二 BabyAI 所有层级上 IL 学习的基线结果。每个模型的训练都使用了相应层级中的 100 万次演示。作为对比,表中还列出了每个层级中演示的平均长度。



即便是对于 GoToRedBall 这样的简单层级,使用一百万个演示的效率也非常低,几乎不可能达到支持人类训练的长期目标。BabyAI 平台的目的是支持神经网络智能体研究使用更少量的数据学习。为推进这类研究,必须确定 IL 和 RL 方法在求解 BabyAI 层级上的基线数据效率。如果智能体在某个层级上能达到至少 99%的成功率,那么就可以说该智能体可以求解(solve)该层级。实验中,定义数据效率(data efficiency)为训练能求解该层级的智能体所需的最小演示数量,或者是最小 RL 过程数量。为评估 IL 的数据效率,实验中尝试使用不同数量的演示训练模型,从一百万个开始,每次尝试将降低



倍数量。每个模型训练更新



数量的参数,其中



是在 L 层级上使用一百万次演示并获取 99%目标性能所需更新的参数数量,确保最小数量演示存在于



区间中。部分层级的实验结果给出于表三的“IL from Bot”列。表三的“RL”给出了使用 RL 求解每个层级所需的过程数量。从表三可见,RL 的数据效率要显著地低于 IL,在本实验中介于 4 到 8 倍之间。


表三 求解每个层级所需的演示(和过程)数量。所有数值均以一千为基础单位。对于 RL 实验,表中给出了多轮运行中的最小和最大数据效率。对于基线 IL 结果,表中给出了在



区间中的结果。



为评估 IL 的数据效率多大程度上取决于演示的来源,实验中使用了由 RL 训练的智能体生成的演示。结果给出于表五的“IL from RL”列。有意思的是,智能体生成的演示非常易于学习者模拟。例如,在 GoToLocal 层,模拟机器人需要 17.7 个演示,而模拟 RL 专家仅需 7.07 万个演示。这可以解释为,RL 专家和学习者具有相同神经网络结构。

3.3 课程学习

为展示如何使用 BabyAI 平台实现课程学习研究,在实验中执行了一系列基本的预训练实验。具体而言,实验中选择了基础层级和目标层级的五种组合,以确定基础层级上的预训练是否有助于智能体在使用更少演示的情况下求解目标层级。实验结果如表四所示。在使用 GoToLocal 和 GoToObjMaze 为基础层级并使用 GoTo 为目标层级时,预训练的作用最大,将求解 GoTo 层级所需的演示数量从 35.4 万降至 12.5 万。在另外一些情况下,例如只使用 GoToObjMaze 为基础层级时,预训练并未体现出多少作用。


表四 预训练实验的数据效率。表中列出了实验所尝试组合的多种基线层级和目标层级,所需的演示数量,以及从头开始训练所需的基线演示数量。结果均是



范围的情况。注意,基础层级的选择对于预训练是否有用是十分关键的。


3.4 交互学习

根据智能体已经学习到的情况,通过交互方式为智能体给出更多有信息量的例子,这样能在多大程度上提高智能体的据效率?对此问题,实验中做了一次实例分析,实例使用迭代算法实现智能体训练集的自适应增长。具体而言,就是在一开始使用 5000 个基础演示,并每轮迭代增加数据的 规模 1.2 倍,并提供给机器人一些智能体产生失败的演示。在每次增大数据集规模后,从头开始训练一个全新的智能体。然后报告使得智能体性能超过 99%阈值的训练集规模。对于 GoToRedBallGrey、GoToRedBall 和 GoToLocal 层级,重复上述实验四次,并报告最大和最小数据效率。结果给出在表五的“iterative imitation learning”列。结果表明,经过一些轮运行后,原始 IL 取得了显著的改进。例如,GoToLocal 层级的演示数据流从 19.2 万降低到 11.1 万。但是需要注意的是,迭代 IL 给出结果的方差相对较高。


表五 来自使用 RL 预训练专家和交互 IL 的数据效率。数据效率定义为求解每个层级所需的演示数量,所有数值以一千为基础单位。表中给出了迭代 IL 在多轮运行后观察到的最小和最大数据效率。对于基线 IL 则给出了在



范围内数值。


结论和进一步工作

BabyAI 研究平台用于开展人类参与情况下的语言学习研究。该平台包括了 19 个难度依次递增的层级,每个层级将任务分解为一组基本的技能。对各个层级的求解,需要智能体理解作为英语一个子集并使用形式化定义语法表示组合属性的 Baby 语言。尽管 Baby 语言是最小化的,并且各个层级看上去非常简单,但是从实验结果看,对于当前研究的方法而言,求解各个层级依然是非常具有挑战性的。Baby 平台是开源的,并可扩展,研究中可以轻松地集成新的层级和语言。


论文给出的实验结果表明,对于一些具有组合结构的学习任务,当前 IL 和 RL 方法扩展和泛化能力不好,完成学习任务需要数十万演示,这对于人类而言过于繁琐。采用课程学习和交互学习等方法,可在一定程度上提高数据效率。


如何找出改进语言学习中数据效率的有效策略,这是一个很有前景的未来研究方向。为解决该挑战,可能需要研究人员提出一些新的模型和新的教学方法。目前已经看到一些很好的研究,例如神经模块网络(Neural Module Networks,Andreas 等于 2016 年提出)和神经编程解释器(Neural Programming Interpreters,Reed 和 de Freitas 等于 2015 年提出)等。希望 BabyAI 平台可以成为语言学习中数据效率的基准测试平台。


查看英文原文: BabyAI: First Steps Towards Grounded Language Learning With a Human In the Loop


2018-11-12 12:001406
用户头像

发布了 391 篇内容, 共 135.3 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

架构训练营模块二作业

老实人Honey

「架构师训练营第 1 期」

[架构实战营][模块二作业]

KK_TTN

架构实战营

【Java特性专题】JDK(8-11)特性分布变化简介

洛神灬殇

Java Java新特性 7月日更 Java11

编程的本质是什么?

白色蜗牛

Java 编程 程序员 软件 计算机

央视曝光APP弹窗广告三大陷阱:如何监管应用软件弹窗广告

石头IT视角

进阶指南!深入理解Java注解

Jackpop

Java

性能测试误差统计实践

FunTester

软件测试 测试 性能测试 测试开发

性能测试误差分析文字版-上

FunTester

性能测试 自动化测试 接口测试 测试框架 测试开发

智能运维系列之五:总结

micklongen

AIOPS 智能运维

微信朋友圈高性能架构分析

面向对象的猫

Presto原理&调优&面试&实战全面升级版

王知无

MVP on Board 没用小技巧 👌

newbe36524

.net MVP ASP.NET Core

大数据训练营-第一次作业

西伯利亚鼯鼠

2.4如何提高架构设计的质量

Lemon

架构训练营 1 期 - 模块二作业

蔸蔸

基于P4的SCION -- 构建太比特的未来互联网

俞凡

网络

性能测试误差分析文字版-下

FunTester

软件测试 性能测试 接口测试 测试框架 测试开发

2.3如何设计高可用架构

Lemon

存储高可用

区块链的宿命,数字经济的局

CECBC

[架构实战营一期] 模块二作业

trymorewang

架构实战营

微信朋友圈架构设计

summer

极客时间 极客时间架构师一期

知乎热文 | 如何高效学习Spring Boot?

Jackpop

Java Spring Boot

架构实战营模块二作业

老猎人

架构实战营

【架构设计模块二】:微信朋友圈的高性能复杂度

Ryoma

架构实战营

面试算法之螺旋数组查找问题

泽睿

面试 二分查找

《面试补习》--来聊聊削峰填谷!

九灵

Java 分布式 消息队列 异步削峰

清晰了!一文彻底理解Java事件处理

Jackpop

Java

Selenium4 Alpha-7升级体验

FunTester

maven 自动化测试 Gradle 测试开发 selenium

【数据结构】Java 同步工具 AQS

Alex🐒

Java 源码 数据结构

健康讲座:如何提升人体免疫能力

石云升

学习 健康 7月日更

Bengio团队提出BabyAI:首个有人类参与的AI语言学习平台_语言 & 开发_蒙特利尔大学Yoshua Bengio研究团队_InfoQ精选文章