PPO(2017):大量论文工程系统都以PPO为baseline
导出时间:2025/12/19 13:30:11
👉《把 TRPO 的“安全带”,换成“弹力绳”》
一、先说结论(给你一个认知锚点)
PPO 做的事只有一件:让策略“每次只改一点点”,但用最简单、最便宜的方式实现。
如果你只记住一句话,这一句就够了。
二、研究背景和动机
👉 为什么 TRPO 不够好?
🎯 回到“走钢丝”的故事
在 TRPO 里:
- 你给学员绑了:
- 安全带
- 护栏
- 测距仪
- 实时监控
- 确实很安全
- 但问题是:
太复杂、太重、太难用
❌ TRPO 的现实问题(工程视角)
现实中的研究者发现:
- 理论很漂亮 ✅
- 实现极其复杂 ❌
- 训练速度慢 ❌
- 新人根本用不起来 ❌
于是大家开始问一个关键问题:
“能不能不要那么复杂,但仍然别让策略‘一脚迈太大’?”
🎯 PPO 的研究动机(一句话)
我要 TRPO 的“稳”,但不要 TRPO 的“麻烦”。
三、PPO 的核心直觉(非常重要)
👉 不再“算你变了多远”,而是“不让你变太狠”
TRPO 的逻辑是:
“我精确测量你新旧策略差多远(KL),超过阈值就不行。”
PPO 的逻辑更像人类:
“我不精确量,但我在关键地方给你设‘限幅’。”
四、PPO 的模型网络结构(非常简单)
🧠 PPO 在“长相”上几乎没变化
PPO 不靠结构创新:
- 一个 Policy 网络(Actor)
- 通常再加一个 Value 网络(Critic)
- 有时共享前几层
任务网络输出离散动作softmax 概率连续动作高斯分布参数(均值 + 方差)
👉 和 TRPO、A2C 长得一模一样
五、PPO 是如何训练的(故事版,重点)
这是你真正要理解 PPO 的地方。
🟢 第一步:照旧,先“试着走”
和前面所有策略梯度算法一样:
- 用当前策略跑环境
- 收集轨迹:
- 状态
- 动作
- 奖励
- 计算每一步:
- “这一步比平均水平好多少?”(优势)
到这里为止,一切都很普通。
🟢 第二步:教练说一句非常关键的话
教练对学员说:
“你可以改走法,但这一次 你走的方式,不能和刚才差太多。”
注意:
- 只和“刚才那版策略”比
- 不是无限制更新
🪢 第三步:PPO 的灵魂 ——「弹力绳」
PPO 不用 TRPO 那种“硬护栏”,而是用了一根 弹力绳。
这根绳子的规则是:
- 改进是好的 ✅
- 但一旦你改得太猛 ❌
- 收益就不再增加(甚至被截断)
🎯 你可以这样想(非常形象)
想象你在遛狗:
- 狗想往前冲(策略想大改)
- 你拽着一根弹力绳
结果是:
- 小幅前进:
- 绳子不紧,随你
- 冲太猛:
- 绳子绷住,跑不动了
👉 这就是 PPO 的 clip 机制
🧠 PPO 真正限制的是什么?
不是动作本身,而是:
“新策略下,这个动作的概率相比旧策略,被放大 / 缩小了多少?”
如果变化在合理范围内:
- 正常学习
如果变化超出范围:
- 直接“不给更多奖励”
⚠️ 一个非常重要的直觉
PPO 不禁止你更新,它只是让“过度更新没有好处”。
这比 TRPO 的“硬约束”:
- 更简单
- 更鲁棒
- 更好实现
六、PPO 的完整训练循环(浓缩版)
你现在可以这样理解 PPO 的一天:
- 用当前策略采样
- 固定这版策略(当作“参考旧我”)
- 在同一批数据上:
- 反复用 SGD 更新网络
- 每一步更新:
- 都被“弹力绳”限制
- 数据用完,换新数据
- 重复
👉 不需要二阶优化,不需要复杂数学
七、PPO 为什么这么成功?
🟢 优点总结(为什么几乎人人用)
- 非常稳定
- 不容易突然崩
- 实现极其简单
- 普通深度学习代码
- 计算成本低
- 对超参数不敏感
- 适用于离散 + 连续动作
这就是为什么你会看到:
OpenAI / DeepMind / 各种库 默认首选 PPO
八、PPO 的缺陷(一定要知道)
❌ 缺陷 1:理论不如 TRPO 严谨
- PPO 是启发式方法
- 没有 TRPO 那样严格的单调改进证明
👉 但实践中“够用而且更稳”
❌ 缺陷 2:样本效率一般
- PPO 是 on-policy
- 数据用完就扔
相比 DDPG / SAC:
- 样本效率偏低
❌ 缺陷 3:clip 参数需要调
- clip 太小 → 学得慢
- clip 太大 → 不稳定
不过比 TRPO 好调得多。
九、一句话让你彻底记住 PPO
如果你只记一句话,请记这句:
PPO =不让策略“一次跨太远”,但用一根“弹力绳 替代了 TRPO 的复杂护栏。
十、到这里,你已经“看清整条路线了”
你现在已经完整理解了这条主线:
- DDPG: 👉 连续控制 + Actor–Critic
- TRPO: 👉 第一次严肃解决“更新过猛”
- PPO: 👉 把 TRPO 的思想变成工程可用版本