本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

Actor-Critic 与 PPO:稳定的策略优化

Actor-Critic 与 PPO:稳定的策略优化

更新于 2026-04-05

Actor-Critic 架构

上一篇我们看到 REINFORCE + Baseline 的思路:用 V(s)V(s) 作为 baseline 来降低方差。但 REINFORCE 仍然需要采样完整 trajectory 才能更新。

Actor-Critic 更进一步:用一个独立的神经网络(Critic)来学习 V(s)V(s),这样每走一步就可以计算 TD error 作为 Advantage 信号:

δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)

这个 δt\delta_t 就是 Advantage 的一步估计:如果实际获得的 reward + 下一状态价值比预期的当前状态价值高,说明这个动作”比预期好”。

Actor-Critic 架构:双网络协同Actorπ(a|s; θ)EnvironmentCriticV(s; w)AdvantageA = r + γV(s') - V(s)a ~ π(·|s)s', rs, s'V(s), V(s')A → 更新 Actor1. Actor 输出动作2. 环境返回3. Critic 评估4. 计算 Advantage5. 双网络更新1. Actor 输出动作Actor 网络 π(a|s;θ) 根据当前状态 s 输出动作概率分布,采样动作 a

两个网络各司其职:

  • Actor π(as;θ)\pi(a|s;\theta):策略网络,决定采取什么动作
  • Critic V(s;w)V(s;w):价值网络,评估状态好坏

GAE:平衡偏差与方差

一步 TD error δt\delta_t 偏差大但方差小;Monte Carlo return 偏差小但方差大。**GAE(Generalized Advantage Estimation)**用参数 λ\lambda 在两者之间平滑插值:

A^tGAE(γ,λ)=l=0(γλ)lδt+l\hat{A}_t^{GAE(\gamma,\lambda)} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}

  • λ=0\lambda = 0:只用一步 TD error(高偏差、低方差)
  • λ=1\lambda = 1:等价于 Monte Carlo return(低偏差、高方差)
  • 实践中 λ=0.950.97\lambda = 0.95 \sim 0.97 效果最好
GAE λ 参数:偏差-方差权衡λ = 0.95λ=0 (TD, 高偏差低方差)λ=1 (MC, 低偏差高方差)Advantage 估计值散布训练收敛曲线GAE(λ) = Σₖ (γλ)ᵏ · δₜ₊ₖ 其中 δₜ = rₜ + γV(sₜ₊₁) - V(sₜ)λ 接近 1:类似 Monte Carlo,看完整轨迹。方差大(每条轨迹差异大),但偏差小。

Trust Region 问题

Policy Gradient 有一个致命的实际问题:步长太大策略会崩溃,步长太小收敛太慢

普通梯度下降无法保证策略更新后性能不会骤降。一个看似合理的梯度方向,如果步长过大,可能让策略跳到完全不同的行为模式,导致性能灾难性崩溃。

TRPO (Trust Region Policy Optimization) 的解决方案是:在每次更新时添加 KL 散度约束,确保新旧策略”足够接近”:

maxθE^[πθ(as)πθold(as)A^]s.t. KL(πθoldπθ)δ\max_\theta \hat{\mathbb{E}}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} \hat{A}\right] \quad \text{s.t. } KL(\pi_{\theta_{old}} \| \pi_\theta) \leq \delta

Trust Region:限制策略更新范围✗ Trust Region OFF(无约束)策略参数空间 (θ₁, θ₂)性能变化更新一步重置无约束更新 → 步长可能过大策略剧变 → 可能性能崩溃

PPO:简单有效的信任域方法

TRPO 虽然理论优美,但带约束优化计算复杂。**PPO(Proximal Policy Optimization)**用一个巧妙的 clip 操作实现了类似效果:

LCLIP(θ)=E^[min(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \hat{\mathbb{E}}\left[\min\left(r_t(\theta)\hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t\right)\right]

其中 rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} 是新旧策略的概率比。

Clip 的直觉

  • A^>0\hat{A} > 0(好动作):ratio 超过 1+ϵ1+\epsilon 后 objective 不再增长,阻止过度增大概率
  • A^<0\hat{A} < 0(坏动作):ratio 低于 1ϵ1-\epsilon 后 objective 不再减小,阻止过度减小概率

这种”pessimistic”策略确保每次更新都在安全范围内。

PPO Clipped Surrogate Objectiveε = 0.200.10.20.30.4A > 0 (好动作)0ratio=11-ε1+εratio × A (无 clip)L_CLIP = min(...) (PPO)ratio = π_new(a|s) / π_old(a|s)L_CLIP = min(ratio·A, clip(ratio, 1-ε, 1+ε)·A)A>0 时:ratio 超过 1+ε 后 objective 不再增长 → 阻止过度增大好动作概率
PPO vs Vanilla Policy Gradient 训练对比1000性能Vanilla PG(高方差、偶尔崩溃)PPO(稳定上升、clip 保护)训练步数开始训练重置Hover 查看每步详情 | VPG 的崩溃来自策略更新过大

PPO 在 LLM 中的角色

下面的映射表是一个快速预览。完整的 MDP 映射、LLM RL 的独特挑战、以及 post-training 全景,请参阅 当 RL 遇上 LLM

当 PPO 遇到 LLM,RL 的概念发生了有趣的对应:

游戏 RLLLM RLHF
环境状态 ssPrompt + 已生成的 tokens
动作 aa下一个 token
策略 $\pi(as)$
Trajectory一个完整回答
RewardRM score - β·KL penalty
Episode 结束生成 EOS token

KL 惩罚 βKL(πθπref)\beta \cdot KL(\pi_\theta \| \pi_{ref}) 是 LLM RLHF 的关键补充:它防止 LLM 偏离预训练分布太远,避免 reward hacking(后续文章详述)。

LLM 生成回答
Step 1: Policy (LLM) 生成回答PromptLLM (Policy)π_θ(token|context)Response游戏 RL 对应关系:State = prompt + 已生成 tokens | Action = 下一个 token | Trajectory = 完整回答

总结

本文介绍了从 Actor-Critic 到 PPO 的演进:

  1. Actor-Critic 用 Critic 网络提供逐步 Advantage 信号,告别完整 trajectory 依赖
  2. GAE 用 λ 参数在偏差和方差之间优雅权衡
  3. Trust Region 解决策略更新步长问题,防止性能崩溃
  4. PPO 用 clip 操作简化信任域约束,成为最实用的策略优化算法
  5. PPO + LLM 将 token 生成映射为 RL 动作序列,加上 KL 惩罚防止偏离

PPO 是 RLHF 的核心引擎。下一篇我们将完整介绍 RLHF pipeline:SFT → Reward Model → PPO,看 PPO 如何在实际中对齐 LLM。