概念 | 符号 | 定义 | 来源 | 用途 | 特点 |
|---|---|---|---|---|---|
Reward | \(r_t\) | 即时奖励 | 环境 | 基础信号 | 局部、即时 |
Return | \(G_t\) | \(Σ γ^k·r_{t+k}\) | 计算 | Value训练目标 | 实际、高方差 |
Value | \(V(s)\) | \(E[G_t|s_t=s]\) | 模型 | 状态评估 | 预测、期望 |
Q-Value | \(Q(s,a)\) | \(E[G_t|s_t=s,a_t=a]\) | 模型 | 动作评估 | 更细粒度 |
Advantage | \(A(s,a)\) | \(Q(s,a) - V(s)\) | 计算 | Policy更新 | 相对、低方差 |
GAE | \(GAE(λ)\) | 加权Advantage | 算法 | 优势估计 | 平衡bias-variance |
引言
Trust Region Policy Optimization (TRPO) 是2015年的ICML会议上提出的一种强大的基于策略的强化学习算法。TRPO 解决了传统策略梯度方法中的一些关键问题,特别是训练不稳定和步长选择困难的问题。与传统策略梯度算法相比,TRPO 具有更高的稳健性和样本效率,能够在复杂环境中取得更好的性能。
优化基础
在深入了解 TRPO 之前,我们需要先简单回顾一些优化方法的基础知识。
梯度上升法
梯度上升法是一种迭代优化算法,用于寻找函数的局部最大值。
目标:找到使目标函数 \(J(\theta)\) 最大化的参数 \(\theta^*\):
梯度上升迭代过程:
- 在当前参数 \(\theta_{old} \) 处计算梯度:\(g = \frac{\partial J(\theta)}{\partial \theta}|{\theta=\theta{old}}\)
- 更新参数:
其中\( \alpha\) 是学习率
梯度上升法的主要问题是学习率的选择:
- 学习率太小:收敛速度慢
- 学习率太大:可能导致发散或在最优点附近震荡
随机梯度上升法
在强化学习中,目标函数通常是期望形式:
随机梯度上升迭代过程:
- 随机采样状态 \(s\)
- 在当前参数 \(\theta_{old}\) 处计算梯度:\(g = \frac{\partial V(s;\theta)}{\partial \theta}|_{\theta=\theta_{old}}\)
- 更新参数:
随机梯度上升法的优点是计算效率高,但缺点是梯度估计有噪声,可能导致训练不稳定。
信任区域 (Trust Region) 方法
信任区域方法是一类优化算法,它通过限制每次参数更新的步长来提高优化过程的稳定性。这种方法特别适合处理非凸优化问题,而强化学习中的策略优化正是一个典型的非凸优化问题。
信任区域(Trust Region)是当前参数点 \(\theta_{old}\) 的一个邻域 \(\mathcal{N}(\theta_{old})\),在这个区域内,我们认为目标函数的近似模型是可靠的。
最常见的信任区域定义是欧几里得球:
其中 \(\Delta\) 是信任区域半径,控制了每次更新的最大步长, 如下图所示

信任区域算法的核心思想是:在每次迭代中,我们在当前参数点附近构建目标函数的一个近似模型,然后在信任区域内最大化这个近似模型。
信任区域算法流程:
- 近似:给定当前参数 \(\theta_{old}\),构建函数 \(L(\theta|\theta_{old})\) 作为目标函数 \(J(\theta)\) 在 \(\theta_{old}\) 邻域内的近似, 如下图中紫线,


- 最大化:在信任区域内找到参数更新:
如下图中所示,在信任区域内红色线趋势,找到 \(L(\theta|\theta_{old})\) 的局部最优


在这次迭代中,就找到了 \(\theta_{new}\),作为下次更新的\(\theta\)


最终经过不断的迭代,可以找到一个最优的 \(\theta^*\) 收敛到局部最优值, 总体可以用下面这张图来总结:

