当前位置: 首页 > 编程日记 > 正文

OpenAI机械手单手轻松解魔方,背靠强化学习+新技术ADR

640?wx_fmt=png


编译 | 夕颜
出品 | AI科技大本营(ID:rgznai100)
【导读】10月15日,人工智能研究机构OpenAI发布了一条机械手单手解魔方的视频。这个自学式的类人机器人手臂名为 Dactyl,不仅可以单手解魔方,甚至能在外加各种干扰,比如“蒙眼”,用布娃娃长颈鹿干扰下继续完成任务。这次,这套机械手系统使用的是此前用于 OpenFive 同样的强化学习代码,加上一项名为 Automatic Domain Randomization (ADR,自动化域随机)的新技术,这套系统可以处理之前未见过的场景,再次证明了强化学习的强大学习能力。

论文链接:https://d4mucfpksywv.cloudfront.net/papers/solving-rubiks-cube.pdf
以下为 OpenAI 官博编译:
我们已经训练出了一对神经网络,可以用类似于人的机器人手来解魔方。这个机械手使用与OpenAI Five相同的强化学习代码,以及一项被称为自动域随机化(ADR)的新技术。这套系统对神经网络进行完全的模拟训练,可以处理训练中从未见过的场景,例如被一个布娃娃长颈鹿堵住。
这表明,强化学习不仅是一个可以面对虚拟任务的工具,还可以解决需要前所未有的灵活性的物理世界问题。
人类的双手使我们能够解决各种各样的任务。在过去60年的机器人技术发展过程中,由于人类的双手是固定的,完成艰巨任务时要求为每个任务设计定制的机器人。作为替代方案,人们花了数十年时间尝试研发通用机器人硬件,但由于其高度的自由度,取得的成就有限。值得注意的是,我们在这里使用的硬件并不是新的,这套机器人手臂已经存在了15年了,但是软件方法却是新的。
自2017年5月以来,我们一直在尝试训练类似于人的机器人手来解魔方。我们设定这个目标的原因,是因为我们相信成功地训练这样的机器人手来完成复杂的操纵任务将为通用机器人奠定基础。我们于2017年7月在仿真环境中解决了魔方的难题。但截至2018年7月,我们只能在机器人上操纵一个魔方。现在,我们已经达成了最初的目标。

全面解决了魔方难题
单手解魔方对于人类来说都是一项艰巨的任务,一个人类孩童需要练习数年才能掌握解魔方所需要的灵巧性。不过,我们的机器人技术仍有待完善,因为它解决魔方的成功率为 60%,对于难度系数高的难题成功率只有 20%。


新技术:动域随机化(ADR)

我们使用强化学习和Kociemba算法,以选择训练步骤,在仿真环境中训练神经网络解决魔方问题。
我们专注于机器目前难以掌握的问题:感知和灵巧的操纵。因此,我们训练神经网络完成魔方对面旋转和由Kociemba算法生成的翻转动作。域随机化使经过模拟训练的网络可以迁移到真实的机器人上。
我们面临的最大挑战是在模拟环境中创建足以捕获现实世界物理特征的环境。对于像魔方或机械手这样复杂的物体来说,诸如摩擦、弹性和动力学之类的因素非常难以测量和建模,我们发现仅仅依靠域随机化是不够的。
为了克服这个问题,我们开发了一种称为自动域随机化(ADR)的新方法,该方法在仿真中不断产生难度系数越来越高的环境。(我们的工作与POET紧密相关,POET自动生成2D环境。但是,我们的工作学习了针对所有环境的联合策略,该策略可以迁移到任何新生成的环境。)这使我们摆脱了对真实世界的精确模型的依赖,神经网络能够从模拟中学习的知识迁移到现实世界。
ADR从单一的非随机环境开始,神经网络在该环境中可以学习解魔方。随着神经网络在任务中逐渐优化并达到性能阈值,域随机化的数量会自动增加。由于神经网络现在必须学会将其泛化到更随机的环境,这项任务更加艰巨。网络不断地学习,直到再次超过性能阈值,然后再进行更多随机化,如此循环。
640?wx_fmt=png

