10. PPO 算法
PPO 的前身是 TRPO 算法,旨在克服 TRPO 算法中的一些计算上的困难和训练上的不稳定性。TRPO 通过定义策略更新的信赖域来保证每次更新的策略不会太远离当前的策略,但需要解决复杂的约束优化问题。PPO 则通过更简单的方式实现了类似的效果。
具身智能视角:PPO 是目前具身智能领域使用最广泛的 RL 算法。NVIDIA Isaac Gym 默认使用 PPO 训练四足机器人行走、灵巧手操作等任务;OpenAI 用 PPO 训练了灵巧手解魔方。PPO 的优势在于简单、稳定、易调参,是具身智能的首选基线算法。
10.1 重要性采样
在展开 PPO 算法之前,先铺垫重要性采样(importance sampling)。重要性采样是一种估计随机变量的期望或者概率分布的统计方法。假设需要从分布
对于离散分布:
比例
当
重要性采样也是蒙特卡洛估计的一部分,只不过它是一种比较特殊的蒙特卡洛估计,允许我们在复杂问题中利用已知的简单分布进行采样,从而避免了直接采样困难分布的问题。
10.2 PPO 核心思想
PPO 算法的核心就是通过重要性采样优化 Actor-Critic 的策略梯度估计。目标函数:
其中旧策略分布
本质上 PPO 就是在 Actor-Critic 基础上增加了重要性采样的约束,确保每次的策略梯度估计不会过分偏离当前策略,从而减少方差,提高算法的稳定性和收敛性。
10.2.1 Clip 约束
为了保证重要性权重不偏离 1 太远,PPO 使用 clip 约束:
其中
10.2.2 KL-Penalty 约束
另一种方式是在损失中加入 KL 散度惩罚项:
其中惩罚系数
10.3 PPO 算法伪代码

10.4 PPO 是 on-policy 的
一个常见误区:有人认为 PPO 使用了旧策略的样本就是 off-policy 的。实际上,虽然这批样本是从旧的策略中采样得到的,但我们并没有直接使用这些样本去更新策略,而是使用重要性采样先将数据分布不同导致的误差进行了修正。换句话说,重要性采样之后的样本虽然由旧策略采样得到,但可以近似为从更新后的策略中得到的,即我们要优化的 Actor 和采样的 Actor 是同一个。因此 PPO 是 on-policy 的。
这也意味着 PPO 的样本效率不如 off-policy 的 SAC/TD3,但在具身智能中,仿真环境(如 Isaac Gym)可以大规模并行采样,弥补了这一劣势。
10.5 思考
为什么 PPO 在具身智能中如此流行?
- 简单稳定:clip 约束实现简单,训练稳定性好
- 通用性强:同时适用于离散和连续动作空间
- 并行友好:on-policy 特性天然适合多环境并行采样(Isaac Gym 可同时运行数千个环境)
- 调参简单:超参数少且不敏感
为什么 DQN 和 DDPG 算法不使用重要性采样技巧呢?
DQN 和 DDPG 是 off-policy 算法,它们通常不需要重要性采样来处理不同策略下的采样数据。相反,它们使用目标网络和优势估计等技巧来提高训练的稳定性和性能。
PPO 算法原理上是 on-policy 的,但它可以是 off-policy 的吗?
可以,但条件比较严格。可以将经验回放与 PPO 结合,创建 PPO with Experience Replay(PPO-ER)算法。在 PPO-ER 中,智能体使用经验回放缓冲区中的数据来训练策略网络,但通常需要调整损失函数和采样策略以适应 off-policy 训练的要求。
PPO 算法更新过程中将轨迹样本切分成多个小批量时,可以将样本顺序打乱吗?
通常是可以的,这个过程称为样本随机化(sample shuffling),好处有降低样本相关性、减小过拟合风险以及增加训练多样性。