信任区域方法相比传统梯度方法有几个重要优势:
- 自适应步长:信任区域半径 \(\Delta\) 可以根据近似模型的准确性动态调整,避免了手动调整学习率的麻烦
- 更好的稳定性:通过限制每次更新的步长,避免了参数空间中的"悬崖"导致的灾难性更新
- 处理非凸优化:在非凸优化问题中,梯度方法容易陷入鞍点,而信任区域方法能够更有效地逃离鞍点
基于策略的强化学习
在进入正题之前还需要再简单回顾一下基于策略的强化学习的相关概念,在基于策略的强化学习中,我们直接参数化策略 \(\pi(a|s;\theta)\),表示在状态 \(s\) 下选择动作 \(a\) 的概率。
状态价值函数:
其中 \(Q_\pi(s,a)\) 是状态-动作价值函数,表示在状态 \(s\) 下执行动作 \(a\) 并之后遵循策略 \(\pi\) 的期望回报。
目标函数:
这个目标函数表示在初始状态分布下,遵循策略 \(\pi\) 的期望回报。
策略梯度方法
策略梯度方法通过梯度上升来最大化目标函数 \(J(\theta)\)。根据策略梯度定理,目标函数的梯度可以表示为:
这个梯度可以通过采样轨迹来估计,但估计的梯度通常有高方差,导致训练不稳定。
Trust Region Policy Optimization (TRPO)
存在的问题
为理解 TRPO 的必要性,需要先了解传统策略梯度方法(如 REINFORCE 或 Actor-Critic)存在的问题:
- 优化不稳定
传统方法使用一阶优化(梯度上升),当奖励函数曲率较高时会产生以下问题:使用一阶导数(切线)近似曲面,假设曲面是平坦的;当曲面具有高曲率时,可能导致灾难性更新,一次糟糕的更新可能导致策略性能崩溃,难以恢复 - 固定学习率的局限性
与监督学习不同,强化学习中用于更新策略的输入数据是非静态的(non-stationary)。这意味着数据分布会随着时间变化,而不是固定不变的。这是因为在强化学习中,我们通过让智能体按照当前最新版本的策略与环境交互来采样状态和动作。每当策略更新后,智能体的行为模式就会改变。
当策略更新时,智能体会探索不同的状态空间区域,导致观察到的状态分布发生变化,获得的奖励分布也会发生变化。
这形成了一个循环依赖关系:
这种非静态数据分布是强化学习中优化方法缺乏稳定性的主要原因之一。 因此,在强化学习中使用固定学习率(步长)是不合适的:- 策略决定数据分布
- 数据用于更新策略
- 更新后的策略又改变数据分布
- 对奖励函数形状不敏感:传统策略梯度方法使用的固定学习率无法适应奖励函数的形状和曲率变化。
- 不同区域需要不同学习率:
- 在奖励函数较平坦的区域,较大的学习率有助于加速学习
- 在奖励函数陡峭的区域,较大的学习率可能导致灾难性更新
- 固定学习率相当于假设整个优化过程中奖励函数的曲率保持不变,这在强化学习中显然是不成立的
- 参数空间与策略空间不一致
一个明显的结论是,我们需要限制策略变化,并在可能的情况下确保策略变化是好的(有趣的事实:TRPO 正是为我们做到这一点!!)。那么,给策略参数 \(\theta\) 的变化添加一些阈值怎么样?PG 方法可以通过在参数空间中保持新旧策略参数接近来实现这一点。然而,参数空间中的看似微小的变化可能会导致策略空间中的巨大变化。因此,我们不能保证参数的小幅更新会在策略上产生类似的结果。然而,我们的主要目标是限制策略变化。因此,我们需要找到一种方法将策略空间\(π(θ)\) 的变化转换为模型参数空间 \(\theta\) 的变化。 - 样本效率低 与 PG 方法相关的一个缺点是样本效率。对于 PG 方法,我们需要为单个策略参数更新采样整个轨迹。轨迹中可能有数千个时间步,甚至更多,这取决于环境,而为了获得最优策略,我们需要根据训练过程和初始参数值进行多次更新。正如我们所看到的,这相当低效。但为什么我们不在每个时间步进行一次更新呢?这个问题的答案在于处理高维 RL 问题的函数逼近器的需求。众所周知,表格型 RL 方法不适合具有大状态和动作空间的问题。但你有没有想过,为什么只有有限数量的参数能够以相当高的精度逼近无限数量的状态-动作值?这是因为这种连续环境中的状态彼此之间密切相关。为了可视化,想象一下环境是一个大迷宫。通常,智能体当前所在状态的价值与距离它几厘米的状态的价值相差不大。因此,状态是紧密相关的。
所以,上面强调的四个点告诉我们与正常 PG 方法相关的缺点以及需要更好的优化技术。基本上,我们想要确保两件事:
- 我们需要限制策略的变化,以便新旧策略之间的差异不大。
- 同时,我们应确保任何策略变化都能保证奖励的单调增加。
TRPO 可以确保这一点!!
目标函数推导
TRPO 的目标是最大化 \(J(\theta)\),但直接优化这个目标函数很困难。因此,TRPO 构造了一个替代目标函数。
从状态价值函数开始, 我们可以引入旧策略 \(\pi_{old} = \pi(\cdot|\cdot;\theta_{old})\) 并将 (1) 重写为:
这可以表示为期望形式:
因此,对应的目标函数可以写为:
这个形式的目标函数使得我们可以使用重要性采样,基于旧策略 \(\pi_{old}\) 收集的数据来评估新策略 \(\pi_\theta\)。
TRPO 算法
- 近似步骤
- 智能体在策略 \(\pi(\cdot|s;\theta_{old})\) 控制下收集轨迹:\(s_1, a_1, r_1, s_2, a_2, r_2, \ldots, s_n, a_n, r_n\)
- 使用蒙特卡洛方法近似目标函数:
- 使用折扣回报近似 \(Q\) 值:
- 最终近似形式:
- 最大化步骤
在信任区域内最大化近似函数:
满足约束:
或者使用 KL 散度作为约束(TRPO 原论文中使用的方法):
其中 \(KL\) 是 Kullback-Leibler 散度,衡量两个概率分布的差异。使用 KL 散度约束更适合策略空间,因为它直接约束策略的变化,而不是参数空间的变化。
优化问题的解决方案 (Optional)
至于怎么求解并优化这个优化问题的过程可以参考原论文 Trust Region Policy Optimization
TRPO 原论文中使用泰勒多项式近似和共轭梯度算法求解优化问题。
并且和上文的符号有所区分,并且一些细节上也不太一样(比如上文的状态价值函数使用的是\(Q\),而,论文中用的带baseline版本,也就是优势函数\(A\)),但整体思路相同。
- 泰勒展开近似:
这里在原论文中, 替代优势函数(Surrogate Advantage)的形式为:
这个函数使用重要性采样来评估新策略 \(\pi_{\theta}\) 相对于旧策略 \(\pi_{\text{old}}\) 的性能。
使用泰勒级数来展开替代优势和 KL 散度项。
对函数 \(L(\theta|\theta_{\text{old}})\) 在点 \(\theta_{\text{old}}\) 处进行一阶泰勒展开,可得:
其中第一项 \(L(\theta_{\text{k}}|\theta_{\text{k}}) = 0\),第二项梯度项 \(\nabla_{\theta} L(\theta|\theta_{\text{k}})|_{\theta-\theta_{\text{k}}}\) 正是策略梯度。
而KL 散度二阶项:\(\frac{1}{2}(\theta - \theta_{\text{k}})^T H (\theta - \theta_{\text{k}})\),其中 \(H\) 是 KL 散度的 Hessian 矩阵
所以,原优化问题就变成了
上述问题可以通过解析方法解决。该证明可以在自然策略梯度的文献中找到。
- 自然策略梯度:
优化问题可以转化为:
满足约束:\(\frac{1}{2}(\theta - \theta_{\text{k}})^T H (\theta - \theta_{\text{k}}) \leq \delta\)
其对应的解析解为:
这是所谓的自然策略梯度。
如果我们就此停止,并仅使用这个最终结果,该算法将精确计算自然策略梯度。问题是,由于泰勒展开引入的近似误差,这可能不满足 KL 约束,或者实际上提高优势。TRPO 向这个更新规则添加了一个修改:回溯线搜索(backtracking line search)。
\(\alpha\in (0,1)\)是回溯系数, \(j\) 是满足 KL 约束并产生正代理优势的最小非负整数。
- 共轭梯度算法:
计算 Hessian 矩阵的逆计算成本高且可能数值不稳定,所以,我们不是计算 \(H\) 的逆,而是求解以下方程:
这可以转化为一个二次优化问题,并可以使用共轭梯度法(CG algorithm)求解
最终,可以给出TRPO的算法伪代码如下

