强化学习5

Sparse Reward and Imitation Learning

1 关键词

  • reward shaping: 在我们的agent与environment进行交互时,我们人为的设计一些reward,从而“指挥”agent,告诉其采取哪一个action是最优的,而这个reward并不是environment对应的reward,这样可以提高我们estimate Q-function时的准确性。

  • ICM(intrinsic curiosity module): 其代表着curiosity driven这个技术中的增加新的reward function以后的reward function。

  • curriculum learning: 一种广义的用在RL的训练agent的方法,其在input训练数据的时候,采取由易到难的顺序进行input,也就是认为设计它的学习过程,这个方法在ML和DL中都会普遍使用。

  • reverse curriculum learning: 相较于上面的curriculum learning,其为更general的方法。其从最终最理想的state(我们称之为gold state)开始,依次去寻找距离gold state最近的state作为想让agent达到的阶段性的“理想”的state,当然我们应该在此过程中有意的去掉一些极端的case(太简单、太难的case)。综上,reverse curriculum learning 是从 gold state 去反推,就是说你原来的目标是长这个样子,我们从我们的目标去反推,所以这个叫做 reverse curriculum learning。

  • hierarchical (分层) reinforcement learning: 将一个大型的task,横向或者纵向的拆解成多个 agent去执行。其中,有一些agent 负责比较high level 的东西,负责订目标,然后它订完目标以后,再分配给其他的 agent把它执行完成。(看教程的 hierarchical reinforcement learning部分的示例就会比较明了)

  • Imitation learning: 其讨论我们没有reward或者无法定义reward但是有与environment进行交互时怎么进行agent的学习。这与我们平时处理的问题中的情况有些类似,因为通常我们无法从环境中得到明确的reward。Imitation learning 又被称为 learning from demonstration (示范学习) ,apprenticeship learning (学徒学习),learning by watching (观察学习)等。

  • Behavior Cloning: 类似于ML中的监督学习,通过收集expert的state与action的对应信息,训练我们的network(actor)。在使用时input state时,得到对应的outpur action。

  • Dataset Aggregation: 用来应对在Behavior Cloning中expert提供不到的data,其希望收集expert在各种极端state下expert的action。

  • Inverse Reinforcement learning(IRL): Inverse Reinforcement Learning 是先找出 reward function,再去用 Reinforcement Learning 找出 optimal actor。这么做是因为我们没有环境中reward,但是我们有expert 的demonstration,使用IRL,我们可以推断expert 是因为什么样的 reward function 才会采取这些action。有了reward function 以后,接下来,就可以套用一般的 reinforcement learning 的方法去找出 optimal actor。

  • Third Person Imitation Learning: 一种把第三人称视角所观察到的经验 generalize 到第一人称视角的经验的技术。

