fix some errors
This commit is contained in:
@@ -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 非常的 sparse,reinforcement 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 非常的 sparse,reinforcement learning 的问题就会变得非常的困难。但是人类可以在非常 sparse 的reward 上面去学习,我们的人生通常多数的时候,我们就只是活在那里,都没有得到什么reward 或者是penalty。但是,人还是可以采取各种各式各样的行为。所以,一个真正厉害的 AI 应该能够在 sparse reward 的情况下也学到要怎么跟这个环境互动。
|
||||
|
||||
怎么解决sparse reward 的这件事情呢?我们等一下会讲三个方向。
|
||||
怎么解决 sparse reward 的这件事情呢?我们等一下会讲三个方向。
|
||||
## Reward Shaping
|
||||

|
||||
|
||||
@@ -61,14 +61,14 @@ Reward Shaping 是有问题的,因为我们需要domain knowledge,举例来
|
||||
|
||||

|
||||
|
||||
那最后一个 tip 叫做 `Hierarchical Reinforcement learning`,阶层式的 reinforcement learning。
|
||||
所谓阶层式的Reinforcement learning 是说,我们有好几个 agent。然后,有一些agent 负责比较high level 的东西,它负责订目标,然后它订完目标以后,再分配给其他的 agent,去把它执行完成。这样的想法其实也是很合理的。因为我们知道说,我们人在一生之中,并不是时时刻刻都在做决定。举例来说,假设你想要写一篇paper,你会说就我先想个梗这样子,然后想完梗以后,你还要跑个实验。跑完实验以后,你还要写。写完以后呢,你还要这个去发表。每一个动作下面又还会再细分,比如说怎么跑实验呢?你要先 collect data,collect 完data 以后,你要再 label,你要弄一个network,然后又 train 不起来,要 train 很多次。然后重新 design network 架构好几次,最后才把network train 起来。
|
||||
那最后一个 tip 叫做 `Hierarchical Reinforcement learning`,分层的 reinforcement learning。
|
||||
所谓分层的Reinforcement learning 是说,我们有好几个 agent。然后,有一些agent 负责比较high level 的东西,它负责订目标,然后它订完目标以后,再分配给其他的 agent,去把它执行完成。这样的想法其实也是很合理的。因为我们知道说,我们人在一生之中,并不是时时刻刻都在做决定。举例来说,假设你想要写一篇paper,你会说就我先想个梗这样子,然后想完梗以后,你还要跑个实验。跑完实验以后,你还要写。写完以后呢,你还要这个去发表。每一个动作下面又还会再细分,比如说怎么跑实验呢?你要先 collect data,collect 完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。
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user