强化学习 模仿学习 于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,从中提取出专家的行为轨迹

,然后当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

尽管逆向强化学习取得了很不错的结果[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》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191675.html原文链接:https://javaforall.cn

原文地址:https://cloud.tencent.com/developer/article/2152139

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340