Abracadabra

Survey of Sim2Real: Part I

最近survey了一下sim2real领域最近的相关工作,先整理个第一版(共有七篇论文)的总结。

整篇总结分为以下四个部分:

  • 问题的定义以及工作的出发点
  • 方法的分类
  • 具体算法
  • 一个实例

问题的定义以及工作的出发点

sim2real的全称是simulation to reality,是强化学习的一个分支,同时也属于transfer learning的一种。主要解决的问题是机器人领域中,直接让机器人或者机械臂在现实环境中与环境进行交互、采样时,会出现以下两个比较严重的问题:

  • 采样效率太低(在用强化学习算法解决机器人相关问题时,所需要的样本量一般会达到上千万,在现实环境中采集如此数量级的样本要耗费几个月的时间)
  • 安全问题 (由于强化学习需要通过智能体在环境中进行大范围的随机采样来进行试错,因而在某些时刻其做出的行为可能会损伤机器人自身,例如手臂转动角度过大或者避障任务中由于碰撞造成的不可逆损伤等等;也可能会损害周围的环境甚至生物)

但是如果我们在模拟器中进行强化学习算法的训练,以上两个问题均可迎刃而解。但是,这里同样会存在一个问题,由于模拟器对于物理环境的建模都是存在误差的,因而在模拟环境中学习到的最优策略是否可以直接在现实环境中应用呢?答案往往是否定的,我们把这个问题称为 “reality gap”。而sim2real的工作就是去尝试解决这个问题。

这里值得注意的一点是,虽然这个方向叫做sim2real,其实其中的所有的算法都可以直接应用在sim2sim,real2real等的任务中。

方法的分类

sim2real中的典型工作大致可以分为以下五类:

  • Domain Adaption 主要是通过学习一个模拟环境以及现实环境共同的状态到隐变量空间的映射,在模拟环境中,使用映射后的状态空间进行算法的训练;因而在迁移到现实环境中时,同样将状态映射到隐含空间后,就可以直接应用在模拟环境训练好的模型了。
  • Progressive Network 利用一类特殊的Progressive Neural Network来进行sim2real。其主要思想类似于cumulative learning,从简单任务逐步过渡到复杂任务(这里可以认为模拟器中的任务总是要比现实任务简单的)。
  • Inverse Dynamic Model 通过在现实环境中学习一个逆转移概率矩阵来直接在现实环境中应用模拟环境中训练好的模型。
  • Domain Randomization 对模拟环境中的视觉信息或者物理参数进行随机化,例如对于避障任务,智能体在一个墙壁颜色、地板颜色等等或者摩擦力、大气压强会随机变化的模拟环境中进行学习。

具体算法

这一部分将对以下六篇论文进行详细的说明:

Towards Adapting Deep Visuomotor Representations from Simulated to Real Environments

该论文属于 Domain Adaption 类别。

虚拟环境以及现实环境收集到的图像对比

如上图,本文的基本思想是,无论是在模拟环境还是在现实环境智能体收集的图像中,对于任务比较重要的便是一些可控制物体或者目标的位置。因而希望学到的隐含表示能够保留这部分物体的位置信息。

以上是针对图像局部信息的约束。而对于整体图像来说,本文希望模拟环境以及现实环境在这个公共的隐含表示空间中的隐含表示无法被一个二分类器所分辨出来。另外,对于一对图片,例如上图,本文希望这一对图片的隐含表示的欧氏距离能够尽可能接近。

根据以上三个约束,可以得到以下三个损失函数:

Pose Estimation Loss:

Pose Estimation Loss

Domain Confusion Loss:

Domain Confusion Loss

其中

q function

Contrastive Loss:

Contrastive Loss

其中:

D

而求解整个问题的最终优化目标即以上三个损失函数的加权求和:

Objective Function

给出一个更加容易理解的框架图:

Architecture

但是这种方法存在一个问题,在计算contrastive loss时需要使用一对在模拟环境以及现实环境中能对应上的图片。这种对应关系如果需要人工完成工作量很大而且如何去分辨两张图是否是对应关系也没有一个绝对的标准。因而本文提出了一种无监督方法来自动从数据集中找出这种对应关系,具体来说分为以下五个步骤:

  1. 只使用虚拟环境中收集的图片(进行位置标记)并只是用pose estimation loss训练一个表示学习网络。
  2. 使用上一步训练好的表示学习网络抽取数据集中所有图片(包括仿真环境以及真实环境)的第一个卷积特征图。
  3. 对以上特征图采用5x5的最大池化。
  4. 为每一个仿真-现实图片对计算相似度,即计算其拉直后的特征图的内积。
  5. 每一张真实环境中的图片对应的虚拟环境的图片为相似度最高的那一张。

