机械手任务之三 - 转鸡蛋,示意图

来源:AI 科技评论

摘要:今年 2 月,OpenAI 发起了一组机械手挑战,他们在基于 MuJoCo 物理模拟器的 Gym 环境中新设计了含有机械臂末端控制、机械手拿取物体的两组八个有难度的、早期强化学习算法已经不足以直接解决的问题。

这些具有一定难度的任务 OpenAI 自己也在研究,他们认为这是深度强化学习发展到新时代之后可以作为新标杆的算法测试任务,而且也欢迎其它机构与学校的研究人员一同研究这些任务,把深度强化学习的表现推上新的台阶。

(美国时间 7 月 30 日),OpenAI 已经就机械手任务之二的「转方块」出了自己答案,展示了一个异常灵活的转方块的机械手。而且更精彩的是,这个完全在模拟器中强化学习学到的方案还可以不需任何微调就直接迁移到真实的机械手上

机械手任务之二 - 转方块,真实机械手上运行

OpenAI 也制作了一个酷炫的介绍视频,请看下方。

OpenAI 把这套系统称作 Dactyl。OpenAI 过去一年中研究强化学习系统的偏好思路再次得到了体现:在完全模拟的环境中训练,然后把训练结果迁移到现实世界的机械结构中。

得益于可以大规模高速并行训练的模拟环境以及 OpenAI 在过去的研究中积累的系统设计与变量选择经验,这样的做法已经可以得到很好的效果。强化学习算法方面,OpenAI 再次选择了之前在 DOTA2 5v5 AI 中使用的 PPO(近端策略优化),这当然也再次展示了 PPO 作为通用强化学习算法的优越性。当然,系统最大的亮点还是可以完全在虚拟环境中训练,不需要对真实世界有准确的物理模型也可以直接迁移到真实机械手、真实物体的控制上。

两指夹住旋转、滑动、手指同步旋转,三种 Dactyl 完全自动学到的与人类类似的运动模式

任务介绍

任务中使用的机械手模型是参照 Shadow Dexterous Hand 设计的。这是一个完全仿照人手设计的具有 20 个驱动自由度、4 个半驱动自由度、共 24 个关节的机械手,它的大小也和人手大小相同。任务的要求是在机械手的掌心放置一个方块或者六棱柱,然后要求机械手把它翻转到一个指定的角度,比如把某个侧面翻到上方。系统只能观察到五指指尖的空间坐标以及三个固定角度的彩色摄像机采集到的画面。

虽然这种机械手面世已经有几十年了,但是如何让它像人类一样高效地控制物体一直都是机器人控制领域的老大难问题。与空间定位移动之类的问题不同,非常多自由度的机械手控制用传统控制方法不仅运行缓慢,而且必须对自由度做出一些限制,这也就随之限制了它们控制真实世界物体的能力。

想通过深度强化学习的方法让机械手翻转一个物体,需要考虑这几个问题:

  • 能在真实世界中工作。强化学习虽然已经在很多模拟器环境以及游戏中展现出了优秀的表现,但是强化学习解决真实世界任务的研究仍然非常有限。OpenAI 的最终目标就是要让 Dactyl 在真实的机器人上完成任务。

  • 高自由度控制。一般的机械臂(比如末端为夹子的工业机械臂)只有 7 个自由度,而机械手有多达 24 个自由度,仅仅是不让 5 个指头打架都有相当的难度。

  • 有噪声的部分信息观察。Dactyl 在真实世界中工作的时候不可避免地会遇到传感器读数的噪声和延迟问题。当某一个手指的传感器受到其它手指或者物体的影响而无法返回读数的时候,Dactyl 只能在部分信息的状况下工作。而且,真实物理系统许多细节(比如摩擦和滑动)是无法直接观察到的,系统必须自己做出推断。

  • 能操作多个物体。Dactyl 的设计目标是要足够灵活,能够翻转、定向多种不同种类的物体。这就意味着不能选用只对某一些特定的几何形状有效的策略。

