RLV《Reinforcement Learning with Videos: Combining Offline Observations with Interaction》深度阅读笔记

《Reinforcement Learning with Videos: Combining Offline Observations with Interaction》阅读笔记

前言:

这16页的文章,竟然花了我三天多的时间!
收获还是蛮多的,之前我很少会关注公式推导,现在我渐渐的习惯,直接看流程图-伪代码-公式,来弄明白文章到底做了什么工作。
其次我发现了一个,也许可以解决我目前项目难题的一个点,就是模仿学习,可以避免重建一个奖励函数,而是直接给定固定的稀疏奖励,也能让智能体学到好的策略,但是这篇文章我目前看不懂,也许要花好几天能搞明白。

还有一些乱七八糟的问题,已经给作者发邮件了,等着作者的回复。

最近这两天在刷Sergey Levine巨佬最近两个月的工作,巨佬组实在是太强了,两个月二十五篇左右的文章,基本上都是顶会的苗子。
这就是顶尖门派的实力吗?恐怖如斯好不好…
简单看了一下标题和摘要,这二十五篇,至少七八篇是和offline有关,有四五篇和meta有关,二十篇都是机器人。
现在大厂大组都有一个趋势,就是把数据库中的那些离线数据利用起来。
自20年,对比学习有了突破之后,强化也开始了offline,都希望能够利用越来越大的数据集,去炼出更高阶的丹药。
但其实对我们这种本就不富裕的实验室来说,雪上加霜。
这个前言其实应该是下一篇review写的,但是由于这篇是我选定的五篇重点阅读的第一篇,所以就先写在这儿了。
这篇文章,解决的问题更加离谱。
offline只不过是数据分布和当前策略不太一致,但是这篇文章是直接拿无动作,无奖励的人类视频进行学习,这三无数据也能学到东西?
之前我老板也是想做这个,我心里也是一顿腹诽,单纯的人类的演示视频,能有什么信息增益?怕不是更多的是噪声信息,需要更多的时间去调参,才能凑出一个好的结果。

因此看到这篇文章的标题和摘要,我首先要提出下面几个问题:

开篇几问:

  1. 怎么利用这个三无人类视频数据?
  2. 人类视频和机器人数据是否有配对?如果需要人机数据配对了,这个工作的价值就差了很多。
  3. 效果怎么样?
  4. 这个方法的问题有哪些?
  5. 结果可推广吗?

参考链接:

https://arxiv.org/pdf/2011.06507

一. 论文简介

1. 作者:

一作是Karl Schmeckpeper,没怎么见这个人,University of Pennsylvania宾夕法尼亚大学和levine有合作了?
通讯不仅是levine,还有斯坦福的Chelsea Finn,老搭档了。

2. 期刊杂志:

4th Conference on Robot Learning (CoRL 2020), Cambridge MA, USA.
他们的家常便饭,羡慕死了。

3. 引用数:

刚出来的文章,目前还没有。

4. 一句话介绍论文解决的问题:

文章结构比较复杂,一句话讲不明白,提前把信息流放这一节描述。

要利用无动作,无奖励的人类演示视频(少量人机配对的图片,和大量无配对),去填补强化模型的数据不足。
文章通过下面几种模型,将填补人机视频的差距:
在这里插入图片描述
1.生成动作。左边图的作用,对于人类视频无动作,可以先用机器人交互数据,训练一个逆运动学模型 f i n v ( x ) f_{inv}(x) finv(x),信息流如下:

