先记住一句话

PPO-Clip 不是把参数、gradient 或真实 KL 严格限制在某个区间;它裁剪单样本 surrogate 中的 probability ratio 收益,近似鼓励小步更新。

冻结 old policyrollout算 GAE/returnsshuffle minibatches多 epoch PPO loss检查 KL 后换数据
Old policyπ_old
sample
Rollouta,r,logp_old,V
Ratiorₜ=π/π_old
Clip[1−ε,1+ε]
Updatenew π,V
同一 rollout 可做少量 minibatch epochs;更新结束后必须用新 policy 重新采样。

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 fractionratio 被 clip 的样本比例长期接近 1 表示更新过猛/数据太旧
entropy / action std探索尺度过早归零会锁死策略
explained variancecritic 对 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