OpenAI 的解决方法

总的来说,OpenAI 完全在模拟器环境中、不借助任何人类输入进行,让 Dactyl 通过强化学习训练物体定向任务。在训练结束后,学到的策略不需要任何微调环节就可以直接在真实机器人上工作。

不过其实,学习机器人控制方法面临着两难的困境。模拟环境中的机器人固然可以轻松地获得大量数据、训练出足够复杂的策略,但是大多数控制问题本身的建模都不够精确,导致学习到的策略难以迁移到真实世界的机器人上。即便只是对「两个物体接触」这样的简单现象建模,都还是一个开放性的科研问题,没有什么广为接受的、足够好的模型。直接在真实的机器人上进行训练自然可以根据真实世界的物理规律学习到好的策略,不过真实世界中的训练就只能按照真实世界的速度运行,目前的强化学习算法受限于样本效率问题,需要相当于好几年的尝试经验才能够解决物体转向这样的已经相对简单的问题。(财大气粗的谷歌还真的就这样做了,具体请见今天推文的第二篇。可以说,谷歌利用自己的财力优势替整个领域尝试了很多仅仅理论上可行的研究方法)

OpenAI 的训练技巧具体来说是「任务随机化」(domain randomization),它并不追求建模的最佳拟真化,而是在充满了丰富的变化的环境中学习到各种知识和经验。这样的做法兼备了模拟器和真实环境学习两种做法的优点:在模拟器环境中学习,可以让模拟器运行速度高于真实世界速度,快速积累经验;同时用「多变」替代了「逼真」之后,它也可以在模拟器只能近似建模的任务中得到更好的表现。

包括 OpenAI 在内的许多研究者都已经通过实验展示出了任务随机化对于越来越复杂的任务的明显的提升作用,近期的最有力的例子就是 OpenAI 训练出的 DOTA2 5v5 AI。在这个机械手控制的任务中,OpenAI 也是在探索大规模运行的任务随机化能否带来超出现有机器人控制方法的表现。

MuJoCo 物理模拟器相比真实的物理系统有这些不足:

  • 在真实机器人和方块上测量摩擦、阻尼、翻转阻力等物理属性很麻烦、很困难。而且随着机械手磨损、这些值也会逐渐发生变化;模拟器中只有带有固定参数的近似模型;

  • MuJoCo 是一个刚体运动的模拟器,这意味着它无法模拟机械手指尖的橡胶发生的接触形变,也无法模拟手指上肌腱的拉伸;

  • 在这个任务中机械手只能够靠多次接触方块来改变方块的方向,但接触力又众所周知地难以准确在模拟器中复现。

如果仔细地调节模拟器中的参数,模拟的机械手的行为确实可以和真实机械手的行为做到比较好的匹配,但是上面的这些作用以目前的模拟器就很难准确建模了,调节参数也无济于事。

所以 OpenAI 转而使用的方法是使用大规模分布式的模拟训练环境,而且这些环境中的物理属性和视觉特征都是随机选择的。随机地选择这些值是一种很自然的表征各种真实物理系统的不确定性的做法,当然这样也可以防止系统过拟合到一组特定的环境设置中。根据 OpenAI 研究人员们的想法,如果一种策略在所有这些不同的模拟环境中都可以完成任务,那么它也就很有可能可以直接在真实环境中完成任务。

在开发和测试阶段,OpenAI 通过内置的运动控制传感器对学习到的机械手控制策略进行验证,这也是为了能够隔绝 Dactyl 自身的控制网络与视觉网络,可以对系统表现做出「客观」的评价。

系统设计示意图 - 模拟环境中训练
A. 分布式工作站从大量随机环境中收集经验
B. 通过强化学习训练控制策略。这个策略根据物体的位姿和五个手指指尖的位置选择接下来的行动
C. 训练一个 CNN 根据三路模拟环境中的摄像头画面估计物体的位姿

系统设计示意图 - 迁移到真实世界
D. 位姿估计网络和控制策略网络共同工作,把任务从虚拟环境迁移到真实环境

