fix some typos

This commit is contained in:
qiwang067
2020-10-11 22:23:28 +08:00
parent 52bf4c3399
commit dc03103f26

View File

@@ -1,11 +1,13 @@
# Sparse Reward
实际上用 reinforcement learning learn agent 的时候,多数的时候 agent 都是没有办法得到 reward 的。那在没有办法得到 reward 的情况下, agent 来说它的训练是非常困难的。举例来说,假设你今天要训练一个机器手臂,然后桌上有一个螺丝钉跟螺丝起子,那你要训练它用螺丝起子把螺丝钉栓进去,那这个很难,为什么?因为你知道一开始你的 agent 是什么都不知道的,它唯一能够做不同的 action 的原因是 exploration。举例来说你在做 Q-learning 的时候,会有一些随机性,让它去采取一些过去没有采取过的 action那你要随机到说它把螺丝起子捡起来再把螺丝栓进去然后就会得到 reward 1这件事情是永远不可能发生的。所以不管你的 actor 做了什么事情,它得到 reward 永远都是 0对它来说不管采取什么样的 action 都是一样糟或者是一样的好。所以,它最后什么都不会学到。如果环境中的 reward 非常的 sparsereinforcement learning 的问题就会变得非常的困难。但是人类可以在非常 sparse 的 reward 上面去学习,我们的人生通常多数的时候,我们就只是活在那里,都没有得到什么 reward 或是 penalty。但是人还是可以采取各种各式各样的行为。所以一个真正厉害的 AI 应该能够在 sparse reward 的情况下也学到要怎么跟这个环境互动。
实际上用 reinforcement learning learn agent 的时候,多数的时候 agent 都是没有办法得到 reward 的。那在没有办法得到 reward 的情况下,训练 agent 是非常困难的。举例来说,假设你要训练一个机器手臂,然后桌上有一个螺丝钉跟螺丝起子,那你要训练它用螺丝起子把螺丝钉栓进去,那这个很难,为什么?因为你知道一开始你的 agent 是什么都不知道的,它唯一能够做不同的 action 的原因是 exploration。举例来说你在做 Q-learning 的时候,会有一些随机性,让它去采取一些过去没有采取过的 action那你要随机到说它把螺丝起子捡起来,再把螺丝栓进去,然后就会得到 reward 1这件事情是永远不可能发生的。所以不管你的 actor 做了什么事情,它得到 reward 永远都是 0对它来说不管采取什么样的 action 都是一样糟或者是一样的好。所以,它最后什么都不会学到。
如果环境中的 reward 非常 sparsereinforcement learning 的问题就会变得非常的困难,但是人类可以在非常 sparse 的 reward 上面去学习。我们的人生通常多数的时候,我们就只是活在那里,都没有得到什么 reward 或是 penalty。但是人还是可以采取各种各式各样的行为。所以一个真正厉害的 AI 应该能够在 sparse reward 的情况下也学到要怎么跟这个环境互动。
怎么解决 sparse reward 的这件事情呢?我们等一下会讲三个方向。
## Reward Shaping
![](img/10.1.png)
第一个方向叫做 `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 好引导你的 machine做你想要它做的事情。
第一个方向 `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 好引导你的 machine做你想要它做的事情。
![](img/10.2.png)
@@ -13,10 +15,12 @@
Reward shaping 是有问题的,因为我们需要 domain knowledge举例来说机器人想要学会的事情是把蓝色的板子从这个柱子穿过去。机器人很难学会我们可以做 reward shaping。一个貌似合理的说法是蓝色的板子离柱子越近reward 越大。但是 machine 靠近的方式会有问题,它会用蓝色的板子打柱子。而我们要把蓝色板子放在柱子上面去,才能把蓝色板子穿过柱子。 这种 reward shaping 的方式是没有帮助的,那至于什么 reward shaping 有帮助,什么 reward shaping 没帮助,会变成一个 domain knowledge你要去调的。
## Curiosity
### Curiosity
![](img/10.3.png)
接下来就是介绍各种你可以自己加进去in general 看起来是有用的 reward。举例来说一个技术是给 machine 加上 curiosity所以叫 `curiosity driven reward`。上图是我们之前讲 Actor-Critic 的时候看过的图。我们有一个 reward function它给你某一个 state给你某一个 action它就会评断说在这个 state 采取这个 action 得到多少的 reward。那我们当然希望 total reward 越大越好。在 curiosity driven 的这种技术里面,你会加上一个新的 reward function。这个新的 reward function 叫做 `ICM(intrinsic curiosity module)`它就是要给机器加上好奇心。ICM 会吃 3 个东西,它会吃 state $s_1$、action $a_1$ 和 state $s_2$。根据 $s_1$ 、$a_1$、 $a_2$,它会 output 另外一个 reward我们这边叫做 $r_1^i$。对 machine 来说total reward 并不是只有 r 而已,还有 $r^i$。它不是只有把所有的 r 都加起来,它还把所有 $r^i$ 加起来当作total reward。所以它在跟环境互动的时候它不是只希望 r 越大越好,它还同时希望 $r^i$ 越大越好,它希望从 ICM 的 module 里面得到的 reward 越大越好。ICM 就代表了一种 curiosity。
接下来就是介绍各种你可以自己加进去in general 看起来是有用的 reward。举例来说一个技术是给 machine 加上 curiosity所以叫 `curiosity driven reward`上图所示,我们有一个 reward function它给你某一个 state给你某一个 action它就会评断说在这个 state 采取这个 action 得到多少的 reward。那我们当然希望 total reward 越大越好。
在 curiosity driven 的这种技术里面,你会加上一个新的 reward function。这个新的 reward function 叫做 `ICM(intrinsic curiosity module)`它就是要给机器加上好奇心。ICM 会吃 3 个东西,它会吃 state $s_1$、action $a_1$ 和 state $s_2$。根据 $s_1$ 、$a_1$、$s_2$,它会 output 另外一个 reward $r_1^i$。对 machine 来说total reward 并不是只有 r 而已,还有 $r^i$。它不是只有把所有的 r 都加起来,它还把所有 $r^i$ 加起来当作 total reward。所以它在跟环境互动的时候它不是只希望 r 越大越好,它还同时希望 $r^i$ 越大越好,它希望从 ICM 的 module 里面得到的 reward 越大越好。ICM 就代表了一种 curiosity。
![](img/10.4.png)
@@ -29,14 +33,14 @@ Reward shaping 是有问题的,因为我们需要 domain knowledge举例来
怎么让 machine 知道说什么事情是真正重要的?你要加上另外一个 module我们要 learn 一个`feature extractor`,黄色的格子代表 feature extractor它是 input 一个 state然后 output 一个 feature vector 来代表这个 state那我们期待这个 feature extractor 可以把那种没有意义的画面state 里面没有意义的东西把它过滤掉,比如说风吹草动、白云的飘动、树叶的飘动这种没有意义的东西直接把它过滤掉,
假设这个 feature extractor 真的可以把无关紧要的东西过滤掉以后network 1 实际上做的事情是,给它一个 actor给它一个 state $s_t$ 的 feature representation让它预测 state $s_{t+1}$ 的 feature representation。接下来我们再看说这个预测的结果跟真正的 state $s_{t+1}$ 的 feature representation 像不像越不像reward 就越大。怎么 learn 这个 feature extractor 呢?让这个 feature extractor 可以把无关紧要的事情滤掉呢?这边的 learn 法就是 learn 另外一个network 2。这个 network 2 是吃 $\phi(s_t)$、$\phi(s_{t+1})$ 这两个 vector 当做 input然后接下来它要 predict action a 是什么,然后它希望呢这个 action a 跟真正的 action a 越接近越好。这个 network 2 会 output 一个 action它 output 说,从 state $s_t$ 跳到 state $s_{t+1}$,要采取哪一个 action 才能够做到,那希望这个 action 跟真正的 action 越接近越好。加上这个 network 2 的好处就是因为要用 $\phi(s_t)$、$\phi(s_{t+1})$ 预测 action。所以今天我们抽出来的 feature 跟预测 action 这件事情是有关的。所以风吹草动等与 machine 要采取的 action 无关的东西就会被滤掉,就不会被放在抽出来的 vector representation 里面。
假设这个 feature extractor 真的可以把无关紧要的东西过滤掉以后network 1 实际上做的事情是,给它一个 actor给它一个 state $s_t$ 的 feature representation让它预测 state $s_{t+1}$ 的 feature representation。接下来我们再看说这个预测的结果跟真正的 state $s_{t+1}$ 的 feature representation 像不像越不像reward 就越大。怎么 learn 这个 feature extractor 呢?让这个 feature extractor 可以把无关紧要的事情滤掉呢?这边的 learn 法就是 learn 另外一个 network 2。这个 network 2 是吃 $\phi(s_t)$、$\phi(s_{t+1})$ 这两个 vector 当做 input然后接下来它要 predict action a 是什么,然后它希望呢这个 action a 跟真正的 action a 越接近越好。这个 network 2 会 output 一个 action它 output 说,从 state $s_t$ 跳到 state $s_{t+1}$,要采取哪一个 action 才能够做到,那希望这个 action 跟真正的 action 越接近越好。加上这个 network 2 的好处就是因为要用 $\phi(s_t)$、$\phi(s_{t+1})$ 预测 action。所以今天我们抽出来的 feature 跟预测 action 这件事情是有关的。所以风吹草动等与 machine 要采取的 action 无关的东西就会被滤掉,就不会被放在抽出来的 vector representation 里面。
## Curriculum Learning
![](img/10.6.png)
接下来讲 `curriculum learning` 。Curriculum learning 不是 reinforcement learning 所独有的概念,其实在 machine learning尤其是 deep learning 里面,你都会用到 curriculum learning 的概念。举例来说curriculum learning 的意思是说,你为机器的学习做规划,你给他喂 training data 的时候,是有顺序的,通常都是由简单到难。就好比说,假设你今天要交一个小朋友作微积分,他做错就打他一巴掌,这样他永远都不会做对,太难了。你要先教他九九乘法,然后才教他微积分。所以 curriculum learning 的意思就是在教机器的时候,从简单的题目教到难的题目。就算不是 reinforcement learning一般在 train deep network 的时候,你有时候也会这么做。举例来说,在 train RNN 的时候,已经有很多的文献都 report 说,你给机器先看短的 sequence再慢慢给它长的 sequence通常可以学得比较好。那用在 reinforcement learning 里面,你就是要帮机器规划一下它的课程,从最简单的到最难的。
第二个方向是 `curriculum learning` 。Curriculum learning 不是 reinforcement learning 所独有的概念,其实在 machine learning尤其是 deep learning 里面,你都会用到 curriculum learning 的概念。举例来说curriculum learning 的意思是说,你为机器的学习做规划,你给他喂 training data 的时候,是有顺序的,通常都是由简单到难。就好比说,假设你今天要交一个小朋友作微积分,他做错就打他一巴掌,这样他永远都不会做对,太难了。你要先教他九九乘法,然后才教他微积分。所以 curriculum learning 的意思就是在教机器的时候,从简单的题目教到难的题目。就算不是 reinforcement learning一般在 train deep network 的时候,你有时候也会这么做。举例来说,在 train RNN 的时候,已经有很多的文献都 report 说,你给机器先看短的 sequence再慢慢给它长的 sequence通常可以学得比较好。那用在 reinforcement learning 里面,你就是要帮机器规划一下它的课程,从最简单的到最难的。
* 举例来说,在 Facebook 玩 VizDoom 的 agent 里面Facebook 玩 VizDoom 的 agent 蛮强的。他们在参加这个 VizDoom 的比赛,机器的 VizDoom 比赛是得第一名的,他们是有为机器规划课程的。先从课程 0 一直上到课程 7。在这个课程里面怪物的速度跟血量是不一样的。所以在越进阶的课程里面怪物的速度越快然后他的血量越多。在 paper 里面也有讲说,如果直接上课程 7machine 是学不起来的。你就是要从课程 0 一路玩上去,这样 machine 才学得起来。
@@ -45,6 +49,8 @@ Reward shaping 是有问题的,因为我们需要 domain knowledge举例来
* 如第二张图所示,这边就是把板子挪高一点,挪高一点,所以它有时候会很笨的往上拉,然后把板子拿出来了。如果它压板子学得会的话,拿板子也比较有机会学得会。假设它现在学的到说,只要板子接近柱子,它就可以把这个板子压下去的话。接下来,你再让它学更 general 的 case。
* 如第三张图所示,一开始,让板子离柱子远一点。然后,板子放到柱子上面的时候,它就会知道把板子压下去,这个就是 curriculum learning 的概念。当然 curriculum learning 有点 ad hoc(特别),就是需要人去为机器设计它的课程。
### Reverse Curriculum Generation
![](img/10.7.png)
有一个比较 general 的方法叫做 `Reverse Curriculum Generation`。你可以用一个比较通用的方法来帮机器设计课程,这个比较通用的方法是怎么样呢?假设你现在一开始有一个 state $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。
@@ -57,7 +63,7 @@ Reward shaping 是有问题的,因为我们需要 domain knowledge举例来
![](img/10.9.png)
那最后一个 tip 叫做 `Hierarchical Reinforcement learning`分层的 reinforcement learning。
第三个方向是 `Hierarchical Reinforcement learning`分层的 reinforcement learning。
所谓分层的 reinforcement learning 是说,我们有好几个 agent。然后有一些 agent 负责比较 high level 的东西,它负责订目标,然后它订完目标以后,再分配给其他的 agent去把它执行完成。这样的想法其实也是很合理的。因为我们知道说我们人在一生之中并不是时时刻刻都在做决定。举例来说假设你想要写一篇 paper你会说就我先想个梗这样子然后想完梗以后你还要跑个实验。跑完实验以后你还要写。写完以后呢你还要这个去发表。每一个动作下面又还会再细分比如说怎么跑实验呢你要先 collect datacollect 完 data 以后,你要再 label你要弄一个 network然后又 train 不起来,要 train 很多次。然后重新 design network 架构好几次,最后才把 network train 起来。
所以,我们要完成一个很大的 task 的时候,我们并不是从非常底层的那些 action 开始想起,我们其实是有个 plan。我们先想说如果要完成这个最大的任务那接下来要拆解成哪些小任务。每一个小任务要再怎么拆解成小小的任务。举例来说叫你直接写一本书可能很困难但叫你先把一本书拆成好几个章节每个章节拆成好几段每一段又拆成好几个句子每一个句子又拆成好几个词汇这样你可能就比较写得出来这个就是分层的 reinforcement learning 的概念。