ADR应用于魔方的尺寸

我们随机化的参数之一是魔方的尺寸。ADR从固定尺寸的魔方开始,然后在训练中逐渐增加随机范围。我们将相同的技术应用于所有其他参数,例如魔方的质量,机器人手指的摩擦力和手的视觉表面材料。因此,神经网络必须学会在越来越困难的环境下解魔方。


自动与手动域随机化

域随机化要求我们手动指定随机化范围,这并不简单,因为太多的随机化会使学习难度增加,但随机化太少又不利于向真实机器人的迁移。ADR通过自动扩展随机范围来解决这个问题,而无需人工干预。ADR消除了对领域知识的需求,并使该方法应用于新任务变得更简单。与手动域随机化相比,ADR还通过训练从不收敛而使任务始终保持挑战性。
在翻转木块这个任务上,我们对ADR与手动域随机化进行了比较,在该任务上,后者已经有了很强的基准表现。一开始,ADR在真实机器人上的成功次数方面表现较差。但是,随着ADR增加了熵(这是对环境复杂性的一种度量),迁移性能最终相比基准翻倍,且无需人工调整。


分析


测试鲁棒性

使用ADR,我们可以在仿真环境中训练神经网络,进而在真实的机器人手上解魔方。这是因为ADR使网络处于无数种随机模拟中。正是由于训练过程中的这种复杂性,网络才得以从仿真环境迁移到现实世界,因为它必须学会快速识别并适应它面对的任何物理世界目标。
为了测试我们方法的局限性,我们在手解魔方的同时尝试了各种扰动。该测试不仅可以测试控制网络的健壮性,还可以测试视觉网络,在这里我们将其用于估算魔方的位置和方向。‍
640?wx_fmt=gif
戴手套解魔方
640?wx_fmt=gif
机械手被蒙上布
640?wx_fmt=gif机械手被布娃娃干扰
640?wx_fmt=gif用笔戳魔方
640?wx_fmt=gif食指和中指被绑住
我们发现,即使从未进行过ADR训练,我们的系统也对扰动具有惊人的健壮性:即使没有达到最佳性能,机器人也可以在所有测试过的扰动下成功执行大多数翻转和对面翻转。

快速元学习

我们认为,元学习或学会学习是构建通用系统的重要先决条件,因为这使系统能够快速适应环境中不断变化的条件。ADR背后的逻辑是,内存增强型网络与足够随机的环境相结合会导致快速元学习,其中网络采用了一种学习算法,该算法可迅速适应其所部署的环境。
为了系统地进行测试,我们测量了神经网络在不同扰动下(例如重置网络的内存、重置动力学或断开关节)每次成功翻转魔方(旋转立方体以使不同的颜色朝上)的时间。我们在仿真中执行这些实验,这使我们能够在受控的环境中平均进行10,000多次试验。
640?wx_fmt=png
网络内存被清除后的成功时间
640?wx_fmt=png
当摩擦、质量或重力变化是的成功时间
640?wx_fmt=png
当随机关节被破坏时的成功时间
最初,随着神经网络成功实现更多翻转,成功完成任务的都会减少,因为神经网络会学会了适应。施加干扰(上图中的垂直灰色线)时,我们看到成功时间出现钉状轨迹。这是因为网络所采用的策略在变化的环境中不起作用了。之后,网络重新学习新环境,我们再次看到成功的时间减少到了先前的基准水平。
我们还测量了失败率,并进行了相同的对面翻转实验(将顶面顺时针或逆时针旋转90度),发现了相同的适应模式。


神经网络

可视化让我们能够了解网络内存中的内容。随着网络复杂性的增加,这一点变得越来越重要。
640?wx_fmt=png
我们使用可解释性工具箱中的构造块,即非负矩阵分解,将这个高维向量浓缩为6组,每组用一种颜色表示。然后,我们为每个时间步展示当前主导组的颜色。
我们发现,每个内存组都有与其相关的语义上有意义的行为。例如,我们可以仅查看网络内存的主要组,来预测它是要旋转多维数据集,还是要在旋转之前顺时针旋转顶部。