2 思考题

  • 解决sparse reward的方法有哪些?

    答:Reward Shaping、curiosity driven reward、(reverse)curriculum learning 、Hierarchical Reinforcement learning等等。

  • reward shaping方法存在什么主要问题?

    答:主要的一个问题是我们人为设计的reward需要domain knowledge,需要我们自己设计出符合environment与agent更好的交互的reward,这需要不少的经验知识,需要我们根据实际的效果进行调整。

  • ICM是什么?我们应该如何设计这个ICM?

    答:ICM全称为intrinsic curiosity module。其代表着curiosity driven这个技术中的增加新的reward function以后的reward function。具体来说,ICM在更新计算时会考虑三个新的东西,分别是 state s 1 s_1 s1、action a 1 a_1 a1 和 state s 2 s_2 s2。根据 s 1 s_1 s1 a 1 a_1 a1 a 2 a_2 a2,它会 output 另外一个新的 reward r 1 i r_1^i r1i。所以在ICM中我们total reward 并不是只有 r 而已,还有 r i r^i ri。它不是只有把所有的 r 都加起来,它还把所有 r i r^i ri 加起来当作total reward。所以,它在跟环境互动的时候,它不是只希望 r 越大越好,它还同时希望 r i r^i ri 越大越好,它希望从 ICM 的 module 里面得到的 reward 越大越好。ICM 就代表了一种curiosity。

    对于如何设计ICM,ICM的input就像前面所说的一样包括三部分input 现在的 state s 1 s_1 s1,input 在这个 state 采取的 action a 1 a_1 a1,然后接 input 下一个 state s t + 1 s_{t+1} st+1,对应的output就是reward r 1 i r_1^i r1i,input到output的映射是通过network构建的,其使用 s 1 s_1 s1 a 1 a_1 a1 去预测 s ^ t + 1 \hat{s}_{t+1} s^t+1 ,然后继续评判预测的 s ^ t + 1 \hat{s}_{t+1} s^t+1和真实的 s t + 1 s_{t+1} st+1像不像,越不相同得到的reward就越大。通俗来说这个reward就是,如果未来的状态越难被预测的话,那么得到的reward就越大。这也就是curiosity的机制,倾向于让agent做一些风险比较大的action,从而增加其machine exploration的能力。

    同时为了进一步增强network的表达能力,我们通常讲ICM的input优化为feature extractor,这个feature extractor模型的input就是state,output是一个特征向量,其可以表示这个state最主要、重要的特征,把没有意义的东西过滤掉。

  • 对于Imitation Learning 的方法有哪些?

    答:Behavior Cloning、Inverse Reinforcement Learning(IRL)或者称为Inverse Optimal Control。

  • Behavior Cloning存在哪些问题呢?我们可以如何处理呢?

    答:

    1. 首先,如果只收集expert 的data(看到某一个state输出的action),你可能看过的 observation 会是非常 limited。所以我们要收集expert在各种极端state下的action,或者说是要收集更多的、复杂的data,可以使用教程中提到的Dataset Aggregation。
    2. 另外,使用传统意义上的Behavior Cloning的话,机器会完全 copy expert 的行为,不管 expert 的行为是否有道理,就算没有道理,没有什么用的,这是expert 本身的习惯,机器也会硬把它记下来。我们的agent是一个 machine,它是一个 network,network 的capacity 是有限的。就算给 network training data,它在training data 上得到的正确率往往也不是100%,他有些事情是学不起来的。这个时候,什么该学,什么不该学就变得很重要。不过极少数expert的行为是没有意义的,但是至少也不会产生较坏的影响。
    3. 还有,在做 Behavior Cloning 的时候,training data 跟 testing data 是 mismatch 的。我们可以用 Dataset Aggregation 的方法来缓解这个问题。这个问题是,在 training 跟 testing 的时候,data distribution 其实是不一样的。因为在 reinforcement learning 里面,action 会影响到接下来所看到的 state。我们是先有 state s 1 s_1 s1,然后采取 action a 1 a_1 a1,action a 1 a_1 a1 其实会决定接下来你看到什么样的 state s 2 s_2 s2。所以在 reinforcement learning 里面有一个很重要的特征,就是你采取了 action 会影响你接下来所看到的 state。如果做了Behavior Cloning 的话,我们只能观察到 expert 的一堆 state 跟 action 的pair。然后我们希望可以 learn 一个 π ∗ \pi^* π,我们希望 π ∗ \pi^* π π ^ \hat{\pi} π^ 越接近越好。如果 π ∗ \pi^* π 可以跟 π ^ \hat{\pi} π^ 一模一样的话,你 training 的时候看到的 state 跟 testing 的时候所看到的 state 会是一样的,这样模型的泛化性能就会变得比较差。而且,如果你的 π ∗ \pi^* π π ^ \hat{\pi} π^ 有一点误差。这个误差在一般 supervised learning problem 里面,每一个 example 都是 independent 的,也许还好。但对 reinforcement learning 的 problem 来说,可能在某个地方,也许 machine 没有办法完全复制 expert 的行为,也许最后得到的结果就会差很多。所以 Behavior Cloning 并不能够完全解决 Imatation learning 这件事情,我们可以使用另外一个比较好的做法叫做 Inverse Reinforcement Learning。
  • Inverse Reinforcement Learning 是怎么运行的呢?

    答:首先,我们有一个 expert π ^ \hat{\pi} π^,这个 expert 去跟环境互动,给我们很多 τ 1 ^ \hat{\tau_1} τ1^ τ n ^ \hat{\tau_n} τn^,我们需要将其中的state、action这个序列都记录下来。然后对于actor π \pi π 也需要进行一样的互动和序列的记录。接着我们需要指定一个reward function,并且保证expert对应的分数一定要比actor的要高,用过这个reward function继续learning更新我们的训练并且套用一般条件下的RL方法进行actor的更新。在这个过程中,我们也要同时进行我们一开始制定的reward function的更新,使得actor得得分越来越高,但是不超过expert的得分。最终的reward function应该让expert和actor对应的reward function都达到比较高的分数,并且从最终的reward function中无法分辨出谁应该得到比较高的分数。

  • Inverse Reinforcement Learning 方法与GAN在图像生成中有什么异曲同工之处?

    答:在GAN 中,我们有一些比较好的图片数据集,也有一个generator,一开始他根本不知道要产生什么样的图,只能随机生成。另外我们有一个discriminator,其用来给生成的图打分,expert 生成的图得分高,generator 生成的图得分低。有了discriminator 以后,generator 会想办法去骗过 discriminator。Generator 会希望 discriminator 也会给它生成得图高分。整个 process 跟 IRL 的过程是类似的。我们一一对应起来看:

    • 生成的图就是 expert 的 demonstration,generator 就是actor,generator 会生成很多的图并让actor 与环境进行互动,从而产生很多 trajectory。这些 trajectory 跟环境互动的记录等价于 GAN 里面的生成图。
    • 在IRL中 learn 的 reward function 就是 discriminator。Rewards function 要给 expert 的 demonstration 高分,给 actor 互动的结果低分。
    • 考虑两者的过程,在IRL中,actor 会想办法,从这个已经 learn 出来的 reward function 里面得到高分,然后 iterative 地去循环这其实是与 GAN 的过程是一致的。

