策略梯度算法
假设一条马尔科夫轨迹为 ,那么该轨迹发生的概率为:
不考虑折扣衰减,该轨迹获得的收益为累计回报:
由于马尔科夫链是采样得到的,因此当前策略可获得的期望奖励为:
策略梯度定义:
根据公式:,我们的目标是最大化期望值,故我们对目标函数进行求导:
最终策略梯度变成了求的期望,我们可以可以通过经验平均进行估计。我们可以使用当前策略
采样N条轨迹
后,利用N轨迹的经验平均逼近策略梯度(具体公式推导可查看上篇文档):
一个PG方法的完整流程如下:
首先采集数据,然后基于前面得到的梯度提升的式子更新参数,随后再根据更新后的策略再采集数据,再更新参数,如此循环进行。
注意到图中的大红字only used once,因为在更新参数后,策略已经变了,而先前的数据是基于更新参数前的策略得到的。
A2C方法
从上面可知:PG方法在更新策略时,基本思想就是增加reward大的动作出现的概率,减小reward小的策略出现的概率。
增加基线
假设现在有一种情况,我们的reward在无论何时都是正的,对于没有采样到的动作,它的reward是0。因此,如果一个比较好的动作没有被采样到,而采样到的不好的动作得到了一个比较小的正reward,那么没有被采样到的好动作的出现概率会越来越小,这显然是不合适的,因此我们需要增加一个奖励的基线,让reward有正有负。
增加折扣因子
该轨迹获得的收益为累计回报:,它是有问题的,当前动作与过去时刻的回报可能并没有多大的联系,故我们可以把每个动作的reward期望值修改为,该动作之后接收到的reward值,并且按照累积折算进行计算,因为某个动作在时间间隔上产生的影响,应该是越接近,影响越大。即
。因此梯度表示为:
优势函数
在AC方法中,使用来替代
,同时使用一个独立的Critic网络来计算该Q函数值。现在,我们假设基准偏置b表示为状态的价值函数
,因此梯度可以表示为:
这时需要分别计算两个网络:状态-动作价值函数Q和状态函数V,再根据贝尔曼方程,上式表示为:
以上就是优势函数的概念:在状态下,选择动作
比其他动作的优势有多少,即
。
重要性采样
在第一节的PG算法中有个问题,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。
举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。
那么为了提升我们的训练速度,让采样到的数据可以重复使用,我们可以将on-policy的方式转换为off-policy的方式。即我们的训练数据通过另一个Actor(对应的网络参数为θ'得到)。这要怎么做呢?通过下面的思路:
基于重要性采样的原则,我们可以用另外一个策略
,与环境互动采样数据来训练
,从而间接计算
。
重要性采样原理如下:
即重要性权重(importance weight)。通过这个恒等式,我们可以将求
期望的问题转到另一个分布
下面!即当我们当前的目标分布不太方便得到的时候,我们可以通过另外一个较容易得到的分布,来求得当前的目标分布。
因此,我们可以将梯度表示为:
基于重要性采样的原则,由于是Actor与环境交互的时候计算出来的,所以当从
换到
时候,就需要变换成
。并且最后一项假设两个分布不能差太远,所以认为他们是相等的,为了求解方便,我们直接划掉。
但是,基于重要性采样有个缺点,就是和
的分布不能差别太大(这点可根据两个分布期望和方差的差异得出)。当两个分布差距比较大的时候,通过重要性采样得到的样本数据可能就不对了,如下所示:
如图所示,p(x),q(x) 两个分布差距较大,当使用 p(x) 采样少量的样本的时候,f(x) 停留在左边,这时f(x) 的期望是负的;如果我们使用q(x)分布进行一些重要性采样,得到的样本期望可能是正的。这与f(x)在左边得到的期望值就不相符合了。当然如果q(x)采样足够多的话,还是有希望采样到左边的数据,进而得到负的期望值。 那么,如果可以保证p(x)和q(x)这两个分布是在某个程度内相似的,是不是就可以解决这个问题了呢?
PPO
对上面的梯度公式,根据,反过来用,可以得到PPO的目标函数为:
信任区域策略优化(TRPO)
我们不希望和
两者分布的差距不能过大,所以需要进行约束。引入KL散度来做限制。KL散度也叫相对熵,可以用来衡量两个分布之间的差异性。所以最直接的办法,就是对目标函数增加一个约束条件让他的KL散度小于
。目标函数如下:
TRPO 与 PPO 不一样的地方是约束项的位置不一样,PPO 是直接把约束放到要优化的式子里,可以直接用梯度上升的方法最大化这个式子。但TRPO是把 KL 散度当作约束,它希望
跟
的 KL 散度小于一个
。如果我们使用的是基于梯度的优化时,有约束是很难处理的,因为它把 KL 散度约束当做一个额外的约束,没有放目标里面。PPO 跟 TRPO 的性能差不多,但 PPO 在实现上比 TRPO 容易的多,所以我们一般就用 PPO,而不用TRPO
PPO1:近端策略优化惩罚(PPO-penalty)
实际上,直接求解TRPO这种带约束的问题是十分复杂的,需要计算二阶梯度。所以PPO-penalty直接将KL散度作为一个惩罚项放在目标函数中,如下所示:
为了更进一步提高惩罚项的作用,论文加入自适应的思想,当两者分布KL散度较大的时候,增大惩罚,使策略更新更加谨慎;当两个分布较相似的时候,减少惩罚,使之学得更快。即
PPO2:近端策略优化裁剪(PPO-clip)
PPO2再次提出更简洁的改进方法来限制两个分布的距离。直接引入一个小的修剪量
。使这两个分布的比值约束在
之间。PPO-clip的目标函数如下:
其中,表示重要性采样比率;
表示当前策略下的优势函数,当A>0时,希望增加该
的概率;但是不能过大,过大会使与
差距大,导致效果不好。反之亦然。
如上图所示,图示中的x轴是,y轴表示
,绿色的点表示
的值,蓝色表示的是
的值,红色则表示PPO2的取值。