李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)

李宏毅机器学习系列-强化学习之Sparse Reward

  • 稀疏的奖励(Sparse Reward)
  • 人为设计的奖励(Reward Shaping)
  • 好奇心机制(Curiosity)
  • 课程学习(Curriculum Learning)
    • 逆向课程生成器(Reverse Curriculum Generation)
  • 阶层式强化学习(Hierarchical Reinforcement Learning)
  • 总结

稀疏的奖励(Sparse Reward)

很多时候我们再做出一些行为后都是什么奖励的,就像人类,每天都活着,其实很多时候也没什么奖励,但是我们还是可以去学习一些东西啊,所以我们希望AI也可以这么做。

人为设计的奖励(Reward Shaping)

我们拿小孩子读书来举例,如果现在有两个选择,一个出去玩,可以获得奖励1,但是100个小时候是-100,另一个是学习,虽然获得奖励是-1,但是100小时候是100,因为是小孩子,也没什么经验,肯定只会看到眼前的奖励,基本都去玩了,但是我们可以人为的去引导一下,设计一些奖励,比如学习有奖励棒棒糖,或许他会去学习:

李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第1张图片
比如一个叫VizDoom的游戏,你杀死敌人就有正的奖励,被杀死就是负的,但是他们人为设计了很多的奖励,比如下面,living表示每个动作奖励是-0.008,为什么活着是负的,或许他希望机器不要就为了活着而只会躲避,health_loss表示生命值降低,奖励是负的,这个好理解,不要被伤害到,不然就是负奖励,ammo_loss表示弹药减少,也就是避免子弹打太多了,health_pickup表示获取医疗包,就会加血,奖励是正的,dist_penalty表示原地不动,避免长时间在原地待着,dist_reward表示移动就给奖励,说明要让他进行移动。这些都是人为设计的,具体奖励都要去调整的,不是游戏给的奖励,是为了引导机器能做的更好:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第2张图片
比如设计了一个机械臂,要让机器把板子穿到柱子上,如果设计是接近就给奖励,这样可能真的会接近,但是不一定会让他穿过去,因此如何设计这个奖励,还是要一定的行业背景知识的:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第3张图片

好奇心机制(Curiosity)

这个其实就是在每个奖励中间加一个人为的ICM(内在好奇心模块),奖励为 r t i r_t^i rti,输入是 s t , a t , s t + 1 s_t,a_t,s_t+1 st,at,st+1,输出是个奖励,那现在我们的目标不仅仅要关心游戏本身的奖励,还要关心人为设置的这个,是要总体的奖励越大越好:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第4张图片
内在好奇心模块怎么设计呢,其实就是让输入的 s t , a t s_t,a_t st,at去预测下一个状态 s ^ t + 1 \hat s_{t+1} s^t+1,看看和未来的有多不同,越不同说明来为的状态越难预测,说明刚才的 a t a_t at有好奇心取探索未知的情况,所以奖励就越大。但是越难预测不代表越重要,这个也是有问题的,比如说你在某个情况下发现树叶飘动这个情况很难预测,然后你就可能会一直去看树叶飘动,所以光是有好奇心还不够,得让他知道什么才是真正重要的:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第5张图片
我们可以训练一个过滤器,去过滤掉一些和行为不关的特性,比如刚才说的风吹树叶动,我们用另外一个网络输入是过滤后的状态,输出是 a ^ t \hat a_t a^t,我们希望他和 a t a_t at越接近越好,因为这样就说明过滤后的状态是跟 a t a_t at有相关的,这样就可以把无关的过滤了:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第6张图片

课程学习(Curriculum Learning)

意思是说,我们可以把训练分成很多个阶段,从简单到难,比如下面的VizDoom的例子,设置了很多的课程,从简单的怪到难的怪,否则一开始就打难的怪可能就训练不起来。机械臂那个也是一样,从简单的上下移动蓝色方块开始训练,到把方块移出来,到把方块移进去:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第7张图片

逆向课程生成器(Reverse Curriculum Generation)

怎么为机器设计课程呢,可以用这个方法,简单来说就是先找到目标的 s g s_g sg,然后再找离他很近的一些状态记作 s 1 s_1 s1,怎么叫近呢,就根据实际情况来考虑了,比如说两站图片的像素差,越小越近,然后从这些 s 1 s_1 s1开始玩到 s g s_g sg,把奖励很大或者很小的给滤掉,因为很大说明机器已经学会了,很小说明太难了:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第8张图片
然后继续以这些 s 1 s_1 s1为目标,继续做上面的事:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第9张图片

阶层式强化学习(Hierarchical Reinforcement Learning)

这个的思想就是我们做事情的思想,把复杂的事情分成简单的,一层层下去,比如你写一个复杂的游戏,看到会先分几个系统,然后每个系统下面分几个模块,然后模块下面又分多少类,每个类里有多少个方法,等等,就这种思想。举个不太恰当的例子,某个校长要求教授发期刊,教授自己不会去做,但是会指导研究生去做,所以他们每个人做的事情都不同的,如果说最底层的事无法完成的话,就会去惩罚上层的人,因为上层的人布置的任务太难了,下面的完成不了,跑路了。但是如果完成了一个错误的目标,也没关系,把这个目标上传上去,之后就能得到要完成这个目标要怎么样做了:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第10张图片
还有走迷宫和单摆碰小球的例子,最上层的想要做的就是走到黄色,把这个任务交给下层,下层把这个任务分解成了几个步骤,只要这些步骤能完成,上层的任务就完成了:
李宏毅机器学习系列-强化学习之稀疏奖励(Sparse Reward)_第11张图片

总结

本篇主要介绍对应稀疏奖励的方法,比如用好奇心机制,课程学习,层级强化学习,其实还是很有用的,我学到这里才想到unity3D的机器学习插件里的好奇心选项,课程学习到底是干嘛的,具体原理是什么,受益匪浅,到时候我会在unity3D里面做点例子研究研究,有兴趣的也可以来玩玩。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

你可能感兴趣的:(强化学习,李宏毅机器学习,深度学习)