强化学习中PPO算法原理

创建于:2025年4月13日

使用 O1 回答 Chat01

问题

强化学习中PPO算法原理

思考

Reasoned for a second

回答

在强化学习中,PPO(Proximal Policy Optimization)是 OpenAI 提出的基于策略梯度(Policy Gradient)的方法,用于解决连续动作或离散动作空间上的控制任务。它的核心思想在于:在每次策略更新时,既希望尽量增大目标函数(获得更高的回报),又要避免像早期策略梯度方法那样大幅度地更新策略,导致不稳定或收敛困难。下面对 PPO 的原理进行分步分析:


1. 背景与动机

  1. 策略梯度方法(Policy Gradient)
    在策略梯度框架下,我们定义一个可参数化的策略 πθ(as)\pi_\theta(a|s)(例如用神经网络近似),目标是最大化期望回报。直接使用策略梯度更新时,容易出现训练不稳定甚至发散的现象。

  2. 信任域策略优化(TRPO)
    为了在更新策略时进行约束,使得新旧策略的差异不过大,提出了 TRPO(Trust Region Policy Optimization)。TRPO 在每一步更新时显式限制了新旧策略间的 KL 散度,但实现起来较为复杂,且需要二阶导数等运算。

  3. PPO 的动机
    PPO 希望在保证新旧策略“相似”的前提下,使实现和计算更简单。它通过定义一个**截断的目标函数(clipped objective)**来限制新旧策略之间的更新步幅,从而达到“折中”稳定训练的目的。


2. 核心思想

2.1 策略更新中的比率(Probability Ratio)

PPO 关注在数据采样时使用的旧策略 πθold\pi_{\theta_\text{old}} 和在更新时使用的新策略 πθ\pi_\theta 的比值:

r(θ)=πθ(as)πθold(as)r(\theta) = \frac{\pi_\theta(a \mid s)}{\pi_{\theta_\text{old}}(a \mid s)}。
  • r(θ)>1r(\theta) > 1,代表新策略在给定状态 ss 下增加了选择动作 aa 的概率;
  • r(θ)<1r(\theta) < 1,则代表新策略减少了选择动作 aa 的概率。

2.2 优势函数(Advantage Function)

PPO 同样需要估计优势函数 AtA_t,来衡量在状态 sts_t 执行动作 ata_t 相对于平均水平的好坏程度。优势函数可以使用类似 GAE(Generalized Advantage Estimator)等方法进行估计。

2.3 截断的目标函数(Clipped Objective)

PPO 的关键在于引入了一个截断的目标函数来约束新旧策略的差别。其形式一般如下:

LCLIP(θ)=Et[min(r(θ)At,  clip(r(θ),1ϵ,1+ϵ)At)],L^\text{CLIP}(\theta) = \mathbb{E}_t\bigg[ \min\big(r(\theta)A_t,\;\text{clip}\big(r(\theta),1-\epsilon,1+\epsilon\big)\,A_t\big) \bigg],

其中:

  • r(θ)=πθ(atst)πθold(atst)r(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_\text{old}}(a_t \mid s_t)}
  • ϵ\epsilon 是一个超参数,通常取 0.1 或 0.2,用于限制比率的偏离程度;
  • clip()\text{clip}(\cdot) 操作保证比率 r(θ)r(\theta)[1ϵ,1+ϵ][1-\epsilon, 1+\epsilon] 范围内。

这个目标函数会在两种情况下取较小的那个值:

  1. 不使用截断的原目标 r(θ)Atr(\theta)A_t
  2. 使用截断版 clip(r(θ),1ϵ,1+ϵ)At\text{clip}(r(\theta), 1-\epsilon, 1+\epsilon)\cdot A_t

这样做的意义是:

  • 如果新旧策略比率 r(θ)r(\theta) 没有超出 [1ϵ,1+ϵ][1-\epsilon,\,1+\epsilon] 的范围,那么 PPO 可以和普通的优势加权策略梯度类似地更新;
  • 如果 r(θ)r(\theta) 超过了上述区间,说明新策略和旧策略偏离过大,就会受到“截断”惩罚,避免过大的梯度更新。

2.4 策略与价值函数的联合优化

PPO 一般会同时优化策略网络和价值函数网络(或者共享部分网络结构)。价值函数部分通常使用均方误差(Mean Squared Error)损失:

LV(θ)=(Vθ(st)Vttarget)2,L^{V}(\theta) = \big(V_\theta(s_t) - V_t^\text{target}\big)^2,

其中 VttargetV_t^\text{target} 可用蒙特卡洛回报或引入 TD(λ\lambda)、GAE 等估计来得到更平滑的目标。

最终的 PPO 损失函数综合了策略部分的损失 LCLIPL^\text{CLIP} 和价值函数损失 LVL^V 以及熵项(鼓励探索):

LPPO(θ)=Et[LCLIP(θ)c1LV(θ)+c2S(πθ(st))],L^\text{PPO}(\theta) = \mathbb{E}_t\Big[ L^\text{CLIP}(\theta) - c_1 \cdot L^V(\theta) + c_2 \cdot S\big(\pi_\theta(\cdot\mid s_t)\big) \Big],

其中:

  • c1,c2c_1, c_2 为权衡系数;
  • S(πθ(st))S(\pi_\theta(\cdot\mid s_t)) 为策略的熵(Entropy),用来鼓励多样化探索。

3. 算法流程概要

  1. 从环境中采样
    使用旧策略 πθold\pi_{\theta_\text{old}} 运行若干个时间步,收集状态、动作、回报等序列数据。

  2. 计算优势函数
    利用收集到的数据,通过 GAE 等方法估计各时间步的优势函数 AtA_t

  3. 更新策略

    • 计算策略比率 r(θ)r(\theta)
    • 使用截断目标函数 LCLIPL^\text{CLIP} 计算梯度并进行若干次小批量(mini-batch)的优化;
    • 同时更新价值函数网络。
  4. 重复

    • 更新完策略后,令 θoldθ\theta_\text{old} \leftarrow \theta
    • 继续从环境中采样新数据并进行下一次迭代。

4. PPO 相比其他方法的优点

  • 实现相对简单
    不需要显式计算二阶梯度或做复杂的线性搜索,代码实现和调参比 TRPO 更容易。

  • 稳定性与效率
    通过“截断”对新旧策略差异进行限制,能在一定程度上保证策略的稳定更新,同时保留较好的样本效率。

  • 应用广泛
    PPO 在 Atari 游戏、MuJoCo 机器人控制等任务上都展示了强大的性能,成为近几年非常常用的基准算法之一。


5. 小结

PPO 核心是利用“截断策略比率”来优化目标函数,平衡了策略更新幅度与训练稳定性之间的矛盾。它在实践中兼顾了收敛稳定实现简单两方面的优点,因此被广泛应用于各类连续控制和离散控制任务中。

  • 关键词:策略梯度,截断目标函数,优势函数,信任域约束,价值函数,熵正则化。

这就是 PPO(Proximal Policy Optimization)算法的基本原理与流程。

分享这个问答