关于奖励有这么一个问题:很多智能体,有时候根本没办法得到奖励。比如对于一件概率特别小的事情,如果做到了给它奖励为1,做不到就是0。从随机性的角度看,最终的奖励就会是0。没有奖励,机器也学不到什么有价值的东西。
  称上面这种情况就叫做稀疏奖励。如果奖励很稀疏,RL的问题就会变得很难解决。一个真正厉害的智能体应该能够在系数奖励的情况下也学会和环境互动。本章就介绍一些解决稀疏奖励问题的方法

1.设计奖励

 定义:设计奖励意思说环境中有一个固定的奖励,它是真正的奖励,但是为了智能体学出来的结果是我们想要的样子,可以设计一些奖励来引导智能体。

举个例子,文字啰嗦,直接上图:
  上面的例子中,通过我们自己设计的棒棒糖奖励,帮助孩子得到最终的更多奖励。
  这个思想是简单的,但有一个关键也是问题:作为使用者自身是需要明确奖励的方向(我们要知道选择学习未来会有奖励),这也叫领域知识

2.好奇心

 这个奖励的全名叫做好奇心驱动的奖励(curiosity driven reward)。在常规的方式中是有一个奖励函数、给一个状态和动作。奖励函数负责判断在这个状态下执行这个动作得到的奖励(我们自然希望奖励越大越好)。好奇心的思路是除了常规的奖励r,再加上一个r_bar。同时希望这个r_bar越来越好。那这个r_bar是什么呢?
  在说r_bar的含义之前,先说说好奇心模块的组成:s(t),action,s(t+1),好奇心模块会根据s(t)和action去预测s(t+1)_bar。这个预测值与真实s(t+1)去比,想不想,越不像奖励越大,这个奖励就是r_bar(有木有很奇怪?)。r_bar的意思是未来的状态如果很难预测的话奖励会越多。这是鼓励探索(好奇心被满足~)所以好奇心的主要思路就是增强探索。
  那好奇心具体有哪些实现细节呢?
  其实好奇心本身可以通过网络训练,但好奇心思想存在一个漏洞:某些状态很难预测不代表它是好的,所以一味鼓励机器冒险是不对的,光有好奇心是不够的,要让它明白什么事情是重要的。那如何让机器明白什么事情是重要的呢?
  要加上一个特征提取器,它的作用是过滤掉那些没有用的东西(不重要的)。如果有了这个特征提取器,网络1做的事情就是给s1和a预测s2。现在的问题是怎么学习这个特征提取器呢?
  学习的方法就是再找一个网络:这个网络把状态s(t)和s(t+1)当作输入,去预测动作a。希望预测的动作a和真实动作a越接近越好。有了这个网络后提取的特征就和预测动作这件事保持了有关,就自然过滤掉那儿写与动作无关的内容。好奇心整体模块的实现图如下:

3.课程学习

其实这个思路很简单:如果最开始就学很难的,可能很难学会。不过如果从简单的开始,慢慢增加难度。最终就能完成困难任务的学习。这个就像我们学课程一样,有顺序的完成。对于这个一个最大的问题就是:如何设计课程学习?
  常用的思路是逆向课程生成(reverse curriculum generation)。这个思路是从目标(也叫黄金状态)反推,不过反推过程中可能会推断出上一时刻很多状态,状态之间会有奖励体现。不要选择那些奖励极端的,这些可能代表难度过于简单或者困难。就要选择奖励适中的情况。然后根据这些奖励适中的再去采样更多之前的状态,知道最初的状态。

4.分层强化学习

这个实现的思路是把任务划分给多个智能体去完成,每个智能体负责的层次不同。有一些比较高级(定目标),有些低级(具体执行)。不过要想达到目标,上层对下层会有要求:一定要实现预期的任务。那往往有的时候干着干着跑偏了,也不能说完全没干,只是最后达成的目标不是预期的。为了不浪费动作,可以修改愿景,也就是最终目标。
  分层强化学习是将一个复杂的强化学习问题,分解成多个小的,简单的子问题。每个子问题都可以使用马尔可夫决策过程来进行建模。这样,我们可以将智能体的策略分为高层次策略和低层次策略,高层次策略根据当前状态决定如何执行低层次策略,这样可以解决一些复杂的任务。
  这一章的内容比极少,而且都是陈述的思想。看看课后题:

因作者水平有限,如有错误之处,请在下方评论区指正,谢谢!