Learning Invariant Feature Spaces to Transfer Skills with Reinforcement Learning

这篇论文同样属于 Domain Adaption 领域,即学习一个虚拟环境以及真实环境的状态(state)的公共的隐含表示空间。其整个学习过程分为两步,第一步进行表示学习,第二步采用学习到的表示在现实环境中进行强化学习。

首先本文对需要解决的问题有如下假设:

Assume that the reward functions share some structural similarity, in that the state distribution of an optimal policy in the source domain will resemble the state distribution of an optimal policy in the target domain when projected into some common feature space.

即当仿真环境以及真实环境的状态同时映射到一个公共的隐含表示空间中,这两个环境所需要解决的问题的回报函数具有一定的相似性。举个例子,我们在仿真环境中构建一个拥有两个关节的机械臂希望它能够将一个冰球推到指定位置,回报函数设计为冰球与目标位置的距离的负值;然后在现实环境中,我们拥有一个有三个关节的机械臂去完成同样的任务。在这个例子中,虽然从智能体获得的图像表示完全不同(一个两关节一个三关节),但是回报函数其实是一样的,与关节数目没有关系。当然这是一个比较极端的例子,回报函数可以不完全一样。

所以本文的目标是学习两个映射函数,能够将两个环境中的状态映射到一个共同的隐含表示空间,这与上一篇论文只有一个公共的映射函数不同:

Common Feature Space

而要能通过这个目标来求出两个映射函数,还需要做出以下假设:

  • 仿真环境以及真实环境的智能体需要学会完成同一个任务
  • 动作空间一致,状态空间的维度一致

第一个假设必须存在是由于需要从这个共同的任务中去学习这两个映射函数。这两个假设其实不算很强烈的假设,对于第一个假设来说,这个共同任务可以是一些比较简单的任务,使得训练成本较小;另外对于第二个假设,如果仿真环境以及现实环境中使用的是同一款机器人或者机械臂,动作空间一致以及状态空间的维度一致是一个非常自然的假设。

表示学习

要进行如上公式所示的表示学习,我们首先需要对两个环境中的状态(学会的共同任务中的状态)进行对齐(与上一篇论文里的对齐意义是一样的),这里存在两种方法进行对齐:

  • Time-bases Alignment
  • Dynamic Time Wrapping

第一种方法非常简单,对于两个环境中的智能体都学会解决的共同任务,如果智能体在仿真环境以及现实环境中动作执行的时钟是大致相同的,那么只要让两个环境中的智能体同时开始执行这个共同的任务,其分别产生的状态序列一定是对齐的;但是时钟相等的假设过于强烈了,因而第二种方法是一个可行性更高的方法。它是一个迭代的方法,它需要一个计算两个序列相似度的距离函数,根据这个距离函数来找出使得两个序列距离最近的对齐方式;对齐后,再根据新的对齐方式更新距离函数,如此不断迭代直至收敛或者到达停止条件。这个方法主要在于如何去选择这个距离函数,本文的做法是首先用time-bases alignment方法得到一个初始的对齐方式,再使用下面要讲到的表示学习的方法学习两个映射函数,将整个序列每一对对齐状态映射后隐含表示向量的欧氏距离的和作为dynamic time warpping方法中序列相似度的距离函数。

以上就是状态对齐步骤,下面就要进行正式的表示学习了。我们注意到,对于以上公式,其实有个非常简单的解,即这两个映射函数的是个输出永远为0的常数函数。这样一个解显然不是我们需要的,因为我们可以加上一个约束,即学习到的隐含表示能够尽可能多的保留原表示的信息,即学习到的隐含表示是一个auto encoder的隐向量。根据以上假设以及我们的优化目标,可以得到如下表示学习损失函数:

Common Feature Spaces Loss

Auto Encoder Losses

Objective Function

同样给出一个更容易理解的框架图:

Architecture

知识迁移