PPO(Proximal Policy Optimization)
简介
文章首先指出了当前三种主流强化学习方法的缺点:
- 深度Q学习(Deep Q-learning):在许多简单问题上失效并且理论理解不充分
- "原始"策略梯度方法("Vanilla" Policy Gradient):数据效率低,模型的鲁棒性差
- 信任区域策略优化(TRPO):
因此,如果我们因为近似二阶优化问题而引入了误差,就回到我们熟悉的第一阶优化方法,这些方法在计算上更容易处理。此外,有时调整策略参数以避免导致改进也是可以的。也就是说,我们并不需要在每次更新时都保证单调改进。这意味着我们不应该对短期目标过于贪婪,而应该更多地关注实现收敛到全局最优策略的长期目标。
所以openai提出了Proximal Policy Optimization (PPO) ,这是一种新型的策略梯度强化学习算法,它在保持信任区域策略优化(TRPO)的性能和稳定性的同时,提供了更简单的实现方式和更好的采样复杂度。它的简单性和效率使其成为大多数强化学习(RL)应用中的默认算法。
近端策略优化是一种基于策略的算法,通过调整策略参数(由函数近似器如神经网络参数化)来构建随机策略。它可用于具有连续和离散动作空间的无限状态空间环境。
我们可以选择这两种方法中的任何一种来对GRPO进行改进。
- 构建更复杂的方法来近似这些二阶导数矩阵,以降低计算复杂度。
- 通过添加一些软约束(以确保新旧策略之间差异不大,并且随着时间的推移进行策略改进,尽管不是严格单调的)来缩小一阶和二阶优化方法之间的差距。
PPO 采用了一种类似于第二种方法的方法。是的,PPO 是一种一阶优化方法!!, PPO 有两种版本。让我们逐一看看它们。
PPO with adavptive KL-Penalty
这种方法与我们在 TRPO 中做的方法类似,除了我们使用随机梯度上升这种一阶优化方法,并根据需求调整 KL 惩罚项, 对应的目标公式如下:
这里,我们的优化目标是上面的方程。使用拉格朗日对偶性,可以证明具有自适应 KL 惩罚的 PPO 目标与 TRPO 中的约束优化问题等价。这基本上是对策略不同时的优势进行惩罚;也就是说,KL 散度较高。
这里超参数 \(δ\) (信任区域半径)和 \(β\) (自适应惩罚系数)呈反比关系。\(β\) 会动态调整:
- 当新旧策略的KL散度高于阈值时,增加\(β\)(缩小信任区域)
- 当KL散度低于阈值时,减少\(β\)(扩大信任区域)
算法的伪代码如下所示:

