拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PPO 算法是什么?一文读懂强化学习中最常用的策略优化算法

PPO 算法是什么一文读懂强化学习中最常用的策略优化算法如果刚开始接触强化学习、机器人控制或者具身智能经常会看到一个名字PPOProximal Policy Optimization近端策略优化。很多机器人运动控制、强化学习以及仿真训练任务都会使用 PPO。它并不是一个特别新的算法但因为实现相对简单、训练稳定、效果可靠直到今天依然是非常重要的强化学习基线算法。这篇文章从最基础的角度理解 PPO它到底解决了什么问题以及为什么要加入clip。1. PPO 属于哪类强化学习算法强化学习中一个智能体通常不断与环境交互环境 Environment ↓ 状态 State ↓ 智能体 Agent ↓ 动作 Action ↓ 环境发生变化 ↓ 奖励 Reward智能体的目标就是学习一个策略π(a | s)它表示在状态s下采取动作a的概率。例如机器人当前身体处于某种姿态时策略网络需要决定下一时刻各关节应该如何运动。PPO 属于Policy Gradient策略梯度方法。简单来说就是直接优化策略网络参数让能够获得更高奖励的动作出现概率增加。2. 为什么不能直接疯狂更新策略假设当前有一个策略Old Policy经过一批数据训练之后我们获得New Policy理论上当然希望新策略比旧策略更好。但问题在于如果一次更新幅度太大新策略可能突然跑到一个非常差的区域。例如旧策略 ↓ 表现不错 ↓ 一次梯度更新过大 ↓ 新策略变化巨大 ↓ 性能突然下降强化学习的数据分布本身又随着策略变化因此这种问题尤其明显。这也是 PPO 要解决的核心问题之一怎样更新策略同时又不要让策略一次改变得太多3. PPO 的核心概率比率 Ratio假设πθ(a|s)表示当前的新策略。πold(a|s)表示采集数据时使用的旧策略。PPO 首先计算两者之间的概率比率r(θ) πθ(a|s) / πold(a|s)如果r 1说明新旧策略对这个动作给出的概率基本没有变化。如果r 1说明新策略更加倾向于选择这个动作。如果r 1说明新策略降低了选择这个动作的概率。这就是 PPO 判断策略到底改变了多少。4. Advantage这个动作到底好不好只有 Ratio 还不够。还需要判断当前动作到底是“好动作”还是“坏动作”因此 PPO 会使用Advantage即优势函数。可以粗略理解为Advantage 0这个动作比预期好。希望未来提高这个动作的概率反过来Advantage 0说明这个动作比预期差。希望未来降低这个动作的概率因此策略优化实际上是在同时考虑动作有多好 新旧策略变化了多少5. PPO 最关键的机制Clipping这也是 PPO 名字里Proximal最核心的思想之一。PPO 不希望新策略偏离旧策略太远因此会限制 Ratio 的范围。通常可以写成clip(r, 1-ε, 1ε)例如ε 0.2那么主要限制范围就是0.8 1.2假设一个动作特别好模型可能疯狂增加这个动作的概率。没有限制1.0 ↓ 1.2 ↓ 1.5 ↓ 2.0策略可能发生剧烈变化。加入 clipping 后1.0 ↓ 1.1 ↓ 1.2 ↓ 限制继续产生过大的优化收益因此可以把 PPO 的核心思想记成一句话可以更新策略但不要一次更新得太狠。6. PPO 的 Clipped Objective经典 PPO 中非常重要的目标函数是L_CLIP E[min( r(θ)A, clip(r(θ), 1-ε, 1ε)A )]第一次看到可能比较复杂。实际上主要就是比较两个东西正常更新结果和限制更新幅度后的结果然后选择更加保守的优化结果。这使 PPO 不容易因为一次策略更新过大而破坏已经学到的行为。7. PPO 完整训练流程理解了前面的概念以后整个 PPO 流程其实非常清晰。Step 1智能体与环境交互获得state action reward next_state这些数据通常暂时保存在 Rollout Buffer 中。Step 2计算 Return 和 Advantage根据奖励以及价值网络估计Return Advantage实践中经常使用GAEGeneralized Advantage Estimation估计 Advantage。Step 3计算新旧策略概率保存采样时的old_log_prob训练时重新计算new_log_prob然后得到ratio torch.exp(new_log_prob - old_log_prob)Step 4进行 Clip一个简化的 PyTorch 形式如下ratio torch.exp(new_log_prob - old_log_prob) surr1 ratio * advantage surr2 torch.clamp( ratio, 1.0 - clip_eps, 1.0 clip_eps ) * advantage policy_loss -torch.min( surr1, surr2 ).mean()这里的torch.clamp()就是 PPO 中非常关键的 clipping 操作。需要注意这只是帮助理解 PPO 更新核心的简化代码并不是完整训练实现。8. PPO 为什么在机器人领域很常见机器人控制通常具有状态维度高 动作连续 训练时间长 策略稳定性要求高例如机器人控制中的 Action 可能对应多个关节的目标位置、速度或者力矩。如果策略更新特别剧烈很容易出现训练不稳定。PPO 的特点刚好比较适合这种场景实现简单 训练相对稳定 支持连续动作空间 并行采样效率较高因此在机器人强化学习、运动控制以及具身智能领域经常能够看到 PPO。9. PPO、Policy、Actor、Critic 是什么关系新手非常容易把这些概念混在一起。可以简单理解为PPO │ ├── Actor │ ↓ │ 学习 Policy │ ↓ │ 决定采取什么 Action │ └── Critic ↓ 学习 Value Function ↓ 判断当前状态有多好Actor 回答“我应该做什么”Critic 回答“现在这个状态到底好不好”PPO 则负责“应该怎样稳定地更新它们”这样就很好理解了。10. 常见错误 / 踩坑① clip 越小越好吗不是。clip 太小策略几乎不敢更新 → 学习速度可能很慢clip 太大策略变化过大 → PPO 的稳定作用减弱因此需要根据任务和实现进行调整。② PPO 就一定不会训练崩吗当然不是。PPO 只是相对稳定。学习率、奖励设计、观测归一化、Advantage 估计、网络结构、并行环境数量等因素都可能影响最终训练。③ Reward 越大越好吗不能只看 Reward 数值大小。奖励函数的设计是否正确更加重要。如果 Reward 设计存在漏洞智能体甚至可能找到一些设计者没有预料到的方式获得高奖励。④ PPO 只能训练机器人吗不是。PPO 是通用强化学习算法也可以应用于游戏控制、资源调度以及其他序列决策问题。机器人只是 PPO 非常重要的应用方向之一。11. 总结PPO 全称Proximal Policy Optimization近端策略优化。理解 PPO 最关键的并不是一开始就背公式而是记住三个概念Policy ↓ 决定动作 Advantage ↓ 判断动作好不好 Clipping ↓ 限制策略一次更新得太多因此 PPO 最核心的思想可以概括为利用 Advantage 指导策略优化同时通过 clipping 控制新旧策略之间的变化幅度从而提高强化学习训练的稳定性。如果后续继续学习 PPO可以进一步理解Actor-Critic → Value Function → GAE → Reward → Observation → Action → PPO Loss把这些概念串起来以后机器人强化学习的整体训练流程就会清晰很多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门