在进行了第一步的表示学习后,我们需要利用学习到的表示在现实环境中进行新任务的训练。但是注意,我们学习的表示是经过如下两个约束学到的,第一个约束可以认为是一个auto encoder的降维;第二个约束是能够与模拟环境最优策略产生的状态概率分布相同的一个隐含状态表示空间。因而我们不能单单只利用学习到隐含表示去在现实世界中训练,这样在模拟环境中训练好的策略没有办法对现实任务的训练造成任何影响,这个影响必须通过将现实任务的状态序列与模拟环境中最优策略产生的状态序列对齐后才能够实现。

本文通过对现实环境中智能体需要解决的任务的回报函数的基础上加上如下附加项来实现知识迁移:

Addition Reward Term

这里的上标$t$表明,在进行现实环境中智能体的训练时,模拟环境必须同步运行。

Sim-to-Real Robot Learning from Pixels with Progressive Nets

本方法属于 Progressive Network 类别方法,其使用的Progressive Nerual Network是迁移学习领域提出的一种网络结构,其具体形式如下图(左)所示:

Progressive Neural Network

左图中每一列(column)代表一个独立的任务,任务训练顺序从左到右。虽然任务训练顺序从简单到复杂从直觉上来看是比较合理的,但是PNN并不一定要满足这个规律, 其任务训练顺序可以是任意的。由于我们以第三列(第三个任务)为中心来考虑,因而有实线与虚线的差异。可以看到PNN的思想非常简单,在后面任务的每一层计算时,输入端并上之前任务前一层的输出即可。但是PNN扩展到强化学习中进行了如下三个改变:

  1. 现实环境中使用的神经网络要比模拟环境中要小。原因主要是由于原PNN论文发现,当列数越多时每一列网络的参数都很稀疏,完全可以进行网络压缩或者剪枝。
  2. 输出层不再接受前置任务的输入。由于模拟环境与现实环境在动作空间上可能存在差异,因而在输出层借鉴前面任务的知识反而容易产生误导。
  3. 为了让智能体在现实环境中训练所需的样本量更小,因而输出层的参数直接复制之前任务的参数用来初始化,用以提升算法训练初期的探索度。

值得注意的是,论文的结果还表明使用LSTM进行策略网络的建模要比使用MLP效果更好。其实还有很多其他工作也同样发现了这一点,主要还是因为大部分现实中的强化学习问题都是部分观察的,不满足马尔可夫性质。

Transfer from Simulation to Real World through Learning Deep Inverse Dynamics Model

本文属于 Inverse Dynamic Model 类别。其主要基于的假设是即使虚拟环境无法对现实世界进行完全准确的建模,但是其状态的变化还是合理的。例如,对于一个将物体推到指定目标位置的任务来说,一个机械臂将冰球往前推那么下一个状态就是冰球往推动方向前进一些,但是不会往相反的方向移动。基于这个假设,首先在虚拟环境训练好一个策略,其输入是前n个时间步的状态(这里同样考虑到部分观察的问题),将输出的动作输入到虚拟环境模型中,就会转移到虚拟环境中的下一个状态。将这个状态与现实环境中的前n个时间步的状态输入到真实环境中学习到的逆动态模型中,就会得出能够输出这下一个状态所需要采取的动作。具体见下图:

训练流程图

以上过程唯一需要详细说明的便是如何在现实环境中学习一个逆动态模型,其实非常简单:

Inverse Dynamic Model

但是这个模型的好坏取决于在现实环境中收集的样本的质量,即样本是否具有足够的多样性从而覆盖足够大的状态空间。一个简单但有效的做法是在探索时的动作上增加一定的噪声,但是加入噪声的频率等需要仔细考量否则就会使得收集到的数据质量下降,论文经过实际的实验得出以下两点经验:

  1. 不需要每个时间步都加入噪声。
  2. 当现实环境中智能体执行动作发生状态转移时转移到一个与虚拟环境差别很大的状态时,就应当即时停止这一轮的采样。

Sim-to-Real Transfer of Robotic Control with Dynamics Randomization

本文属于 Domain Randomization 类别。本文出发点在于深度强化学习算法具有以下特性:

DeepRL policies are prone to exploiting idiosyncrasies of the simulator to realize behaviours that are infeasible in the real world.

即强化学习算法在一个特定环境中进行学习时,会尝试去挖掘某些专属于这个环境的特性从而使得算法的泛化能力很差。为此,本文将强化学习的优化目标更改如下:

Dynamic Randomization Problem