这样做让我们得到了两者的最佳结合。我们得到了接近一阶优化方法的速度,以及接近 TRPO 的性能。但我们能做得更好吗?
PPO with Clipped objective
使用 PPO,我们无法保证在每一步都能找到单调的政策改进;然而,通过相应地调整 \(β\),在实践中往往能有效地提高收敛性。在 PPO 的裁剪版本中,我们移除了 KL 散度项,转而使用裁剪来确保新策略不会离旧策略太远。我们按以下方式修改目标函数
这里 \(π(θ)\) 是旧策略, \(π(θ_k)\) 是新策略。我们在更新新策略的同时,使用重要性采样技术从旧策略中采样轨迹,这提高了样本效率。
初看之下,可能有点难以理解这个新目标的具体含义,实际上,这个目标有一个相当简化的版本,它更容易理解(而且也是在代码中实现的版本) :
其中,
让我们将其分解为两部分

- 当优势函数为正时(如上图左),在这种情况下,其对目标函数的贡献降低到
优势函数是当前状态-动作对从回报(蒙特卡洛回报、TD 回报或 Q 函数)中减去基线(选择基线使其不依赖于策略参数)的结果。当优势为 0 时,我们处于中立位置。考虑另一种可能性,如果优势为正,这意味着在状态 \(s\) 中采取动作 \(a\) 更有可能提高性能。因此,我们应该增加在状态 \(s\) 中采取动作 \(a\) 的概率。然而,增加并不意味着我们可以没有上限。
在上述方程中, \(ϵ\) 取一个介于 \(0\) 和 \(1\) 之间的较小值(PPO 论文中的 \(0.2\) )。上述方程中的 \(\min\)表示一旦超过上限 \((1+ϵ)\) ,修正比例将被截断。这将确保目标函数的增量有限,即使更高的比例会导致更大的改进。
可以将此裁剪与我们在信任区域中所做的方式类似看待。我们在信任区域内找到最优点,并将其用作我们下一个策略估计,同时忽略信任区域外的任何其他点,即使我们可能获得更多改进。
- 当优势函数为负时(如上图右),
当优势函数为负值时,意味着在状态 \(s\) 下采取动作 \(a\) 是不利的。因此,我们应该降低采取该动作的概率。我们通过这次施加一个 \(\max\) 约束来实现这一点。这意味着即使降低概率比低于 \((1−ϵ)\) 会带来更好的性能,我们也不这样做,以确保策略不会偏离太多。
通过观察上述两种在不同条件下的目标函数版本,我们理解了 PPO 的裁剪版本。这种裁剪确保新策略不会因为偏离旧策略太远而受益。施加这两个约束有助于我们实现与 KL 散度相同的结果,有时甚至更好。
最终,我们将所有部件组合起来,形成了具有剪裁目标的 PPO 算法

