引言(Introduction)#
在 REINFORCE 和 A2C 等策略梯度算法中,我们通常使用固定的学习率 α 来更新参数:θ←θ+α∇J。
但这有一个严重问题:策略参数的变化 Δθ 并不等同于策略行为的变化。
- 有时候参数改一点点,策略分布变动巨大(导致性能崩塌)。
- 有时候参数改很多,策略分布几乎没变(训练效率低)。
TRPO (Trust Region Policy Optimization) 的核心思想是:我们不直接控制参数的变化量,而是控制策略分布的变化量(用 KL 散度衡量)。我们在一个“信任区域”内进行优化,确保每一步更新后,策略的表现都是单调不减的。
策略优化的单调性证明#
我们的目标是找到一个新策略 πθ′,使得它的期望回报 J(θ′) 比旧策略 J(θ) 高。
首先推导新旧策略的目标函数之差:
J(θ′)−J(θ)=Es0[Vπθ′(s0)]−Es0[Vπθ(s0)]=Eπθ′[t=0∑∞γtr(st,at)]−Es0[t=0∑∞γtVπθ(st)−t=1∑∞γtVπθ(st)]=Eπθ′[t=0∑∞γtr(st,at)]−Eπθ′[t=0∑∞γt(Vπθ(st)−γVπθ(st+1))]=Eπθ′[t=0∑∞γt(r(st,at)+γVπθ(st+1)−Vπθ(st))]=Eπθ′[t=0∑∞γtAπθ(st,at)]
将期望展开为状态访问分布 νπθ′ 的形式:
J(θ′)−J(θ)=t=0∑∞γtEst∼pπθ′,at∼πθ′(⋅∣st)[Aπθ(st,at)]=1−γ1Es∼νπθ′,a∼πθ′(⋅∣s)[Aπθ(s,a)]
状态分布近似#
上式很难计算,因为 νπθ′ 依赖于新策略(而新策略还没求出来)。
TRPO 做了一个关键假设:当新旧策略差距很小时,状态访问分布变化不大,即 νπθ′≈νπθ。
目标函数近似为:
J(θ′)−J(θ)≈1−γ1Es∼νπθ,a∼πθ′(⋅∣s)[Aπθ(s,a)]=1−γ1Es∼νπθ,a∼πθ(⋅∣s)[πθ(a∣s)πθ′(a∣s)Aπθ(s,a)](重要性采样)
信任区域约束#
为了让上述近似成立,必须限制 πθ′ 和 πθ 不能差太多。我们使用 KL 散度 作为约束条件。
优化目标:
θ′maxs.t.Es∼νπθ,a∼πθ(⋅∣s)[πθ(a∣s)πθ′(a∣s)Aπθ(s,a)]DˉKL(θ∣∣θ′)=Es∼νπθ[DKL(πθ(⋅∣s)∣∣πθ′(⋅∣s))]⩽δ
(注:忽略了常数系数 1−γ1,因为它不影响梯度方向)
数学近似求解#
为了求解这个带约束的优化问题,我们对其进行泰勒展开。
目标函数的一阶近似#
令 L(θ′)=E[πθπθ′Aπθ]。在 θ′=θ 处展开:
L(θ′)≈L(θ)+∇θ′L(θ′)∣θ′=θT(θ′−θ)
由于 L(θ)=E[1⋅Aπθ]=0 (优势函数的期望为0),且 ∇θ′L(θ′)∣θ=∇θJ(θ) (策略梯度)。
记梯度为 g:
L(θ′)≈gT(θ′−θ)
约束条件的二阶近似#
KL 散度在 θ′=θ 处的一阶导数为 0(因为是极小值点),所以必须展开到二阶。
DˉKL(θ∣∣θ′)≈21(θ′−θ)TH(θ′−θ)
其中 H 是 KL 散度的 黑塞矩阵 (Hessian Matrix)(也是 Fisher Information Matrix)。
近似后的优化问题#
令更新步长 Δθ=θ′−θ,问题转化为:
Δθmaxs.t.gTΔθ21ΔθTHΔθ⩽δ
解析解#
利用拉格朗日乘数法(推导见你原笔记),解得:
Δθ=gTH−1g2δH−1g
共轭梯度法 (Conjugate Gradient)#
公式里需要计算 H−1g。
- 问题:H 是神经网络参数的 Hessian 矩阵。如果参数有 100万个,H 就是 100w×100w 的矩阵,显式计算它的逆是不可能的。
- 思路:我们不需要算 H−1,我们只需要算向量 x=H−1g。这等价于求解线性方程组 Hx=g。
共轭梯度法 (CG) 是一种迭代算法,它可以只通过计算矩阵-向量乘积 (Hv),在 k 步内(k≪参数维度)找到 x 的近似解。
Hessian-Vector Product (HVP)#
CG 算法需要计算 Hv。虽然我们算不起 H,但可以利用反向传播算 Hv。
Hv=∇θ(∇θDˉKL⋅v)
代码实现技巧:
- 先算 KL 散度的梯度 ∇DˉKL。
- 算梯度和向量 v 的点积:scalar=∇DˉKLTv。
- 对这个标量再求一次梯度:∇θ(scalar)。
这样只需要两次反向传播,就能算出 Hv,完全避免了存储巨大的 Hessian 矩阵。
线搜索 (Line Search)#
虽然我们算出了更新方向 Δθ 和最大步长 β=gTH−1g2δ,但由于泰勒展开只是局部近似,直接走这么远可能会导致策略性能下降(KL 散度超标或目标函数下降)。
TRPO 采用 回溯线搜索 (Backtracking Line Search) 来确定最终步长:
设 θnew=θ+αjβΔθ,其中 α∈(0,1) 是衰减系数(如 0.5)。
从 j=0,1,2,… 开始尝试,直到满足以下两个条件:
- KL 约束满足:DˉKL(θ∣∣θnew)⩽δ
- 目标函数提升:L(θnew)⩾0 (即性能确实提升了)
TRPO 算法流程总结#
∙Initialize policy parameters θ0∙For k=0,1,2,… do:∙Collect trajectories τ using πθk∙Estimate advantages Aπθk (using GAE)∙Compute policy gradient g=∇θL(θ)∣θk∙Use CG to compute x≈H−1g with HVP∙Compute max step length β=xTHx2δ∙Perform Line Search to find best step size η∈{β,0.5β,0.25β…}∙Update θk+1=θk+ηx∙End For
优缺点分析#
- 优点:
- 理论保证:单调提升,不再担心学习率太大导致训练崩溃。
- 数据效率:比 REINFORCE 高,因为利用了二阶信息(自然梯度)。
- 缺点:
- 计算复杂:CG 和 HVP 实现复杂,且计算量大。
- 约束太硬:KL 散度是硬约束,处理起来不够灵活。
💡 预告:
TRPO 虽然好,但太复杂了。有没有一种方法,既能保留 TRPO 的“信任区域”思想(稳定),又能像 SGD 一样简单(一阶优化)?
这就是 PPO (Proximal Policy Optimization) 的由来(下一章内容)。