type
Post
status
Published
date
Mar 20, 2026
slug
trpo
summary
本文从TRPO提出的motivation出发,step by step系统的推导了TRPO的算法的设计过程及细节
tags
强化学习
category
学习分享
icon
password
背景
根据策略梯度算法
我们可以通过梯度上升的方法来更新策略:
在实践中,由于目标函数的非凸性, (步长,or learning rate)的选择是个难题
- 如果很小,虽然能满足一阶近似,但训练效率很低
- 如果很大,由于目标函数的非凸性,无法保证更新的策略比旧策略好。若更新的策略变差,还会导致下一轮采样的数据变差,陷入恶性循环。
由此引出TRPO的motivation:如何保证训练效率下,让更新的策略比旧策略好。
TRPO 算法
根据性能差异引理可知
新策略相对旧策略的提升满足下面的式子 (是对应的new policy,是对应的old policy)
新策略 相对于旧策略 的性能提升量,等于"用新策略去采样,然后用旧策略的优势函数去评估"所得到的期望累计折扣优势。
然而这个式子有个“坑”,在更新参数前新策略是未知的,因此无法从来采样数据。
有一个naive的思路解决这个问题(rollback)
流程:
- 先根据policy gradient更新
- 基于在环境中采样,根据式(3)计算性能提升量
- 若没有提升则拒绝这次更新(rollback)
这样做主要有一个非常明显的弊端:采样成本很高。以自回归模型为例,用已有轨迹只是一个prefill过程,并行度非常高,而采样需要的是token-level的串型生成的过程。
为了解决这个问题,TRPO引入了两个trick
TRPO的核心假设:如果新旧策略变化不大,不妨假设那么他们的状态分布也差不多,即
的定义:
带回式(3),并引入importance sampling技巧,将近似的记作
- 式中的称为importance ratio
通过以上处理,可以只需用旧的策略去采样数据,就能评估新策略的性能提升。
但在上面的推导中,我们使用来近似,和真实的存在误差,直觉上,和差异越大,误差越大。下面来分析二者的误差
根据advantage function的定义,可以证明:,即,带入上式
令
为了继续推导,需要引入总变差散度(Total Variation Divergence, TV散度)。对于两个离散概率分布,,TV散度的定义为:
因此可以将上式改写为:
根据状态分布差异引理(State Distribution Difference Lemma),可知
带回上式
在机器学习中TV散度因为涉及绝对值,求导不便,根据Pinsker不等式,有
记,带回上式
⚠️注意上面的推导结果相比原论文大了两倍,因为原论文所用不等式为,而本文用的是更精确的形式:
最后,展开绝对值
可以得到真实性能的下界
这意味着,这意味着我们可以将目标函数设置为最大化右边的式子,从而保证单调不减。
写成参数优化的形式,令
理论上的参数优化目标为:
- : old policy的参数
- new policy的参数
- ,惩罚因子
上面的理论看似来似乎很完美,但实际落地是不可行的。
首先,在训练中,单个iteration只有有限条轨迹,难以遍历所有的状态找到。
其次,惩罚因子过大,使得KL divergence项的梯度过大,模型更新过于保守。
因此,上述理论虽然很优美,但无法实际用于工程实现。作者为此引入2个trick
Trick1: 利用拉格朗日对偶性,将惩罚转为约束
既然将KL divengence当作减法惩罚项会导致步长更新太小,不如把它拿出来,将原问题转化为一个约束优化问题
Trick2: Average KL divengence 而非 max
具体而言,原先需要遍历所有的状态才能得到,若状态空间很大,在实践中是得不到的(intractable)。另外这一项对噪声也非常敏感。
为此,采用一个启发式的近似:我们不要求,而是要求,其中
这个替换是工程的妥协,在一定程度上破坏了理论的单调性。作者原话 This problem imposes a constraint that the KL divergence is bounded at every point in the state space. While it is motivated by the theory, this problem is impractical to solve due to the large number of constraints. Instead, we can use a heuristic approximation which considers the average KL divergence
综上讨论得到TRPO的最终优化形式如下:
这个约束条件所封闭的解空间称之为trust region。
TRPO算法的求解
我们没有办法直接通过梯度下降的方式来优化式(19)带有约束的非线性目标。TRPO做了以下处理
首先对优化目标在出进行一阶泰勒展开近似
为了简化符号,记
带回原式
对约束在处进行二阶泰勒展开
- 是海森矩阵。
意味着KL divergence的两个分布相同,也表明KL divengence达到全局最小值,可以得出
带回上式
此时,优化目标可以改写为
通过上述处理,一个复杂的非线性优化问题转化为一个经典的二次约束线性优化问题。
我们可以根据拉格朗日乘子法求取解析解。
我们构造拉格朗日函数
分别对求偏导,令偏导为0
联立求解得到
式子中的其实就是自然梯度方向(Natural Gradient),为做了缩放后的自然梯度方向。
最终得到的解析解
直接通过解析解求解在实践中是不可行的。假定(对于模型来说这个很大),那么,显存可能存在瓶颈,更别说还要求逆。在实践中,作者采用CG算法来估计自然梯度
下面来看如何用CG求
我们的目标是求解()
常规的方法会涉及到海森矩阵的计算,代价不可接受。现在对他做一些转化,显然,上式可写做
下面对的转化很关键。为了方便符号记录,我们定义:
因此可写做
而,这大大降低了计算复杂度(这个技巧在sliced score matching中也有用到),这个trick称之为Hessian-vector product trick。
因此最终需要求解的目标为
求解式34可转化为求解函数的零点,也可转化为求解函数的极小值点。
因此求解式34等价于求解二次函数的极小值问题
可以用CG算法求解这个式子。
为最终的求解结果,即
带回到式39中,可以得到实际的参数更新方向和步长为
因此
式中的决定优化的方向,确定更新的步长,二者共同决定policy的参数优化方向。
最后,由于优化函数的引入了泰勒近似,不一定能满足原来的约束条件。在实际上作者还额外引入了line search的校验机制。具体来说:
- step0:初始阶段设置步长为最大步长
- step1: 更具步长更新policy参数
- step2: 带入到式19原始的约束函数中校验是否满足trust region的约束与性能是否提升。
- step3: 若满足则接受此次更新,若不满足则降低步长重复step1-2
小结
本文从TRPO提出的motivation出发,step by step系统的推导了TRPO的算法的设计过程及细节。如有不当之处,敬请之处。
- 作者:莫叶何竹🍀
- 链接:http://www.myhz0606.com/article/trpo
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
