复习进度紧张,基本上赶不上做题了,先就着课时赶赶。
Task5依旧是DDL磨出来的。本次主题是稀疏奖励。
00 前言
很幸运,稀疏奖励的内容不是那么的多,可以很快进行输入输出。
在一场游戏中,actor初来乍到就好比一个刚诞生的婴儿一样,脑子是一片空白,什么也不会,之所以做出不一样的动作,靠的全是它本身的探索特性。就好比rumor姐姐做的网球王子的游戏的强化学习训练一样,一开始失败的一大重要原因就是奖励过于稀疏,actor根本学不到什么是对的,换句话说就是学不到得到正奖励的方法,唯一减少惩罚的举措就是从一开始就什么都不做。我们称之为,白兰。
解决稀疏问题我们有三种方法,下面一一介绍。
01 设计奖励
如果一个agent一开始有点短视,不注重未来的奖励,只看到当下的奖励(采取获得暂时奖励的后果往往是未来得不到巨量奖励)我们不妨可以设计一种人为的奖励(区别于游戏环境输出的奖励),从而正确引导agent。好比在教他。
但是如何设计这个人为奖励是有学问的,往往设计其他领域的知识。这里不讨论。
02 ICM 好奇心
内在好奇心模块ICM。这个东西的作用在于,促使agent去探索没有到过的状态。没有探索的s会让agent多得额外的奖励。
内在好奇心模块的设计方法:训练一个网络,让它接收s和a,去预测s’,最后真实拿到的S和s’做一个对比,越接近我们给它额外的奖励越多。
方法听起来很简单很美好。但是我们设想一下,一个游戏里,可能会有草和云朵随机摇摆浮动,这对agent很难预测,往往预测不准,此时通过我们上面的设计机制,貌似agent还可以获得不错的探索奖励。这合理吗?这不合理,因为草从和云朵仅仅只是游戏背景,和过关游戏可以说是没有半毛钱关系。我们需要在上面ICM设计的基础上,让agent知道啥东西更重要。
我们需要训练一个特征提取器,,可以过滤掉无意义的画面。好,怎么训练这个利器呢?
03 课程学习
概念比较好理解,就是为agent设计从简单到困难的训练过程,循序渐进。这也符合我们人类学习的过程。而且这种方法已经获得了成功的实践。
还有一种比较通用的方法称为逆向课程生成。
描述起来也简单。我们从终点状态出发,寻找相似状态s们,诶~从这些状态开始出发,看看agent能不能自己探索到最终状态。
测试完事之后我们可以获取到这些轨迹的奖励(轨迹不完全,因为不是从最初出发点开始的)。我们把奖励很大的(这说明agent一溜烟就到达了终点,很顺利)和奖励很小的(这说明没得到奖励,净倒扣分了)都去掉。分数大的说明没必要学了,它获得的期望已经是很好了很成功,说明学会了;相反,奖励太差的轨迹说明agent暂时学不会,太难了,可以从训练集暂时剔除。
我们留出奖励适中的轨迹继续学习。同时开始状态也在不停拉远与最终状态的距离以提高难度。
04 分层强化学习 HRL
分层强化学习就是将一个庞大问题分解成若干小问题,每一个阶段问题都会有一个上层agent提出一个目标,这个目标作为下层agent的输入,下层agent的目的尽量达到这个提出的目的。如此组织起来,整个问题就被解决了。
书上举了一个“学校进百大”的例子。学校进百大,教授们就得肝论文3篇/年。教授没时间做实验,把这个实验分给研究生们去做。研究生做完实验之后,大家都会获得奖励。
另外,如果上层布置了一个下层完不成的目标,那说明上层agent的目标制定失败,这个上层agent要得到惩罚。
书中给出的最后分层RL的例子会更加直观。本质上上层agent制定一个个阶段性目标在引导下层agent去实现。干活的是下层的,发号施令的上层的。就这么简单。