Sparse Reward

reword shaping

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBXHLS6Q-1604586925631)(C:/Users/ACH/Desktop/强化学习/rl/leedeeprl-notes/docs/chapter10/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,做你想要它做的事情。

Curriculum 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 里面也有讲说,如果直接上课程 7,machine 是学不起来的。你就是要从课程 0 一路玩上去,这样 machine 才学得起来。

  • 再举个例子,把蓝色的板子穿过柱子,怎么让机器一直从简单学到难呢?

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

Hierarchical Reinforcement learning

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pdVKJaq-1604586925634)(img/10.9.png)]

第三个方向是 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 起来。

Third Person lmitation Learning

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ns0y40CZ-1604586925636)(C:/Users/ACH/Desktop/强化学习/rl/leedeeprl-notes/docs/chapter11/img/11.13.png)]

其实还有很多相关的研究,举例来说,你在教机械手臂的时候,要注意就是也许机器看到的视野跟人看到的视野是不太一样的。在刚才那个例子里面,人跟机器的动作是一样的。但是在未来的世界里面,也许机器是看着人的行为学的。刚才是人拉着,假设你要让机器学会打高尔夫球,在刚才的例子里面就是人拉着机器人手臂去打高尔夫球,但是在未来有没有可能机器就是看着人打高尔夫球,它自己就学会打高尔夫球了呢?但这个时候,要注意的事情是机器的视野跟它真正去采取这个行为的时候的视野是不一样的。机器必须了解到当它是第三人的视角的时候,看到另外一个人在打高尔夫球,跟它实际上自己去打高尔夫球的时候,看到的视野显然是不一样的。但它怎么把它是第三人的时间所观察到的经验把它 generalize 到它是第一人称视角的时候所采取的行为,这就需要用到Third Person Imitation Learning的技术。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ID7z4xnW-1604586925638)(C:/Users/ACH/Desktop/强化学习/rl/leedeeprl-notes/docs/chapter11/img/11.14.png)]

这个怎么做呢?它的技术其实也是不只是用到 Imitation Learning,它用到了 Domain-Adversarial Training。我们在讲 Domain-Adversarial Training 的时候,我们有讲说这也是一个GAN 的技术。那我们希望今天有一个 extractor,有两个不同 domain 的image,通过 feature extractor 以后,没有办法分辨出它来自哪一个 domain。其实第一人称视角和第三人称视角,Imitation Learning 用的技术其实也是一样的,希望 learn 一个 Feature Extractor,机器在第三人称的时候跟它在第一人称的时候看到的视野其实是一样的,就是把最重要的东西抽出来就好了。

Recap: Sentence Generation & Chat-bot

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OgxHqYzH-1604586925640)(C:/Users/ACH/Desktop/强化学习/rl/leedeeprl-notes/docs/chapter11/img/11.15.png)]

在讲 Sequence GAN 的时候,我们有讲过 Sentence Generation 跟 Chat-bot。那其实 Sentence Generation 或 Chat-bot 也可以想成是 imitation learning。机器在 imitate 人写的句子,你在写句子的时候,你写下去的每一个 word 都想成是一个 action,所有的 word 合起来就是一个 episode。举例来说, sentence generation 里面,你会给机器看很多人类写的文字。你要让机器学会写诗,那你就要给它看唐诗三百首。人类写的文字其实就是 expert 的 demonstration。每一个词汇其实就是一个 action。你让机器做 Sentence Generation 的时候,其实就是在 imitate expert 的 trajectory。Chat-bot 也是一样,在 Chat-bot 里面你会收集到很多人互动对话的纪录,那些就是 expert 的 demonstration。

如果我们单纯用 maximum likelihood 这个技术来 maximize 会得到 likelihood,这个其实就是 behavior cloning。我们做 behavior cloning 就是看到一个 state,接下来预测我们会得到什么样的 action。看到一个 state,然后有一个 ground truth 告诉机器说什么样的 action 是最好的。在做 likelihood 的时候也是一样,given sentence 已经产生的部分。接下来 machine 要 predict 说接下来要写哪一个word 才是最好的。**所以,其实 maximum likelihood 在做 sequence generation 的时候,它对应到 imitation learning 里面就是 behavior cloning。**只有 maximum likelihood 是不够的,我们想要用 Sequence GAN。其实 Sequence GAN 就是对应到 Inverse Reinforcement Learning,Inverse Reinforcement Learning 就是一种 GAN 的技术。你把 Inverse Reinforcement Learning 的技术放在 sentence generation,放到 Chat-bot 里面,其实就是 Sequence GAN 跟它的种种的变形。