

前言#
需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!
前言#
如果说 REINFORCE 的体验是“能学但很抖”,那 PPO 的体验往往是“终于像个工程算法了”。
PPO 解决的是一个特别现实的问题:
on-policy 方法要的数据很新鲜,但代价是采样量像无底洞一样被消耗;off-policy 方法能复用数据,样本效率高,可一旦更新把策略推离了数据分布太远,训练又会非常容易崩。PPO 基本就是在这两个诉求之间做平衡:既想把数据用得更充分,又不想让策略每次跨太大一步。
于是文档里先引入重要性采样,再引出 PPO 的关键点:限制新旧策略差距。
重要性采样:用旧数据估计新策略#
文档说“通过重要性采样,把同策略换成异策略”,直观可以理解为:
- 数据是用旧策略 采的;
- 但我们想优化新策略 ;
- 用一个比率把分布差异补回来:
问题就在这里:如果新旧策略差太大,这个比率会爆炸或趋近 0,更新会非常不稳定。
PPO 的核心:别更新太猛#
文档描述 PPO 的目标:避免 与 相差太多。
TRPO 的做法是用 KL 散度做约束(但实现复杂);PPO 把“约束”塞进目标函数里,让优化变得像普通的梯度法。
PPO 最常用的是 clipped objective(文档里虽然没展开公式,但思想一致):
这里 是优势(通常来自 critic 或 GAE)。
PPO 实战要点(我觉得比公式更重要)#
1) PPO 仍然是 on-policy#
文档强调:虽然用了重要性采样,但 PPO 通常只用上一轮策略的数据,所以行为策略和目标策略非常接近,可认为是同策略。
这是你写代码时必须遵守的约束:
- 采样 buffer 不能像 DQN 那样攒很多轮;
- 最多复用 K 个 epoch(mini-batch 多轮优化),但还是基于同一批 rollout。
2) 优势估计决定了稳定性#
PPO 本体只是“更新约束”,真正决定学习信号质量的是 。
工程上常见做法:
- 用 critic 估计
- 用 GAE() 计算优势
【图片占位:GAE 计算流程图(TD residual 逐步衰减累加)】
3) 两个最常调的旋钮#
- clip epsilon(比如 0.1 ~ 0.3)
- entropy bonus 系数(鼓励探索,避免过早坍缩)
本章小结:PPO 的贡献是“可控”#
PPO 在我看来最重要的贡献不是它有多“新”,而是它让策略梯度的更新变得可控:
- 你可以用 KL / clip 来约束更新幅度;
- 你可以通过多 epoch 复用同一批数据,提高样本利用率;
- 它和 actor-critic 架构天然契合。
下一章我们会回到 value-based 阵营:DQN。你会发现它也在做“稳定性工程”,只是手段完全不同:经验回放 + 目标网络。