强化学习组队学习task03—— 策略梯度及 PPO 算法

一、策略梯度

1.策略梯度理论实现

在深度学习中,我们所获得的期望奖励可由下图描述:
在这里插入图片描述
在图中有强化学习的三要素:actor,environment,reward function。

让机器玩 video game 时,

  • actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;
  • environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;
  • reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到 20 分等等。

除了以上几个因素,奖励函数是根据在某一个state采取的某个action得到的奖励,我们要做的事情就是调整actor内部的参数使R越大越好。实际上Reward不是一个张量,而是一个随机变量,能够计算的是R的期望,具体的期望计算如上图的表达式。

最大化R的方法是采取梯度上升。梯度上升需要计算R的梯度

R的梯度算法:

在这里插入图片描述

对于该公式的理解:

在化简至期望的时候发现这个期望无法进行计算,这是使用采样的方法来进行计算。

在计算完R的梯度后,我们就使用策略梯度对参数进行更新

在这里插入图片描述

2.策略梯度实现的小技巧

(1)添加一个基准值

在很多时候,每一个行为被给予的奖励都是正的,如果直接应用公式的话会导致不论什么行为都会被认为是正确的行为,而在实际计算的过程中由于我们是通过采样的方式来进行计算,有些没有被采样到的行为可能会被认为是不正确的而导致错误,所以解决方法是奖励函数减去一个基准值,减掉之后会变成有正有负,会得到更好的效果。
在这里插入图片描述

(2)分配合适的权重

假定一场游戏网名取得了胜利,获得的奖励自然是正的,但是在取得游戏的中间步骤中,我们可能会做出了错误的选择,此时依据最终的胜利来确定中间行为的正确性是不妥的,所以我们希望给所有的行为添加一定的权重,来反应这个行为是好还是不好。
在这里插入图片描述
这个系数即为折扣系数

3.蒙特卡洛与时序差分

在这里插入图片描述

  • 蒙特卡洛强化学习方法是每一个episode更新一次,即需要经历完整的状态序列后再更新(比如我们的贪吃蛇游戏,贪吃蛇“死了”游戏结束后再更新)
  • 时序差分强化学习方法是每一个step就更新一次 ,(比如我们的贪吃蛇游戏,贪吃蛇每移动一次(或几次)就进行更新)。相对来说,时序差分强化学习方法比蒙特卡洛强化学习方法更新的频率更快。

时序差分强化学习能够在知道一个小step后就进行学习,相比于蒙特卡洛强化学习,其更加快速、灵活。

二、PPO算法

1.on-policy和off-policy

  • on-policy(同策略): 要learn的agent和环境互动的agent是同一个时,对应的policy。理解为自己打游戏。
  • off-policy(异策略): 要learn的agent和环境互动的agent不是同一个时,对应的policy。理解为看游戏直播。

基于on-policy的policy gradient效率较低的原因:经典policy gradient的大部分时间花在sample data处,即当我们的agent与环境做了交互后,我们就要进行policy model的更新。但是对于一个回合我们仅能更新policy model一次,更新完后我们就要花时间去重新collect data,然后才能再次进行如上的更新。

所以我们的可以自然而然地想到,使用off-policy方法使用另一个不同的policy和actor,与环境进行互动并用collect data进行原先的policy的更新。这样等价于使用同一组data,在同一个回合,我们对于整个的policy model更新了多次,这样会更加有效率

2.importance sampling

important sampling(重要性采样): 使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用,公式如下:

在这里插入图片描述
虽然理论上你可以把 p 换成任何的 q。但是在实现上, p 和 q 不能差太多,主要原因依旧是由于采样的缘故,如果碰巧在p与q相差太多的地方采样较多,会导致最后关于p的期望和关于q的期望差距较大。

3.on-policy转变为off-policy

在这里插入图片描述
在这里插入图片描述

使用off-policy的importance sampling后,我们不用θ 去跟环境做互动,假设有另外一个 policy θ′,去跟环境做互动,借此来训练θ。让θ′做互动 sample 一大堆的data,θ 可以update 参数很多次。然后一直到θ train到一定的程度,update 很多次以后,θ′再重新去做 sample,这就是 on-policy 换成 off-policy 的妙用。

4.PPO/TRPO

(1)PPO1

在上文已经指出θ和θ′的分布不能差太多,避免这两个差很多的方法就是PPO,具体实现就是在优化的函数加上一项用来衡量θ和θ′的相似程度的KL散度,类似于正则化方法。PPO的前身叫做TRPO。两者的主要区别是TRPO将KL散度放在了限制条件里,而PPO直接将其作为一个需要优化的项。
在这里插入图片描述
adaptive KL penalty :类似于正则化中的w参数,计算KL散度也需要一个β,以下为动态调整β的方法,其中KL散度的最大可以接受的值和最小可以接受的值需要自己设定。

在这里插入图片描述

(2)PPO2

以上应用KL散度的方法为PPO1,如果认为KL散度难以计算,可以使用PPO2方法。这个算法实现起来很简单,比较并输出括号里较小的一项。括号中的第二项有一个clip()函数,该函数的作用第一项小于第二项的话,那就输出1-ε 。第一项如果大于第三项的话,那就输出 1+ε,第一项介于第二项和第三项之间则直接输出第一项。ε是一个超参数可以自己设置。

这个式子的主要作用依旧是保证θ和θ′的差距不会过大。
在这里插入图片描述