fix some errors

This commit is contained in:
qiwang067
2020-07-11 15:42:01 +08:00
parent d2ced89978
commit a783a07fee
4 changed files with 51 additions and 47 deletions

View File

@@ -1,7 +1,7 @@
# 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 的这件事情呢?我们等一下会讲三个方向。
怎么解决 sparse reward 的这件事情呢?我们等一下会讲三个方向。
## Reward Shaping
![](img/7.1.png)
@@ -61,14 +61,14 @@ Reward Shaping 是有问题的因为我们需要domain knowledge举例来
![](img/7.9.png)
那最后一个 tip 叫做 `Hierarchical Reinforcement learning`阶层式的 reinforcement learning。
所谓阶层式的Reinforcement learning 是说,我们有好几个 agent。然后有一些agent 负责比较high level 的东西,它负责订目标,然后它订完目标以后,再分配给其他的 agent去把它执行完成。这样的想法其实也是很合理的。因为我们知道说我们人在一生之中并不是时时刻刻都在做决定。举例来说假设你想要写一篇paper你会说就我先想个梗这样子然后想完梗以后你还要跑个实验。跑完实验以后你还要写。写完以后呢你还要这个去发表。每一个动作下面又还会再细分比如说怎么跑实验呢你要先 collect datacollect 完data 以后,你要再 label你要弄一个network然后又 train 不起来,要 train 很多次。然后重新 design network 架构好几次最后才把network train 起来。
那最后一个 tip 叫做 `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 的概念。
所以,我们要完成一个很大的 task 的时候,我们并不是从非常底层的那些 action 开始想起,我们其实是有个 plan。我们先想说如果要完成这个最大的任务那接下来要拆解成哪些小任务。每一个小任务要再怎么拆解成小小的任务。举例来说叫你直接写一本书可能很困难但叫你先把一本书拆成好几个章节每个章节拆成好几段每一段又拆成好几个句子每一个句子又拆成好几个词汇这样你可能就比较写得出来这个就是分层的 Reinforcement learning 的概念。
这边是举一个例子,就是假设校长、教授和研究生通通都是 agent。那今天假设我们的reward 就是只要进入百大就可以得到 reward。假设进入百大的话校长就要提出愿景告诉其他的agent 说现在你要达到什么样的目标。那校长的愿景可能就是说教授每年都要发三篇期刊。然后接下来这些agent 都是有阶层式的,所以上面的 agent他的动作就是提出愿景这样。那他把他的愿景传给下一层的agent下一层的 agent 就把这个愿景吃下去。如果他下面还有其他人的话它就会提出新的愿景。比如说校长要教授发期刊但其实教授自己也是不做实验的。所以教授也只能够叫下面的研究生做实验。所以教授就提出愿景就做出实验的规划然后研究生才是真的去执行这个实验的人。然后真的把实验做出来最后大家就可以得到reward。那现在是这样子的在 learn 的时候,其实每一个 agent 都会 learn。那他们的整体的目标就是要达到最后的reward。那前面的这些 agent他提出来的 actions 就是愿景这样。你如果是玩游戏的话,他提出来的就是,我现在想要产生这样的游戏画面。但是,假设他提出来的愿景是下面的 agent 达不到的那就会被讨厌。举例来说教授对研究生都一直逼迫研究生做一些很困难的实验研究生都做不出来的话研究生就会跑掉所以他就会得到一个penalty。所以如果今天下层的 agent 没有办法达到上层 agent 所提出来的 goal 的话,上层的 agent 就会被讨厌,它就会得到一个 negative reward。所以他要避免提出那些愿景是底下的agent 所做不到的。那每一个agent 都是把上层的 agent 所提出来的愿景当作输入,然后决定他自己要产生什么输出。
这边是举一个例子,就是假设校长、教授和研究生通通都是 agent。那今天假设我们的reward 就是只要进入百大就可以得到 reward。假设进入百大的话校长就要提出愿景告诉其他的agent 说现在你要达到什么样的目标。那校长的愿景可能就是说教授每年都要发三篇期刊。然后接下来这些agent 都是有分层的,所以上面的 agent他的动作就是提出愿景这样。那他把他的愿景传给下一层的agent下一层的 agent 就把这个愿景吃下去。如果他下面还有其他人的话它就会提出新的愿景。比如说校长要教授发期刊但其实教授自己也是不做实验的。所以教授也只能够叫下面的研究生做实验。所以教授就提出愿景就做出实验的规划然后研究生才是真的去执行这个实验的人。然后真的把实验做出来最后大家就可以得到reward。那现在是这样子的在 learn 的时候,其实每一个 agent 都会 learn。那他们的整体的目标就是要达到最后的reward。那前面的这些 agent他提出来的 actions 就是愿景这样。你如果是玩游戏的话,他提出来的就是,我现在想要产生这样的游戏画面。但是,假设他提出来的愿景是下面的 agent 达不到的那就会被讨厌。举例来说教授对研究生都一直逼迫研究生做一些很困难的实验研究生都做不出来的话研究生就会跑掉所以他就会得到一个penalty。所以如果今天下层的 agent 没有办法达到上层 agent 所提出来的 goal 的话,上层的 agent 就会被讨厌,它就会得到一个 negative reward。所以他要避免提出那些愿景是底下的agent 所做不到的。那每一个agent 都是把上层的 agent 所提出来的愿景当作输入,然后决定他自己要产生什么输出。
但是你知道说就算你看到上面的的愿景说叫你做这一件事情。你最后也不一定能做成这一件事情。假设本来教授目标是要写期刊但是不知道怎么回事他就要变成一个YouTuber。这个paper 里面的 solution我觉得非常有趣。给大家做一个参考这其实本来的目标是要写期刊但却变成 YouTuber那怎么办呢? 把原来的愿景改成变成 YouTuber 就行了在paper 里面就是这么做的,为什么这么做呢? 因为虽然本来的愿景是要写期刊但是后来变成YouTuber难道这些动作都浪费了吗? 不是这些动作是没有被浪费的。我们就假设说本来的愿景其实就是要成为YouTuber那你就知道成为 YouTuber 要怎做了。这个是阶层式 RL是可以做得起来的 tip。
但是你知道说就算你看到上面的的愿景说叫你做这一件事情。你最后也不一定能做成这一件事情。假设本来教授目标是要写期刊但是不知道怎么回事他就要变成一个YouTuber。这个paper 里面的 solution我觉得非常有趣。给大家做一个参考这其实本来的目标是要写期刊但却变成 YouTuber那怎么办呢? 把原来的愿景改成变成 YouTuber 就行了在paper 里面就是这么做的,为什么这么做呢? 因为虽然本来的愿景是要写期刊但是后来变成YouTuber难道这些动作都浪费了吗? 不是这些动作是没有被浪费的。我们就假设说本来的愿景其实就是要成为YouTuber那你就知道成为 YouTuber 要怎做了。这个是分层 RL是可以做得起来的 tip。
![](img/7.10.png)