本文将从策略梯度的优化目标出发,一步步推导出策略梯度方法,并将其扩展到现在流行的PPO,DPO等方法。首先先介绍一些强化学习的基本概念。

强化学习基本概念

强化学习本质上是一种通过与环境不断进行交互,试错来优化策略,从而获得最大期望回报的方法。其构成部分可以抽象为如下三个部分:环境,智能体和奖励。智能体通过观察(后续不再和状态做区分)环境,来决定当前的动作,从而影响环境,获取奖励。从当前时刻到回合结束,所获得的奖励之和叫做回报,而智能体的目标就是最大化期望回报。形式化地说,我们考虑离散的时间片,设结束时间为(这里不再区分为某个具体的数,还是),我们定义时间步时刻的奖励为,则当前时间的回报可以定义为:

但是,很多情况下,未来的奖励和现在的奖励的重要程度其实是不一致的,往往现在的奖励会更重要一些,因此,我们往往使用折扣回报,设折扣率为,则有:

智能体在环境中的行为,我们常常用一个概率密度函数来刻画,称为策略。策略将观察动作映射到一个0到1的实数,表示在当前观察下,采取特定动作的概率。

要衡量某个策略的好坏,即衡量策略在环境中所能获得的期望回报,我们定义动作价值函数为:

其表示的是,在当前状态下,采取动作,策略在环境中能够获得的期望回报。进一步地,如果我们希望评估某个状态下,策略的好坏,我们可以定义状态价值函数:

那么,如果如果我们想要一个较好的策略,只需要找到一个策略,让其在各个状态下都有较大的。那么我们可以如下定义策略梯度方法的目标函数:

其中是在策略下状态的分布。那么我们的优化问题就可以写成:

只要我们能对这个目标函数求梯度,那么就可以使用梯度上升法来优化参数,这就是策略梯度方法的来源。

策略梯度方法

从上一节我们得到了策略梯度方法的目标函数,那么在实际的强化学习场景中,我们怎么优化这个式子呢?首先由于缺乏关于的精确表示(或者表示非常复杂),我们难以对进行直接的求导,这是需要用上策略梯度定理。

策略梯度定理:设目标函数为,其中是马尔可夫链稳态分布的概率质量(或密度)函数,为一局游戏的长度,则如下等式成立:

这个公式的证明放在附录。

对于这个公式,我们能做的事情就很多了。我们一项一项的看。

首先这一项很好算,用等比数列求和算一下即可,实际应用中,这一项可以被学习率吸收掉。

接下来看两个求期望的操作,首先第一个期望肯定没法解析的求,因为我们不知道的具体形式。那么再来看第二个期望,如果此时的动作空间不大的话,其实这个期望我们是可以解析的求解的。但是在很多情况下,我们的动作空间可能非常的大(例如,在LLM语境下,动作空间可能是用户query的所有可能响应),所以也难以解析的求解这个期望。既然无法解析的求解,那么我们就来估算这两个期望吧,使用蒙特卡洛方法,在环境中用策略进行采样,可以得到随机梯度:

在优化过程中,我们可以用随机梯度来近似梯度,由无偏估计的定义可知,这显然是一个无偏估计。下面问题来了,这个式子我们可以精确计算吗?

首先先看,只要我们用的是可以求梯度的模型(例如神经网络)来表示策略,那么这一项是可以计算的。但是就比较麻烦了,我们也很难精确的求解。那么围绕着如何估计,各种各样的策略梯度强化学习算法就被提出了。

Reinforce

首先回顾一下的定义,我们可以发现,的定义就是策略在当前状态和动作下,在环境中进行交互所能获得的期望回报。那么,一个显而易见的估计就是,使用蒙特卡洛方案来估计这个期望。设当前时间步下,策略从状态出发并执行动作,直到一局游戏结束所获得的回报为,则可以估计为:

则随机梯度可以估计为:

用这个随机梯度去做梯度上升即可!

Actor-Critic

另一种思路是使用一个模型来拟合,我们设为,则随机梯度的估计为:

如果使用这个梯度来更新参数,会让的打分越来越高,原因如下:设状态价值函数为,其可以近似为:

则求的关于参数的梯度:

即的关于参数的梯度为的期望,所以,使用更新参数实际上也在对做梯度上升,即打分越来越高(注意,由于与无关,所以这里让其打分越来越高是指策略越来越符合的偏好,并不是说更新了)。

所以只有当能反映真实的时,策略才能真正的提升。所以也需要更新,具体怎么更新呢?可以使用TD类算法进行,例如SARSA等,简单来说,当模型进行了一个动作时,会获得环境的一个回报,那么我们采用:

来作为的目标,然后采用各种优化方法(如定义损失函数后采用梯度下降等)来进行优化即可。

更好的估算梯度

上述方法虽然理论上是正确的,已经可以实现简单的策略梯度算法,但是在实践中,往往这些算法的表现不佳。这是因为对原始策略梯度定理使用蒙特卡洛估计期望,虽然得到的是期望的无偏估计,但是其方差往往比较大,此时,只需要对原始的策略梯度定理做一个微小的改动,即可大幅度的提升算法性能。

带基线的策略梯度定理:设为一个不依赖的函数,则有:

这个定理成立的基础是,而这个证明如下:

所以可知,的取值并不影响的期望。不过,不同的会影响其方差,当比较接近时,方差会比较小,此时训练效果较为稳定。在强化学习中,我们将定义为优势函数。则我们的随机梯度可以写为:

这样估算出来的随机梯度方差更小,更加稳定。

选择步长

上面带基线的策略梯度方法仍然存在一些问题,那就是一般来说我们在做梯度提升时:

这里的步长一般是一个人为选择的值,由于梯度仅仅是局部上函数下降最快的方向,如果步长过大的话,会导致模型更新幅度过大,导致策略难以收敛。在监督学习上,这个问题同样存在,但是在强化学习中,这个问题导致的后果更加严重。因为监督学习中,数据的分布往往是不变的,用于训练的数据是固定的采集好的。但是在强化学习里,用于训练的数据往往是使用策略采集出来的,是会随着策略的改变而改变的。如果策略被过大的步长更新到一个糟糕的境地,那么很有可能后续采集出来的所有数据都是无效的,导致模型难以回到正轨。而如果选择了一个过小的步长,算法则会收敛的很慢,效率很低。

这个问题,本质上是因为,参数上的微小变化,由于复杂的模型结构,反映到策略上,可能会造成巨大的突变,那么我们有没有办法在通过更新参数,使得策略的改变幅度也不至于过于剧烈呢?或许我们可以在优化问题中添加一个KL散度的约束,限制策略更新幅度的同时优化目标。这就是自然梯度法。

自然梯度法

我们来梳理一下我们要做的事情:我们需要给我们的参数找到一个更新量,使得策略更新幅度不大的情况下,优化我们的优化目标(即期望回报)。我们用KL散度来衡量策略更新的幅度的话,上述过程可以形式化为:

要求解这个优化问题,可以使用拉格朗日乘子法转化为:

由于和过于难以分析,这里对其做分别作一阶展开(其实就是使用梯度进行优化)和二阶展开的近似,可得:

其中为Fisher矩阵,可以使用策略的梯度的均值进行估算。对上述近似后的拉格朗日对偶函数求关于和的偏导,令其为,即可得到:

即最终更新式为:

TRPO

另一种方法另辟蹊径,放弃了策略梯度定理,转而选择对优化目标进行了近似,引入置信域优化的方法,在理论上给出了一个优化目标单调上升的保证(当然,实际运算中由于还是存在很多近似,所以并不能保证单调上升),这就是TRPO。

(未完待续...)