机器人之间能够共享经验的协作深度学习、机器人的问题强化学习解决

作者:Breeze喆 任杰骥 Yifan

(图:Google的“机器人工厂”)

基于机器学习的机器人控制里,数据量,或者说“经验”,是机器人完成复杂任务的关键。Google 今年早些时候那个著名的端到端抓取学习里,仅仅是同一款机器人,一自由度机械手的平面抓取问题,就收集了多达八十万次抓取动作数据。如果一台机器人单单凭借自己的经验来学习复杂技能,需要花费的时间是不可想象的。所以,让不同机器人之间能够共享经验,就显得尤为重要。

在Google的抓取学习项目里,“共享经验”的主要难点是,每一台机器人所用的摄像头是独立校准的,其拍摄角度、光照条件不可能完全一样。这周,Google DeepMind在经验共享方面再次发布了非常令人激动的结果。在学术界,基于增强学习进行机器人运动规划控制有三类基本思路,Google用多个例子演示了在这三类方法里,如何让多个机器人分享经验、建立同一个技能的一般模型。

这三类增强学习方法是:无模型学习,基于模型的学习,和人工辅助实现的学习。

虽然在这几个例子里机器人仍然学习的是非常简单的推动物体和开门两项技能,但一方面这两个技能对目前的机器人研究而言绝对不简单,另一方面,Google的这套方法有潜力在未来慢慢形成更为丰富的行为经验库。

本文中间部分是作者们对Google原文的提炼和分析。

1 无模型学习

分享原始数据

“无模型”是指算法并没有关于环境信息的经验模型。对算法而言,机器人本体和整个世界就是一个黑箱,你所能做的就是输入一个动作,获得一个回报,这就是一个经验。在“无模型”学习中,机器人根据经验不断优化自身的策略(Policy)以在未来获得更大回报。此类方法有两个关键点:一,用来描述Policy的函数必须足够的表达能力,这样才能有可能在最优策略较为复杂时,找到比较好的策略。比如,二次型就比线性策略表达能力强。而深度神经网络就是这样一种表达能力极其强大的函数,它的使用让无模型算法展现出令人震惊的有效性,并成为了Atari游戏系统和AlphaGO围棋系统成功的关键。第二个关键点,就是要有足够大的数据量,让你能够通过训练找到比较不错的Policy参数。

在这种模式下,多机器人分享经验的方式非常简单——直接把所有机器人获得的原始数据汇总,来训练一个Policy就是了。一台机器人跑一天采的数据量,二十台机器人只需要一个多小时。

在Google的实验中,机械臂的目标是运动到指定的位置,然后完成开门的动作。在一次迭代中,每个机器人都获得了同一个神经网络策略的副本,机器人通过查询这个网络,来快速计算各种动作的潜在价值,以选择合适的动作来执行。机器人的动作被人为加了噪声,所以产生的动作结果好坏会有波动,以增加机器人探索新动作的能力。所有机器人的经验(即“动作-结果”)都被上传给中央服务器,用于迭代优化神经网络策略。更多的数据让神经网络能够更加清楚“动作”和“结果”间的联系,从而对不同状态下各种动作的结果有更准确的评价。一次迭代结束后,每个机器人就再从服务器得到更新后的神经网络副本,并依据这个新神经网络来开始新的动作。

“开门”动作涉及到机器人末端钩子和门把手间复杂的接触动力学模型。在视频里,机器人通过几个小时的学习,在完全没有物理模型支持的情况下自行探索出开门的合适动作

无模型学习对数据的需求量是最大的。所以只有不差钱如Google,买工业机器人跟买鸡蛋似的一买买两打(其实是买了整个公司),才能训练出来这么复杂的动作。

2 基于模型

的学习

无模型学习的最大问题是,即使是相同的机器人相同的环境,只要换一个任务,之前的Policy就没用了,你得从零开始重新训练。

