强化学习:稀疏奖励(Reward Shaping,Curiosity,Curriculum Learning)

1,基本概念

实际上用强化学习训练智能体的时候,多数的时候 agent 都是没有办法得到 reward 的。在没有办法得到 reward 的情况下,训练 agent 是非常困难的。假设你要训练一个机器手臂,然后桌上有一个螺丝钉跟螺丝起子,那你要训练它用螺丝起子把螺丝钉栓进去,这个很难,为什么?因为一开始你的 agent 是什么都不知道的,它唯一能够做不同的 action 的原因是 exploration。在做 Q-learning 的时候,会有一些随机性,让它去采取一些过去没有采取过的 action,那你要随机到说,它把螺丝起子捡起来,再把螺丝栓进去,然后就会得到 reward 1,这件事情是永远不可能发生的。所以,不管你的 actor 做了什么事情,它得到 reward 永远都是 0,对它来说不管采取什么样的 action 都是一样糟或者是一样的好。所以,它最后什么都不会学到。

如果环境中的奖励非常稀少,强化学习的问题就会变得非常的困难,但是人类可以在非常 sparse 的 reward 上面去学习。我们的人生通常多数的时候,我们就只是活在那里,都没有得到什么 reward 或是 penalty。但是,人还是可以采取各种各式各样的行为。所以,一个真正厉害的 AI 应该能够在 sparse reward 的情况下也学到要怎么跟这个环境互动。

2,Reward Shaping

Reward shaping 的意思是说环境有一个固定的 reward,它是真正的 reward,但是为了让 agent 学出来的结果是我们要的样子,我们刻意地设计了一些 reward 来引导我们的 agent。

如果是把小孩当成一个 agent 的话。那一个小孩,他可以 take 两个 actions,一个 action 是他可以出去玩,那他出去玩的话,在下一秒钟它会得到 reward 1。但是他在月考的时候,成绩可能会很差。所以在100 个小时之后呢,他会得到 reward -100。然后,他也可以决定要念书,然后在下一个时间,因为他没有出去玩,所以他觉得很不爽,所以他得到 reward -1。但是在 100 个小时后,他可以得到 reward 100。但对一个小孩来说,他可能就会想要 take play 而不是 take study。我们计算的是 accumulated reward,但也许对小孩来说,他的 discount factor 会很大,所以他就不太在意未来的reward。而且因为他是一个小孩,他还没有很多 experience,所以他的 Q-function estimate 是非常不精准的。所以要他去 estimate 很远以后会得到的 accumulated reward,他其实是预测不出来的。所以这时候大人就要引导他,怎么引导呢?就骗他说,如果你坐下来念书我就给你吃一个棒棒糖。所以,对他来说,下一个时间点会得到的 reward 就变成是positive 的。所以他就觉得说,也许 take 这个 study 是比 play 好的。虽然这并不是真正的 reward,而是其他人骗他的reward,告诉他说你采取这个 action 是好的。Reward shaping 的概念是一样的,简单来说,就是你自己想办法 design 一些 reward,它不是环境真正的 reward。在玩 Atari 游戏里面,真的 reward 是游戏主机给你的 reward,但你自己去设计一些 reward 好引导你的智能体,做你想要它做的事情。

举例来说 Facebook 玩 VizDoom 的 agent。VizDoom 是一个第一人射击游戏,在这个射击游戏中,杀了敌人就得到 positive reward,被杀就得到 negative reward。他们设计了一些新的 reward,用新的 reward 来引导 agent 让他们做得更好,这不是游戏中真正的 reward。比如说掉血就扣 0.05 的分数,弹药减少就扣分,捡到补给包就加分,呆在原地就扣分,移动就加分。 活着会扣一个很小的分数,因为不这样做的话,智能体会只想活着,一直躲避敌人,这样会让智能体好战一点。

3,Curiosity

在好奇心的这种技术里面,会加上一个新的奖励函数。这个新的奖励函数叫做 ICM,它就是要给机器加上好奇心。ICM 会输入 3 个参数:s_1a_1​ 和 s_2 ,它会输出另外一个奖励 r_1^i 。对 智能体来说,总奖励并不是只有 r ,还有 r^i 。所以,它在跟环境互动的时候,它不是只希望 r 越大越好,它还同时希望 r^i 越大越好,希望从 ICM 的 module 里面得到的 reward 越大越好。ICM 就代表了一种 curiosity。 

在 ICM 里面,你有一个 network,这个 network 会 a_t​ 跟 s_t,然后预测下一个状态,即输出 \hat{s}_{t+1}​ 。这个 network 的预测 \hat{s}_{t+1} 跟真实的情况 s_{t+1}​ 像不像,越不像那得到的 reward 就越大。所以这个 reward r_t^i 的意思是说,如果未来的 state 越难被预测的话,那得到的 reward 就越大。所以如果有这样子的 ICM,智能体就会倾向于采取一些风险比较大的 action,它想要去探索未知的世界,它想要去看看说,假设某一个 state 是它没有办法预测,它会特别去想要采取那个 state,这可以增加智能体 exploration 的能力。

这个想法里面是有一个问题的,这个问题是某一些 state它很难被预测并不代表它就是好的,它就应该要去被尝试的。如果在某一个 state 采取某一个 action,它无法预测接下来结果,它就会采取那个 action,但并不代表这样的结果一定是好的。举例来说,可能在某个游戏里面,背景会有风吹草动,会有树叶飘动。那也许树叶飘动这件事情,是很难被预测的,对 智能体来说它在某一个 state 什么都不做,看着树叶飘动,然后,发现这个树叶飘动是没有办法预测的,接下来它就会一直站在那边,看树叶飘动。所以说,光是有好奇心是不够的,还要让它知道说,什么事情是真正重要的。

