广义优势估计(GAE):PPO算法的核心技术与数学深度解析
摘要
广义优势估计(Generalized Advantage Estimation, GAE)是强化学习算法中的关键技术,特别是在近端策略优化(PPO)中发挥着核心作用。本文从基础概念出发,深入探讨GAE的数学原理、推导过程、实现细节及其在偏差-方差权衡中的重要作用。
1. 引言:优势函数的重要性
在强化学习中,评估动作质量是策略优化的核心问题。传统的动作价值函数Q(s,a)Q(s,a)Q(s,a)虽然直接,但缺乏相对比较的视角。优势函数的概念应运而生:
Aπ(s,a)=Qπ(s,a)−Vπ(s)A^{\pi}(s,a) = Q^{\pi}(s,a) - V^{\pi}(s)Aπ(s,a)=Qπ(s,a)−Vπ(s)
其中Vπ(s)=Ea∼π[Qπ(s,a)]V^{\pi}(s) = \mathbb{E}_{a \sim \pi}[Q^{\pi}(s,a)]Vπ(s)=Ea∼π[Qπ(s,a)]是状态价值函数,代表在状态sss下遵循策略π\piπ的期望回报。
优势函数A(s,a)A(s,a)A(s,a)提供了关键洞察:
- A(s,a)>0A(s,a) > 0A(s,a)>0:动作aaa优于平均水准
- A(s,a)<0A(s,a) < 0A(s,a)<0:动作aaa劣于平均水准
- A(s,a)=0A(s,a) = 0A(s,a)=0:动作aaa处于平均水准
使用优势函数作为策略梯度权重,相比原始回报能显著降低方差并提高训练稳定性。
2. GAE的由来:偏差-方差权衡问题
2.1 优势估计的两种极端方法
1.偏差与方差
在强化学习中,价值函数估计的质量直接影响到策略学习的效果。估计方法需要在偏差和方差之间进行权衡:
偏差:估计值的期望与真实值之间的差异,会导致收敛到次优策略
方差:估计值的波动程度,会导致训练不稳定和样本效率低下
2. 真实估计
Attrue=Q(st,at)−V(st)A_t^{true} = Q(s_t, a_t) - V(s_t)Attrue=Q(st,at)−V(st)
3. 时序差分(TD)估计(单步)
At(1)=δt=rt+γV(st+1)−V(st)A_t^{(1)} = \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)At(1)=δt=rt+γV(st+1)−V(st)
特点:方差低(仅涉及一步随机性),但偏差高(依赖VVV函数的准确性)
直观理解:用与环境的单步交互获得的即时奖励+未来奖励[ rrr+γV(st+1)\gamma V(s_{t+1})γV(st+1) ]来估计真实的动作价值QQQ(用单个样本的值估计真实期望),这个估计值依赖于V(st+1)V(s_{t+1})V(st+1)的准确性,可能估计得很不准确,导致估计值与真实值之间的偏差大,然而由于只走了一步,所以这个估计值r_t + \gamma V(s_{t+1}) 与现有的V(st)V(s_t)V(st)之间的差值不会太大,所以方差小
4. 蒙特卡洛(MC)估计(轨迹)
AtMC=Gt−V(st)=∑l=0∞γlrt+l−V(st)A_t^{MC} =G_t - V(s_t)= \sum_{l=0}^{\infty} \gamma^l r_{t+l} - V(s_t)AtMC=Gt−V(st)=l=0∑∞γlrt+l−V(st)
特点:偏差低(使用实际回报GtG_tGt),但方差高(依赖整个轨迹的随机性)
直观理解:用与环境的一整个回合的交互获得累计折扣回报GtG_tGt来估计真实的动作价值QQQ(用整个回合的样本均值估计真实期望),这个估计值是比较准确的,所以估计值与真实值之间的偏差小,然而,可能出现有的回合很快到达目标所以获得了高奖励,有的回合走了很长的弯路或者陷阱后才到达目标所以获得的奖励比较低,有的回合可能到达不到目标点一直在陷阱附近徘徊所以获得了负奖励,由于只走一整个回合的时间步最后得到的累计折扣回报的值在上述3种情况下会差距很大,所以这个估计值GtG_tGt与现有的V(st)V(s_t)V(st)之间的差值可能也会很大,所以方差就大了
2.2 偏差-方差的数学分析
单步TD的偏差来源:
E[A^t(1)−At]=E[rt+γV(st+1)−Q(st,at)]\mathbb{E}[\hat{A}_t^{(1)} - A_t] = \mathbb{E}[r_t + \gamma V(s_{t+1}) - Q(s_t,a_t)]E[A^t(1)−At]=E[rt+γV(st+1)−Q(st,at)]
由于VVV函数估计不完美,导致系统性偏差。
蒙特卡洛的方差来源:
Var(AtMC)=Var(∑l=0∞γlrt+l)\text{Var}(A_t^{MC}) = \text{Var}\left(\sum_{l=0}^{\infty} \gamma^l r_{t+l}\right)Var(AtMC)=Var(l=0∑∞γlrt+l)
多步随机变量的累积导致方差急剧增大。
2.3 小结
为了平衡 偏差和方差,Schulman 等人在 2016 年提出了 Generalized Advantage Estimation (GAE) 方法,它是一种在偏差和方差之间权衡的优势函数估计方法,被广泛应用于强化学习中的近端策略优化(PPO)等算法。
3. GAE的数学推导
3.1 n步优势估计
定义n步优势估计:
At(n)=∑l=0n−1γlδt+l=δt+γδt+1+⋯+γn−1δt+n−1A_t^{(n)} = \sum_{l=0}^{n-1} \gamma^l \delta_{t+l} = \delta_t + \gamma\delta_{t+1} + \cdots + \gamma^{n-1}\delta_{t+n-1}At(n)=l=0∑n−1γlδt+l=δt+γδt+1+⋯+γn−1δt+n−1
3.2 GAE的核心思想
GAE将不同n步估计进行指数加权平均:
AtGAE=(1−λ)(At(1)+λAt(2)+λ2At(3)+⋯ )A_t^{GAE} = (1-\lambda)(A_t^{(1)} + \lambda A_t^{(2)} + \lambda^2 A_t^{(3)} + \cdots)AtGAE=(1−λ)(At(1)+λAt(2)+λ2At(3)+⋯)
3.3 数学推导过程
将n步估计代入定义:
AtGAE=(1−λ)∑n=1∞λn−1∑l=0n−1γlδt+lA_t^{GAE} = (1-\lambda)\sum_{n=1}^{\infty} \lambda^{n-1} \sum_{l=0}^{n-1} \gamma^l \delta_{t+l}AtGAE=(1−λ)n=1∑∞λn−1l=0∑n−1γlδt+l
交换求和顺序:
AtGAE=(1−λ)∑l=0∞γlδt+l∑n=l+1∞λn−1A_t^{GAE} = (1-\lambda)\sum_{l=0}^{\infty} \gamma^l \delta_{t+l} \sum_{n=l+1}^{\infty} \lambda^{n-1}AtGAE=(1−λ)l=0∑∞γlδt+ln=l+1∑∞λn−1
计算内层几何级数:
∑n=l+1∞λn−1=λl1−λ\sum_{n=l+1}^{\infty} \lambda^{n-1} = \frac{\lambda^l}{1-\lambda}n=l+1∑∞λn−1=1−λλl
代入化简得GAE最终形式:
AtGAE(γ,λ)=∑l=0∞(γλ)lδt+lA_t^{GAE(\gamma,\lambda)} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}AtGAE(γ,λ)=l=0∑∞(γλ)lδt+l
编码实现的常用形式为:
AtGAE(γ,λ)=δt+(γλ)At+1GAE(γ,λ)A_t^{GAE(\gamma,\lambda)} = \delta_t+(\gamma\lambda)A_{t+1}^{GAE(\gamma,\lambda)}AtGAE(γ,λ)=δt+(γλ)At+1GAE(γ,λ)
4. λ参数的作用机制
4.1 λ的物理意义
λ控制着信用分配的时间尺度:
- λ → 0:AtGAE=δtA_t^{GAE} = \delta_tAtGAE=δt,仅考虑即时TD误差
- λ → 1:AtGAE=∑l=0∞γlδt+lA_t^{GAE} = \sum_{l=0}^{\infty} \gamma^l \delta_{t+l}AtGAE=∑l=0∞γlδt+l,考虑整个轨迹
- 0 < λ < 1:平滑过渡,近期TD误差权重更大
4.2 λ的实践选择
| λ值范围 | 特性 | 适用场景 |
|---|---|---|
| 0.8-0.9 | 适中偏差-方差 | 大多数连续控制任务 |
| 0.9-0.95 | 低偏差,较高方差 | 需要精确信用分配的任务 |
| 0.95-0.99 | 接近蒙特卡洛 | 稀疏奖励、长期规划任务 |
5. GAE的计算实现
5.1 高效反向计算算法
import numpy as np
def calculate_gae(rewards, values, dones, gamma=0.99, lam=0.95):
"""
计算广义优势估计(GAE)
Args:
rewards: 奖励序列 [r0, r1, ..., r_{T-1}], 形状 (T,)
values: 状态价值估计 [V(s0), V(s1), ..., V(sT)], 形状 (T+1,)
dones: 终止标志 [d0, d1, ..., d_{T-1}], 形状 (T,)
gamma: 折扣因子
lam: GAE参数
Returns:
advantages: 优势估计, 形状 (T,)
returns: 目标回报, 形状 (T,)
"""
T = len(rewards)
advantages = np.zeros(T)
gae = 0.0
# 从后往前计算
for t in reversed(range(T)):
if dones[t]:
# 终止状态:没有下一个状态
delta = rewards[t] - values[t]
gae = delta # 终止状态后优势不传播
else:
# 非终止状态
delta = rewards[t] + gamma * values[t+1] - values[t]
gae = delta + gamma * lam * gae
advantages[t] = gae
# 计算目标回报(用于Critic训练)
returns = advantages + values[:T]
return advantages, returns
:PPO算法的核心技术与数学深度解析&spm=1001.2101.3001.5002&articleId=152207298&d=1&t=3&u=b4dd85094056404ea0f679c5e4213b69)
5134

被折叠的 条评论
为什么被折叠?



