策略梯度方法(PG)是强化学习(RL)中经常使用的算法。基于值函数的DQN算法通过近似估算状态-动作值函数来推断最优策略,而策略梯度方法则是直接优化策略。
策略梯度方法推导
策略梯度方法的目标是找到一组最优的神经网络参数最大化总收益函数关于轨迹分布的期望
首先,定义我们的目标函数为:
显然,直接求上式的梯度是不可能的,原因如下:
- 参数蕴含在每一时刻的 中;
- 策略会影响 的概率分布,但不是直接的影响;
- 虽然具有概率分布,但是为了收获奖励,在实际环境中必须做出一个确定性的选择才行;
- 奖励本身与参数没有关系,因为奖励对参数求导为零。
因此,需要公式(2)变形,现在令轨迹的收益, 则目标函数可以写为
我们假设的分布函数是可微分的,那么根据期望的定义,
它的梯度为
存在下面的一个恒等式:
将该恒等式带入公式(5)得到
策略梯度可以表示为期望,这意味着我们可以使用抽样来近似它。接下来我们谈谈如何计算
由Markov性,一条轨迹出现的概率是
方程两边同时取对数,可得
由于的值仅仅和带有参数的项有关,那么
最终,目标函数的梯度变为
在从实际系统中抽样时,我们用下面的式子进行估算
接下来,我们便可以使用 来更新参数
是最大对数似然。在深度学习中,它衡量观察数据的可能性。在强化学习的背景下,它衡量了当前策略下轨迹的可能性。通过将其与奖励相乘,我们希望如果轨迹导致高的正奖励,则增加策略的出现可能性。相反,如果策略导致高的负奖励,我们希望降低该策略的出现可能性。
策略梯度方法改进
策略梯度方法的高方差问题: 由于采样的轨迹千差万别,而且可能不同的 action 会带来一样的 Expected Reward。如果在分类任务中出现一个输入可以分为多个类的情况,梯度就会乱掉,因为网络不知道应该最大化哪个类别的输出概率。梯度很不稳定,就会带来收敛性很差的问题。为了解决这个问题,提出下面两种方法:
1.修改因果关系: 因果关系指的是,当前时间点的策略不能影响该时间点之前的时间点的所带来的收益,这个在直觉上很好理解,今天老板看到你工作努力想给你奖赏,老板不会给你昨天的工资加倍,只会给你今天的工资或者未来的工资加倍。
在公式(12)中便存在这样一个问题,在时间点 的策略影响到了时间点 之前的时间点 的收益。因此,对公式(12)做出如下调整
其中,我们把称作 “reward-to-go”,意为“之后的奖赏”。
2.引入基线: 首先,引入基线后的梯度的形式为
其中, 是一个常数。接下来在数学上证明其合理性
计算期望:
因此,引入常数 之后, 的值不会改变。其中一个不错的基准线是
计算方差
引入常数 之后,尽管期望值没有发生变化,但是如何保证方差减小呢?
方差的表达式为
而
,
其方差为:
令,并 使 对 的一阶导数为0,则
化简后得到
求解得到 的最优值
策略梯度方法的样本效率问题: 策略梯度法是一个在线 (on-policy) 算法,这是因为在计算策略梯度的时候所用的数据都是在新的策略下采样得到的,这就要求每次梯度更新之后就要根据新的策略全部重新采样,并把之前的在旧策略下采样到的样本全都丢弃,这种做法对数据的利用率非常低,使得收敛的速度也极低。那么如何有效利用旧的样本呢?这就需要引入重要性采样 的概念。
-
重要性采样(Importance Sampling)
- 重要性采样的原理是
- 重要性采样的原理是
将重要性采样的原理应用到我们的目标函数,则满足以下等式
由公式(8)可知
现在,我们求目标函数 的梯度,
最后像前文所述,通过修正因果关系和引入基线来减小方差
但是,这种形式也是存在问题的,上式中中间那块连乘部分的数值,是关于T指数增长的,如果每个数都略小于1,而时间轴非常长,这个乘积最终将非常接近于0,这样梯度效果就会很差了。
为了解决这个问题,我们可以重写目标函数的形式,如下
进一步展开可得
这样我们便可以在两个层面上做重要性抽样了,最终形式为
但是同时又带来了一个新的问题,那就是需要知道在新的给定策略下某个时刻在某个状态的概率,我们一般将这一项忽略,因为当两个策略足够接近时,这个比值近似为1。
引入“折扣因子(Discount Factor)”
引入“折扣因子”的目的是让奖赏r有权重地相加,让最开始收获的奖励有最大的权重,越往后面权重越小,因为距离当前状态的越近,影响越大。前边的公式也将相应地做出调整。
策略梯度地公式修改为:
参考