Sparse Reward
现实中有很多任务是没办法获得reward,例如打网球。只有在打到网球,并且有效得分后才能的得到reward。这种任务是sparse reward(稀疏的奖励)的。现实生活中,有很多这样任务。但是作为人类,在学习这些任务的时候,是非常迅速的,能在很短的时间学会这个任务。所以我们需要模仿人类的学习机制,去优化sparse reward场景的任务。
Reward Shaping
人为设计奖励,有时候本身任务的reward设计拿来直接训练用不是很合。比如打网球,它的规则是为了简化比赛的,而我们为了训练一个会打网球的人。是不会一上来就让他打比赛的。我们会让他先学习如何挥拍,如何击打球,怎么打到对面去,然后再得分,循序渐进。那我们如果要训练一个打网球的agent时,就可以人为设计奖励,比如多移动可以给一点reward,向球跑可以给多一点reward,有挥拍动作给reward。在训练到后期的时候,慢慢修改reward规则,更严格一些,要向球跑加击打动作了才有高reward等。
总而言之,Reward Shaping就是指让稀疏奖励更好被训练而提出来的人为设计奖励的一种方法。
Curiosity
在某些任务中,可能会给一个初始分数,agent在探索时,由于sparse reward的特性,agent会很难获得分数,且分数还会一直降低。这样的情况,多半训练到后面,agent就摆烂了,待在原地不探索。
Curiosity是一种好奇心机制,鼓励agent进行探索。之前几篇博客里面说到是,随机生成一个概率,随机到了就探索。但是这个策略不同,是设计一个规则,利用reward进行鼓励探索。在上图中,ICM模块会饭回一个 r n i r^i_n rni,它会影响total reward。所以 r n i r^i_n rni的值越大越好。
Curiosity内部是这样的,里面的network输入是 a t a_t at和 s t s_t st,输出一个预测的 s ^ t + 1 \hat{s}_{t+1} s^t+1,看它与实际的 s t + 1 s_{t+1} st+1差了多少,差的越多,得到的reward就越大。本质上是鼓励agent去探索。但这样做也会有副作用,某些state其实是比较差的,可能你一去探索就导致游戏结束。那我们也需要做限制。
做法是再加一个network做过滤器,输入 s t s_t st和 s t + 1 s_{t+1} st+1,预测 a ^ t \hat{a}_t a^t, a ^ t \hat{a}_t a^t与 a t a_t at越接近越好。因为这样就说明过滤后的状态是跟 a t a_t at有相关的,这样就可以把无关的过滤了。
Curriculum Learning
课程设计是指可以模仿人类学习的路线,从简单到难。这个很符合直觉,就像下面的游戏。让机器人学会把板子通过小孔放进棍子里。但对于机器人来说,一开始找准位置可能很难,但先让它学会从棍子中上放下去可能很简单。所以先让agent学简单的操作,一步一步变难,这也就是Curriculum Learning的思想
Reverse Curriculum Generation
逆向课程设计,我理解和课程没多大关系,就是按照目标state,回退到离他最近的 s 1 s_1 s1,然后让agent学习从这个 s 1 s_1 s1到 s g s_g sg,等到学习到收敛了,再跳到下一步。
Hierarchical RL
这个思想其实就是分层次处理,就像一个公司/学校,一层层将任务从最顶层传递到最底层去做。每一层传递的是对应的指令,而不是同样的目标,比如,校长给教授说的是,今年要申请xxx指标,要有n篇文章。教授传递给研究生,要发n篇文章,需要怎么怎么做。
具体的例子类似于这个小球一样,从紫色移动到黄色,品红色的点是引导的,相当于把高层任务一层层拆成几个下层任务。
总结
Sparse Reward是生活中比较常见的任务场景,这些任务都是将reward高度集成了。对应的解决方法也很多,无非都是将reward拆解开,具体化,层次化。