前后两帧交互图片 [ S i n t , S i n t ′ ] [S_{int}, S'_{int}] [Sint,Sint]通过卷积编码器 f e n c o d e r ( s ) f_{encoder}(s) fencoder(s)得到特征向量 [ h i n t , h i n t ′ ] [h_{int}, h'_{int}] [hint,hint],特征向量传入逆运动学模型 f i n v ( h i n t , h i n t ′ ) f_{inv}(h_{int}, h'_{int}) finv(hint,hint)得到动作 a a a,这个a由于是可以从交互过程拿到,因此整个训练过程是有监督的。

这里主要是用来训练模型 f i n v ( h i n t , h i n t ′ ) f_{inv}(h_{int}, h'_{int}) finv(hint,hint),因为卷积编码器 f e n c o d e r ( s ) f_{encoder}(s) fencoder(s)是后面的联合训练的。

2.生成奖励:
中间图的作用,主要是通过刚才学出来的逆模型,产生动作。奖励是单独通过公式来的,即
在这里插入图片描述
当视频流中最后一帧 s ′ s' s,对应的奖励是一个大点的值,其他的都给一个固定的小值,我看他引用的那篇文章,那个固定小值就是0.在这篇文章中,是这样的:
在这里插入图片描述

3.怎么将人的视频映射到机器人的domain中?
在左图中,你训练好了一个好了一个逆模型 f i n v f_{inv} finv,但是针对的机器人交互数据,对于异构的人类视频,产生的动作,肯定会稀奇古怪,因此要做好domain adaptation。这个域适应,是引用17年的一篇经典文章,由于这段东西比较多,直接放到论文背景里介绍了。

5. 论文背景,领域

Adversarial Discriminative Domain Adaptation

基于对抗识别的域适应,这玩意儿也许有用,虽然我看原论文效果,以及别人复现的结果也不算好。
这篇17年的论文引用率在一千五左右?
我没有看原文,直接挂一个知乎大佬的解读,比较容易看懂:
Adversarial Discriminative Domain Adaptation

ADDA信息流:

假定两个数据集很相似(特征相差不大)。
在这里插入图片描述
1.pre-traning: 首先使用source image训练一个classifier;

这里是有监督的训练,source dataset有标签,直接训练就可以了。

2.Adversarial Adaptation: discriminator判断from source or target.注意这里的source CNN和Pre-traning的结构参数是完全一样的;

这是核心操作。target dataset没有标签,但是有一组图片,这本身也是一个信息量,如何把这个信息量用上?那就搞一个识别器。
下图中的虚线框代表固定参数,实线框代表模型参数可训练
待训练的模块有两个,一个是Target CNN,一个是判别器D,分开训练:
当训练判别器D时,固定Target CNN。输入source images,判别器标签为1,输入target images时,判别器标签为0。最小化网络输出值和标签的差距。
当训练编码器Target CNN的时候,固定判别器D。输入target images时,标签为1。通过更新Target CNN参数,来最小化网络输出与标签的差距。
最终网络学到的效果是,判别器能准确的识别source还是target。编码器Target CNN的输出更偏向于source images。以便于直接利用第一步训练的分类器classifier.

上面这些操作,理想的目的是拿到一个好的Target CNN,target images生成的特征向量和source images通过Source CNN生成的,风格一样。至于本身的数字属性,是否会变化,畸变,影响后面的分类,直观上理解,应该不会影响太大,但是从结果上看,是有的。

3.Testing:对target image进行预测label。
假设模型已经收敛,直接利用Target CNN进行编码,再用classifier进行分类。

ADDA总结

这篇文章的网络更新和ADDA区别还是很大的。
这篇文章的Source CNN和Target CNN竟然是同结构,同参数?
更新的时候,也不是分开更新,而是联合更新:

6. 应用场景

适合拥有大量人类演示视频的实验室?
说实话,这个条件,其实很难达到的。
一般来说。
人的操作成本>真实机器人探索成本>仿真机器人探索成本。
因此你加了人的协作,还要配对每帧图片,这个本身就不太合适。

二. 创新点和贡献:

  1. 能利用大量无动作,无奖励,未配对的人类操作数据(198 videos, totaling 806 seconds. ),和少量人机配对的数据(314 paired images),提高强化学习的学习速度。
  2. 普遍能降低一倍的时间消耗。
  3. 他说这些少量人机配对数据,能在同一个环境的不同任务使用。好吧,你说的都对。

三. 相关领域的概述(related work)

见论文背景。

四. 作者的方案

我好像很少看这种涉及深度学习网络loss的文章,这次学到了很多,做一个详细的笔记。

1.训练逆模型 f i n v ( h i n t , h i n t ′ ; θ ) f_{inv}(h_{int}, h'_{int}; \theta) finv(hint,hint;θ)

先解释上面的表达式的意思。
模型名称: f i n v f_{inv} finv, inv是inverse的简写
输入变量: h i n t h_{int} hint h i n t ′ h'_{int} hint是前后两帧的交互(interaction)数据
参数: θ \theta θ,用分号隔开,最后的一个变量为模型的参数。

再细说逆模型训练的loss:
在这里插入图片描述
标签: a i n t a_{int} aint机器人的交互(interaction)动作
数据: h i n t h_{int} hint h i n t ′ h'_{int} hint是前后两帧的机器人的交互(interaction)数据
更新参数: θ \theta θ

2.训练判别器 f d i s c r ( f e n c ( s i n t ; ψ ) ; ϕ ) f_{discr}(f_{enc}(s_{int};\psi); \phi) fdiscr(fenc(sint;ψ);ϕ)

模型名称: f d i s c r ( f e n c ( s i n t ; ψ ) ; ϕ ) f_{discr}(f_{enc}(s_{int};\psi); \phi) fdiscr(fenc(sint;ψ);ϕ), discr是判别的简写
输入变量: f e n c ( s i n t ; ψ ) f_{enc}(s_{int};\psi) fenc(sint;ψ)是编码器的输出
参数: ψ \psi ψ
在这里插入图片描述
标签:当训练判别器 f d i s c r f_{discr} fdiscr时,固定 f e n c f_{enc} fenc。输入 s i n t s_{int} sint,判别器标签为1;输入 s o b s s_{obs} sobs时,判别器标签为0。
数据: s i n t s_{int} sint s o b s s_{obs} sobs随机在人和机器人数据集采样的单帧图片。
更新参数: ψ \psi ψ ϕ \phi ϕ至于这个 ψ \psi ψ到底更不更新,我还得等作者的回复。

3.训练编码器:

最重要的这个编码器,论文我看了好几遍,上面写的时候,也没说清楚,等看懂了这个loss公式,才明白是因为啥。
果然数学是最好的语言。
文中对参数 ψ \psi ψ训练的loss,只有下面的公式:
在这里插入图片描述
标签和数据: f e n c ( s i n t , p a i r ; ψ ) f_{enc}(s_{int,pair}; \psi) fenc(sint,pair;ψ) f e n c ( s o b s , p a i r ; ψ ) f_{enc}(s_{obs,pair}; \psi) fenc(sobs,pair;ψ)。要同时输入时序配对好的,机器人图片,以及人的操作图。强行约束编码器 f e n c ( s o b s , p a i r ; ψ ) f_{enc}(s_{obs,pair}; \psi) fenc(sobs,pair;ψ)拿到的值 h o b s h_{obs} hobs h i n t h_{int} hint一致。
更新参数: ψ \psi ψ

和原始的ADDA区别在于,训练编码器的时候方法不一样。
ADDA的目标域编码器训练,是通过类生成对抗形式。
而这里的编码器训练,是在同一时间上的两个图片源,直接约束到一个值,约束性要比ADDA的风格约束强很多,但是由于配对的数据量少,具体效果也搞不清楚。

五. 主要的信息流(approach)

见一句话描述。
(我这个模板看来是有大问题。)

六. 总结:

这篇文章的思路比较清晰,就是想办法利用三无的人类演示视频。
也不用花里胡哨的奖励函数,只要少量的人机时序配对数据,就能加速智能体学习一倍的速度。
但是现实应用场景堪忧,至少在我的想象力中是比较难的。

联系方式

ps: 欢迎做强化的同学加群一起学习:
深度强化学习-DRL:799378128
欢迎关注知乎帐号:未入门的炼丹学徒
CSDN帐号:https://blog.csdn.net/hehedadaq

猜你喜欢

转载自blog.csdn.net/hehedadaq/article/details/112862579