本文主要介绍了对机器手臂动力学参数的分布进行学习,能更有效率的适应真实环境,从而缩小sim to real gap。论文原址:
Closing the Sim-to-Real Loop: Adapting Simulation Randomization with Real World Experience
sim to real 问题在强化学习中被广泛研究,目前主要有以下几种研究方向:系统辨识(system identification)、领域适应(domain adaption)、参数随机化(parameters randomization)、元强化学习(meta-rl learning)。本文主要是对传统的参数随机化方法进行改进。作者认为可以使用一小部分的真实环境的数据来优化模拟环境的参数分布,从而使得模拟环境能够更好的 match 真实环境,这样训练出来的策略就更好。
传统的参数随机化
传统的参数随机化可以OpenAI这篇论文,(有钱、有设备、有技术做的东西就是不一样。
主要思想就是我有一个prior知识——对目标环境(真实环境)的一个模拟,比如机器人手臂的动力学建模。但是这个建模不精确,比如用一个 3D 物理引擎来渲染,它可能无法 cover 真实环境中的各种干扰,如摩擦力、惯性阻力等等。因此就想对模拟环境的动力学参数进行随机化处理,增强它的泛化性。
具体来说就是给每个动力学参数一个分布,比如手指关节力矩加一点阻力、目标物体重量给一个均匀分布的范围等等(如下图),然后根据参数分布来排列组合生成一系列模拟环境(M_source),可能有上千个,但是在计算机里可以并行处理,这就是 sim 的优势。
但是这样做有两个问题不好解决,一是为哪些参数做随机化处理?二是参数的随机分布范围怎么设定?第一个问题可以无脑解决,就是越多越好,把能想到的参数都给他随机化一下;但是第二个问题就比较难了,因为你不知道你的目标环境,也就是真实环境的参数到底是怎么样的。可能真实环境下的参数分布的均值是5,但是你在模拟环境下的均值设的是10,你只有扩大方差 Σ \Sigma Σ 才有可能 cover 到,这就导致了很多参数设定是不合理的,训练也是没有必要的;而且有时候还存在在你设定的参数范围内生成的动力学模型,根本就是违反物理规律的,这就更不可取了。
因此本文主要解决如何学习更有适应性的随机化参数的分布。
本文的算法
目标
常规的马尔可夫定义,没有什么特别的:
由于是在参数随机化的设定下做的研究,所以我必须有一个系统动力学 P(st+1|st,at),这个动力学可能是从机械工程角度得到的,也可能是从真实环境中拟合得到的。
然后就是定义一个模拟环境参数的分布,将这个分布加入系统动力学,就变成了一个概率动力学模型:
因此,目标就是如何设计这一参数分布。我们相信在这个设计良好的参数分布中训练得到的 policy 一定可以在真实动力学分布中表现良好。
学习方法
如何学习这一参数分布呢?作者的动机是希望在模拟环境下策略执行的轨迹和在真实环境下策略执行的轨迹越相似越好,这样就证明两个环境没有什么区别,此时的参数分布就是最优的表示真实环境的分布。
直接模拟需要大量样本,这里采用迭代方法来近似优化,并加入一个 KL 约束来保证不发散:
用简单的一范式和二范式来计算距离:
本文采用的基础强化学习算法是PPO,并用多维高斯分布来作为模拟参数的分布。由于本文使用的是一个不可微分的模拟器,因此不需要计算梯度,可以把模拟环境当成一个黑盒。而如果是微分模拟环境,则需要计算梯度。
下面是本文的架构和伪代码,这里感觉写的不是很细,一些细节不清楚,也没有源码,理解的不是很深刻,可能需要结合后面实验才能真正理解:
![](https://i-blog.csdnimg.cn/blog_migrate/881e1ed1c75034daa4faf0c41196ca28.png)
实验
作者进行了两个实验,一个是让系着绳子的机器人手臂将绳子末端的小球放入指定洞中;二是让机器人手臂去开抽屉。
作者首先比较了标准的领域随机化方法在这两个任务上的表现,发现领域随机化方法对方差的设定非常敏感,方差设定的较小才有可能完成实验,而方差过大就学不到东西。
![](https://i-blog.csdnimg.cn/blog_migrate/799623ed16c7de946baf5f539f2fd2ac.png)
然后利用 simopt 方法,从下图的位置均值可以明显的看到适应真实环境的过程:
![](https://i-blog.csdnimg.cn/blog_migrate/05f1906c93398e40b1404fd4b97dd6d3.png)
作者在附录提供了部分均值参数和方差的变化,可以看到使用 simopt 算法之后均值发生明显变化,这就说明模拟环境和真实环境存在差异,并且 simopt 可以很好地修正模拟环境的参数分布,使其能够更好地表示真实环境: