当前位置: 首页 > news >正文

GAE-广义优势估计算法介绍

一句话总结

GAE 就像「既要稳又要准」的聪明妥协:用多步 TD 误差加权平均,既缓解了 MC 的高方差,又减少了 TD 的单一偏差,通过调节参数(λ)灵活平衡两者的优缺点。


MC vs TD 的痛点

  1. MC(蒙特卡洛)
    • 原理:跑完整个回合,用实际总回报(如游戏通关后的总分)更新每一步的价值。
    • 优点:无偏(完全真实结果)。
    • 缺点:方差大(结果波动大,比如同一局游戏可能因为随机性得分天差地别)。
  2. TD(时间差分)
    • 原理:走一步看一步,用当前奖励+下一步估计值(比如预测下一步得分)更新当前价值。
    • 优点:方差低(结果稳定)。
    • 缺点:有偏(预测可能不准,导致误差累积)。

GAE 的解决思路

GAE 的核心是:混合多步的 TD 误差,而不是只用单步(TD)或全程(MC)。
具体来说:

  1. TD 误差(δ):每一步的「惊喜值」,即当前奖励+下一步预测值 与 当前预测值的差。
  2. 加权平均:GAE 将未来多步的 TD 误差按权重(λ 的指数衰减)叠加,形成一个综合优势值。
    • λ=0:退化为单步 TD,低方差但有偏。
    • λ=1:退化为 MC,无偏但高方差。
    • 中间值(如 0.95):折中,既不过分依赖单步预测,也不迷信全程结果。

GAE 的优势

  1. 平衡偏差与方差:通过调节 λ,在 MC 的「真实但波动大」和 TD 的「稳定但可能跑偏」之间找到最佳平衡点。
  2. 适应性强:适用于不同任务,比如:
    • 环境随机性高(λ 小,更依赖近期稳定预测)。
    • 环境确定性高(λ 大,更信任长期真实回报)。
  3. 计算高效:只需单次遍历轨迹即可计算多步优势,适合深度学习框架。

举个栗子 🌰

假设你教 AI 玩《超级马里奥》:

  • MC:必须等马里奥通关或死亡,才能用最终得分更新所有操作。但一局游戏可能因为一个陷阱突然结束,导致某些操作被误判。
  • TD:每走一步就根据当前金币+对下一步的预测更新。但如果 AI 对“跳悬崖能得分”有错误预测,会一直错误更新。
  • GAE:综合未来几步的预测(比如跳悬崖后可能死亡,但短期内能吃到金币),通过 λ 决定更信任短期还是长期结果,避免极端情况。

原理公式(直观版)

GAE 的优势函数可以简化为:
[
A^{\text{GAE}} = \sum{k=0}^{\infty} (\lambda \gamma)^k \delta
]

  • γ:折扣因子(未来奖励的重要性)。
  • λ:调节「多步信任程度」的参数。
  • δ:单步 TD 误差(当前奖励+下一步预测值 - 当前预测值)。

总结

GAE 像是一个「老练的投资者」:
不把所有钱押在短期波动(TD)上,也不盲目等待长期回报(MC),而是通过分散投资(多步加权),平衡风险(方差)和收益(偏差),最终实现稳定增长(策略优化)。

Q:

  • 为什么 λ=0 时退化为单步 TD?为什么 λ=1 时退化成 MC?

在 GAE(广义优势估计)中,参数 λ 控制不同时间步的 TD 误差的加权方式。通过调整 λ 的值,GAE 可以在单步 TD 估计蒙特卡洛(MC)估计之间平滑过渡。以下是具体解释:


1. 当 λ=0 时:退化为单步 TD 估计

数学推导

GAE 的优势估计公式为:
[
A^{\text{GAE}}(st) = \sum^{\infty} (\lambda \gamma)^k \delta{t+k}
]
其中,单步 TD 误差定义为:
[
\delta
= rt + \gamma V(s) - V(s_t)
]

λ=0 时,每一项的权重为:
[
(\lambda \gamma)^k = 0^k = 0 \quad (\text{当 } k \geq 1 \text{ 时})
]
因此,只有 k=0 的项被保留:
[
A^{\text{GAE}}(st) = \delta_t = r_t + \gamma V(s) - V(s_t)
]
这正是单步 TD 误差,即单步 TD 估计的优势函数。

直观理解

  • 只看一步:GAE 仅使用当前奖励 ( rt ) 和下一步的价值估计 ( V(s) ),完全忽略后续步骤。
  • 低方差,但有偏:由于依赖价值函数 ( V ) 的估计,结果可能因 ( V ) 的不准确而产生偏差,但方差较低(仅涉及一步随机性)。

2. 当 λ=1 时:退化为 MC 估计

数学推导

λ=1 时,权重变为:
[
(\lambda \gamma)^k = \gamma^k
]
此时,GAE 的优势估计为:
[
A^{\text{GAE}}(st) = \sum^{\infty} \gamma^k \delta_{t+k}
]