但是,人类和动物并不是这样学习的。我们可以想象自己的一个动作会给实际环境带来什么样的变化,这就是模型。在Google的第二个试验中,机器人先花一段时间在面前的盒子里到处推、碰一系列物体,并记录每个动作带来的图像变化,以此建立模型。机器人们继续共享它们的经验,最终训练出一个神经网络来预测它们的动作将给环境带来怎样的改变。

一旦训练得到了一个不错的模型,机器人就可以用它反推得到,实现一个状态,需要执行什么样的动作。

Google用的可以说是Hard模式——机器人获得的反馈并不是“这个物体在什么地方”,它甚至连“物体”的概念都没有,获得的数据仅仅是一张张照片。它们学到的经验是,一个特定的动作会对一个特定的像素点产生什么样的影响。为了让这样抽象层次非常低的物理规律显现出来,机器人必须获得足够多的经验。正如之前所说,Google最初的论文里已经做了八十万次抓取

3 人工辅助

实现的技能学习

这是Google此次发布的结果中最大的亮点。

训练神经网络本质而言是在进行一个规模巨大的非凸优化问题。对于这种问题而言,初始解的选取对性能有非常大的影响。在第一个实验里,机器人是随机选取初始解,自然需要超长的时间来逐步优化到一个还不错的策略。但如果人能通过示教的方式给机器人找个不错的初始解,那这个训练的进程可以被大大加快。

同样是开门,同样是训练图像到动作的神经网络策略,在下面这个实验中,Google先采用了工业上常用的人工示教来完成一遍开门动作:

机器人直接学会了在一个特定情形下的开门动作。之后基于这个初始解,再让机器人接着用实验一中的方法,逐渐训练在更一般情形下的策略。

人工的作用远不止提供初始解。更重要的是,人工可以提供循序渐进的训练集。在Google的实验中,机器人先学习的是和示教时几乎完全一样的情形。等到成功率较高后,再由人逐渐加大难度,将门摆到稍微偏一点的位置。这样做的好处是可以让机器人学习步骤里的“探索”非常高效,而不至于像实验一那样花大量时间在确认非常差的策略上。

同样,Google使用了多台机器人共享经验训练同一个策略。最后这个策略已经效果非常好了,可以适应一定范围内各种门的位置:

Google的研究者们正在向我们描绘一个非常有吸引力的未来:集群机器人大规模采集训练样本,最终获得高度一般性的技能。

然而,要想实现这一目标并不容易。深度学习在机器人上的应用,可能会被两个比较严重的问题限制在实验室里。

A 技能迁移

很困难

深度神经网络的一大特点就是,没人知道它训练出来的那些权重是什么意思。而这就意味着,花费几天几夜采集的数据、训练出的结果,往往只能用在同一个机器人,同一个任务上

(有很多研究试图去理解神经网络中间层的权重意味着什么。图为一个图片分类器的某个中间层权重的图片化结果)

这是机器人和深度学习其他的成功应用场景最大的区别——Google用巨大量的计算资源训练出图片分类器,用户下载了就可以直接拿来识别自己的图片。Google用上千万盘棋局训练出AlphaGo,用户下载了就可以直接拿来和别人对战。而当Google花费十几台机器人几十万次实验训练出一个机器人抓物体的控制策略后,你下载了这个策略却什么也做不了——只要你用的机器人不一样,哪怕你买了一模一样的机器人,只是机械手略有不同,之前的策略都很难继续使用。你要做的,是用你的机器人,在你的应用场景下重新采集几十万次数据,重新训练。

而当你好不容易给自己的机器人训练出一个动作之后,一旦需要换个任务,你又需要花费同样量级的时间重新训练。当然,用实验二中那种基于模型的学习,或者实验三里的逐渐扩展训练集的方法,能一定程度上提高一个神经网络控制策略的适应能力。但如果任务跨度比较大,肯定是不行的

