第 7 章:PPO——稳定训练的艺术
上一章我们搭建了 Actor-Critic 架构——Actor 负责选择动作,Critic 负责评估动作的好坏,两者通过优势函数 协作。在 CartPole 上,Actor-Critic 表现得相当不错。但当你把同样的架构搬到更复杂的环境(比如月球着陆器)或者更大的模型(比如数十亿参数的语言模型)时,一个严重的问题会浮出水面:训练不稳定。
策略梯度方法有一个臭名昭著的弱点——一步更新太大就会"策略崩溃"。想象你在学骑自行车,如果你一次调整太大的重心,结果不是骑得更好,而是直接摔车。Actor-Critic 的 TD Error 信号虽然降低了方差,但并没有从根本上解决这个问题。我们需要一种机制来约束每一步更新的幅度,让策略"小步快跑"而不是"一步登天"。这就是 PPO(Proximal Policy Optimization)要解决的核心问题。
本章沿着"动手 → 理论 → 约束 → 估计"的路径展开:先跑一个 PPO 训练实验,亲眼看到训练曲线和各种指标;再拆解背后的数学原理、裁剪机制和优势估计方法。
| 小节 | 你会回答的问题 |
|---|---|
| 动手:PPO 训练 LunarLander | PPO 的训练过程长什么样?Reward、Entropy、Clip Fraction 这些指标怎么看? |
| PPO 数学推导 | PPO 的公式怎么来的?从策略梯度到裁剪代理目标的完整推导链条是什么?完整损失函数包含哪几项? |
| 信任域与裁剪 | 为什么一步更新太大会崩溃?TRPO 的 KL 约束和 PPO 的裁剪各是怎么做的? |
| GAE、奖励模型与 LLM 对齐 | GAE 如何在偏差和方差之间插值?LLM 对齐中的 PPO 需要几个模型同时跑? |
让我们先跑起来看看效果——动手:PPO 训练 LunarLander。