Skip to content

广义优势估计

Generalized Advantage Estimation

GAE是一种 优势函数估计方法

它想解决的问题很具体:

  • 在策略梯度里,我们希望知道某一步动作到底“比平均水平好多少”;
  • 这个量就是 advantage;
  • 但真实 advantage 很难直接得到,只能估计;
  • 如果估计太“短视”,方差小但偏差可能大;
  • 如果估计太“长视”,偏差小但方差又会变大。

GAE 的核心思想可以先记成一句话:

把很多个不同步长的 advantage 估计做指数加权平均,在偏差和方差之间做折中。

回顾

  • vπ(s):策略 π 下真实的状态价值函数;
  • qπ(s,a):策略 π 下真实的动作价值函数;
  • Aπ(s,a)=qπ(s,a)vπ(s):真实 advantage;
  • V(s):算法当前维护的状态价值估计;
  • Gt:从时刻 t 开始的折扣回报。

在策略梯度里,我们最理想地希望使用的量是:

Aπ(St,At)

因为它直接表示:

当前动作相对“策略平时会做出的平均动作”到底好多少。

如果这个值是正的,说明这个动作比平均水平更好;如果是负的,说明更差。

为什么需要 GAE

如果真实的 advantage 已知,那当然最好;但现实里它通常不知道,所以必须估计。

最自然的做法有两种极端。

第一种:用完整回报

最直接的 advantage 估计可以写成:

A^t=GtV(St)

也就是:

  • 先拿到从当前时刻开始的完整折扣回报 Gt
  • 再减去状态基线 V(St)

这很直观,因为完整回报看得最远,偏差通常更小;但问题是它方差很大。

第二种:只看一步 TD residual

另一种更短视的做法是直接用一步 TD 误差:

δtV=Rt+1+γV(St+1)V(St)

它的优点是更新很局部,方差通常更小;但如果 V 还不够准,它会引入更明显的偏差。

所以 GAE 想做的事情就是:

不走两个极端,而是在“完整回报”和“一步 TD”之间做平滑折中。


从一步 TD residual 开始

GAE 的出发点就是一步 TD residual:

δtV=Rt+1+γV(St+1)V(St)

这条式子可以理解成:

  • 当前状态估计是 V(St)
  • 如果只往前看一步,那么更合理的新目标应该是 Rt+1+γV(St+1)
  • 二者之差,就是这一步的 TD residual。

如果把它当成 advantage 估计,就得到最短视的版本:

A^t(1)=δtV

这就是“一步 advantage 估计”。

两步、三步、一直往后推

如果不想只看一步,那就可以往后多看几步。

两步版本

先写:

A^t(2)=δtV+γδt+1V

δtVδt+1V 展开:

δtV=Rt+1+γV(St+1)V(St)δt+1V=Rt+2+γV(St+2)V(St+1)

于是:

A^t(2)=Rt+1+γV(St+1)V(St)+γ(Rt+2+γV(St+2)V(St+1))

中间的 +γV(St+1)γV(St+1) 抵消,得到:

A^t(2)=V(St)+Rt+1+γRt+2+γ2V(St+2)

这说明:

两步 advantage 估计 = 两步真实奖励 + 末端 bootstrap 值 - 当前基线。

三步版本

同理:

A^t(3)=δtV+γδt+1V+γ2δt+2V

展开后会得到:

A^t(3)=V(St)+Rt+1+γRt+2+γ2Rt+3+γ3V(St+3)

一般的 k 步版本

于是可以总结成:

A^t(k)=l=0k1γlδt+lV

也等价于:

A^t(k)=V(St)+Rt+1+γRt+2++γk1Rt+k+γkV(St+k)

这说明 A^t(k) 本质上就是:

一个 k-step return,减去当前状态基线。

k 时会发生什么

如果一直往后推到无限远,那么末端 bootstrap 项会消失在完整回报里,于是:

A^t()=l=0γlδt+lV=V(St)+l=0γlRt+1+l

也就是:

A^t()=GtV(St)

这就回到了“完整回报减基线”的形式。

所以现在已经很清楚了:

  • k=1:最短视,更像一步 TD;
  • k 很大:看得更远,更像 Monte Carlo;
  • 中间的 k:在两者之间过渡。

GAE 的定义

GAE 的核心做法不是只选某一个固定的 k,而是把所有 k-step advantage estimator 混起来。

定义:

A^tGAE(γ,λ)=(1λ)(A^t(1)+λA^t(2)+λ2A^t(3)+)

这就是 广义优势估计

它的含义是:

  • 短步长估计权重大;
  • 长步长估计权重小;
  • 权重按 λ 指数衰减。

所以 λ 控制的是:

你愿意看多远。

从加权平均推到最常见公式

上面的定义虽然直观,但实际实现更常用另一种写法。

先把前几项代进去:

A^t(1)=δtVA^t(2)=δtV+γδt+1VA^t(3)=δtV+γδt+1V+γ2δt+2V

代入 GAE 定义:

A^tGAE(γ,λ)=(1λ)[δtV+λ(δtV+γδt+1V)+λ2(δtV+γδt+1V+γ2δt+2V)+]

把相同的项收集起来:

A^tGAE(γ,λ)=(1λ)[δtV(1+λ+λ2+)+γδt+1V(λ+λ2+)+γ2δt+2V(λ2+λ3+)+]

利用等比级数:

1+λ+λ2+=11λλ+λ2+=λ1λλ2+λ3+=λ21λ

于是前面的 (1λ) 会和这些分母抵消,最终得到最常见的公式:

A^tGAE(γ,λ)=l=0(γλ)lδt+lV

这就是 GAE 最值得记住的一条式子。

这条公式该怎么理解

A^tGAE(γ,λ)=δtV+γλδt+1V+(γλ)2δt+2V+

它的直觉非常清楚:

  • 当前时刻的 TD residual 权重最大;
  • 越往后的 TD residual,权重越小;
  • 衰减速度由 γλ 决定。

所以可以把 GAE 看成:

把未来很多步的 TD residual 做折扣求和。

这也是为什么很多实现会直接把 GAE 叫做“discounted sum of TD residuals”。

两个最重要的特例

λ=0

此时:

A^tGAE(γ,0)=δtV

也就是只剩一步 TD residual。

这时:

  • 方差通常较小;
  • 但如果 V 不够准,偏差会更明显。

λ=1

此时:

A^tGAE(γ,1)=l=0γlδt+lV=GtV(St)

也就是完整回报减基线。

这时:

  • 更接近 Monte Carlo advantage;
  • 但方差会更大。

所以一句话记忆就是:

  • λ=0:最短视;
  • λ=1:最远视;
  • 中间值:偏差—方差折中。

为什么 GAE 能降低方差

优势估计的难点从来不是“能不能写出一个公式”,而是:

这个估计拿来更新策略时,方差会不会太大。

完整回报 GtV(St) 看得最远,但它把很久以后的随机性也都背在自己身上,因此方差通常很大。一步 TD residual 看得很近,方差更小,但它更依赖 V 的准确性。

GAE 的做法就是:

  • 不完全相信最远的完整回报;
  • 也不只相信最短的一步 TD;
  • 而是把不同步长的信息按指数权重混合。

这就是它能在实践里常常比纯 Monte Carlo advantage 更稳的原因。

γλ 分别控制什么

这两个参数很容易混,但作用并不完全一样。

γ 负责折扣未来信息。

它越小,越远的 TD residual 衰减得越快;它越大,越愿意把远处的信息保留下来。

λ 负责混合不同步长的 advantage estimator。

它越小,就越偏向短步长、低方差;它越大,就越偏向长步长、低偏差。

一起看

因为最终公式里出现的是 (γλ)l,所以它们共同决定“未来误差信息还能传多远”。

不过直觉上最好分开记:

  • γ 更像是“未来奖励折扣”;
  • λ 更像是“优势估计看多远”。

一个很实用的递推写法

虽然定义式是:

A^tGAE(γ,λ)=l=0(γλ)lδt+lV

但实现时更常用从后往前递推:

A^t=δtV+γλA^t+1

这个式子直接由上面的求和展开得到。

因为:

A^t=δtV+γλδt+1V+(γλ)2δt+2V+

A^t+1=δt+1V+γλδt+2V+

所以自然有:

A^t=δtV+γλA^t+1

这就是代码里最常见的 backward recursion。

如果某一步是 episode 终止点,通常会把之后的那部分截断;实现时常写成带 done mask 的形式。

一个小例子

假设某段轨迹上有三步 TD residual:

δtV=2,δt+1V=1,δt+2V=0.5

并且取:

γ=0.9,λ=0.95

那么:

A^tGAE=2+(0.9×0.95)×1+(0.9×0.95)2×(0.5)

因为:

0.9×0.95=0.855

所以:

A^tGAE2+0.8550.3655=2.4895

这个例子能看出两件事:

  • 当前 TD residual 影响最大;
  • 更远处的信息仍然有影响,但会被逐步衰减。

GAE 和 TD(λ) 的关系

GAE 和 TD(λ) 很像,但它们不是同一个东西。

最简单的区别是:

  • TD(λ) 是 值函数估计 的思路;
  • GAE 是 优势函数估计 的思路。

它们的结构非常相似:

  • 都在混合不同步长的目标;
  • 都体现偏差—方差折中;
  • 都会出现一个 λ 参数来控制“看多远”。

所以你可以把 GAE 理解成:

把 TD(λ) 的思想搬到了 advantage estimation 上。

论文里的一个细节提醒

在 GAE 原论文里,作者强调他们讨论的是一个 undiscounted objective,而把 γ 当成一个用于方差控制的算法参数;因此论文里会区分“对 discounted policy gradient 的无偏”与“对原始 undiscounted objective 的偏差”这两个层次。

如果你现在主要是在读 PPO / actor-critic 的工程实现,那通常可以先用更直接的理解:

  • γ 是折扣因子;
  • λ 是 GAE 的折中参数;
  • GAE 主要负责把 advantage 估计得更稳。

等到后面更深入再回来看原论文里 γ-just estimator 的表述,会更容易懂。

总结

GAE 的核心不是一条孤立公式,而是一条完整思路:

  1. 一步 TD residual δtV 太短视,方差小但可能有偏;
  2. 完整回报减基线 GtV(St) 看得最远,偏差小但方差大;
  3. 那就把不同步长的 advantage estimator 按指数权重混合;
  4. 最终得到一个兼顾偏差和方差的优势估计。

::; tip 重点

一步 TD residual:

δtV=Rt+1+γV(St+1)V(St)

GAE 定义:

A^tGAE(γ,λ)=(1λ)(A^t(1)+λA^t(2)+λ2A^t(3)+)

最常见写法:

A^tGAE(γ,λ)=l=0(γλ)lδt+lV

:::

GAE = 把未来很多步 TD residual 做折扣求和,用来得到一个更稳的 advantage 估计。