展开后发现:
[
\sum{k=0}^{\infty} \gamma^k \delta = \sum{k=0}^{\infty} \gamma^k \left( r + \gamma V(s{t+k+1}) - V(s) \right)
]
逐项展开后,所有中间项 ( \gamma V(s) ) 会相互抵消,最终剩余:
[
A^{\text{GAE}}(st) = \sum^{\infty} \gamma^k r_{t+k} - V(s_t)
]
这正是 蒙特卡洛回报 ( G_t ) 减去当前价值 ( V(s_t) ),即:
[
A^{\text{GAE}}(s_t) = G_t - V(s_t)
]

直观理解

  • 完全依赖真实回报:GAE 通过累加从当前时刻到回合结束的所有折扣奖励 ( G_t ),不再使用中间的价值估计 ( V ),因此与 MC 方法完全一致。
  • 无偏,但高方差:结果完全基于实际采样数据,无模型偏差,但方差较高(整个回合的随机性被纳入计算)。

3. 关键区别:偏差与方差的权衡

方法 λ 的值 原理 优点 缺点
单步 TD λ=0 仅用下一步的估计更新当前价值 低方差,计算快 有偏(依赖模型估计)
蒙特卡洛 λ=1 用整个回合的真实回报更新 无偏 高方差,需完整回合
GAE(中间 λ) 0<λ<1 加权多步 TD 误差,平衡两者 灵活调节偏差与方差 需调参 λ

4. 直观比喻

  • λ=0(单步 TD)
    像一个“短视的决策者”,只相信眼前的一步(下一步的预测),忽略长期影响。优点是反应快,缺点是容易被短期错误误导。

  • λ=1(MC)
    像一个“固执的完美主义者”,必须看到最终结果才做判断。优点是绝对准确,缺点是效率低且容易受随机事件干扰。

  • GAE(0<λ<1)
    像一个“经验丰富的策略家”,既参考近期预测(λ 接近 0),又兼顾长期结果(λ 接近 1),通过 λ 灵活调整信任程度。


总结

  • λ=0:退化为单步 TD,因为只保留单步 TD 误差,完全忽略后续步骤。
  • λ=1:退化为 MC,因为累加所有步的 TD 误差后,结果等价于蒙特卡洛回报减去当前价值。
  • λ 的作用:通过调整 λ,在“低方差但有偏”(TD)和“无偏但高方差”(MC)之间找到最佳平衡点。

GAE 的具体计算方式

好的,我们来详细展开并解释广义优势估计 (Generalized Advantage Estimation, GAE) 的公式。

GAE 是一种在强化学习中用于估计优势函数的高级技巧,它通过一个参数 λ 来巧妙地平衡偏差 (bias) 和方差 (variance),从而得到更稳定和高效的策略更新。

1. 目标:估计优势函数 (Advantage Function)

首先,我们想估计的目标是优势函数 \(A(s, a)\)。它回答了这样一个问题:“在状态 \(s\) 下,执行动作 \(a\) 相比于遵循当前策略的平均水平,到底好多少?”

  • 定义式:

    \[A(s, a) = Q(s, a) - V(s) \]

    • \(Q(s, a)\): 在状态 \(s\) 执行动作 \(a\) 后,期望能获得的未来总回报(动作价值)。
    • \(V(s)\): 在状态 \(s\) 下,遵循当前策略所能获得的平均未来总回报(状态价值)。

一个准确的 \(A(s, a)\) 估算值对于策略梯度算法(如 PPO)至关重要。它告诉我们应该增加 (\(A > 0\)) 还是减少 (\(A < 0\)) 在状态 \(s\) 下采取动作 \(a\) 的概率。

2. 基础模块:时序差分误差 (TD Error)

最简单的优势估算方法是使用时序差分误差 (TD Error),记为 \(\delta_t\)。它衡量了现实(走出一步后)与预期之间的“惊喜”程度。

  • 公式:

    \[\delta_t = R_t + \gamma V(s_{t+1}) - V(s_t) \]

    • \(R_t\): 在时间步 \(t\) 获得的即时奖励。
    • \(\gamma\) (gamma): 折扣因子(例如 0.99),用于衡量未来奖励的重要性。
    • \(V(s_{t+1})\): Critic 网络对下一个状态 \(s_{t+1}\) 的价值估计。
    • \(V(s_t)\): Critic 网络对当前状态 \(s_t\) 的价值估计。

直观来看,\(R_t + \gamma V(s_{t+1})\) 是对当前状态价值 \(V(s_t)\) 的一个基于真实样本的、更准确的估计。因此,\(\delta_t\) 衡量了现实比我们的初始预期 \(V(s_t)\) 好了多少(或差了多少)。

这个 \(\delta_t\) 可以被看作是单步优势估计。它的方差很低(因为它只依赖于一步的随机性),但偏差可能很高(因为它严重依赖于可能不准确的价值估计 \(V(s_{t+1})\))。