学习控制

通过构建可以支持迁移的模拟环境,OpenAI 把真实世界的机器人控制问题简化为了模拟环境中完成任务的问题,现在它就很适合用强化学习解决。当然了,即便是在模拟器中,控制如此多自由度的机械手完成任务仍然是一个有挑战性的目标,何况不同的模拟环境中还有不同的随机物理属性,这意味着物体的运动方式都会与真实世界有所不同。

为了能够在不同的环境之间泛化,策略最好能够在不同物理参数的环境中做出不同的行为。考虑到大多数的动态物理参数都无法从单次观察中得出推断结果,OpenAI 选用了带有一定记忆能力的 LSTM 网络架构,实际上在模拟环境中基于 LSTM 得到的策略做出的旋转动作也要比其它不具有记忆能力的策略多一倍。

Dactyl 使用的大规模分布式 PPO 实现「Rapid」是和 DOTA2 5v5 AI 一样的。在这个任务中,模型架构、环境、超参数有所区别,但算法和训练代码是一致的。Rapid 训练策略使用了 6144 个 CPU 和 8 个 GPU,训练 50 小时就可以采集到相当于真实世界中 100 年长度的经验。

学习观察

OpenAI 的设计目标是让 Dactyl 能够控制任意的物体,不局限于那些经过专门的改动以后更好追踪的物体。所以 Dactyl 也就选用了一组正常的彩色摄像头对物体的位置和姿态进行估计。

OpenAI 训练了一个 CNN 用来估计位姿。这个网络把布置在机械手周围的三个摄像头采集的视频流作为输入,然后输出估计的物体位置和物体姿态。多个摄像头的使用是为了避免判断不清以及信号延迟。训练这个网络时 OpenAI 也使用了任务随机化的做法,环境随之暂时切换为了 Unity 游戏开发平台,它对各种视觉效果的支持丰富程度要比 MuJoCo 高得多。

「控制」与「观察」两个独立的网络互相配合,控制网络可以根据给定的物体位姿重新调整它的位姿,视觉网络根据摄像头采集的画面确认物体当前的实际位姿。Dactyl 就这样通过观察控制了手里的物体。

学习位姿估计的图像的一些示例

实验结果


逐渐产生的行为

在部署系统的时候,OpenAI 的研究人员们注意到 Dactyl 会使用一系列丰富的灵活手掌内操纵技巧来解决在这个任务;人类其实也经常会使用这些技巧。而及这些技巧并不需要人类显式地教会算法,它们全都是算法自己发掘、自己学到的。

两指夹住旋转、滑动、手指同步旋转,三种 Dactyl 完全自动学到的与人类类似的运动模式

Dactyl 学到的六种不同的握持姿势。根据握持分类学,从左上到右下依次为:指尖捏、掌心捏、三指握持、四指握持、强力握持以及 5 指精确握持。

OpenAI 通过观察发现,对于几种高精确度的握持方法,比如两指指尖捏,Dactyl 倾向于使用大拇指和小拇指;人类比较习惯的自然是用大拇指+食指或者大拇指+中指。不过值得指出的是,机械手的小拇指比人类的多出一个自由度,更为灵活,这可以作为 Dactyl 学会了这样行为的一个解释。这也可以理解为,Dactyl 一面可以自己发现人类常用的手部姿态,同时也可以重新适应这些姿态,让它们更符合自己的肢体的限制和能力。

( AI 科技评论注:多提供一个思考角度,从生物进化的角度来说,手指握持的方式是和手指的结构相互适应的。使用一个「类人」的机械手,学习到「类人」的握持姿势并不奇怪。另一方面,握持姿势的选择除了自由度,也与生物结构有关,食指比小拇指更有力、也更灵活,这与人类更常用食指也是相辅相成)

系统表现的迁移

OpenAI 在真实环境的机械手与摄像头配置上测试了 Dactyl 在物体脱手、或者时间用完之前能翻转的次数,最高计数 50 次。在模拟器环境中训练出的策略可以直接成功地操控真实世界中的物体。

