当前位置: 首页 > 资讯

【深度】机器人协作深度学习 想实用化可能道阻且长

机器人网       2016-10-11

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

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


(图: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成功率无法保证

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

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

  下一个里程碑将是什么

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

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

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

  几个数据集

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

  GoogleManipulation数据集

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

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

  MITPushing数据集

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

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


关键词:机器人