损失函数
最终,论文中描述的损失函数写成了:
包含三个部分:
- 策略替代目标 \(L^{CLIP}(\theta)\):限制策略更新幅度的裁剪目标函数
目的:实现稳定的策略更新,避免过大的策略变化导致性能崩溃
具体形式:
其中:
- \(r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\) 是新旧策略的概率比
- \(\hat{A}_t\) 是优势函数估计
- \(\epsilon\) 是裁剪参数(通常为0.1或0.2)
理论基础:
- 传统策略梯度方法容易因为更新步长过大而导致性能崩溃
- TRPO 算法通过约束 KL 散度来限制策略更新,但计算复杂
- PPO 的裁剪机制提供了一种更简单的方式来实现类似的约束效果
- 当优势为正时,新策略不会超过旧策略的 \(1+\epsilon\) 倍;当优势为负时,新策略不会低于旧策略的 \(1-\epsilon\) 倍
- 价值函数损失\(L^{VF}(\theta)\):状态价值函数的均方误差
目的:提高状态价值函数的准确性,从而改进优势估计
具体形式:
其中 \(V^{targ}\) 通常是折扣回报的估计(如 \(r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + ...\))
理论基础:
- 准确的价值函数对于减少策略梯度的方差至关重要
- 在共享参数的神经网络架构中,价值函数和策略函数通常共享底层特征提取层
- 均方误差损失能有效地训练价值函数逼近器
- 系数 \(c_1\) 平衡了策略优化和价值函数学习的重要性
- 熵奖励 \(S\pi_\theta\):鼓励策略探索的熵正则项
目的:防止策略过早收敛到次优解,鼓励探索
具体形式:
理论基础:
- 强化学习面临探索-利用权衡问题
- 熵度量了策略的不确定性或随机性
- 高熵意味着策略更加随机,有助于探索环境
- 系数 \(c_2\) 控制探索的程度,随着训练进行通常会逐渐减小
优势函数估计
PPO 使用优势函数估计来减少策略梯度的方差。文中描述了两种优势估计方法:
- vanilla gradient policy 使用的估计器(截断版本的优势估计)
- 广义优势估计的截断版本:
其中 \(\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)\)
这里 \(\lambda\) 是一个额外的参数,控制偏差-方差权衡。当 \(\lambda = 1\) 时,第二种方法简化为第一种。
Reference
github-wangshusen/DRL-Slides/5_Policy_1.pdf
Trust Region Policy Optimization — Spinning Up documentation