Skip to main content

GAE

核心概念与背景

  • 优势函数At=Q(st,at)V(st)A_t = Q(s_t,a_t) - V(s_t),衡量动作ata_t相对当前策略平均表现的优劣,是策略梯度的核心输入,目标是低偏差、低方差的估计。
  • 传统方法局限
    • TD(0):仅用单步TD残差,方差小但偏差大,依赖价值函数VV的准确性。
    • 蒙特卡洛(MC):用完整轨迹回报,无偏但方差大(随机性强),受噪声影响显著。
  • GAE定位:通过指数加权平均融合多步TD估计,用参数λ实现从TD(0)到MC的平滑过渡,兼顾稳定性与准确性。

数学原理与公式推导

基础定义

  • TD残差δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t),反映价值预测与实际回报的差异。
  • k步优势估计At(k)=δt+γλδt+1+(γλ)2δt+2++(γλ)k1δt+k1A_t^{(k)} = \delta_t + \gamma\lambda\delta_{t+1} + (\gamma\lambda)^2\delta_{t+2} + \cdots + (\gamma\lambda)^{k-1}\delta_{t+k-1}
  • GAE闭合形式:当kk \to \infty时,AtGAE(λ)=l=0Tt1(γλ)lδt+lA_t^{GAE(\lambda)} = \sum_{l=0}^{T-t-1} (\gamma\lambda)^l \delta_{t+l},轨迹末端截断。
  • 递归计算式(工程实现)At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1},从轨迹末尾T1T-1反向递推至起始t=0t=0,效率更高。
参数作用常用范围影响
γ\gamma折扣未来奖励0.9–0.99接近1时更重视长期回报
λ\lambda平衡偏差-方差0.9–0.98(连续控制)λ=0→TD(0);λ=1→MC;中间值兼顾两者
  • λ=0At=δtA_t = \delta_t,等价于TD(0),方差最小但偏差最大,适合VV高度准确场景。
  • λ=1At=l=0Tt1γlδt+lA_t = \sum_{l=0}^{T-t-1} \gamma^l \delta_{t+l},等价于无限步TD(接近MC),偏差最小但方差最大,适合VV不准但数据充足场景。
  • 0-1:如λ=0.95(常用),通过(γλ)l(\gamma\lambda)^l衰减远期TD误差,既利用长期信息减小偏差,又控制方差,提升训练稳定性。

四、工程实现步骤

  1. 数据采集:收集轨迹{(st,at,rt,st+1)}t=0T1\{(s_t,a_t,r_t,s_{t+1})\}_{t=0}^{T-1},用 Critic 网络输出V(st)V(s_t)V(st+1)V(s_{t+1})
  2. 计算TD残差:逐步计算δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)
  3. 反向递归计算GAE:初始化AT=0A_T=0,从t=T1t=T-1反向计算At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1}
  4. 输出优势估计:得到{At}t=0T1\{A_t\}_{t=0}^{T-1},用于策略梯度更新(如PPO的损失函数)。

极简代码示例(PyTorch风格)

def compute_gae(rewards, values, gamma=0.99, lam=0.95, last_value=0.0):
values = torch.cat([values, last_value.unsqueeze(0)])
deltas = rewards + gamma * values[1:] - values[:-1]
advantages = torch.zeros_like(rewards)
advantage = 0.0
for t in reversed(range(len(rewards))):
advantage = deltas[t] + gamma * lam * advantage
advantages[t] = advantage
return advantages
  • 核心逻辑:反向累加TD残差,用γλ\gamma\lambda衰减后续优势,保证计算效率与数值稳定性。

你希望我补充GAE与TD(λ)的核心差异对比,这是理解GAE本质非常关键的一点,因为很多初学者容易混淆这两个概念。下面我会从数学形式、核心目标、偏差-方差特性、工程实现和适用场景五个维度,为你清晰梳理它们的核心区别与联系。


GAE 与 TD(λ) 核心差异对比

