September 26, 2018
by Frank
目前 end-to-end 的学习框架在机器人控制的领域内变得流行起来,这些框架的直接输入是状态/图像,然后直接输出预测的扭矩和动作参数。但是由于其对于数据的大量需求而受到了批判,并兴起了对于其可扩展性的讨论,即 end-to-end 的学习方式是否需要为每一个任务都单独建立一个模型?从直觉上来说任务间的共享是有帮助的,因为其对环境都需要有一些共同的理解。在该论文中尝试了数据驱动的 end-to-...
目前 end-to-end 的学习框架在机器人控制的领域内变得流行起来,这些框架的直接输入是状态/图像,然后直接输出预测的扭矩和动作参数。但是由于其对于数据的大量需求而受到了批判,并兴起了对于其可扩展性的讨论,即 end-to-end 的学习方式是否需要为每一个任务都单独建立一个模型?从直觉上来说任务间的共享是有帮助的,因为其对环境都需要有一些共同的理解。在该论文中尝试了数据驱动的 end-to-end 学习框架的下一步,即从特定任务的模型到多机器人任务的联合模型,得到了令人惊讶的结果:在同样数据量下多任务学习的效果要优于单任务学习。比如说对于 grasp 任务,2.5k 的 grasp 数据+2.5k 的 push 数据训练下的模型的表现要优于 5k 的 grasp 数据训练下的模型。
当机器人准备执行一个操作(比如抓取)的时候,需要完成以下几个步骤:(a)推断物体的属性,(b)对自己的构造有一定了解,(c)理解怎样是一个成功的抓取并且知道如何去实现。很多分析框架通过数学的方式来定义(c),而在感知部分则依赖于额外的感知模块,并且通常会做一定程度的简化,这种过度依赖导致其并没有获得很好的效果。end-to-end 的模型通过数据驱动的方式来学习到(a)-(c)的联合模型,表现出了很好的效果。
尽管 end-to-end 的模型取得了很好的效果,但是也有很多批判的声音,主要在于其需要对每一个任务都单独建立一个模型,而每一个模型的训练都需要大量的数据。那么有没有一种在任务间进行共享的方式来减小数据量的需求?直觉上说是存在的,因为所有的任务都需要(a)和(b)两部分,比如 push 任务的数据对于训练 grasp 的感知模块也是有帮助的。
如前文提到的,在相同数据量下,不同任务的数据组合下的表现要优于单个任务的数据,猜测这可能是因为执行多个任务能够探索原任务中接触不到的目标属性与模式,这可以看作是一种正则化的手段,可以学得更多的泛化特征。
对于 grasp,这是一个比较老的问题了,以前的方法大多都是基于分析方法和 3d 推理,来预测抓取位置和配置,最近才开始兴起了数据驱动的学习方式。pushing 是另一个机器人的基本任务,使得在不需要抓取的情况下就可以使目标物体移动。另外我们使用触觉感应预测(poking)来作为学习 pushing 和 grasp 的辅助任务。
前文提到了收集大量的数据可以被用于机器人任务,但是数据的收集是时间密集型的任务,multi task learning(MTL)利用一种共享的方式来探索这些任务之间的共性,即利用之前的任务来初始化当前的参数。本文专注于探索 end-to-end 的用于 grasping 和 pushing 的 MTL 模型。
对于机器人任务而言,之前的框架主要都是针对特定任务的,这是第一篇报道多任务间的共享能够改善任务表现的文章,并且发现原始任务的额外数据点的价值并不如交替任务的价值,大概是因为这样的共享增强了鲁棒性并且对于特征学习进行了正则化,对于多个任务都有改善作用。通过对 MTL 的探索我们发现即使只有少量的数据,通过利用其他任务的大量数据也能够得到高效的模型。
我们的目标是探索针对特定任务收集的数据是否可以用在其他任务上,现在的研究方向都在于针对每个任务都训练一个特定模型,然而我们觉得大多数这些问题都要学习这个世界是如何工作的,因此可以进行数据间的共享来加快学习速度。具体一点来说就是 CNN 中的某些参数对应视觉特征,某些对应底层结构和物理学,某些对应机器人的结构和控制信息,最后剩余的参数才是针对某个特定任务的,如果确实是这样的话,那么任务间的数据共享则是至关重要的。
本文调查了多任务学习对于 grasping 和 pushing 是否能够得到一个更好的控制模型,收集了 grasping,pushing,poking 三个任务的数据,最后探索了 Grasp ConvNet 在只利用 grasping 数据和利用 grasping,pushing,poking 融合数据下的对比表现,对于 Push ConvNet 也进行了同样的对比。
这里对三个任务进行了形式化描述,即 planar grasping,planar pushing 以及 poking data 在框架中的应用。
一次 grasp 可以用三个参数来定义,分别是抓取点和抓取坐标,训练数据有 37k 失败数据和 3k 成功数据,测试数据有 2.8k 失败数据和 0.2k 成功数据。一个抓取问题可以定义为通过输入图片来预测一个成功的抓取配置,然而这个问题是病态的,因为一个物体可以有多个可能的抓取位置,于是这里采样了一批图片,其位于图片的中心,仅仅需要预测抓取角度,将角度分类为,因此该问题可以转换为 18 个二分类问题,因为评价标准是二分类的,即抓取成功或者失败。
push 的每个数据点包括三个部分,初始图像,结束图像和动作,整个数据集包括 5k 动作,70 个对象
这个对于 push 的学习器的任务是给定初始和结束的图片,然后预测 push 动作,这里使用的是带有共享权重的 siamese network,输入的一端是,另一端是,在两端处理之后 concat 到一起,然后使用 fc 层来输出,损失函数使用的是欧式距离
这个数据集包括目标的图片和 poking 的时候感受到的反馈,学习器的任务就是通过输入图片来预测。
利用两个参数来表示,即电压增加的斜率和截距,这里采用了和 grasp 类似的结构,前面三层的网络参数与 grasp 进行共享,剩余的网络则是专门用于 poking 任务,这里的损失函数同样是欧式距离。
这里的 feature transfer 有两种,一种是 poking+pushing->grasping,另一种是 poking+grasping->pushing。网络的机构如下图
前面三个 conv 中,上下两层是共享权重的,conv 上的数字代表卷积核的大小和数量,每个 conv 层后面都紧接着 BN 和 ReLU。对于 grasp 任务,前两层 fc 后面都紧接着 p=0.5 的 dropout 层和 ReLU,对于 poking 也是同样的。而对于 pushing 任务由于需要输入两张图片,因此使用了如图的两个卷积过程,但是其中的参数都是共享的,后面经过 concat 然后同样的 fc 层,然后输出预测的 5 维向量。
在这里主要介绍训练细节,对于损失函数,grasping 使用的是交叉熵(cross-entropy),而 pushing 和 poking 都是用的欧式距离作为损失函数。
对于整个联合训练过程,取 batch_size=128,可以得到针对三个任务的 batch,对于全连接层的梯度计算和普通情况是相同的,对于共享的 conv 层,梯度的计算略有不同,其梯度计算公式为:
其中分别为 grasping,pushing,poking 任务的损失函数。在训练过程中使用 RMSProp 算法,这是一个基于梯度下降的算法,学习率取为 0.002,momentum=0.9,decay=0.9,学习率每 5000 步以 0.1 的比例大小进行衰减。
在进行验证的时候,对于 grasping 任务,使用的是分类误差,而对于 pushing 任务使用的均方误差。
这里主要是对多任务训练和特定任务的性能进行对比,这里的 multi-task 忽略了 poking 的情况,训练数据中 pushing 和 grasping 各占一半,最后得到的结论为,在小数据量下,特定任务数据的表现更好,在大数据量下,多任务的表现更好,这可能是由于多任务数据提供了一种差异性,有一种正则化的效果,可以防止过拟合
这里对于数据占比的大小进行了实验,实验结果如下图,可以看出 pushing 要比 grasping 更易于进行迁移。
这里进行实验对是否加入 poking 进行了验证,并且对于不同的数据比例也进行了实验,说明 poking 还是有较大用处的,结果如下
现在的研究趋势都在于特定任务的学习,很多地方的讨论也认为多任务学习是没有用处的,然而这样产生了一种问题,即针对 end-to-end 的学习方式,需要大量的训练数据。本文表明多任务训练不仅是可行的,而且在同样数据量的情况下能够获取更好的结果,我们假设这是因为数据的多样性起到了正则化的效果,本文开启了多任务学习在机器人方向的一个新的子领域,尤其在不同任务间的共享上。