引言

首先给出Actors Critic算法的梯度更新公式:

在这个式子中,更新时采用的样本均来自于当前参数θ,且更新公式也是基于当前参数的函数,一旦采样的样本分布发生了变化,上式便不起作用。因此

1、参数想要得到很好地更新,就必须采样大量样本;

2、在此基础上,由于强化学习中训练数据为机器人与环境交互得到的,数据之间存在较强的相关性,会造成训练不稳定。

因此为了解决这个问题,人们通过采用重要性采样对用来更新的样本来源进行改进。

重要性采样

基于一个样本分布求解函数的期望公式可以由积分表达式得到

将上式中的分布p用分布q替换掉,可以得到与用分布p得到的期望相同的结果,这个操作称为重要度采样。

将这个技术应用到强化学习算法中,即可以使模型在更新时不必仅使用由当前分布得到的样本更新,还可以使用之前参数所表述的分布中采样得到的样本进行更新。只需要在更新时将两个分布之间的比值添加到更新的公式中即可。使用θ’表示之前某时刻参数,便会得到基于此参数更新后的目标函数梯度。

紧接着,由于下面公式的存在

我们还可以得到下面所示的,在重要性采样参与之下的目标函数。

需要注意的是,虽然使用重要性采样得到的两者均值相同,但是方差却可以差距很大,两者的方差分别为下所示。

其第二项相同,第一项不同,不同点来自于两者之间的分布差距,如下图所示,采样点的数据量没有充分大时,若两分布的差距过大,则会导致最终得到的函数期望值发生较大偏差。

图中绿色线代表当前参数分布的密度曲线,橙色线表示另一个分布q的密度曲线,函数曲线使用黑色表示,使用蓝色点代表基于分布q得到的采样点。当某次的采样点如图中所示集中时,将不会得到正确的f关于x的均值。因此为了防止出现这种两者分布之间差距过大而使得最终得到的期望不准确的情况,还需要对两分布之间的“距离”进行约束。

PPO算法

一种方式时通过在目标函数中添加KL散度正则,称为PPO1算法,其中KL散度是一种用来描述两个分布之间距离的性能指标,公式表示如下

另一种更易于实现的做法是在梯度函数中添加clip操作,称为PPO2。其实现的原理是,当优势函数的值为正,即需要加强对当前动作的选择机率时,将会对两分布在当前状态和动作下的比值的最大值进行约束,如果最大值超过阈值,则停止对策略的更新, 当优势函数的值为负,即需要减小对当前动作的选择机率时,将会对两分布在当前状态和动作下的比值的最小值进行约束,如果最小值超过阈值,也停止对策略的更新。通过这种方式,实现了在参数更新的同时保证两分布之间距离在设定范围内。

May the force be with you!