强化学习——A2C 和 PPO网络更新的比较

A2C(Advantage Actor-Critic)PPO(Proximal Policy Optimization) 都是基于 Actor-Critic 框架的强化学习算法,但在更新 Critic 网络和 Actor 网络的方式上有显著不同。以下是它们的详细对比:


1. Critic 网络的更新

Critic 网络的目标是估计状态值函数 V ( s ) V(s) V(s),用于评估当前策略的好坏。

A2C
  • Critic 的更新目标

    • 使用 TD 误差(Temporal Difference Error) 作为 Critic 的损失函数:
      L critic = 1 2 ( G t − V ( s t ) ) 2 L_{\text{critic}} = \frac{1}{2} \left( G_t - V(s_t) \right)^2 Lcritic=21(GtV(st))2
      其中 G t G_t Gt是目标值,通常通过 bootstrapping 计算:
      G t = r t + γ V ( s t + 1 ) G_t = r_t + \gamma V(s_{t+1}) Gt=rt+γV(st+1)
    • Critic 通过最小化 TD 误差来更新。
  • 特点

    • 直接使用 TD 误差进行更新,简单直观。
    • 可能存在高方差问题,因为 TD 误差依赖于单步采样。
PPO
  • Critic 的更新目标

    • 同样使用 TD 误差作为 Critic 的损失函数:
      L critic = 1 2 ( G t − V ( s t ) ) 2 L_{\text{critic}} = \frac{1}{2} \left( G_t - V(s_t) \right)^2 Lcritic=21(GtV(st))2
    • 但与 A2C 不同的是,PPO 通常使用 广义优势估计(Generalized Advantage Estimation, GAE) 来计算目标值 G t G_t Gt
      G t = ∑ k = 0 ∞ ( γ λ ) k δ t + k G_t = \sum_{k=0}^{\infty} (\gamma \lambda)^k \delta_{t+k} Gt=k=0(γλ)kδt+k
      其中 δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)V(st)是 TD 误差, λ \lambda λ是 GAE 的超参数。
  • 特点

    • 使用 GAE 减少了 Critic 估计的方差,提高了稳定性。
    • 计算稍微复杂,但效果更好。

2. Actor 网络的更新

Actor 网络的目标是优化策略 π ( a ∣ s ) \pi(a|s) π(as),以最大化期望回报。

A2C
  • Actor 的更新目标

    • 使用 策略梯度 方法,直接最大化期望回报:
      L actor = − log ⁡ π ( a t ∣ s t ) ⋅ A ( s t , a t ) L_{\text{actor}} = -\log \pi(a_t|s_t) \cdot A(s_t, a_t) Lactor=logπ(atst)A(st,at)
      其中 A ( s t , a t ) = G t − V ( s t ) A(s_t, a_t) = G_t - V(s_t) A(st,at)=GtV(st)是优势函数。
  • 特点

    • 更新直接基于策略梯度,简单高效。
    • 可能存在较大的策略更新步长,导致训练不稳定。
PPO
  • Actor 的更新目标

    • 使用 裁剪的替代目标(Clipped Surrogate Objective) 来限制策略更新的步长:
      L actor = − min ⁡ ( r t ( θ ) ⋅ A ( s t , a t ) , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) ⋅ A ( s t , a t ) ) L_{\text{actor}} = -\min \left( r_t(\theta) \cdot A(s_t, a_t), \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \cdot A(s_t, a_t) \right) Lactor=min(rt(θ)A(st,at),clip(rt(θ),1ϵ,1+ϵ)A(st,at))
      其中 r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)是策略更新比率, ϵ \epsilon ϵ是裁剪范围(通常取 0.1 或 0.2)。
  • 特点

    • 通过裁剪策略更新比率,防止策略更新过大,提高了训练的稳定性。
    • 相比 A2C,PPO 更鲁棒,适合复杂任务。

3. 更新频率