挑战

用机械手解魔方的问题仍然不简单。目前,我们的方法在需要最大难度的加扰(需要旋转26个面)时,成功解魔方的概率仅为 20%。对于需要15次旋转才能撤消的较简单的加扰,成功率为60%。当魔方掉落或超时,我们认为实验失败。但是,我们的网络能够在任何初始条件下解魔方。因此,魔方掉了也可以拿回来放到机械手中继续求解。
通常,我们发现在最初的几次旋转和翻转期间,我们的神经网络更有可能失败。之所以如此,是因为神经网络在早期需要适应适应物理世界。

下一步

我们认为,我们在构建灵巧性可媲美人类的通用机器人正在取得进展,我们很高兴朝这个方向继续前进。
原文链接:https://openai.com/blog/solving-rubiks-cube/

(*本文为 AI科技大本营编译文章,载请微信联系 1092722531

精彩推荐



2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。

即日起,限量 5 折票开售,数量有限,扫码购买,先到先得!
640?wx_fmt=png

推荐阅读

  • 大规模1.4亿中文知识图谱数据,我把它开源了

  • 快速适应性很重要,但不是元学习的全部目标

  • 太鸡冻了!我用Python偷偷查到暗恋女生的名字

  • 刷爆了!GitHub标星1.6W,这个Python项目太实用!

  • 巨头垂涎却不能染指,loT 数据库风口已至

  • 【建议收藏】数据中心服务器基础知识大全

  • 从4个维度深度剖析闪电网络现状,在CKB上实现闪电网络的理由 | 博文精选

  • 2019 年诺贝尔物理学奖揭晓!三得主让宇宙“彻底改观”

  • 不服!身边程序员同事竟说自己敲代码速度快!Ctrl+C、Ctrl+V ?

640?wx_fmt=png

你点的每个“在看”,我都认真当成了AI

相关文章:

AMD and CMD are dead之js模块化黑魔法

缘由 在2013-03-06 13:58的时候,曾甩下一片文章叫:《为什么不使用requirejs和seajs》,并放下豪言说发布一款完美的模块化库,再后来就把那篇文章删了,再然后就没有然后。该用seajs还用seajs,甚至我码的SCJ都…

一文了解Python常见的序列化操作

关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。 联系:hylinux1024gmail.com 0x00 marshal marshal使用的是与Python语言相关但与机器无关的二…

TEE(Trusted Execution Environment)简介

TEE(Trusted Execution Environment),可信执行环境,该环境可以保证不被常规操作系统干扰的计算,因此称为”可信”。这是通过创建一个可以在TrustZone的”安全世界”中独立运行的小型操作系统实现的,该操作系统以系统调用(由TrustZ…

自动驾驶关键环节:行人的行为意图建模和预测(上)

作者 | 黄浴出品 | AI科技大本营(ID:rgznai100)【导读】介绍一下最近行人行为意图建模和预测的研究工作,还是分上下两部分,本文为上半部分。Social LSTM: Human Trajectory Prediction in Crowded Spaces比较早的是斯坦福大学 201…

自定义windows下自动清除文件夹或者文件的只读属性的脚本

脚本内容入下:其中脚本中 ”/d"作用 (可以用来改变当前驱动器目录)例如: 我现在是在D盘,现在我要切换到C:\windows目录 脚本参数中 ATTRIB -R /S /D 解释内容如下:(上述脚本参数中的 cd …

C++11容器中新增加的emplace相关函数的使用

C11中,针对顺序容器(如vector、deque、list),新标准引入了三个新成员:emplace_front、emplace和emplace_back,这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back,允许我们将元素放置在容器头…

Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:SilverlightWCF 新手实例 象棋 在线演示 在SilverlightWCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加…

确认!语音识别大牛Daniel Povey将入职小米,曾遭霍普金斯大学解雇,怒拒Facebook

整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 【导读】10 月 17 日,语音界传奇 Daniel Povey 发布推特,宣布自己 2019 年末将要入职小米,目前正在签订合同阶段,入职后,他将带领一支团队研发…

软链接与硬链接

$ ln f1 f2 #创建f1的一个硬连接文件f2$ ln -s f1 f3 #创建f1的一个符号连接文件f3$ ls -li # -i参数显示文件的inode节点信息转载于:https://www.cnblogs.com/zhizouxiao/p/3794668.html

一文读懂Python复杂网络分析库networkx | CSDN博文精选

作者 | yyl424525来源 | CSDN博客文章目录1. 简介安装支持四种图绘制网络图基本流程2. Graph-无向图节点边属性有向图和无向图互转3. DiGraph-有向图一些精美的图例子环形树状图权重图Giant ComponentRandom Geometric Graph 随机几何图节点颜色渐变边的颜色渐变Atlas画个五角星…

C++11多线程中std::call_once的使用

C11中的std::call_once函数位于<mutex>头文件中。在多线程编程中&#xff0c;有时某个任务只需要执行一次&#xff0c;此时可以用C11中的std::call_once函数配合std::once_flag来实现。如果多个线程需要同时调用某个函数&#xff0c;std::call_once可以保证多个线程对该函…

Solaris 上网配置

2019独角兽企业重金招聘Python工程师标准>>> 早上装solaris10系统的时候&#xff0c;没选默认&#xff0c;选了desk-session模式安装。全英文无界面安装&#xff0c;中间还跑出几个乱码。 靠着随便选随便F2&#xff0c;终于安装完了。 就在那设完分辨率后&#xff0…

Configure,Makefile.am, Makefile.in, Makefile文件之间关系

为什么80%的码农都做不了架构师&#xff1f;>>> 1.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题&#xff0c;比如检查编译器&#xff0c;库&#xff0c;头文件等&#xff0c;生成文件configure.scan,它是configure.ac的一个雏形。 your source files…

这款耳机一点不输千元级的AirPods

你如果问我&#xff1a;生活中你觉得必不可少的一件电子产品是什么&#xff1f;那么我会毫不犹豫的回答你&#xff1a;是耳机&#xff01;出门忘带耳机是绝对不能忍听不听没关系&#xff0c;但是有它比较安心我觉得生活中不仅是我很多人都对耳机有一种依赖因为很多人都喜欢音乐…

CUDA Samples: Image Process: BGR to Gray

在图像处理中&#xff0c;颜色变换BGR到Gray&#xff0c;常见的一般有两种计算方式&#xff0c;一种是基于浮点数计算&#xff0c;一种是基于性能优化的通过移位的整数计算。浮点数计算公式为&#xff1a; gray 0.1140 * B 0.5870 * G 0.2989 * R;整数计算公式为&#xff1…

CYQ.Data 数据框架系列索引

2019独角兽企业重金招聘Python工程师标准>>> 索引基础导航&#xff1a; 1&#xff1a;下载地址&#xff1a;http://www.cyqdata.com/download/article-detail-426 2&#xff1a;入门教程&#xff1a;http://www.cyqdata.com/cyqdata/article-cate-33 3&#xff1a;购…

Tesseract 3 语言数据的训练方法

OCR,光学字符识别 光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描&#xff0c;然后对图像文件进行分析处理&#xff0c;获取文字及版面信息的过程。OCR技术非常专业&#xff0c;一般多是印刷、打印行业的从业人员使用&#xff0c;可以快速的将纸质资料…

Windows C++中__declspec(dllexport)的使用

__declspec是Microsoft VC中专用的关键字&#xff0c;它配合着一些属性可以对标准C/C进行扩充。__declspec关键字应该出现在声明的前面。 __declspec(dllexport)用于Windows中的动态库中&#xff0c;声明导出函数、类、对象等供外面调用&#xff0c;省略给出.def文件。即将函数…

图灵奖得主LeCun力推无监督学习:要重视基于能量的学习方法

作者 | Tiernan Ray译者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导语&#xff1a;图灵奖得主深度学习大牛 Yann LeCun 表示&#xff0c;人工智能的下一个发展方向可能是放弃深度学习的所有概率技巧&#xff0c;转而掌握一系列转移能量值的方法。据说&a…

html5小游戏Untangle

2019独角兽企业重金招聘Python工程师标准>>> 今天介绍一个HTML5的小游戏&#xff0c;让大家体验到HTML5带来的乐趣。这个小游戏很简单&#xff0c;只要用鼠标拖动 蓝点&#xff0c;让图上的所有线都不相交&#xff0c;游戏时间就会停止&#xff0c;是动用大家头脑的…

【VMCloud云平台】SCCM(四)域内推送代理

继上一篇云平台完成SCCM部署篇之后&#xff0c;SCCM篇正式开始&#xff0c;今天将开始介绍SCCM为域内机器推送代理&#xff08;紫色为完成实施&#xff0c;红色为实施中&#xff09;&#xff1a; 1、 点击站点&#xff1a; 2、 右键属性&#xff0c;点击客户端安装设置&#…

Python实现决策树(Decision Tree)分类

关于决策树的简介可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/78880934在 https://machinelearningmastery.com/implement-decision-tree-algorithm-scratch-python/ 中给出了CART(Classification and Regression Trees,分类回归树算法,简称CART…

顶尖技术专家严选,15场前沿论坛思辨,2019中国大数据技术大会邀您共赴

扫码了解2019中国大数据技术大会&#xff08;https://t.csdnimg.cn/IaHb&#xff09;更多详情。2019中国大数据技术大会&#xff08;BDTC 2019&#xff09;将于12月5日-7日在北京长城饭店举办&#xff0c;本届大会将聚焦智能时代&#xff0c;大数据技术的发展曲线以及大数据与社…

jQuery 加法计算 使用+号即强转类型

1 var value1 $("#txt1").val(); 2 var value2 $("#txt2").val(); 3 //数值前添加号 number加号和数值加号需要用空格隔开 即实现加法运算 4 $("#txt3").val(value1 value2); 转载于:https://www.cnblogs.com/xiemin-minmin/p/11026784.…

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库&#xff0c;后者是 Android 自带 API。企业级应用&#xff0…

​哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题

作者 | Nick Roberts编译 | AI科技大本营&#xff08;ID:rgznai100&#xff09;自 2008 年成立以来&#xff0c;Stack Overflow 一直在拯救所有类型的开发人员。自那时以来&#xff0c;开发人员提出了数百万个关于开发领域的问题。但是&#xff0c;迫使开发者转向 Stack Overfl…

OpenCV3.3中决策树(Decision Tree)接口简介及使用

OpenCV 3.3中给出了决策树Decision Tres算法的实现&#xff0c;即cv::ml::DTrees类&#xff0c;此类的声明在include/opencv2/ml.hpp文件中&#xff0c;实现在modules/ml/src/tree.cpp文件中。其中&#xff1a;(1)、cv::ml::DTrees类&#xff1a;继承自cv::ml::StateModel&…

ARM 寄存器 和 工作模式了解

一. ARM 工作模式 1. ARM7&#xff0c;ARM9&#xff0c;ARM11&#xff0c;处理器有 7 种工作模式&#xff1b;Cortex-A 多了一个监视模式&#xff08;Monitor&#xff09; 2. 用户模式&#xff1a;非特权模式&#xff0c;大部分任务执行在这种模式&#xff0c;它运行在操作系…

英文版PDF不能显示中文PDF文件的解决方法

首先&#xff0c;PDF如果是英文版本的话&#xff0c;先装一个与之对应的PDF中文包。装上之后要检查的两项&#xff1a;1、PDF本身打开Adobe pdf选择“edit”"Preference""Internet"将"internet"下的三个勾全部勾上"OK"2、IE设置打开IE…

Linux下__attribute__((visibility (default)))的使用

在Linux下动态库(.so)中&#xff0c;通过GCC的C visibility属性可以控制共享文件导出符号。在GCC 4.0及以上版本中&#xff0c;有个visibility属性&#xff0c;可见属性可以应用到函数、变量、模板以及C类。 限制符号可见性的原因&#xff1a;从动态库中尽可能少地输出符号是一…