强化学习 模仿学习 于robot

写在前面: 分享知识是再好不过的事情。这篇文章主要是总结自己最近看的一些文章以及相关知识。自己在暑假实习的时候学习的就是在物理仿真平台上做robot的强化学习,未来读PhD的时候也被老师继续分配到了这个方向,哈哈。可能要一直从入门到入土了,趁着最近写research proposal的时候,将最近的理解记录一下。鉴于笔者知识水平有限,若有不妥当之处,还请指出。

摘要:robot 强化学习 模仿学习

介绍

从Google的alphago以绝对优势接连战胜人类围棋中的佼佼者(李世石, 柯洁)之后,这总结果当然是震撼的,从此人工智能声名大噪。但是纵使目前能使机器智力超群,围棋上的造诣无人能比,但是它还是连一颗棋子都拿不起来。大家总在畅想未来各种家居机器人会成为我们得力的助手,洗碗做饭洗衣服,任劳任怨不叫苦。当然理想还是要有的,只不过实现起来路还是很长的。现在让机器人学会倒杯水都是很困难的。。。

早在1921年karel Capek就为我们第一次描述了一个机器人应该长什么样子:it should look like a human being。自从那时起,小说家们开始将这一想法发扬光大,在各式各样的科幻小说中,很多超过人的智能机器层出不穷。而现实呢,研究员们还在为实现最简单的可称得上“智能”的机器而夜以继日(artist的创作力真是远超scientist)。在做工程与研究的人眼中,类人的机器人就是合适材料组装的,质量尽可能轻的,有各种各样的motors还有各种各样的传感器的集合。但是在这样的基础上让机器学会推理(reasoning)是很困难的。目前为止,机器人也就只能重复性的完成那些被人为设计好,写在程序中的任务。为了克服这种需要人为给每个动作编程的繁琐步骤,我们迫切的需要一种新的算法。然后强化学习(Reinforcement Learning)被拿来用了。

Reinforcement Learning

                 

一张图简单介绍下强化学习,我们前面提到的robot就是图中的智能体agent。每个agent都是肩负一个使命的,并且要为这个使命在环境(environment)中不断探索(actions),每探索一次都会到达一个新的状态(state)也会得到环境对这个action的反馈(reward)。往往我们的reward就是根据target来设定的,所以要实现的目标也等价于获得最大的累计回报。举个简单的例子(例子才是最能说明问题的),flabbybird 相信大部分人都玩过,没玩过可以玩一玩(强迫症绝对停不下来。。。)。

 

                                                      

这个游戏里面呢,小鸟就是我们的agent,环境就是各种各样的水管,state就是对环境的观测值(包括鸟的速度啊,水管距离啊等等),我们的目标呢就是穿越尽可能多的水管,能采取的action就是点一下或者不点,每穿越一个水管就会得到一个值是1的reward,若是不小心撞到水管那就得到-1的reward然后游戏结束。这个例子中动作空间是离散的也比较简单,用的就是DQN的算法,是很不错的强化学习的入门例子,有兴趣可以去玩一玩。

yenchenlin/DeepLearningFlappyBird​github.com

 

关于强化学各种各样的算法,诸如Q-learning,SARSA,policy gradient等,我就不在这里列公式了,看见公式我也晕,讲的也可能没有人家好,建议有兴趣的人可以去看下CS294课程,还有这里有一些博客链接:强化学习入门资料 - penkgao的博客 - CSDN博客

做了基本的了解之后,我们言归正传,强化学习真的在近些年来被证明是做motion control 任务的非常有效的方法。基于各种各样的仿真平台比如gym,dart,以及很多优秀的物理模拟工具 mujoco,bullet。让研究者们可以非常方便的搭建自己的agent,从人,动物甚至到自行车,再者还有集成各种强化学习算法的平台(如baseline, tensorflow agent)让研究者可以非常方便的调用或者编写自己的强化学习算法。所以在图形学领域,这个方向算是成为了一个热点吧,工作比较突出的,最敬佩的应该是Berkeley的大神博士生 Xuebin Peng吧。

                                                                      Xue Bin (Jason) Peng​xbpeng.github.io

