写在前面: 分享知识是再好不过的事情。这篇文章主要是总结自己最近看的一些文章以及相关知识。自己在暑假实习的时候学习的就是在物理仿真平台上做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/DeepLearningFlappyBirdgithub.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) Pengxbpeng.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,从中提取出专家的行为轨迹 ,然后当agent会去自己保存的专家轨迹中去匹配自己当前遇到的情形,然后模仿专家采取的动作来应对。就将这类问题变成了有监督的问题。那么然后问题来来了,有些情形下的数据无法收集,比如在自动驾驶中去收集高度危险的情形损失是很大的,然后就是遇见新的情形,专家轨迹中没有怎么办,就会造成covariate shift,误差就会累积。
为了改善这种问题有人就提出了DAGGER方法:
- train from human data
- run to get dataset
- expert labels with actions
-
- go to first step
就是对于每次用当前策略遇到的情形,都会重新让专家进行标记。emmm,感觉无非就是扩大了数据集。虽然证明比较有效果,但是将冗余的劳动转移到了专家身上,这是比较低效和费时的。
Inverse Reinforcement learning
逆向强化学习就是通过专家给出的demonstrations,去归类(离散)或者回归(连续)出reward function。怎么做呢,就是假设专家的动作是最优的,找出一种reward function,满足下面的式子:
(1)
就是专家策略,而 就是当前reward function中产生的最优策略。逆向强化学习的方法有很多中比如学徒学习,MMP,结构化分类,最大熵IRL等。我们以学徒学习来说明一下:
首先假设reward function是关于status feature是线性的有 , . 然后(1)式可以进一步写成:
现在我们的目标就是找到最优的 使得 . 当我们产生的策略与专家策略尽可能地一样优秀的时候,就会得到 。通过上面的推导,然后写出下面的算法步骤:
- assume
- initialize: pick some policy
- iterate for
- find a reward function so that the expert policy outperform all previous found policies
max s.t. - Run reinforcement learning algorithms to find the optimal policy based on current reward function
- update
- if , exit
- find a reward function so that the expert policy outperform all previous found policies
尽管逆向强化学习取得了很不错的结果[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》