WhiteDLG's

PPO算法详解

2026-1-17 RL / Algorithm 128 Views

PPO 是经典的强化学习算法,通过旧策略采样轨迹来估计新策略的梯度,这种方法必须保证新、旧策略分布差距不大,否则,估计新策略的梯度会失准,会使用 hard-clipping 技巧,避免新、旧策略分布差距过大,PPO公式如下:

$$ \begin{aligned} \mathcal{J}_{\text{PPO}}(\theta) &= \mathbb{E}_{(q,a)\sim\mathcal{D}, o_{\le t}\sim\pi_{\theta_{\text{old}}}} [ f_t ], \\ f_t &= \min \left( \frac{\pi_\theta(o_t \mid q, o_{\lt t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{\lt t})} \hat{A}_t, \ \text{clip} \left( \frac{\pi_\theta(o_t \mid q, o_{\lt t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{\lt t})}, 1 - \varepsilon, 1 + \varepsilon \right) \hat{A}_t \right) \end{aligned} $$

对于此公式理解如下:

1. $L^{\text{CPI}}$ | CPI(保守策略迭代)

其中策略梯度公式为:

$$ L^{CPI}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(o_t \mid q, o_{\lt t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{\lt t})} \hat{A}_t\right] = \hat{\mathbb{E}}_t \left[ r_t(\theta)\hat{A}_t \right]. $$

PPO中第一部分要介绍的是:`CPI(保守策略迭代)`,这是一种策略优化的方法。`它的目标`是让新的策略($\pi_\theta$)和旧的策略($\pi_{\theta_{\text{old}}}$)之间的变化尽可能小。这样做的好处是可以让策略更新更加稳定,避免因为变化太大而导致性能突然变差。

$\frac{\pi_{\theta}(o_t \mid q, o_{\lt t})}{\pi_{\theta_{\text{old}}}(o_t \mid q, o_{\lt t})}$ 指的是新策略 $\pi_\theta$ 选择动作q的概率与旧策略 $\pi_{\theta_{\text{old}}}$ 选择`相同动作`的概率之比。

$\hat{A}_t$ 是策略梯度中的优势函数,表示当前动作q相对于旧策略q的概率。

$\hat{A}_t$ 的计算方法看另一篇博客。

但是,如果没有任何限制地去最大化CPI的目标函数($L^{\text{CPI}}$),就会导致策略更新变得过大。这是因为`CPI的目标函数只考虑了新旧策略之间的相似性,而没有考虑到策略更新后的性能提升。`

举例理解:

  1. 假设你有一个机器人,它的任务是学会走路。旧的策略($\pi_{\theta_{\text{old}}}$)是机器人一步一步地慢慢走。新的策略($\pi_\theta$)是机器人尝试跑起来。
  2. 如果没有限制地去最大化CPI的目标函数,那么新的策略($\pi_\theta$)就会尽可能地接近旧的策略($\pi_{\theta_{\text{old}}}$),也就是让机器人继续一步一步地慢慢走,而不是尝试跑起来。这样做虽然可以让策略更新更加稳定,但是机器人就无法学会跑起来,性能也就无法得到提升。

为了避免这种情况,需要对CPI的目标函数进行修改,加入一个限制条件,使得策略更新既不会过大,又能够带来性能的提升。这就是CLP(保守策略学习)的目标函数($L^{\text{CLIP}}$)所做的事情。

2. $L^{\text{CLIP}}$

算式为:

$$ L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min(r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon)\hat{A}_t) \right] $$

公式中的 $\text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)$ 是一个限制函数,它确保 $r_t(\theta)$ 的值在 $1-\epsilon$ 和 $1+\epsilon$ 之间。这样,策略更新就不会太大。

其中 epsilon ($\epsilon$) 是超参数。目标函数为 $L_{CPI}$ 与剪切目标的期望的最小值。剪切目标的取值特点如下图:

剪切特点图
图1:L_CLIP 剪切特点

图中展示了 $L^{CLIP}$ 如何随着 $r$ 的变化而变化:

  • 当 $A > 0$ 时(即选择的动作比平均情况更好),$L^{CLIP}$ 随着 $r$ 的增加而增加,直到 $r$ 达到 $1 + \epsilon$,之后 $L^{CLIP}$ 不再增加。
  • 当 $A < 0$ 时(即选择的动作比平均情况更差),$L^{CLIP}$ 随着 $r$ 的减少而减少,直到 $r$ 达到 $1 - \epsilon$,之后 $L^{CLIP}$ 不再减少。

通过使用PPO,可以确保智能体在尝试新策略时不会偏离旧策略太远,从而避免性能突然变差。这种方法可以帮助智能体在保持稳定性的同时,逐步优化策略,使其更加高效。

3. PPO 训练流程

  1. 采样轨迹 (Rollout): 通过模型生成当前批次 prompt 的 response;
  2. 奖励计算 (Reward): 对生成的 response 进行 sequence-level reward 计算(可通过 Reward model 预测或基于规则的方式计算奖励);
  3. 计算Value: Value Model 估计每个response token的价值 (Value),即截止到当前response token,未来生成完整个response的期望奖励回报估计;
  4. 计算token-level advantage: 通过 GAE (Generalized Advantage Estimation, 算法如下) 分配 advantage 给每个 token,形成 token-level 的监督信号;
    $$ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t), \quad \hat{A}_t = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}. \quad (1) $$
  5. Value Model 梯度更新;
  6. 策略梯度更新。

4. Adaptive KL Penalty Coefficient

$$ L^{KLPEN}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)} \hat{A}_t - \beta \, \text{KL}[\pi_{\theta_{\text{old}}}(\cdot | s_t), \pi_\theta(\cdot | s_t)] \right] $$

其实就是在策略梯度算式部分后面直接再减掉一个 KL散度惩罚项

至于为什么在策略梯度的算式部分后面可以直接减掉一个KL散度惩罚项的原因是:
这个算式的最终目标是找到最大值(Maximize)。如果KL散度过大(即新旧策略差异很大),会导致目标函数值变小。因此,为了最大化目标函数,算法会主动保证KL散度偏小,而这也对应了让新策略与旧策略步伐变小的核心要求。

5. 其他

SGD

SGD是 “随机梯度下降” (Stochastic Gradient Descent) 的缩写。

什么是SGD?

想象一下,你在一片高低不平的山地上,你的目的是找到这片山地的最低点。如果你从山顶开始,每次只走一小步,并且每一步都朝着当前位置最陡峭的下坡方向走,最终你就能到达最低点。

SGD的原理就是这样:它通过不断调整模型参数,朝着减少损失的方向逐步优化模型。

关于优势函数 $\hat{A}_t$ 的详细获取方法与通俗理解

阅读:通俗理解优势函数 $\hat{A}_t$
(请确保链接 href 指向正确的文件路径)
  Tags: PPO, Reinforcement Learning, Algorithm, AI
Comments Section (Giscus Loading...)