他实现了一些列关于强化学习用于模拟智能体的工作,比如一维和三维的障碍跨越,在最近的文章里还实现了学杂技,也是让人眼前一亮了。所以大家可一看到强化学习在这个方向上的潜力与效果。(无脑宣传一波,暑假张老师 @张心欣提的idea做自行车的训练也是非常的exciting)。

好,吹完了开始黑了。

强化学习在做motion control是极好的,但是往往一开始产生的都是一些非常滑稽的,不对称的动作,为了解决这个问题,研究者们就开始将目光投到cost function上去,比如Wenhao Yu(VincentYu68/SymmetryCurriculumLocomotion)他们的设计了一种新颖的方式计算动作的协调对称性,取得了不错的效果,然后Xuebin Peng最近开始从视频中一帧帧匹配agent的动作与视频中角色动作的匹配度。除了loss fucntion,reward的设计也真的是奇技淫巧,灵光乍现,不然的话最后也变成了玄学调参。暑假做训练上面那个自行车的时候,reward加的也是随心所欲,不断尝试,出现问题马上就改。因为reward的设计直接决定了最后的训练效果,目前好像也还没有系统的指导我们如何设计reward function的行之有效的方法,毕竟对于不同的任务,情景和要求也是千差万别的。

虽然强化学习比较接近生物体学学习的本质了吧,可是仔细想想还是略有不同的,人往往可以通过看别人演示一遍,就能自己上手操作了,而不是完全无脑的尝试。于是模仿学习出现了。

imitation learning

目前模仿学习的主流方法分成两大类,behaviour cloning 和 inverse imitation learning。

对于behaviour cloning:

思路就是,一些专家(expert)提供一些demonstration。然后agent通过反复的研究这些demos,从中提取出专家的行为轨迹\gamma = (s_1, a_1, s_2, a_2 ..... s_n, a_n) ,然后当agent会去自己保存的专家轨迹中去匹配自己当前遇到的情形,然后模仿专家采取的动作来应对。就将这类问题变成了有监督的问题。那么然后问题来来了,有些情形下的数据无法收集,比如在自动驾驶中去收集高度危险的情形损失是很大的,然后就是遇见新的情形,专家轨迹中没有怎么办,就会造成covariate shift,误差就会累积。

为了改善这种问题有人就提出了DAGGER方法:

  • train \pi_\theta(a_t|s_t) ​ from human data ​ {D_\pi^* = \{s_1, a_1, ... s_n, a_n \}}
  • run \pi_\theta(a_t|s_t) ​ to get dataset ​ {D_\pi = \{s_1,  ... s_n \}}
  • expert labels ​​ D_\pi with actions ​ a_t
  • ​ D_\pi^* = D_\pi^*  \cup D_\pi
  • go to first step

就是对于每次用当前策略遇到的情形,都会重新让专家进行标记。emmm,感觉无非就是扩大了数据集。虽然证明比较有效果,但是将冗余的劳动转移到了专家身上,这是比较低效和费时的。

Inverse Reinforcement learning

                     

逆向强化学习就是通过专家给出的demonstrations,去归类(离散)或者回归(连续)出reward function。怎么做呢,就是假设专家的动作是最优的,找出一种reward function,满足下面的式子:

E[\sum_{t = 0}^\infty \gamma^t R^*(s_t)|\pi^* ]  \ge E[\sum_{t = 0}^\infty\gamma^t R^*(s_t)|\pi ]                         \quad \forall \pi (1)

\pi^* 就是专家策略,而 \pi 就是当前reward function中产生的最优策略。逆向强化学习的方法有很多中比如学徒学习,MMP,结构化分类,最大熵IRL等。我们以学徒学习来说明一下:

首先假设reward function是关于status feature是线性的有 R(s) = w^T \phi(s) , w \in R^n \phi: s \rightarrow R^n . 然后(1)式可以进一步写成:

E[\sum_{t = 0}^\infty \gamma^t R(s_t)|\pi ] = E[\sum_{t = 0}^\infty\gamma^t w^T \phi(s_t)|\pi ] \\ \quad\quad\quad\quad\quad\quad\quad =w^T E[\sum_{t = 0}^\infty\gamma^t  \phi(s_t)|\pi ] \\ \quad \quad=w^T\mu(\pi)