A2C
  • 同步更新
    • Actor 和 Critic 在每一步或每个 episode 后同步更新。
  • 特点
    • 更新频率高,但可能导致训练不稳定。
PPO
  • 批量更新
    • 收集一批数据后,进行多次更新(通常使用 mini-batch)。
  • 特点
    • 更新频率较低,但每次更新更稳定,适合大规模任务。

4. 算法复杂度

A2C
  • 简单
    • 实现简单,计算效率高。
  • 缺点
    • 训练不稳定,容易出现策略崩溃。
PPO
  • 复杂
    • 需要实现裁剪替代目标和 GAE,计算稍复杂。
  • 优点
    • 训练稳定,适合复杂任务。

总结对比

特性 A2C PPO
Critic 更新 使用 TD 误差 使用 GAE,减少方差
Actor 更新 直接策略梯度 裁剪替代目标,限制更新步长
更新频率 同步更新(每一步或每个 episode) 批量更新(多次更新一批数据)
稳定性 较低,容易出现策略崩溃 较高,适合复杂任务
实现复杂度 简单 较复杂
适用场景 简单任务,计算资源有限 复杂任务,需要高稳定性


TD error与优势函数的比较

1. TD 误差(Temporal Difference Error)

TD 误差是用于评估当前值函数估计的误差,通常用于更新 Critic 网络。

定义

TD 误差表示当前奖励与值函数预测之间的差异:
δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)V(st)
其中:
- r t r_t rt:时刻 t t t的奖励。
- γ \gamma γ:折扣因子。
- V ( s t ) V(s_t) V(st):状态 s t s_t st的值函数估计。
- V ( s t + 1 ) V(s_{t+1}) V(st+1):下一个状态 s t + 1 s_{t+1} st+1的值函数估计。

作用
  • 用于更新 Critic 网络,使其更好地估计状态值函数 V ( s ) V(s) V(s)
  • 是强化学习中的一种 bootstrapping 方法,结合了当前奖励和未来值函数的预测。

2. 优势函数(Advantage Function)

优势函数用于评估某个动作相对于当前策略的期望回报的优劣。

定义

优势函数表示在状态 s t s_t st下采取动作 a t a_t at的期望回报与当前策略的期望回报之间的差异:
A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t, a_t) = Q(s_t, a_t) - V(s_t) A(st,at)=Q(st,at)V(st)
其中:
- Q ( s t , a t ) Q(s_t, a_t) Q(st,at):状态-动作值函数,表示在状态 s t s_t st下采取动作 a t a_t at的期望回报。
- V ( s t ) V(s_t) V(st):状态值函数,表示在状态 s t s_t st下遵循当前策略的期望回报。

作用
  • 用于更新 Actor 网络,指导策略优化。
  • 如果 A ( s t , a t ) > 0 A(s_t, a_t) > 0 A(st,at)>0,说明动作 a t a_t at比当前策略更好;如果 A ( s t , a t ) < 0 A(s_t, a_t) < 0 A(st,at)<0,说明动作 a t a_t at比当前策略更差。

3. 优势函数和 TD 误差的关系

优势函数和 TD 误差之间有一个重要的联系:TD 误差是优势函数的一个估计

推导

根据优势函数的定义:
A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t, a_t) = Q(s_t, a_t) - V(s_t) A(st,at)=Q(st,at)V(st)
Q ( s t , a t ) Q(s_t, a_t) Q(st,at)可以表示为:
Q ( s t , a t ) = r t + γ V ( s t + 1 ) Q(s_t, a_t) = r_t + \gamma V(s_{t+1}) Q(st,at)=rt+γV(st+1)
Q ( s t , a t ) Q(s_t, a_t) Q(st,at)代入优势函数的定义:
A ( s t , a t ) = ( r t + γ V ( s t + 1 ) ) − V ( s t ) A(s_t, a_t) = (r_t + \gamma V(s_{t+1})) - V(s_t) A(st,at)=(rt+γV(st+1))V(st)
这正是 TD 误差的定义:
A ( s t , a t ) = δ t A(s_t, a_t) = \delta_t A(st,at)=δt

