4. PPO核心原理
在自动驾驶连续控制任务中,策略网络需要输出方向盘转角、油门、制动等连续量,动作空间维度高、时序耦合强。PPO(Proximal Policy Optimization)之所以成为工程首选,核心在于它用“信赖域”的思想约束每次策略更新的幅度,使训练在探索与稳定之间取得平衡。本节围绕重要性采样、裁剪目标函数、优势估计、GAE 以及完整策略更新流程展开。
一、从策略梯度到信赖域约束
最朴素的策略梯度估计为 ∇J = E[∇logπ(a|s)·A(s,a)],它要求数据来自当前策略。但采样一次代价高昂,我们希望同一批数据能多次更新,于是引入重要性采样:用旧策略 π_old 采样的数据,去估计新策略 π_θ 的期望。重要性权重为比值 r_t(θ)=π_θ(a_t|s_t)/π_old(a_t|s_t)。
问题在于,当 r_t 偏离 1 太远时,估计方差会急剧放大,一次更新就可能把策略推离“可信区域”,导致性能崩塌。TRPO 用 KL 散度硬约束解决该问题,但需要二阶优化,计算复杂。PPO 则用裁剪目标函数近似实现信赖域,既保留约束效果,又只需一阶梯度,工程上更易落地。
二、裁剪目标函数:PPO 的核心机制
PPO 的目标函数为:
L_clip(θ) = E[ min( r_t(θ)·A_t,
clip(r_t(θ), 1-ε, 1+ε)·A_t ) ]
ε 通常取 0.1 ~ 0.2
其含义是:当优势 A_t 为正时,鼓励增大 r_t,但一旦超过 1+ε 就停止奖励;当 A_t 为负时,鼓励减小 r_t,但低于 1-ε 后不再继续惩罚。min 操作取两者较小值,形成“悲观下界”,从而抑制过大的策略变化。这就是 PPO 用裁剪替代 KL 约束的巧妙之处。
三、优势估计与 GAE
优势函数 A(s,a)=Q(s,a)-V(s) 衡量某动作相对平均水平好多少。直接用单步回报估计方差大,用完整回报又偏差大。GAE(Generalized Advantage Estimation)通过引入参数 λ 在偏差与方差之间折中:
δ_t = r_t + γ·V(s_{t+1}) - V(s_t)
A_t^GAE = δ_t + (γλ)·δ_{t+1} + (γλ)²·δ_{t+2} + ...
λ=0 → 单步TD,低方差高偏差
λ=1 → 蒙特卡洛,高方差低偏差
常用 λ=0.95, γ=0.99
在自动驾驶中,γ 决定智能体对长期行驶安全的重视程度,λ 则影响优势估计的平滑性。GAE 让 Critic 只需学习 V(s),而优势由 TD 残差递推得到,训练更稳定。
四、策略更新流程与工程参数
一次完整的 PPO 迭代包含:采样、优势计算、多轮裁剪更新、价值网络更新。下表给出关键参数与工程建议:
| 参数 | 作用 | 典型值 | 工程建议 |
|---|---|---|---|
| ε (clip) | 信赖域半径 | 0.1~0.2 | 连续控制常用0.2 |
| γ | 折扣因子 | 0.99 | 长时任务可0.995 |
| λ (GAE) | 偏差方差折中 | 0.95 | 0.9~0.97 |
| 更新轮数 | 同批数据复用次数 | 3~10 | 过多易过拟合旧数据 |
| batch size | 小批量大小 | 64~256 | 与并行环境数匹配 |
下面给出核心更新伪代码:
for iteration in range(N):
# 1. 用旧策略采样轨迹
traj = rollout(policy_old, env)
# 2. 计算GAE优势与回报
adv, ret = compute_gae(traj, gamma, lam)
# 3. 多轮裁剪更新
for epoch in range(K):
for batch in split(traj, batch_size):
r = pi_theta(batch.a|batch.s) / pi_old(batch.a|batch.s)
L_clip = min(r*adv, clip(r,1-eps,1+eps)*adv)
loss = -L_clip.mean() + c1*value_loss - c2*entropy
loss.backward(); optimizer.step()
五、自动驾驶场景案例
以车道保持任务为例:车辆状态包含横向偏差、航向角、速度,动作为前轮转角。若 ε 设置过大(如 0.5),一次更新可能让转角策略突变,车辆出现画龙甚至冲出车道;若 ε 过小(如 0.01),策略几乎不更新,学习停滞。实践表明 ε=0.2、λ=0.95、γ=0.99 在多数连续控制任务中表现稳健。同时,优势归一化(减均值除标准差)能显著提升训练稳定性。
六、常见误区与复盘
- 误区一:认为裁剪后策略完全不会越界。实际上裁剪只对越界样本停止梯度,策略仍可能缓慢漂移,需监控 KL 散度。
- 误区二:忽略优势归一化。未归一化的优势会让梯度尺度不稳定,尤其在奖励量纲差异大时。
- 误区三:同一批数据更新轮数过多。K 过大导致策略过拟合旧数据,重要性比值失控,训练震荡。
- 误区四:GAE 的 λ 与 γ 混用。两者作用不同,γ 控制视野,λ 控制估计平滑度,需分别调参。
综上,PPO 通过重要性采样复用数据、裁剪目标函数约束更新幅度、GAE 平衡偏差方差,形成了一套稳定高效的策略优化流程。理解这四者的协同关系,是后续在自动驾驶连续控制中调参与排障的基础。