深入理解强化学习:近端策略优化(PPO)算法详解
近端策略优化(Proximal Policy Optimization, PPO)是强化学习领域最具影响力和应用最广泛的算法之一。自 2017 年由 OpenAI 提出以来,它凭借其出色的稳定性、高效的性能和相对简单的实现,成为了许多复杂决策任务的首选算法。
1. 算法的由来:为什么我们需要 PPO?
在 PPO 诞生之前,策略梯度(Policy Gradient, PG)方法是解决强化学习问题的主流选择。然而,传统的 PG 方法存在两个棘手的问题:
- 更新步长敏感性:策略网络的更新步长(即学习率)极难选择。如果步长太大,一次糟糕的更新就可能让策略性能急剧下降;如果步长太小,训练过程又会变得异常缓慢,难以收敛。
- 数据利用率低:大多数基础的 PG 算法(如 REINFORCE)是 On-policy 的,这意味着它们只能使用当前策略采样的数据进行学习。一旦策略更新,所有旧数据都将被丢弃,导致采样效率极低。
为了解决这些问题,研究者们提出了信任区域策略优化(Trust Region Policy Optimization, TRPO)。TRPO 通过在每次更新时施加一个 KL 散度(Kullback-Leibler divergence)的约束,确保新旧策略之间的差异不会过大,从而在数学上保证了策略性能的单调提升。
然而,TRPO 的计算代价高昂。它需要计算复杂的二阶优化问题(Fisher 信息矩阵的逆),这使得 TRPO 的实现和调试都非常困难。
正是在这样的背景下,PPO 应运而生。它的核心目标是:在实现 TRPO 稳定性的同时,使用更简单、计算成本更低的一阶优化方法。 PPO 通过一种巧妙的裁剪(Clipping)机制或自适应 KL 惩罚项,达到了与 TRPO 相媲美的性能,但其代码实现却异常简洁。
2. 数学建模与核心概念
PPO 建立在**马尔可夫决策过程(Markov Decision Process, MDP)**的框架之上。
一个 MDP 由以下五元组定义:
- S (States): 所有可能状态的集合。
- A (Actions): 所有可能动作的集合。
- P(s' | s, a): 状态转移概率。
- R(s, a): 奖励函数。
- γ (Discount Factor): 折扣因子 (0 ≤ γ < 1)。
强化学习的目标是找到一个策略 π(a|s),以最大化期望累积折扣奖励,即价值函数 V(s):
$$V_\pi(s) = E[\sum_{t=0}^{\infty} \gamma^t R(s_t, a_t) | s_0 = s, a_t \sim \pi(a_t|s_t)]$$
策略梯度方法通过直接参数化策略 ($\pi_\theta(a|s)$) 并使用梯度上升来优化参数 ($\theta$)。根据策略梯度定理,该目标函数的梯度为:
$$\nabla_\theta J(\theta) = E_{\tau \sim \pi_\theta}[(\sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t))(\sum_{t=0}^{T} R(s_t, a_t))]$$
在实践中,为了减小梯度的方差,我们通常不直接使用累积奖励,而是使用优势函数(Advantage Function)A(s, a) = Q(s, a) - V(s)。
3. PPO 的核心公式与推导
3.1 前置数学知识
- : 在某个策略下,对所有可能轨迹的加权平均。