GAE 是基于 TD(λ) 思想,但专为优势函数估计设计的改进版本,二者共享λ参数的偏差-方差权衡逻辑,但目标、形式和应用场景完全不同。

对比维度TD(λ) (时序差分λ)GAE (广义优势估计)
核心目标估计状态价值函数 Vπ(st)V^\pi(s_t)估计优势函数 At=Q(st,at)V(st)A_t = Q(s_t,a_t) - V(s_t)
数学形式Vtλ=V(st)+l=0(1λ)λlTD(l)(st)V_t^{\lambda} = V(s_t) + \sum_{l=0}^{\infty} (1-\lambda)\lambda^l \cdot TD^{(l)}(s_t)(前向视角:λ加权多步TD估计)或Etλ=δt+γλEt+1λE_t^{\lambda} = \delta_t + \gamma\lambda E_{t+1}^{\lambda}(反向递归)AtGAE(λ)=l=0(γλ)lδt+lA_t^{GAE(\lambda)} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}(前向视角:γλ加权多步TD残差)或At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1}(反向递归)
偏差-方差特性λ=0 → TD(0)(估计V,方差小、偏差大)λ=1 → MC(估计V,方差大、偏差小)核心是优化V的估计λ=0 → TD(0)优势(方差小、偏差大)λ=1 → 无限步TD优势(接近MC优势)核心是优化A的估计
权重设计仅λ控制权重:λl\lambda^l(无γ参与)γ和λ共同控制权重:(γλ)l(\gamma\lambda)^l(γ是折扣因子,λ是优势衰减因子)
工程实现递归计算EtλE_t^\lambda,最终更新V(st)V(st)+αEtλV(s_t) \leftarrow V(s_t) + \alpha E_t^\lambda(α是学习率)递归计算AtA_t,最终输入策略梯度
适用场景仅用于价值函数(Critic)的更新训练仅用于策略函数(Actor)的梯度更新,是策略梯度算法(PPO/TRPO)的核心组件
与Actor-Critic的关系属于Critic侧的训练方法连接Critic(输出V)和Actor(用A更新策略)的桥梁

关键补充说明

1. 数学形式的本质差异

  • TD(λ) 的递归式:Etλ=δt+γλEt+1λE_t^\lambda = \delta_t + \gamma\lambda E_{t+1}^\lambda,最终是用 EtλE_t^\lambda 修正 V(st)V(s_t)(目标是让V更准);

  • GAE 的递归式:At=δt+γλAt+1A_t = \delta_t + \gamma\lambda A_{t+1},最终是用 AtA_t 衡量动作优劣(目标是指导策略更新)。

    二者递归式看似相同,但用途和最终作用对象完全不同:TD(λ) 服务于Critic的价值拟合,GAE服务于Actor的策略优化。

2. 权重中γ的作用差异

  • TD(λ) 中γ是“奖励折扣因子”,仅出现在TD残差 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) 中,λ仅控制多步TD的加权;
  • GAE 中γ和λ结合为 (γλ)l(\gamma\lambda)^l,既折扣未来奖励(γ),又衰减远期优势的影响(λ),双重控制方差,这是GAE更适配策略梯度的关键。

3. 通俗理解

  • TD(λ):“我用λ调节多步信息,只为把状态价值V算得更准”;
  • GAE:“我基于TD(λ)的思想,用λ调节多步信息,只为把‘动作比平均好多少’(优势A)算得更稳”。

总结

  1. 核心目标不同:TD(λ) 优化状态价值V的估计,GAE 优化优势函数A的估计;
  2. 权重机制不同:GAE 用 γλ\gamma\lambda 联合控制远期信息权重,TD(λ) 仅用λ;
  3. 应用场景不同:TD(λ) 用于Critic训练,GAE 用于Actor的策略梯度更新,是PPO等算法的核心。

简单来说,TD(λ) 是“给Critic用的工具”,而GAE是“基于TD(λ)改造、给Actor用的工具”,二者虽共享λ的偏差-方差权衡逻辑,但服务于强化学习Actor-Critic框架的不同部分。