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

news/2025/10/11 0:54:47/文章来源:https://www.cnblogs.com/AikN/p/19134130

一句话总结

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.mzph.cn/news/934494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qemu模拟单片机

ESP32 乐鑫官方移植的qemu工程:espressif/qemu: Fork of QEMU with Espressif patches. See Wiki for details. 官方使用说明:esp-toolchain-docs/qemu/README.md at main espressif/esp-toolchain-docs 目前支持ES…

RAG-检索增强生成

检索增强生成(Retrieval-Augmented Generation, RAG)是近年来深度学习领域的重要技术突破,旨在解决大语言模型(LLM)在知识更新、事实准确性以及领域专业化方面的局限性。本文将从核心架构、功能实现、实践规范到高…

“猴子补丁”(monkey patch)跟猴子有关吗?

“猴子补丁”(monkey patch)指的是使函数名指向另一个函数。 这个名字里的“猴子”(monkey)和真实的动物猴子没有任何生物学或实体关联,它是编程领域的一个形象比喻,名字的由来与“猴子”的俚语含义有关。 为什么…

Yapi 使用docker在cenos7上部署教程与基本使用

✅ 前提条件 确保你已经完成以下准备:CentOS 7 系统已安装 Docker(未安装请先安装)拥有管理员权限(root 或 sudo)1、安装mongo数据库# 拉取mongo镜像,有本地镜像包可以直接导入 docker pull mongo # 安装mongo数…

C语言vsC++

一、核心区别设计理念C 语言:面向过程(Procedure-Oriented),以函数和数据结构为核心,强调算法和步骤的实现,关注 “怎么做”。 C++:基于 C 语言扩展而来,支持面向对象编程(Object-Oriented,OO),引入类、对…

20251010 之所思 - 人生如梦

20251010 之所思这两天想的事情有点多,有点焦虑,因为刚刚升职,部门的软件需要管理起来,已经不再仅仅管理自己现在的一个小组,今天看了一下软件的人数,数量已经到了122人,这是一个很庞大的队伍,如何管理好,心里…

2025.10.10

今天学生会开会导致十点没有回到宿舍 今天一节英语课,单词背诵情况不好,以后会加强 尝试轻食餐,不好吃

个人书单-从心流出发,学习积极心理学

从“心流”出发,构建你的积极心理学知识体系 | 专题书单 你是否曾有过这样的体验:在全神贯注地工作、运动或创作时,忘记了时间的流逝,内心充满了一种纯净而高效的愉悦感? 这就是米哈里契克森米哈赖所描述的 “心流…

等号(=)在C语言和python中有什么区别?

等号(=)在C语言和python中有什么区别? 等号(=)在 C 语言和 Python 中虽然核心功能都是“赋值”,但由于两种语言的设计理念(静态类型 vs 动态类型、编译型 vs 解释型)存在根本差异,= 的行为、特性和使用场景有…

AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议

AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议 文 / 岐金兰 摘要: 本文是对前文《AI元人文(十四):物物交换——论跨领域价值协商的元协议》提出的“物物交换”元协议的深化探讨。文章将…

4.布局系统

Aquarius 开发框架旨在帮助独立开发者和中小型团队,完成 iOS App 的快速实现与迭代。使用框架开发将给你带来简单、高效、易维护的编程体验。大家好,我是K哥。一名独立开发者,同时也是Swift开发框架【Aquarius】的作…

虚拟环境QA

Dingxingdi: 我使用conda激活虚拟环境之后,就可以像往常一样使用命令了吗?不需要在命令前面加一个conda吗? GitHub Copilot: 可以直接像平常一样运行命令,不需要在命令前加 conda。激活环境(例如 conda activate …

提升高度的网站

真相查询类Snopes https://www.snopes.comWikipedia(英文) https://en.wikipedia.org全球时事类 3. Foreign Affairs https://www.foreignaffairs.comBrookings https://www.brookings.edu课程学习类 5. Open Yale C…

day009

今日完成:css页面的格式排布设置,页面的字体颜色设置有了一定的了解. 明日完成:css,html 遇到问题:无

java基础2-运算符

运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以成为表达式。 1.算数运算符:int c = a + b; +:是运算符,并且为算数运算符; a + b 是表达式,由于+时…

HTTP OPTIONS 方法详解:从原理到实践

HTTP OPTIONS 方法详解:从原理到实践 本文深入剖析 HTTP OPTIONS 方法的核心作用、CORS 预检机制及实际应用场景,帮助开发者彻底解决跨域问题 一、OPTIONS 方法概述 1.1 基本定义 OPTIONS 是 HTTP/1.1 协议定义的请求…

详解 `a, b = b, a + b`:执行逻辑、常见误区与赋值符号辨析

详解 a, b = b, a + b:执行逻辑、常见误区与赋值符号辨析 在 Python 中,a, b = b, a + b 是一句看似简单却暗藏玄机的代码。它广泛用于斐波那契数列生成、变量交换等场景,但许多开发者对其执行逻辑存在误解,甚至会…

xdown 全能下载

官网 https://xdown.org/作者:mohistH 出处:https://www.cnblogs.com/pandamohist/ 本文版权归作者和博客园共有,谢绝一切形式的转载,否则将追究法律责任。

2025.10.10 - 20243867孙堃2405

又是阴雨绵绵的一天,今天上了英语提高,我会了更多的语法