怎么让智能体知道说什么事情是真正重要的?要加上另外一个 module,需要学习一个feature extractor,黄色的格子代表 feature extractor,它输入一个 state,然后输出一个 feature vector 来代表这个 state,那我们期待这个 feature extractor 可以把那种没有意义的画面,state 里面没有意义的东西把它过滤掉,比如说风吹草动、白云的飘动、树叶的飘动这种没有意义的东西直接把它过滤掉。

假设这个 feature extractor 真的可以把无关紧要的东西过滤掉,network 1 实际上做的事情是,给它一个 actor,给它一个 s_t 的 feature representation,让它预测 s_{t+1} 的 feature representation。接下来我们再看说,这个预测的结果跟真正的 s_{t+1}​ 的 feature representation 像不像,越不像,reward 就越大。

怎么学习这个 feature extractor 呢?让这个 feature extractor 可以把无关紧要的事情滤掉呢?这边的方法就是学习另外一个 network 2。这个 network 2 输入 \phi(s_t)\phi(s_{t+1}) 这两个 vector 当做 input,然后接下来它要预测 a 是什么,然后它希望呢这个 \hat{a} 跟真正的a 越接近越好。加上这个 network 2 的好处就是因为要用\phi(s_t)\phi(s_{t+1}) 预测 action。所以,抽出来的 feature 跟预测 action 这件事情是有关的。所以风吹草动等与智能体要采取的 action 无关的东西就会被滤掉,就不会被放在抽出来的 vector representation 里面。

4,Curriculum Learning

Curriculum learning 不是强化学习所独有的概念,其实在机器学习,尤其是深度学习里面,你都会用到 Curriculum learning 的概念。Curriculum learning 的意思是说,你为机器的学习做规划,你给他喂 training data 的时候,是有顺序的,通常都是由简单到难。就好比说,假设你今天要交一个小朋友作微积分,他做错就打他一巴掌,这样他永远都不会做对,太难了。你要先教他九九乘法,然后才教他微积分。就算不是 reinforcement learning,一般在 train deep network 的时候,有时候也会这么做。那用在 reinforcement learning 里面,你就是要帮机器规划一下它的课程,从最简单的到最难的。

  • 如第一张图所示,也许一开始机器初始的时候,它的板子就已经在柱子上了。这个时候,机器要做的事情只有把蓝色的板子压下去,就结束了。这比较简单,它应该很快就学的会。它只有往上跟往下这两个选择嘛,往下就得到 reward,就结束了,他也不知道学的是什么。
  • 如第二张图所示,这边就是把板子挪高一点,挪高一点,所以它有时候会很笨的往上拉,然后把板子拿出来了。如果它压板子学得会的话,拿板子也比较有机会学得会。假设它现在学的到说,只要板子接近柱子,它就可以把这个板子压下去的话。接下来,你再让它学更 general 的 case。
  • 如第三张图所示,一开始,让板子离柱子远一点。然后,板子放到柱子上面的时候,它就会知道把板子压下去,这个就是 curriculum learning 的概念。当然 curriculum learning 有点 ad hoc(特别),就是需要人去为机器设计它的课程。

有一个比较普遍的方法叫做 Reverse Curriculum Generation。你可以用一个比较通用的方法来帮机器设计课程。假设你现在一开始有一个状态 ​s_g,这是你的 gold state,也就是最后最理想的结果。如果拿刚才那个板子和柱子的实验作为例子的话,就把板子放到柱子里面,这样子叫做 gold state。你就已经完成了,或者你让机器去抓东西,你训练一个机器手臂抓东西,抓到东西以后叫做 gold state。接下来你根据你的 gold state 去找其他的 state,这些其他的 state 跟 gold state 是比较接近的。举例来说,如果是让机器抓东西的例子里面,你的机器手臂可能还没有抓到东西。假设这些跟 gold state 很近的 state 叫做 s_1 ​。你的机械手臂还没有抓到东西,但它离 gold state 很近,那这个叫做 s_1​。至于什么叫做近,这是 case dependent,你要根据你的 task 来 design 说怎么从 s_g​ sample 出 s_1 ​。接下来呢,你再从这些 s_1​ 开始做互动,看它能不能够达到 gold state s_g​,那每一个 state,你跟环境做互动的时候,你都会得到一个 reward R。

接下来,我们把 reward 特别极端的 case 去掉。Reward 特别极端的 case 的意思就是说那些 case 太简单或是太难了。如果 reward 很大,代表说这个 case 太简单了,就不用学了,因为机器已经会了,它可以得到很大的 reward。如果 reward 太小,代表这个 case 太难了,依照机器现在的能力这个课程太难了,它学不会,所以就不要学这个,所以只找一些 reward 适中的 case。

什么叫做适中,这个就是你要调的参数,找一些 reward 适中的 case。接下来,再根据这些 reward 适中的 case 去 sample 出更多的 state。假设你一开始,你机械手臂在这边,可以抓的到以后。接下来,就再离远一点,看看能不能够抓得到,又抓的到以后,再离远一点,看看能不能抓得到。这是一个有用的方法,它叫做Reverse Curriculum learning。刚才讲的是 curriculum learning,就是你要为机器规划它学习的顺序。而 reverse curriculum learning 是从 gold state 去反推,就是说你原来的目标是长这个样子,我们从目标去反推,所以这个叫做 reverse。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕双嘤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值