一句话总结
GAE 就像「既要稳又要准」的聪明妥协:用多步 TD 误差加权平均,既缓解了 MC 的高方差,又减少了 TD 的单一偏差,通过调节参数(λ)灵活平衡两者的优缺点。
MC vs TD 的痛点
- MC(蒙特卡洛):
- 原理:跑完整个回合,用实际总回报(如游戏通关后的总分)更新每一步的价值。
- 优点:无偏(完全真实结果)。
- 缺点:方差大(结果波动大,比如同一局游戏可能因为随机性得分天差地别)。
- TD(时间差分):
- 原理:走一步看一步,用当前奖励+下一步估计值(比如预测下一步得分)更新当前价值。
- 优点:方差低(结果稳定)。
- 缺点:有偏(预测可能不准,导致误差累积)。
GAE 的解决思路
GAE 的核心是:混合多步的 TD 误差,而不是只用单步(TD)或全程(MC)。
具体来说:
- TD 误差(δ):每一步的「惊喜值」,即当前奖励+下一步预测值 与 当前预测值的差。
- 加权平均:GAE 将未来多步的 TD 误差按权重(λ 的指数衰减)叠加,形成一个综合优势值。
- λ=0:退化为单步 TD,低方差但有偏。
- λ=1:退化为 MC,无偏但高方差。
- 中间值(如 0.95):折中,既不过分依赖单步预测,也不迷信全程结果。
GAE 的优势
- 平衡偏差与方差:通过调节 λ,在 MC 的「真实但波动大」和 TD 的「稳定但可能跑偏」之间找到最佳平衡点。
- 适应性强:适用于不同任务,比如:
- 环境随机性高(λ 小,更依赖近期稳定预测)。
- 环境确定性高(λ 大,更信任长期真实回报)。
- 计算高效:只需单次遍历轨迹即可计算多步优势,适合深度学习框架。
举个栗子 🌰
假设你教 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 完全展开后的公式:
使用求和符号表示,则为:
让我们来解析这个展开式:
- \(\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. 实际计算:递归公式
尽管展开式有助于理解,但在实际计算中我们无法处理一个无限项的和。幸运的是,上面的展开式可以等价地写成一个非常简洁的递归形式。
这个公式是如何在代码中实现的?
当一个回合(或一批数据)结束后,我们需要从后往前计算 GAE 值:
- 首先,计算轨迹中每一步的 TD 误差 \(\delta_t\)。
- 对于轨迹的最后一步 \(T\),由于没有“下一步”了,所以它的 GAE 值就是它的 TD 误差:
\(\hat{A}_T^{\text{GAE}} = \delta_T\)。 - 然后,计算倒数第二步 \(T-1\) 的 GAE 值:
\(\hat{A}_{T-1}^{\text{GAE}} = \delta_{T-1} + \gamma\lambda \hat{A}_{T}^{\text{GAE}}\)。 - 接着,计算倒数第三步 \(T-2\) 的 GAE 值:
\(\hat{A}_{T-2}^{\text{GAE}} = \delta_{T-2} + \gamma\lambda \hat{A}_{T-1}^{\text{GAE}}\)。 - ...不断向前递推,直到计算出轨迹中每一步的 GAE 值。
通过这种方式,GAE 高效地为策略网络提供了高质量的、平衡了偏差和方差的更新信号。