现在我们的目标就是找到最优的 w^* 使得 w^{*T}\mu(\pi^*)\ge w^{*T}\mu(\pi) \quad \forall\pi . 当我们产生的策略与专家策略尽可能地一样优秀的时候,就会得到 |w^{*T}\mu(\pi^*)-w^{*T}\mu(\pi)|\le\epsilon 。通过上面的推导,然后写出下面的算法步骤:

  • assume ​ R_w(s)=w^T\phi(s)
  • initialize: pick some policy \pi_0 ​
  • iterate for ​ i = 1,2,3....
    • find a reward function so that the expert policy outperform all previous found policies
      max \gamma ​ s.t. ​ \gamma \le w^T \mu(\pi^*)-w^T \mu(\pi) \quad\forall\pi \in \{\pi_0,\pi_1...\pi_{i-1}\}
    • Run reinforcement learning algorithms to find the optimal policy ​ based on current reward function ​ R_w
    • update ​ w
    • if ​ \gamma \le \epsilon/2 , exit

尽管逆向强化学习取得了很不错的结果[2,3],但是也有一些一直被嫌弃的地方,就是每次内层循环都要跑一遍RL,这样的计算花费也是很大的。然后呢对于reward 关于feature的线性假设可能也有不合理的地方。

新的方法:

基于上面出现的问题,又有新的方法提出了,比如GAIL[1], 用GAN的思路来做这类问题,还是有一定的合理性的。不在费尽心思的设计reward function 或者迭代reward function,而是直接生成reward function的分布,思路还是很让人激动的不知道以后会不会有什么特别惊艳的结果。还有最近的one - shot imitation learning(被翻译成一眼学习)。干的事情就是,专家只提供一个demonstration,然后agent就可以学会完成这个任务。

https://blog.openai.com/robots-that-learn/​blog.openai.com

 

主页中可以看到,完成的是累积木块的任务,将特定颜色的木块放到另外一个上去。虽然目前完成的任务还比较简单,而且也是提前进行了大量的类似任务的训练,但是未来应该会基于此出现更多优秀的成果,毕竟openAI。。。

 

写在最后:
虽然出现了很多越来越优秀的算法和结果,但是还有很长的路要走啊。目前大部分的训练还都是在物理仿真平台上进行的,从模拟域到现实中的reality gap也是一个需要研究和解决的问题,此外目前的这些方法无非就是让agent不断的copy,模仿专家的动作,而真正通过demonstration理解专家的意图然后做出比专家更加优秀的动作也是还未能做到的。总之呢,会越来越好的。

 

references

[1] : Ho, Jonathan, and S. Ermon. "Generative Adversarial Imitation Learning." (2016).

[2] : N. D. Ratliff, D. Silver, and J. A. Bagnell. Learning to search: Functional gradient techniques for imitation learning. Autonomous Robots, 27(1):25–53, 2009.

[3] : B. D. Ziebart, A. Maas, J. A. Bagnell, and A. K. Dey. Maximum entropy inverse reinforcement learning. In AAAI, AAAI’08, 2008.

[4] : Stéphane Ross, Geoffrey J Gordon, and Drew Bagnell. A reduction of imitation learning and structured prediction to no-regret online learning. In AISTATS, volume 1, page 6, 2011.

[5] : GAIL生成对抗模仿学习详解《Generative adversarial imitation learning》

