Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方

说起《终结者》系列电影,我想最令人印象深刻的就是阿诺.施瓦辛格所饰演的T-800机器人,他那像人的手一样灵活的机械骨骼手臂可以说是相当的深入人心。继会玩DOTA的OpenAI Five后,人工智能研究组织OpenAI近日再次给了我们一个惊喜:他们的机器人已经学会使用一只机械手臂复原经典的三阶魔方。

Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
机械手臂是机械人技术领域中得到最广泛实际应用的自动化机械装置,在工业制造、医学治疗、娱乐服务、军事、半导*造以及太空探索等领域都能见到它的身影。为了让机械手臂能够完成各种各样的任务,聪明的科学家和工程师设计并制造了各种形态的机械手臂。但是,不同形态的机械手臂只能完成特定的任务。而我们人类的手臂经过几万年的进化,已经能完成各种复杂的任务,可以说灵活度远远超过机械手臂。许多科学家都致力于研究如何将机械手臂打造成与人类手臂相同的结构,使机器人能够像人类那样灵活地完成多种复杂任务,就像《终结者》系列电影中的机器人那样。然而,人手的构造可以说是非常的复杂,共有27块骨头和28个关节。光是模拟人手的构造就已经很不简单,再让机器人学会如何使用它更是难上加难:完成一项简单的任务也需要知道不同情况下每一个部位该向什么方向使用多少力度。这比机器人的行走跳跃还要困难不少。就玩魔方这个任务而言,机械手跟魔方之间的摩擦力、弹性和其他动力学因素都很难测量,更别说精细建模了。同时,恢复魔方也是一件非常困难的任务,可以说如果机器手臂能够熟练地玩魔方,那么其他任务也一定不在话下。
然而,在OpenAI公开这项成果时,他们称之为:“机器人的前所未有之境,就算人类也难以做到。” 事实是,在没人告诉它该怎么调配手指,同时还需要克服人类强行施加外界干扰的情况下,AI机械手通过随时调整不断学习,最后最短时间内完成魔方翻转。这一成果着实让人震惊。对于普通人而言,单手恢复魔方也是十分困难的,而机器人却用相同的手臂结构做到了。“很多其他机器人可以更加快速地解决魔方。但是我们和这些机器人之间的重要区别在于,其他机器人是专门为了解决魔方而设计的,”OpenAI的研究科学家兼机器人负责人彼得·韦林德(Peter Welinder)解释说,“那些机器人无法用于其他任务的执行,但OpenAI的机器人团队有着别样的野心。我们正试图打造一个通用型的机器人。与人类和人类双手的灵巧性相似,可以完成各种不同任务。”
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
OpenAI的机械手装载在一个巨大的支架中。在这个支架里,包含一个运动捕捉系统、一个RGB相机。机械手的每个指尖上都有一个LED灯,系统就是通过这一组灯来捕捉机械手的动作。操纵魔方的机器人手来自影子机器人公司,基于旗下 Dextrous E系列机械手打造。这原本是一家想做双足机器人的公司,因为发现自己的水平远不及本田已经造出的机器人,于是弃脚从手,转而去开发机械手,并造出了世界上第一台拟真机械手。具体结构上,Dextrous有20个可驱动的关节:中指和无名指各有3个驱动关节和1个非驱动关节,小指和拇指有5个驱动关节,以及一个有2个驱动关节的腕部。为了玩转魔方,OpenAI和影子机器人公司,还合作提高了机器手组件的坚固性和可靠性。增加了手的握力,并减小了肌腱应力,并且调整了关节之间的交联,最大程度地减小了扭矩的限制。与人类“十指连心”类似,他们除了在机械手上安装了位置和力传感器,还在指尖上安装了超灵敏的触摸传感器,以达到接近人手的效果。实验中用到的魔方也不是普通的魔方。不少人或许也会觉得眼熟,它正是小米的计客超级魔方,内部有可感应方向的蓝牙与运动传感器。计客超级魔方具有90度的面角分辨率,但OpenAI团队对其进行了修改,将精度提高到了大约5度。
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
从计算机程序到现实世界
这只机械手之所以能学会复原魔方,其奥秘在于OpenAI使用了曾经打败Dota 2世界冠军团队的AI系统OpenAI Five中的方法——深度强化学习。也就是说让机械手通过不断试错的方式找到能够复原魔方的策略,也就是建立一个状态到动作的映射函数。状态就是机械手上的传感器以及摄像头获取的信息,动作就是每一个驱动关节该如何发力。既然是用强化学习,必然会涉及到奖励机制,OpenAI团队在这个实验中定义了三种奖励机制:
1.系统当前状态与目标状态之间的差异越小则奖励越大;
2.达成目标时给予奖励;
3.每当手中魔方掉落时就受到惩罚。
然而,同样是应用强化学习,机械手和电子游戏却存在着巨大的不同。传统意义上,机器人只能以非常简单的方式操纵对象。尽管强化学习算法在完成计算机软件中的复杂任务方面取得了巨大成功,但使用它们来训练物理机器却是另一回事了。强化学习必须通过数百万次试验反复验证纠错以便完善算法本身,在许多情况下,现实世界中执行此类试验操作可能会花费很长时间,并且对机器人来说,会出现不同程度的机械磨损。如果毫无节制地使用机器人收集数据,甚至可能会发生危险。为了避免这种情况的发生,科学家们提出了一种模拟状态,他们在模拟软件中建立机器人的模型,并对其进行模拟训练,使机器人手在模拟软件中完成任务。凭借数字空间的安全性,该算法可实现安全操作,后续可移植到物理机器人中。虽然我们看到拧魔方是在实际的机械手上发生的,但实际上它的学习过程主要发生在模拟软件中,然后将AI从模拟中学习到的东西转移到了现实世界中。但是这个过程有其自身的挑战,建立虚拟模型来完全复制现实世界中所有相同的物理定律,材料特性和操纵行为几乎是不可能且不现实的,且不同的魔方的大小、重量或是表面摩擦力都是各不相同的,更不用说各种有可能发生的意外情况了。
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
软件模拟器中的场景和现实世界的场景
为了应对这种问题,OpenAI的研究人员尝试使用了域随机化方法,即在模拟中需要创建足够多样化的环境,从而尽可能多地捕捉到真实世界的物理状态。摩擦力、弹性和力度这些因素对于复杂的魔方或机械手而言是难以测量和建模的,并且发现仅仅依靠域随机化是不够的。基于此,OpenAI的研究人员提出利用自动域随机化的方法在模拟中不断地生成越来越困难的环境。
自动域随机化
自动域随机化让机械手从单一的、非随机环境开始学习。在这里机械手尝试学习解决魔方问题。当它在这个环境中能够较好地完成任务并达到了性能门槛后,随机化环境的数量自动增加,使得任务变得更难解决。机械手继续学习,直到性能达到最好,然后再增加随机化的环境,如此反复。
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
自动域随机化图示。
自动域随机化的本质是控制环境的分布。研究者从分布中采样不同的环境数据,用于生成训练集,然后将训练集作为输入训练策略。由于训练过程是依赖于计算机仿真软件完成的,所以能够在受控的环境中平均进行1万多次试验。随着机械手成功实现更多翻转,成功的时间会不断缩短,机械手学会了适应。从结果上来看,机械手成功翻转魔方的时间,会越来越短。即便添加新干扰、环境有变化,机械手也会调整策略,重新学习后迅速达到最佳基准。通过自动域随机化,机器人在模拟环境中学会了解决真实机器人手中的魔方问题。
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
上图代表了自动域优化方法在改变魔方大小时的训练时间。开始时,我们从5.7cm的标准魔方大小开始训练,在机器手掌握之后逐渐改变大小。在第9天的时候,机械手已经学会了恢复5.5~6.1cm的任何魔方。
在现实世界中测试时,研究者在机械手玩魔方的过程中还对其施加了各式各样的干扰,如戴橡胶手套、绑住食指和中指、蒙上一块布、假长颈鹿干扰和用笔戳等。让人们惊讶的是,OpenAI 的机械手在各种干扰下依然不为所动,“淡定地“”玩自己的魔方。
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方

Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
Solving Rubik's Cube with a Robot Hand:OpenAI训练机械手臂解魔方
结语
OpenAI挑战魔方,倒不是突发奇想。从去年开始,他们就已经在推进前序工作,当时开发过一个灵巧的机械手系统,叫做Dactyl。不过那时OpenAI用它“盘”木块,尺寸比现在的魔方小一些,而且也没有转动部件。只要告诉机械手目标,不必告诉它具体操作步骤,它就能给你把木块转到指定的方向上,而且这套系统也是是在模拟器里训练出来的强化学习算法。而现在OpenAI更进一步。在不牺牲准确性和鲁棒性的情况下,成功地将模拟实验转移到了现实世界的机械手上。对OpenAI而言,这一成果让公司向更广泛的AI和机器人行业长期追索的目标又更进了一步:无需数月乃至多年的训练,无需特定编程,机器人也可以学习并执行各种现实世界中的任务。所以机械手玩转魔方,真是一次力与美的结合、灵与器的共舞。