3. GAE 公式:核心思想与展开形式

GAE 的核心思想是不只看一步,而是综合考虑未来多步的 TD 误差,并通过引入一个新参数 \(\lambda\) (lambda, 通常在 0 到 1 之间) 来对它们进行加权平均。

  • \(\lambda=0\) 时,GAE 只考虑单步 TD 误差,这对应于低方差、高偏差的情况。
  • \(\lambda=1\) 时,GAE 会考虑未来所有步的 TD 误差,这等价于蒙特卡洛方法,对应于高方差、低偏差的情况。

GAE 的优势估计值 \(\hat{A}_t^{\text{GAE}}\) 是未来所有 TD 误差的指数加权平均。

下面就是您要的 GAE 完全展开后的公式:

\[\hat{A}_t^{\text{GAE}} = \delta_t + (\gamma\lambda)\delta_{t+1} + (\gamma\lambda)^2\delta_{t+2} + (\gamma\lambda)^3\delta_{t+3} + \dots \]

使用求和符号表示,则为:

\[\hat{A}_t^{\text{GAE}} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} \]

让我们来解析这个展开式:

  • \(\delta_t\): 当前这一步的 TD 误差被完全计算在内,权重为 1。
  • \((\gamma\lambda)\delta_{t+1}\): 下一步的 TD 误差 \(\delta_{t+1}\) 也被考虑进来,但它的权重被折扣了两次:一次是常规的未来奖励折扣 \(\gamma\),另一次是 GAE 的平衡因子 \(\lambda\)
  • \((\gamma\lambda)^2\delta_{t+2}\): 再下一步的 TD 误差 \(\delta_{t+2}\) 被考虑,但其权重被进一步削减。
  • 以此类推,来自更遥远未来的 TD 误差的“话语权”会以 \((\gamma\lambda)\) 的指数级速度衰减。

4. 实际计算:递归公式

尽管展开式有助于理解,但在实际计算中我们无法处理一个无限项的和。幸运的是,上面的展开式可以等价地写成一个非常简洁的递归形式

\[\hat{A}_t^{\text{GAE}} = \delta_t + \gamma\lambda \hat{A}_{t+1}^{\text{GAE}} \]

这个公式是如何在代码中实现的?

当一个回合(或一批数据)结束后,我们需要从后往前计算 GAE 值:

  1. 首先,计算轨迹中每一步的 TD 误差 \(\delta_t\)
  2. 对于轨迹的最后一步 \(T\),由于没有“下一步”了,所以它的 GAE 值就是它的 TD 误差:
    \(\hat{A}_T^{\text{GAE}} = \delta_T\)
  3. 然后,计算倒数第二步 \(T-1\) 的 GAE 值:
    \(\hat{A}_{T-1}^{\text{GAE}} = \delta_{T-1} + \gamma\lambda \hat{A}_{T}^{\text{GAE}}\)
  4. 接着,计算倒数第三步 \(T-2\) 的 GAE 值:
    \(\hat{A}_{T-2}^{\text{GAE}} = \delta_{T-2} + \gamma\lambda \hat{A}_{T-1}^{\text{GAE}}\)
  5. ...不断向前递推,直到计算出轨迹中每一步的 GAE 值。

通过这种方式,GAE 高效地为策略网络提供了高质量的、平衡了偏差和方差的更新信号。

http://www.hskmm.com/?act=detail&tid=28345

相关文章:

  • qemu模拟单片机
  • RAG-检索增强生成
  • “猴子补丁”(monkey patch)跟猴子有关吗?
  • Yapi 使用docker在cenos7上部署教程与基本使用
  • C语言vsC++
  • 20251010 之所思 - 人生如梦
  • 2025.10.10
  • 个人书单-从心流出发,学习积极心理学
  • 等号(=)在C语言和python中有什么区别?
  • AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议
  • 4.布局系统
  • Python clickhouse-driver 类库使用学习总结
  • 虚拟环境QA
  • 计算机系统知识 - 呓语
  • 详解 `a, b = b, a + b`:执行逻辑、常见误区与赋值符号辨析
  • xdown 全能下载
  • 2025.10.10 - 20243867孙堃2405
  • 密码系统设计
  • c#服务安装和卸载等等
  • 进制表示
  • 在AI技术快速实现创意的时代,挖掘用户真实需求成为关键——某知名电池管理工具需求洞察
  • 从梯度提升树到分布式机器学习算法
  • iPhone手机越狱后出现闪退的解决方法
  • 企业推行 OKR 的 10 个关键问题
  • 读《构建之法》后的六个问题
  • 自动输入小程序
  • 实用指南:基于阿里云系列平台的python微服务设计与DevOps实践
  • 学习意志:“柚子曲线”与圆的交点个数的代数证明
  • 使用命令行删除 Windows 网络映射驱动器
  • 实验报告4(使用顺序表和单链表,进行有序表的合并)