对于控制方块的任务,使用了「任务随机化」训练得到的策略能成功完成翻转的次数要多得多,如下表。并且,通过摄像头信号估计位姿进行控制得到的结果和使用运动追踪传感器得到的结果差不多,这也体现出了视觉估计网络的高准确率。

学习过程

训练过程中的大多数时间都花在了提升策略在不同物理属性环境中的鲁棒性上。在不使用随机化时,在虚拟环境中学会翻转物体需要的经验大概相当于 3 年那么长,而在全面使用了随机化的设置下达到类似的表现需要大概相当于 100 年的经验。(不过我们也别忘了,不使用随机化时训练出的策略是无法直接迁移到真实世界的机器人的,因为学到的策略只针对模拟器中那一组特定的物理参数有效)

实验中的有趣发现

  • 对于真实世界物体的控制来说,触觉感知并不是必须的。Dactyl 接收到的信号只包括 5 个手指指尖的位置以及方块的位置和方向。机械手上确实带有触觉传感器,但是 OpenAI 并没有使用它们就可以达到目标。总地来说,相比于有一大批传感器、一大批难以建模的数值,OpenAI 认为一组数目有限但可以在模拟环境中高效建模的传感器可以帮助带来更好的表现。

  • 为某一个物体做的随机化设定可以泛化到其它属性类似的物体上。在控制方块的系统开发完成之后,OpenAI 制作了一个六棱柱,根据它的外型训练了一个新的策略,然后尝试让机械手控制它。有点出乎他们意料的是,只依靠一开始为控制方块设计的随机化设置,机械手就能很好地控制六棱柱了。相比之下,重新训练一个控制圆球的策略就不能连续成功很多次,可能是因为并没有针对转动行为设计适合的随机化模拟参数。

  • 对于真实机器人来说,好的系统工程和好的算法一样重要。在研究过程中,OpenAI 团队发现几个工程师都尝试一样的策略的时候,其中一位得到的表现总是要比其他几位的好得多。后来他们发现是因为这位工程师的笔记本电脑比较快,一个会影响表现的计时器 bug 从而就不会出现。这个 bug 解决之后,整个团队运行策略的表现都得到了提高。

没有达到预期效果的项目

除了上面的惊喜之外,OpenAI 也惊讶地发现一些强化学习连续控制中的常用技巧并没能帮助他们提高系统的表现。

  • 减短反应时间并没有提高系统表现。大家普遍认为减短做出动作的时间间隔能够提高系统表现,因为这样一来前后状态之间的变化会比较小,也就更容易预测。目前 OpenAI 设定的动作时间间隔是 80ms,要比人类一般的反应时间 150~250ms 短一些,但是仍然比神经网络计算所需的大概 25ms 左右的时间长得多。令人惊讶的是,把动作时间间隔缩短到 40ms 需要花费更长的训练时间,但同时并没有给真实世界机械手的表现带来可感的提升。有一种可能是,这种公认有效的做法用在神经网络模型上的效果确实要比用在目前广泛使用的线性控制模型的效果差一些。

  • 用真实数据训练视觉策略并没有带来什么提升。在早期的实验中,OpenAI 综合使用了模拟的以及真实的数据用来改进模型。真实数据的采集来自一个带有追踪标记的物体在测试策略的机械手上的实验过程。然而,真实数据相比模拟的数据有着显著的劣势。从追踪标记得到的位置信息带有延迟和测量误差,而且更糟糕的是,随便改变一点参数就会让已经采集到的真实数据变得完全没用。随着 OpenAI 持续改进自己的方法,只使用模拟数据训练的模型的表现也在不停提高,已经达到了模拟和真实数据混合训练的模型的错误率水平。最终使用的模型也就完全没有使用真实数据。

总结