这里的$\mu$代表决定环境的物理参数。如果智能体优化的是在大量不同物理参数确定的虚拟环境中累积回报的期望值的话,训练出的策略就会更加鲁棒。对于一个特定的环境,本文采用HER+RDPG算法进行最优策略的训练:

Dynamic Randomization RL Algorithm

54

其中的策略网络以及值函数网络采用如下方式进行建模:

Netowrk Archtectures

Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World

本文同样属于 Domain Randomization 类别,只不过不同于上一篇论文是随机化物理参数,本文是随机化环境的视觉表示。具体来说,本文是想学习一个定位器,通过输入一张图片来定位其中所有目标物体的三维坐标:

Domain Randomization

具体需要随机化的视觉信息包括:

  • 桌子上所有目标物体的位置以及纹理
  • 桌子、地板、背景以及机械臂的纹理
  • 摄像机的位置、朝向以及可视范围
  • 场景中光源的数量
  • 场景中光源的位置、朝向以及光谱特征
  • 加入到图像中噪声的类型以及数量

一个实例

在这一部分我将介绍一下OpenAI在sim2real领域做出的一个工作,其地位类似于多智能体强化学习领域的OpenAI Five。

Learning Dexterous In-Hand Manipulation

这个例子主要用到的技术包括以下几点:虚拟环境的随机化、大规模分布式采样以及精确的虚拟环境搭建。其所需要完成的任务是:使用一个具有20个自由度的机械手,将其手掌中的立方体从初始朝向利用手指翻转到目标朝向:

Task

为了建立一个足够精细(但是依旧存在无法建模的物理量)的虚拟环境,OpenAI以机械手为球心半径为80厘米的球面上均匀分布了16个精度为20微米的追踪器,能够定位机械手任意位置的微小位移。之所以采用如此高精度的追踪器是为了尽可能准确地对机械手的相关物理参数,例如手指关节处的阻尼等等,这样的物理参数有将近500个。我认为这个工作之所以能够直接将虚拟环境中学习到的最优策略直接应用到现实环境中,这个高精度的虚拟环境功不可没:

真实环境 vs 虚拟环境

整个系统的训练步骤大致可分为以下三个部分(最后是训练完毕的执行部分):

系统流程图

下面将详细对每一个部分进行说明。首先是第一个部分,包括模拟环境中数据的并行采样以及整个强化学习的参数更新框架:

分布式数据采集以及参数更新

分布式架构

上图中采用的分布式数据收集以及模型训练框架同样也是OpenAI Five所采用的。从左下方开始,多个并行采样的worker会将自己根据当前策略采集的样本发送给与自己相关联的Redis服务器上,模型更新模块中的Puller将会定期异步地从Redis服务器中拉取一个batch的数据并放到RAM中,之后Stager从RAM中拉取一个mini-batch放到GPU上,与其他采用MPI协议联系的GPU一起对参数进行更新。更新后的参数将每个Optimizer都保存一份。之后Optimizer沿着之前相反的路径将更新后的参数存储到Redis服务器上,workers将定期异步地从Redis服务器上拉取最新的策略参数进行采样。整个训练过程就是以上过程的迭代。下图表示了不同规模的并行对于最终算法性能的影响:

不同并行度对于最终算法性能的影响

第二部分,具体的强化算法选用的是PPO算法,其策略网络以及值函数网络建模如下:

强化学习算法架构

策略网络以及值函数网络结构

其中输入部分左边代表机械手的状态,右边代表物体的朝向,具体的维度如下所示:

状态空间

由于PPO算法的值函数网络只会在训练时使用到,因而采用完整信息对其进行训练。在训练时算法采用了如下三种随机注入方法:

  • Dynamic Randomization
  • Domain Randomization
  • Unmodeled Effects Randomization

具体见下面三张图:

Dynamic Randomization

Domain Randomization

Unmodeled Effects Randomization

最后一部分,由于机械手的任务不应该局限于转动方块,还应该包括操纵其他物体。而且由第二部分可知策略网络以及值函数网络的输入可知需要立方体的朝向以及位置信息,目前是通过16个高精度追踪器确定的。OpenAI为了提高整个系统的通用性,因而在方块的周围相隔一定高度120度角均匀放置了三个摄像头,尝试学习一个模型,输入是三张不同角度的图片,输出是立方体的位置以及朝向。这样就可以把立方体换为任意的物体。其具体的网络结构如下:

Object Pose Prediction

Pose Prediction Network Architecture