第16回 近端策略优化——PPO:步子别迈大

欲登高处先收步,步稳方能路更长。
贪快一脚容易滑,慢改方得久安康。

上回 REINFORCE 教我们“直接改出招概率”,又用基线压住了抖。
可一到大场面,单靠“压惊符”仍不够——
你一旦改得太猛,策略就会突然变样:
昨日还讲人话,今日就学会钻奖励漏洞;
昨日还谦恭有礼,今日就满嘴胡诌讨喜。

所以江湖里要再立一条规矩:
每次只准往前挪一小步。

这条规矩,就是 PPO(Proximal Policy Optimization)的魂。1


一、PPO 想解决什么:策略更新“别发疯”

策略梯度本质上是在做“改概率分布”。
概率分布一改,就会牵一发动全身:
你把某个动作概率提高一点,别的动作概率就得相对降低;
你把某些状态下的出招改了,后续会走到完全不同的轨迹。

于是就出现一个非常现实的问题:

  • 改小了:学得慢
  • 改大了:学得快,但容易翻车

TRPO 先提出用 KL 距离(策略分布差异)做“信任域约束”,理论更硬,但实现更重。2
PPO 的野心是:
要到 TRPO 的稳,又要实现像普通梯度下降一样简单。


二、PPO 的关键道具:比值 rr 与“夹子”

PPO 训练时通常会保留两份策略:

  • 旧策略 πold\pi_{\text{old}}:采样数据时用的那份
  • 新策略 πθ\pi_\theta:你正在更新的那份

对同一个状态‑动作 s,as,a,看新旧概率的比值:

r(θ)=πθ(as)πold(as)r(\theta)=\frac{\pi_\theta(a\mid s)}{\pi_{\text{old}}(a\mid s)}

这比值像什么?像“我对这招的态度变了多少”:

  • r>1r>1:我更倾向于出这一招了
  • r<1r<1:我更不倾向于出这一招了

然后再配上上回的“超额收益”语言:优势(advantage)A^\hat A
你可以把 A^\hat A 理解为:
这一步的选择,比平均水平强多少。

于是朴素想法是:
rA^r\hat A 越大越好——
优势为正就增加概率,优势为负就减少概率。

可问题恰恰在“越大越好”:
你为了让目标大,可能把 rr 推得太夸张,策略瞬间变形。

PPO 的解决办法非常像给马套缰绳:
rr 加一个夹子(clip)。

典型形式是:

  • ϵ\epsilon 是允许改动的幅度(常见 0.1~0.3 一类数量级)
  • rr 限制在 [1ϵ,1+ϵ][1-\epsilon, 1+\epsilon] 这个区间里

直觉就是:
不许你一次把“喜欢/讨厌”改得过头。

这便是 PPO 的“近端”(proximal):离旧策略别太远。


三、为什么它更稳:奖励再诱人,也别一口吃成胖子

把“夹子”放进目标里,会出现一个很漂亮的效果:

  • 当你改得不多:目标和普通策略梯度差不多,学得快
  • 当你改得太猛:夹子生效,收益不再增长,你就没有动力继续猛改

这相当于给训练加了“自动刹车”。

从高二数学的味道来说,你可以把它当作一种“分段函数”式的约束:
小范围内近似线性推进,大范围立刻饱和,避免发散。


四、PPO 的基本流程(不写代码也能照做)

把 PPO 当成一套“循环章法”,你照着做就能实现:

  1. 用当前策略(也叫旧策略)在环境里采样一批轨迹
  2. 用价值函数估计每一步的优势 A^\hat A(上回说过基线/优势的意义)
  3. 固定旧策略不动,在这批数据上做多轮小步更新:
    • 目标里用比值 rr
    • 用 clip 限制 rr 的改动幅度
  4. 更新价值函数(让它更会估“平均水平”)
  5. 把新策略当作下一轮的旧策略,继续循环

这里最容易被初学者忽略的一点是:
PPO 看似“多轮更新很省样本”,但本质仍偏 on‑policy。
数据太旧就不再可靠,所以每轮都要重新采样。


五、把 PPO 贴回 RLHF:为何它常被用来“训语言模型的脾气”

当策略是语言模型时:

  • 状态:提示词 + 已生成的上下文
  • 动作:下一 token(或下一段文本)的选择
  • 奖励:来自奖励模型/偏好模型的分数,加上一些约束项(例如与参考模型差异的惩罚)

PPO 在 RLHF 里被广泛使用,一个重要原因就是它的“自动刹车”很符合工程需求:
你不希望模型为了讨好奖励模型而突然变形得不像话。

但 RLHF 的 PPO 真正难点不在论文公式,而在实现细节:
采样方式、长度惩罚、KL 控制、优势估计、归一化、批次组织……
这些“小事”会决定训练究竟是稳步变好,还是三天两头爆炸。

2024 有工作专门把 RLHF + PPO 的一堆关键细节摊开讲,并做了可复现实验复刻,强调这些细节对稳定性的影响。3
也有 2024 的研究讨论把 RLHF 做得更并行、更高吞吐,反映了一个趋势:
模型越大,PPO/RLHF 越需要工程化的训练范式。4


六、小结:PPO 的一句话,就是“改策略要有刹车”

本回收束成四句:

  1. 策略更新会牵一发动全身,步子迈大就容易翻车
  2. PPO 用新旧概率比值 rr 衡量“改了多少”
  3. PPO 用 clip 给 rr 上缰绳:改得过头就不给你更多收益
  4. 在 RLHF 里,PPO 常用来“训脾气”,关键挑战在稳定的实现细节与约束

下一回(第17回)我们要把 RLHF 的全流水线摆上桌:
先 SFT 打底,再奖励建模,最后用 PPO 或其替代法把偏好写进模型脾气里。

欲知后事如何,且听下回分解。


幻觉核查

  • PPO 经典来源核对:arXiv:1707.06347 可核验标题、作者与摘要。1
  • TRPO 经典来源核对:arXiv:1502.05477 可核验标题、作者与“信任域/KL 约束”的核心思想。2
  • RLHF + PPO 细节复现核对:arXiv:2403.17031 可核验“实现细节枚举/复现实验”的主张。3
  • 异步 RLHF 方向核对:arXiv:2410.18252 可核验论文标题与“更高效 off‑policy/异步”表述。4

逻辑审计

  • 与第15回承接:第15回用基线把 REINFORCE 稳住,本回用“夹子/刹车”把“策略更新幅度”稳住。
  • 为第17回铺垫:本回解释了 PPO 在 RLHF 中的角色与难点,下回进入 RLHF 全流程(SFT→RM→PPO)。
  • 难度控制:只用比值与“夹子”直觉解释,不进入 KL 约束推导与自然梯度细节。

引用与溯源

Footnotes

  1. Schulman, J., et al. Proximal Policy Optimization Algorithms arXiv:1707.06347 (2017) https://arxiv.org/abs/1707.06347 2

  2. Schulman, J., et al. Trust Region Policy Optimization arXiv:1502.05477 (2015) https://arxiv.org/abs/1502.05477 2

  3. Huang, S., et al. The N+ Implementation Details of RLHF with PPO: A Case Study on TL;DR Summarization arXiv:2403.17031 (2024-03) https://arxiv.org/abs/2403.17031 2

  4. Noukhovitch, M., et al. Asynchronous RLHF: Faster and More Efficient Off-Policy RL for Language Models arXiv:2410.18252 (2024-10) https://arxiv.org/abs/2410.18252 2