那能不能逐渐训练出比较通用的技能策略?我觉得很难,如果不是完全不可能的话。问题在于复杂度有点过大了。你可以想想,描述一个“开门”场景需要几个状态变量,描述一个“掀锅盖”场景需要几个状态变量,而统一地描述这两个看似接近的问题需要多少个状态变量。机器人工作场景种类多如牛毛,想让神经网络在这个维度上获得通用性,需要样本的数目增长很难想象。也许未来会证明我对深度学习潜力估计不足,毕竟现在AI连第一人称射击游戏都可以玩得比人好了,这也是我曾经觉得太难的问题。

(Facebook的研究成果https://www.engadget.com/2016/09/22/facebook-and-intel-reign-supreme-in-doom-ai-deathmatch/)

B 成功率

无法保证

第二个问题不那么严重,只是限制了一部分应用场景。在不对模型做出任何假设的情况下,深度学习无法对性能、成功率做出任何保证,所以,像做手术、核电站锅炉维护之类的场合应该不会有人敢用深度学习来做机器人控制。即使不是生死攸关的场合,比如工业机器人,如果你去过实际用机器人的工厂就会知道,很多场景下,用传统的控制方法真的是不会出错的,而如果真出了一个错误,代价往往是停机维护,少则一小时,多则若干天。

但好在还是有很多任务是不需要严格的成功率保证的,比如bin picking。

下一个里程碑

将是什么

目前Google所声称的“经验分享”,在我看来还只能称为并行采数据。因为个体间实在区别不大。以工业机器人的精度和速度,在抓普通物体、开门这种问题上的误差基本可以忽略,二十台机器人采的数据和一台机器人花二十倍时间采的数据,区别只来自于摄像头。这仍然是非常非常出色的研究结果,只是和大众的想象还有距离。

我认为一个有意思的“经验分享”问题是这样: “机器人A,B尺寸略有不同,机器人A学会了开门策略,如何把这个策略转移到机器人B上,或者用于显著缩短机器人B在学习同一任务上所花时间”,如果深度学习领域能在这样的问题上有突破,那么我认为深度学习真的有潜力大规模应用在机器人控制上。

但所有这些疑虑并不能掩盖Google研究的价值。不论如何,Google DeepMind在此领域的探索是称得上开创性的。比如研究出适合机器人控制问题的网络结构;适应不同摄像头图像差异的训练方法;设计出能够稳定长时间连续采集数据、自动重置的软硬件系统等等。尤其是最后一点往往会被人忽略。事实上,让机器人连续跑一个动作十次,和跑一万次的难度差别是非常非常大的,系统设计上要考虑各种各样奇奇怪怪的情况,而Google起码在采机器人实验数据上遥遥领先同行们。

几个

数据集

对任何机器学习方法而言,数据都是最基本而最重要的一环。这里我们收集了几个机器人控制方面比较好的公开数据集:

Google Manipulation 数据集

https://plus.google.com/+VincentVanhoucke/posts/8T7DSJhGY3u

包括65万次抓取,和5万9千次pushing

MIT Pushing 数据集

https://mcube.mit.edu/push-dataset

Alberto Rodriguez 教授组的工作。研究了几种不同形状物体的平面pushing问题。

资料来源:

Google Blog的原文:https://research.googleblog.com/2016/10/how-robots-can-acquire-new-skills-from.html?m=1

包括了详细描述其方法的几篇论文。

文中提到的第一人称射击游戏AI,感兴趣的朋友可以关注下其作者的知乎主页:

https://www.zhihu.com/people/tian-yuan-dong

https://www.zhihu.com/people/ppwwyyxx

本文由微信公众号机器人学家编辑。

增强学习能解决什么样的机器人问题?CMU深度增强学习第一讲

机器人学家

我们获得授权翻译CMU课程 10703 Deep Reinforcement Learning & Control,这是第一讲概论。

感谢Katerina Fragkiadaki教授的支持。

翻译贡献者:

宋健,北航机器人所SLAM (1-9)

张灵康, SFU, inspiREDRobotics (10-18)

李飞腾,HFUT,Mechatronics(19-27)

Shin,NUS,CS (28-35)

杨杰峰,PKU,多足步行机器人 (36-43)

「机器人学家」授权翻译

课程

目标

增强学习研究的问题模型包括一个环境,和与这个环境交互的一个智能体(agent)。增强学习的目标是为这个智能体设计一个行为策略(policy),使其在与环境交互的过程中能够获得最大的收益(Reward)。这些在第二讲会有明确定义。很多机器人控制、规划问题都可以用这个框架建模。

这里所说的行为(Behavior),是agent在一个特定目标下的一个动作序列。不同于在一个静态不变的环境里通过预先编程确定的行为(比如工业机器人大量使用的离线示教),本课程学习如何在一个动态变化的环境里让agent学习行为。

静态环境里,执行固定行为往往就足够了

行为重要性

大脑之所以进化,不是为了思考和感受,而是为了控制运动

-- Daniel Wolpert, TED talk

一个极端的例子是,海鞘会在不再需要移动的时候将自己的脑部消化掉。尽管什么是智能很难定义,但是能够自适应环境改变的行为是人类的一大特征。

行为学习:对于一个特定目标,学习一个从观测(observation)到动作(action)的映射。

监督

学习

智能体(agent)在通过不断尝试进行学习时,需要对结果好坏有个评估,这就是“监督(supervision)”。一个在动态环境下学习特定行为的智能体,根据问题的不同一般会获得这几种监督:

1.收益(reward)。目标达成时获得的收益反馈,是一个标量数字。比如,比赛胜利,汽车没有事故,智能体正常运行等。

2. 示教(demonstration)。示范需要的行为是一条轨迹。比如,通过youtube烹饪视频教机械臂学习烹饪。

3. 正确行为属性。比如对于自动驾驶,好的行为属性包括保持在正确的车道内,与前车保持适当的车距等。

这三种监督提供的信息量从小到大,对应问题的难度也从困难到容易。

行为学习举例:跳高

跨越式

背越式

从收益中学习:最早的跳高运动员们,没有老师教,只能根据跳的高度来调整动作。跳得越高收益越大。结果就是这些人花了许多年才从跨越式发展到背跃式。

从示教中学习:运动员示范一次高级姿势的跳高,其他人学习这种标准姿势可以快速掌握跳得更高的技巧。

从好的行为属性中学习:在教练指导下的跳高学习。教练可以直接告诉初学者正确的行为属性,比如跳高时腿的姿势,跳高应采取的节奏等。无疑这种方式获得的信息量最大,也是学得最快的。

行为学习的特点

行为学习与其他机器学习范式(比如从图片中检测物体)有什么样的不同?以下分为三点来谈:

1) 智能体(agent)的行为影响其在未来接收到的数据

在自然界,智能体所接收到的数据都是序列化的(观测-> 行动->观测->行动 …...),而不是独立同分布的

标准的监督学习的方法会导致累积误差(compounding errors),出自An invitation to imiation, Drew Bagnell

举例:

学习驾驶一辆车(监督学习)

2)不管行为的目标是否达到,对其效果的衡量都将在很久以后才能获得

只根据即时的收益(reward)还是很难知道哪些行动(action)对于最终目标的实现是重要的还是不重要的。

获知最终结果所需时间很短的话,问题就简单了,反馈所需时间越短问题越简单。

3)在现实世界当中,行动都是需要时间来执行的,所以说这就限制了能够收集到的(能用于训练的)样本的数量

电脑可以变得越来越快,而现实的物理世界却不能。

几个例子:

超大规模(Supersizing)自我监督学习

这是2016年ICRA最佳学生论文,论文的关键点在于它通过很长的时间(50K次尝试,700 robot hours)来收集足够多的数据用于机器人的行为学习。论文链接:

https://arxiv.org/abs/1509.06825

谷歌机器人农场

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180823B05IW700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券