强化学习模仿学习robot 写在前⾯: 分享知识是再好不过的事情。这篇⽂章主要是总结⾃⼰最近看的⼀些⽂章以及相关知识。⾃⼰在暑假实习的时候学习的就 是在物理仿真平台上做robot强化学习,未来读PhD的时候也被⽼师继续分配到了这个⽅向,哈哈。可能要⼀直从⼊门到⼊⼟了,趁 着最近写research proposal的时候,将最近的理解记录⼀下。鉴于笔者知识⽔平有限,若有不妥当之处,还请指出。 摘要: 摘要:robot 强化学习 强化学习 模仿学习 模仿学习 介绍 介绍 从Google的alphago以绝对优势接连战胜⼈类围棋中的佼佼者(李世⽯, 柯洁)之后,这总结果当然是震撼的,从此⼈⼯智能声名⼤噪。但是 纵使⽬前能使机器智⼒超群,围棋上的造诣⽆⼈能⽐,但是它还是连⼀颗棋⼦都拿不起来。⼤家总在畅想未来各种家居机器⼈会成为我们得 ⼒的助⼿,洗碗做饭洗⾐服,任劳任怨不叫苦。当然理想还是要有的,只不过实现起来路还是很长的。现在让机器⼈学会倒杯⽔都是很困难 的。。。 早在1921年karel Capek就为我们第⼀次描述了⼀个机器⼈应该长什么样⼦:it should look like a human being。⾃从那时起,⼩说家 们开始将这⼀想法发扬光⼤,在各式各样的科幻⼩说中,很多超过⼈的智能机器层出不穷。⽽现实呢,研究员们还在为实现最简单的可称得 上"智能"的机器⽽夜以继⽇(artist的创作⼒真是远超scientist)。在做⼯程与研究的⼈眼中,类⼈的机器⼈就是合适材料组装的,质量 尽可能轻的,有各种各样的motors还有各种各样的传感器的集合。但是在这样的基础上让机器学会推理(reasoning)是很困难的。⽬前 为⽌,机器⼈也就只能重复性的完成那些被⼈为设计好,写在程序中的任务。为了克服这种需要⼈为给每个动作编程的繁琐步骤,我们迫切 的需要⼀种新的算法。然后强化学习(Reinforcement Learning)被拿来⽤了。 Reinforcement Learning ⼀张图简单介绍下强化学习,我们前⾯提到的robot就是图中的智能体agent。每个agent都是肩负⼀个使命的,并且要为这个使命在环境 (environment)中不断探索(actions),每探索⼀次都会到达⼀个新的状态(state)也会得到环境对这个action的反馈(reward)。 往往我们的reward就是根据target来设定的,所以要实现的⽬标也等价于获得最⼤的累计回报。举个简单的例⼦(例⼦才是最能说明问题 的),flabbybird 相信⼤部分⼈都玩过,没玩过可以玩⼀玩(强迫症绝对停不下来。。。)。 这个游戏⾥⾯呢,⼩鸟就是我们的agent,环境就是各种各样的⽔管,state就是对环境的观测值(包括鸟的速度啊,⽔管距离啊等等),我 们的⽬标呢就是穿越尽可能多的⽔管,能采取的action就是点⼀下或者不点,每穿越⼀个⽔管就会得到⼀个值是1的reward,若是不⼩⼼撞 到⽔管那就得到-1的reward然后游戏结束。这个例⼦中动作空间是离散的也⽐较简单,⽤的就是DQN的算法,是很不错的强化学习的⼊门 例⼦,有兴趣可以去玩⼀玩。 关于强化学各种各样的算法,诸如Q-learning,SARSA,policy gradient等,我就不在这⾥列公式了,看见公式我也晕,讲的也可能没有 ⼈家好,建议有兴趣的⼈可以去看下CS294课程,还有这⾥有⼀些博客链接: 做了基本的了解之后,我们⾔归正传,强化学习真的在近些年来被证明是做motion control 任务的⾮常有效的⽅法。基于各种各样的仿真 平台⽐如gym,dart,以及很多优秀的物理模拟⼯具 mujoco,bullet。让研究者们可以⾮常⽅便的搭建⾃⼰的agent,从⼈,动物甚⾄到 ⾃⾏车,再者还有集成各种强化学习算法的平台(如baseline, tensorflow agent)让研究者可以⾮常⽅便的调⽤或者编写⾃⼰的强化学 习算法。所以在图形学领域,这个⽅向算是成为了⼀个热点吧,⼯作⽐较突出的,最敬佩的应该是Berkeley的⼤神博⼠⽣ Xuebin Peng 吧。 他实现了⼀些列关于强化学习⽤于模拟智能体的⼯作,⽐如⼀维和三维的障碍跨越,在最近的⽂章⾥还实现了学杂技,也是让⼈眼前⼀亮 了。所以⼤家可⼀看到强化学习在这个⽅向上的潜⼒与效果。(⽆脑宣传⼀波,暑假张⽼师 提的idea做⾃⾏车的训练也是⾮常的 exciting)。 好,吹完了开始⿊了。 强化学习在做motion control是极好的,但是往往⼀开始产⽣的都是⼀些⾮常滑稽的,不对称的动作,为了解决这个问题,研究者们就开始 将⽬光投到cost function上去,⽐如Wenhao Yu()他们的设计了⼀种新颖的⽅式计算动作的协调对称
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值