PPO:近端策略优化

PPO 是目前最常用的 on-policy 算法之一:用 clip 限制策略更新幅度,训起来稳、调参友好。

Actor-Critic 结构

组件输出作用
Actor π_θ(a|s)高斯分布 N(μ(s), σ)选连续力
Critic V_φ(s)标量价值估计期望回报,降低方差

本仓库实现见 src/ppo/networks.py:两套 MLP,log_std 为可学习参数。

采集轨迹 → GAE

  1. 用当前策略在环境里滚 steps_per_env 步,存 (s,a,r,done,logπ,V)。
  2. 用 GAE(λ) 算优势 Â:结合时序差分与多步回报,偏差-方差可调。
  3. 回报目标 R̂ = Â + V(s),用来监督 Critic。
δ_t = r_t + γ V(s_{t+1})(1−d_t) − V(s_t)
A_t = δ_t + γλ(1−d_t) A_{t+1}

Clip 目标(核心)

r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)
L^CLIP = E[ min( r_t Â_t , clip(r_t, 1−ε, 1+ε) Â_t ) ]

当新策略相对旧策略偏离过大时,clip 截断梯度,避免一次更新毁掉已学行为。 ε 默认 0.2。本实现总损失还加价值 MSE 与熵奖励:

L = −L^CLIP + c_v L^VF − c_e H[π]

训练时看哪些量

对照阅读:src/ppo/algorithm.pyupdate() 几乎就是上面公式的直译。