date: 2020/05/19

Mother - VOICES FROM


参考:机器学习深度学习(李宏毅) - Sparse Reward


在RL中,奖励很有可能是稀疏的,具体表现为能获得奖励的状态非常少——比如对于一个孩子,在学习和玩耍之间做选择,选择玩耍可以立即获得+1的奖励,但在未来考试的时候却得到-100的惩罚;选择学习的话则立即获得-1的惩罚,未来考试的时候则得到+100的奖励。由于-100的惩罚或+100的奖励发生在遥远的未来,就很容易倾向于规避短期的惩罚、趋向于短期的奖励。

奖励稀疏的现象跟监督学习中的样本不均衡问题是非常类似的。本文主要简单列举一些比较常见的解决Sparse Reward的技巧。


Reward Shaping

论文:《Training Agent for First-Person Shooter Game with Actor-Critic Curriculum Learning (ICLR2017)

结合领域知识(Domain Knowledge),人为定义一些中间状态的奖励和惩罚,使得Agent不需要等到episode结束才能取得最终的奖励。

比如训练一个王者荣耀的Agent,如果只能在游戏结束的时候得到奖励,那么是非常Sparse的,通过人为给一些中间状态(比如击杀地方英雄、推塔)等赋予一些奖励,就可以鼓励Agent向这些状态探索。


Curiosity

论文:《Curiosity-driven Exploration by Self-supervised Prediction (ICML2017)

image.png

设计一个Intrinsic Curiosity Module (ICM),输入当前状态、采取的动作和下一个状态,评估这一时间步的学习难度(难度越大,好奇心curiosity就越强)来作为辅助的reward进行训练。


image.png

上图是ICM的一个简单设计,首先用一个网络根据当前状态和采取的动作,来预测下一个状态,然后和实际状态计算差异来作为reward。如果差异越大,说明下一状态越难预测,那么训练时对它的好奇心就应该越强。

但该设计存在一个问题,ICM很可能对一些不重要的细节产生很大的兴趣,考虑游戏背景里随机飘动的树叶,由于它本身就是随机生成的,自然就很难预测树叶的下一个状态,但它又只是背景的一部分,对它产生好奇心是完全不合理的。


image.png

如上图对ICM做一些改进,用一个Feature Extractor来提取出状态的重要成分,Network1根据当前状态的重要成分和采取的动作来预测下一状态的重要成分,然后和实际状态的重要成分计算差异来作为reward。

但问题是要如何训练能提取状态重要成分的Feature Extractor呢?可以设计另外一个Network2来做一些辅助任务,Feature Extractor输出的主要成分作为Network2的输入,然后预测出从状态需要采取的动作,然后与真实的动作进行比较来进行训练。


Reverse Curriculum Generation

通过课程学习的方式来训练RL,先训练一些简单的任务,然后逐渐加大难度。比如想训练一个把大象塞进冰箱的Agent,那么可以先训练Agent如何打开冰箱、如何塞大象、如何关冰箱,然后再做综合性的训练。


但人为的分解课程是需要Domain Knowledge的,Reverse Curriculum Generation提出了一种更加通用的课程学习方法。

image.png

image.png


Hierachical RL

image.png

层次性的RL,高级Agent提出比较高层次的目标,逐级细化后给更低级的Agent学习。

比如校长给教授提出了“发文章”的目标,教授则给研究生一个“发某个方向的文章”的子目标,研究生则以这个子目标来进行探索。

具体设计此处不作详细阐述。