我们从 TRPO 中关于 KL 散度约束的近似求解部分 开始。


一、背景回顾(轻量)

TRPO(Trust Region Policy Optimization)目标是:

最大化期望优势函数的同时,限制新旧策略之间的KL散度不能太大。

形式化目标是:

受限于:


二、为什么需要近似?

这个优化问题因为有 KL 散度的非线性约束,直接求解很难,于是 TRPO 采用了二阶泰勒展开来近似KL散度约束,从而把问题简化为一个带二次约束的优化问题(Quadratic Constrained Quadratic Programming,QCQP)。


三、KL 散度的二阶近似:Hessian 的出现

KL 散度对参数 做二阶泰勒展开,展开中心在旧策略参数 θold\theta_{\text{old}},记为

image.png

  • 由于在 处,KL散度最小,所以一阶导数为0,即

  • 所以最终近似为:

其中 H 是 KL 散度对策略参数 的黑赛矩阵(Hessian):

这个 散度是看旧的分布和当前的分布的散度,以旧的分布作为基准,当前的分布是变量,所以在 处,对应的分布就是旧的分布,两个分布一样,所以散度是 0,并且这个函数在 处最小为 0,一阶导数也是 0,这样 可以近似成剩下的余项


四、为什么这样做?

这一步关键是:
👉 把 难解的 KL 散度约束 变成了一个 关于参数差值二次形式约束,就可以用 共轭梯度法 来近似解。


黑塞矩阵表明了周围的弯曲程度,我们希望通过它能让智能体指导,当学习的方向|当前更新方向的曲率很大的时候需要谨慎|减少更新步长,当周围很平的时候,可以增大学习的更新步长

但是起始只需要当前梯度更新的方向上的曲率就可以,我们可以从这个角度简化计算

首先原本的黑赛矩阵需要进行二阶求导,这个复杂度是 当网络的参数比较多的时候,计算量非常大,我们需要减少计算量 这里我们从两个角度来看待这个问题,一个看最优的方向,一个只看当前方向 最优方向

可以求解上式的 x 得到最大或者最小曲率的方向,其中 x 代表的是一个方向向量,当我们有一个确定的方向的时候, 就是这个方向上的曲率 (这里是反应当前方向陡峭程度,可能不是真实的曲率数值)

当前方向 当我们有了方向,方向记作 ,在共轭梯度计算中初始的 是目标函数的梯度

  • 是目标函数的梯度
  • 初始是 0,所以初始 是当前更新方向的梯度
  • 后续迭代是在上一次基础上迭代

我们要做的是设定初始方向作为当前方向,通过迭代来调整方向,找到周围更平稳的方向,让模型的参数向着更平稳的方向优化。迭代次数通常少于数据的维度

为了保证学习的高效性,避免不同的学习相互影响,使用共轭梯度法保证学习不会倒退。共轭梯度法是说梯度更新的方向需要和其他向量空间维度垂直,即内积为 0。这样更新这个方向上的梯度不会影响到其他维度的梯度,如何保证呢?

共轭梯度算法通过迭代更新搜索方向​ 来保证:

​ 其中:

  • ​ 是第 k 次迭代的残差(相当于梯度)

  • 选取保证了新方向和之前方向共轭

具体 通常选为:


五、 为什么这个更新保证共轭?

  • 残差 是梯度的负方向(误差)

  • 新方向 是当前残差加上之前方向的线性组合

  • 这种线性组合调整了方向,使得 对之前的方向 满足 H-共轭条件

具体步骤:

  1. 初始化
  • (或其他初值)

  • 残差

  • 搜索方向

  1. 迭代更新

对于第 k 次迭代:

  • 计算步长:
  • 更新估计:
  • 更新残差:
  • 计算
  • 更新搜索方向:
  1. 停止条件
  • 残差足够小,或者达到最大迭代次数。

五、策略目标

TRPO 优化目标

image.png

六、线性搜索

搜索的是步长,共轭梯度得到的优化方向的步长

搜索有一个步长上限 image.png