对 OpenAI 来说,这个项目是他们过去两年中追求的完整 AI 研发循环的最好体现:先开发新的强化学习算法,再拓展它的运行规模、在模拟环境中训练解决困难的问题,最后再把得到的系统应用在真实世界中。以越来越大的规模沿着这种途径不停前进也是 OpenAI 为自己规划的通往安全的通用人工智能的主要路径。

OpenAI 已经展示了联通强化学习理论研究与现实世界问题探索的一座桥梁,我们也期待看到这个领域内更多的理论和现实世界问题联动的案例。

未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。

未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。

  如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

有史以来最精彩的自问自答:OpenAI 转方块的机械手相关推荐

  1. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  2. JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  3. 分享蔡澜老师的自问自答

    蔡澜老师的个人网站上有个「访问自己」的板块,里面记录了很多蔡澜老师的「自问自答」,问题和回答都很有趣,从中挑选了一部分.喜欢这种洒脱率真的生活态度. 附上网址 http://blog.sina.com ...

  4. Golang 数组的一些自问自答

    基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题 image-20211227100817481 所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题: ...

  5. Maven 自问自答

    Maven 自问自答 Maven 自问自答 maven有什么用 POM 是一个什么东西 解读pom Build Lifecycle maven 三条指令运行web项目 maven常用指令 maven结 ...

  6. 干货!JAVA容器-自问自答学HashMap

    前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里面蕴含着很多知识点,可以很好的考察个人基础.但一个这么重要的东西,我为什么没有在一开始 ...

  7. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  8. RT_Thread自问自答

    在看韦东山老师"RT-Thread内部机制"的视频,挺有意思的,有些概念的理解还是要深究一下,不然可能就是"我知道,这不就是那个....那个....那个",哪个 ...

  9. 自问自答:在VB中如何实现像C++一样printf的功能

    问: 每个整型都转换成5位的字符串,不足的在前面补0.比如:1转换成"00001",10转换成"00010".怎么实现? 答: format(1,"0 ...

最新文章

  1. 破纪录了!用 Python 实现自动扫雷!
  2. 矩阵的直接LU分解法
  3. wordpress后台无法登录问题
  4. win10升级后chrome碰到对话框就卡死
  5. 【C语言笔记初级篇】第一章:C语言快速入门及注意事项
  6. [转一下]未来卫星通信发展趋势
  7. MAC的编译更严格一些
  8. Unity2017安装
  9. android epson wifi,epson投影仪无线投屏怎么连接手机、电脑
  10. mysql (1) 聚集索引和非聚集索引
  11. 百度地图显示车辆运行轨迹(动态轨迹回放功能)
  12. android 环信使用方法,Android 环信的使用
  13. Linux下解决qtcreator中不能输入中文的问题
  14. matlab cdfx,在 Simulink 数据字典中使用 ASAM CDFX 数据
  15. 互联网数据中心——IDC(Internet Data Center)
  16. [LeetCode] 300 最长递增子序列 及返回这一子序列
  17. 人工神经网络的算法原理,神经网络算法的原理是
  18. 【钛媒体】人人不死,只是凋零
  19. 金三银四,中高级测试面经,第二波来袭!
  20. 计算机文化基础清考时间,关于2012-2013学年第二学期开学初补考及各年级清考工作安排的通知...

热门文章

  1. 独家 | 一文读懂Apache Flink技术
  2. 值得收藏的45个Python优质资源(附链接)
  3. 剑指offer:数组中重复的数字
  4. 常见医疗扫描图像处理步骤
  5. 2021 AAAS Fellow名单出炉!图灵奖得主Yan LeCun、联想芮勇等多位人士入选
  6. 最强干货实践教程 | YOLOv5在建筑工地中安全帽佩戴检测的应用
  7. 哈佛大学(2020)《CS50 Python人工智能入门》课程资料下载
  8. 余承东和张小龙背后的故事:成年人,请远离线性努力
  9. SAP WM 使用Storage Location Reference实现IM层面的存储地点和WM层面的存储类型之间的软关联
  10. SAP MM 中级之事务代码MICN的相关逻辑