先记住一句话
PPO-Clip 不是把参数、gradient 或真实 KL 严格限制在某个区间;它裁剪单样本 surrogate 中的 probability ratio 收益,近似鼓励小步更新。
1. 新旧策略概率比
r_t(θ)=πθ(a_t|s_t) / π_old(a_t|s_t)=exp(logπθ−logπ_old)r=1 表示新策略对该 action 的概率没变;r>1 提高,r<1 降低。用 log-prob 相减再 exp 比直接除概率更稳定。
2. Clipped surrogate objective
Lclip=E[min(r_t Â_t, clip(r_t,1−ε,1+ε) Â_t)]Â>0:希望提高该 action 概率;超过1+ε后不再从这个 surrogate 获得额外好处。Â<0:希望降低概率;低于1−ε后不再获得额外好处。
min 选择悲观项。Clip 并不会阻止共享参数因其他样本继续移动,也不保证整分布 KL 有硬上界,所以实践还会监控 approximate KL 并 early stop。
3. PPO 的完整 loss
L_total = −Lclip + c_v L_value − c_H H(π)policy loss 最大化 clipped objective;value loss 拟合 R̂_t=Â_t+V_old(s_t) 或其他 return target;entropy bonus 保持探索。很多实现也 clip value update,但这不是原始 PPO-Clip 必须部分。
4. 一次 rollout-update
repeat iteration:
freeze π_old ← πθ
collect T steps × N parallel envs:
save obs, action, reward, terminated, value, logp_old
bootstrap V(last_obs)
compute GAE advantages and return targets backward
normalize advantages over the training batch
for epoch in 1..K:
shuffle into minibatches
recompute logp, entropy, value under current θ
ratio = exp(logp - logp_old)
optimize clipped policy + value - entropy
optionally stop epochs if KL too large
5. 为什么数据仍是 on-policy
rollout 来自刚冻结的 π_old;ratio 只校正有限偏移。做更多 epochs 后 current policy 离 behavior policy 越远,clip 样本增加、effective sample size 下降。PPO 不像 SAC 那样把跨很多版本的数据长期放 replay buffer。
6. GAE 与并行环境
N×T 决定一次 update 的样本量。更多 env 提高并行吞吐和状态多样性;更长 horizon 帮助 credit assignment,却增加显存和 policy lag。大规模机器人 PPO 常在 GPU 同时模拟数千环境,因为其弱 sample reuse 被廉价并行 experience 抵消。
7. 关键实现细节
- observation/reward normalization 统计必须区分训练更新和 evaluation 冻结。
- continuous action 要明确 Gaussian 的 std、tanh/squash、环境 action scale 和 log-prob correction。
- 正确处理 terminated/truncated 与 final observation,避免 autoreset 吃掉 bootstrap state。
- advantage normalization 改变 batch 内 gradient scale,不是理论 objective 必需项。
- gradient norm clipping、orthogonal init、learning-rate annealing 常影响结果,但应通过 ablation 判断。
- 随机 seed、环境版本、control dt、reward scale 和 network architecture 都要记录。
8. 训练面板该看什么
| 指标 | 含义 | 异常信号 |
|---|---|---|
| approx KL | 新旧 policy 偏移 | 突然很大常伴随 collapse |
| clip fraction | ratio 被 clip 的样本比例 | 长期接近 1 表示更新过猛/数据太旧 |
| entropy / action std | 探索尺度 | 过早归零会锁死策略 |
| explained variance | critic 对 return 的解释度 | 负值表示比常数 baseline 还差 |
| policy/value loss | 优化器目标 | 不能单独等价为性能 |
| episodic return/success | 环境结果 | 必须拆 reward components 和 eval seeds |
9. PPO 适合与不适合
适合
仿真可大量并行、动作连续/离散、实现需要简单稳健 baseline、policy 必须直接采样。
不占优
真实交互昂贵、必须高度复用历史数据、纯 offline dataset、长序列 rollout 成本远高于反向传播。
10. 四个 PPO 手算
例 1:probability ratio
旧策略给已执行 action 概率 0.20,新策略给 0.24,ratio=0.24/0.20=1.2。也可从 log-prob 算 exp(logp_new−logp_old),数值更稳定。
例 2:正 advantage 被上界裁剪
A=2、ε=0.2、ratio=1.5。原 surrogate=3;clipped ratio=1.2,clipped surrogate=2.4;取 min 得 2.4,继续大幅提高该 action 概率不再增加这一样本收益。
例 3:负 advantage 的裁剪方向
A=−2、ratio=0.5、ε=0.2。原项=−1,clip 后=0.8×(−2)=−1.6;取 min 得 −1.6,阻止策略通过把坏 action 概率一次降得过低来获得过大奖励。
例 4:minibatch 更新数
64 个环境各 rollout 128 steps,共 8192 samples。Minibatch=512,则每 epoch 16 updates;训练 4 epochs 共 16×4=64 optimizer steps,然后丢弃 rollout。
clip range 设小不自动保证安全更新。learning rate、epochs、minibatch、advantage scale、policy std 和样本相关性共同决定实际 KL。
自测
1. 正 advantage 且 ratio=1.4、ε=0.2 时发生什么?
该样本的正向收益按 1.2 倍 advantage 封顶;但参数仍可能因其他样本继续变化。
2. 为什么 PPO 可以一批数据训练多个 epoch,却不能无限训练?
ratio/clip 允许有限 policy shift;随着 current policy 远离 behavior policy,数据越来越 off-policy,估计质量恶化。
3. critic loss 下降为什么不保证 policy 变好?
critic 只拟合采样 return;它可能更准地预测一个差策略,actor update 还取决于 advantage 与 policy optimization。
一手资料
Schulman et al., Proximal Policy Optimization Algorithms 定义 clipped/KL variants;OpenAI PPO introduction 给出原始实现背景;GAE 来自 Schulman et al. 2015。