第四章 策略梯度
01 沿用之前的规定
一场游戏被称为一个回合。将这场游戏的所有奖励加起来就是总奖励,即回报,R来表示。Actor目的最大化R。
env和Actor的交互是这样的:
env先吐出初始状态state,actor吃下去,然后吐出一个action来,env吃掉了这个action,然后再吐出一个state…直到env觉得不能玩了为止。
为了代表这场游戏,我们把吐出来的state和action按照时间顺序串一起,就叫一个轨迹。
环境是一个基于规则的模型,看成一个黑盒,不要动他。可以改变的,是我们的actor,因此,给定θ(我们用θ代表演员参数),可以确定某轨迹发生的概率。
这里注意,给定一样的前一个状态,再给定一致的动作,环境给出下一个状态不一定是一样的这是一个小坑。这么描述是为了让我们描述的上述交互模型更具一般性
给定了轨迹τ,我们就可以得到回报R(τ)。我们要做的就是更新θ来最大化R(τ)。R(τ)是一个随机变量,因此在给定θ的情况下,讨论R(τ)的期望是有意义的。
接下来书里讨论了求这个期望的方法,我靠但凡上过学的这个还不会求?根据θ算出某一个轨迹的概率;相同的思路,穷举所有的轨迹的概率[不现实];对每一个轨迹计算总奖励;每一个轨迹的总奖励用出现的概率进行加权;最后求和。听懂掌声。
02 梯度上升
目标函数最大化自然想到求梯度,沿着梯度方向就可以求奖励期望最大化啦。
我们前面讨论过,确定了θ就客观上确定了奖励的期望,显然这是期望关于θ的函数,我们应该将R对θ求导。
然后接下来有一个变换,本质是把R对θ的导数转成了一个函数的期望。但凡上过大二都能看懂。
但是非常蛋疼的是,其实这个函数的期望也是没法算滴。但是不怕,我们可以通过做实验记录数据的方法来计算这个期望。(其实就是做N次轨迹,每次轨迹算一遍这个鬼,最后求个平均来拟合这个期望)
知道思路了,具体计算公式这里不列举了,反正我也记不住
好了,知道导数(梯度)怎么算了,我们该讨论怎么更新θ让actor更牛逼了。这就是DL的基础知识了,用老θ+η*梯度 -> 新θ , 其中η是学习率(也是超参,用一些策略来更新不是这里的重点)。
ok,至此为止,PG就流程思想就讲解完成。
另外,每次更新θ,我们是不是得用大量的轨迹来算期望呀(那个函数的期望就是R对θ的梯度),显然这一堆轨迹有效期只有这一次更新,就跟泡泡糖似的,吃完吐了,下次吃新的别吃吐了的。手动狗头
03 PG实现细节
在实现上,我们事实上是把这个过程看成分类问题。
我们的输入是状态,输出是动作类。基本上经典的猫狗分类问题差不多了。
04 PG实现技巧
1添加Baseline
这个baseline不是你想的拿一个牛逼的基线去训练。不是这玩意。我们说的baseline,是基于这样的场景。
由于目标函数的特性,但凡是采样了动作a拿到了正数的奖励(吃到了甜头),相应的动作a的概率就会加大。一般游戏实际上不怎么扣分,拿到的奖励都是正数,增加的概率相应的也或多或少。
实际上,会出现这样的情况:因为咱们的a都是采样来的,在某s下,有的a就是没采到,没准这个a会获得百万大奖,其实采样了辣鸡a,得到了奖励就几毛,遗憾的是,我们也会增大这个几毛的辣鸡a的概率,奖励百万大奖a的概率。谁叫辣鸡a赢在了终点线上呢。
这时候,我们改写目标函数,把奖励相应同时减去一个常数C,如此一来,奖励们有正有负,辣鸡a拿到的奖励也会是负的,乖乖等着被扣概率吧。
这个常数C怎么定?C取奖励平均值,即奖励的期望。具体实现的时候,需要不停更新,采样拿到R之后不断求平均,就是奖励期望了,大数定律~
2分配合适的分数
接下来就是微操大师了。
我们知道,一个游戏过程里面,你得了驭蛇大师的称号(诺基亚贪吃蛇小游戏),不一定说你这场游戏没有一丁点失误,反过来你的分数十分辣鸡不一定说你这场游戏没有一点可取之处。
基于这个常识,我们可以调整算法。
我们把动作a之后的奖励加起来,作为动作a的贡献。(之前的奖励和这时候采用动作a没有半毛钱关系)
公式表达为
第五章 近端策略优化 PPO
这块先放着,复习概率论更重要