结论
  • TD 误差是优势函数的一个单步估计
  • 通过 TD 误差,我们可以间接估计优势函数,而无需显式计算 Q ( s t , a t ) Q(s_t, a_t) Q(st,at)

4. 广义优势估计(Generalized Advantage Estimation, GAE)

在实际应用中,为了减少方差,通常使用 广义优势估计(GAE) 来估计优势函数。GAE 是对 TD 误差的加权平均,考虑了多步的 TD 误差。

定义

A t GAE = ∑ k = 0 ∞ ( γ λ ) k δ t + k A_t^{\text{GAE}} = \sum_{k=0}^{\infty} (\gamma \lambda)^k \delta_{t+k} AtGAE=k=0(γλ)kδt+k
其中:
- λ \lambda λ是 GAE 的超参数,用于控制偏差和方差的权衡。
- δ t + k \delta_{t+k} δt+k是时刻 t + k t+k t+k的 TD 误差。

作用
  • GAE 通过多步 TD 误差的加权平均,提供了更稳定的优势函数估计。
  • λ = 0 \lambda = 0 λ=0时,GAE 退化为单步 TD 误差;当 λ = 1 \lambda = 1 λ=1时,GAE 考虑了无限步的 TD 误差。

总结对比

概念 定义 用途
TD 误差 δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)V(st) 更新 Critic 网络,估计值函数
优势函数 A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t, a_t) = Q(s_t, a_t) - V(s_t) A(st,at)=Q(st,at)V(st) 更新 Actor 网络,优化策略
关系 A ( s t , a t ) = δ t A(s_t, a_t) = \delta_t A(st,at)=δt(单步估计) TD 误差是优势函数的单步估计
GAE A t GAE = ∑ k = 0 ∞ ( γ λ ) k δ t + k A_t^{\text{GAE}} = \sum_{k=0}^{\infty} (\gamma \lambda)^k \delta_{t+k} AtGAE=k=0(γλ)kδt+k 通过多步 TD 误差估计优势函数

举例说明

假设在一个环境中:

  • 当前状态 s t s_t st的值函数估计 V ( s t ) = 5 V(s_t) = 5 V(st)=5
  • 采取动作 a t a_t at后,获得奖励 r t = 2 r_t = 2 rt=2,下一个状态 s t + 1 s_{t+1} st+1的值函数估计 V ( s t + 1 ) = 6 V(s_{t+1}) = 6 V(st+1)=6
  • 折扣因子 γ = 0.9 \gamma = 0.9 γ=0.9
计算 TD 误差

δ t = r t + γ V ( s t + 1 ) − V ( s t ) = 2 + 0.9 × 6 − 5 = 2 + 5.4 − 5 = 2.4 \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) = 2 + 0.9 \times 6 - 5 = 2 + 5.4 - 5 = 2.4 δt=rt+γV(st+1)V(st)=2+0.9×65=2+5.45=2.4

计算优势函数

A ( s t , a t ) = δ t = 2.4 A(s_t, a_t) = \delta_t = 2.4 A(st,at)=δt=2.4

结论
  • 动作 a t a_t at的优势函数为 2.4,说明该动作比当前策略更好。

总结

  • TD 误差 是用于更新 Critic 网络的误差,表示当前奖励与值函数预测之间的差异。
  • 优势函数 是用于更新 Actor 网络的指标,表示某个动作相对于当前策略的期望回报的优劣。
  • 关系:TD 误差是优势函数的一个单步估计,即 A ( s t , a t ) = δ t A(s_t, a_t) = \delta_t A(st,at)=δt
  • GAE 是对 TD 误差的加权平均,提供了更稳定的优势函数估计。

希望这个解释能帮助你理清优势函数和 TD 误差之间的关系!如果还有疑问,欢迎继续讨论!