Reinforcement learning 中,一个 action 不只带来眼前的 reward,还会改变后续能遇到的 state。这篇从轨迹的期望 return 出发,依次推导 REINFORCE、reward-to-go、baseline、actor-critic 和 GAE,回答如何从采样轨迹构造策略的梯度。
系列导读 · 下一篇
Problem setup
先明确策略在优化什么,再区分几类算法如何表示和改进这个策略。
Definition
我们把 ⟨𝑠𝑡,𝑎𝑡⟩ 打包起来,在 Markov 环境和只依赖当前 state 的策略下,其实它就构成了一个 Markov chain。记一条轨迹为 𝜏=(𝑠1,𝑎1,…,𝑠𝑇,𝑎𝑇,𝑠𝑇+1):
𝑝𝜃(𝜏)=𝑝(𝑠1)𝑇∏𝑡=1𝜋𝜃(𝑎𝑡∣𝑠𝑡)ℙ(𝑠𝑡+1∣𝑠𝑡,𝑎𝑡).
这里 𝜋𝜃(𝑎𝑡∣𝑠𝑡) 是策略,ℙ 是环境转移;初始状态分布与环境转移不依赖 𝜃。后文也把整条轨迹的分布 𝑝𝜃(𝜏) 简记为 𝜋𝜃(𝜏)。
对于 learning objective:
𝜃∗=argmax𝜃J(𝜃)=argmax𝜃𝔼𝜏∼𝜋𝜃[𝑟(𝜏)].
我们定义我现在在 𝑠𝑡,做了 action 𝑎𝑡,然后按照 𝜋 所得到的期望总 reward 为
Q𝜋(𝑠𝑡,𝑎𝑡)=𝔼𝜋[𝑇∑𝑡′=𝑡𝑟(𝑠𝑡′,𝑎𝑡′)∣𝑠𝑡,𝑎𝑡].
然后我们定义 V 表示现在我在 𝑠𝑡 的时候遵循 𝜋 所得到的期望总 reward:
V𝜋(𝑠𝑡)=𝔼𝜋[𝑇∑𝑡′=𝑡𝑟(𝑠𝑡′,𝑎𝑡′)∣𝑠𝑡]=𝔼𝑎𝑡∼𝜋(⋅∣𝑠𝑡)[Q𝜋(𝑠𝑡,𝑎𝑡)].
先考虑有限时域、不打折的 return;有限时域中把剩余时间也视为 state 的一部分,并令终止状态的 value 为 0。后面再引入 discount factor。
Types of Algorithms
- Policy Gradients:跟往常一样,就是求导然后去做优化。
- Value-based:去估计最优的 Q 或 V,然后通过这个推出 𝜋。
- Actor-critic:通过估计当前策略的 ˆQ 和 ˆV,然后用它们指导策略优化。
- Model-based RL:学习或使用环境的转移、reward 模型,再借助模型规划或优化策略。
Policy Gradient Algorithms
Direct policy differentiation
记整条轨迹的总 reward 为 𝑟(𝜏)=∑𝑇𝑡=1𝑟(𝑠𝑡,𝑎𝑡),我们想最大化它在当前策略下的期望:
J(𝜃)=𝔼𝜏∼𝜋𝜃[𝑟(𝜏)]=∫𝜋𝜃(𝜏)𝑟(𝜏)d𝜏.
采样得到一条 𝜏 后,很容易觉得:既然有它的概率 𝜋𝜃(𝜏),又有它的 reward 𝑟(𝜏),那就直接最大化两者的乘积。这里漏掉了积分:𝜋𝜃(𝜏)𝑟(𝜏) 只是被积函数在这条轨迹上的取值,目标 J(𝜃) 是对所有轨迹的积分。 如果能算出整个积分,直接对 J 求导当然可以;但只拿到一条采样轨迹时,直接对这个乘积求导,并不能给出整个目标梯度的无偏估计。
实际训练通常无法遍历所有轨迹,只能按当前策略采样。我们希望每条样本给出一个梯度,平均起来就能无偏地估计整个目标的梯度。下面推导的目的,就是把 ∇𝜃J(𝜃) 写成一个可以用采样估计的期望,从而确定每条样本应该贡献什么梯度。
沿用环境与 reward 不依赖 𝜃 的假设,在积分与求导可以交换的条件下,利用 ∇𝜃log𝜋𝜃(𝜏)=∇𝜃𝜋𝜃(𝜏)/𝜋𝜃(𝜏),得到 REINFORCE (Williams, 1992) 的梯度表达式:
∇𝜃J(𝜃)=∫𝑟(𝜏)∇𝜃𝜋𝜃(𝜏)d𝜏=∫𝜋𝜃(𝜏)∇𝜃𝜋𝜃(𝜏)𝜋𝜃(𝜏)𝑟(𝜏)d𝜏=𝔼𝜏∼𝜋𝜃[𝑟(𝜏)∇𝜃log𝜋𝜃(𝜏)].
这就告诉我们,对 𝜏∼𝜋𝜃,𝑟(𝜏)∇𝜃log𝜋𝜃(𝜏) 是所需的无偏梯度估计。为了用反向传播得到它,取下面的 loss (Achiam, 2018),求导时固定采到的轨迹和 reward:
ℓ𝜃(𝜏)=−𝑟(𝜏)log𝜋𝜃(𝜏),−∇𝜃ℓ𝜃(𝜏)=𝑟(𝜏)∇𝜃log𝜋𝜃(𝜏).
负号用于把最大化写成梯度下降。使用 log𝜋𝜃(𝜏) 的理由就在这里:这个 loss 的负梯度,在采样所用的策略参数处,是目标梯度的无偏估计。
实现时,由于初始状态分布和环境转移与 𝜃 无关,有
∇𝜃log𝜋𝜃(𝜏)=𝑇∑𝑡=1∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡).
因此,对一条轨迹,把实际采到的各步 action 的 log probability 相加,再乘总 reward 即可:
trajectory_log_prob = action_log_probs.sum()
loss = -trajectory_return.detach() * trajectory_log_prob
这里 trajectory_return 是总奖励,求导时作为常量;action_log_probs 保留策略参数的计算图。对一个 batch,再平均各条轨迹的 loss。这个估计虽然无偏,但 variance 很高,接下来考虑怎么减小它。
Reduce Variance
仔细观察这个式子,其实这玩意儿是 MLE 那个梯度对 𝑟(𝑠𝑡,𝑎𝑡) 加权了:
∇𝜃J(𝜃)=𝔼𝜏∼𝜋𝜃[𝑇∑𝑡=1Ψ𝑡∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)]
当前我们是有:Ψ𝑡=∑𝑇𝑡′=1𝑟(𝑠𝑡′,𝑎𝑡′)
Don't Let the Past Distract You
一种简单的方法来减小 variance,是我们令 Ψ𝑡=∑𝑇𝑡′=𝑡𝑟(𝑠𝑡′,𝑎𝑡′)
因为其实对于 𝑎𝑡 来说,他做啥对于 𝑡 之前的 reward 来说是不具有参考价值的。因此我们主要考虑后面的 reward。这玩意儿直觉上挺清楚的,但数学上想了半天才想明白为啥是对的。主要参考了这篇文章 (Achiam, 2018)。
证明的不造为啥让我想起了 MLE。主要用到的就是一个叫做 EGLP lemma 的东西(其实好像用这个 lemma 需要积分和导数的可交换性,貌似 (Hogg et al., 2013) 里写挺详细的):
𝔼𝑥∼ℙ𝜃[∇𝜃logℙ𝜃(𝑥)]=∫ℙ𝜃(𝑥)∇𝜃logℙ𝜃(𝑥)d𝑥=∫ℙ𝜃(𝑥)∇𝜃ℙ𝜃(𝑥)ℙ𝜃(𝑥)d𝑥=∇𝜃∫ℙ𝜃(𝑥)d𝑥=0
其实跟 MLE 是一样的嘛:
𝔼[𝜕𝜕𝜃logL(𝑥∣𝜃)]=0
其实我们是要证明嘟是:
𝔼𝜏∼𝜋𝜃[𝑇∑𝑡=1∑𝑡′<𝑡𝑟(𝑠𝑡′,𝑎𝑡′)∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)]=0
也就是要证明当 𝑡′<𝑡 这个时候:
𝔼𝑠𝑡,𝑎𝑡,𝑠𝑡′,𝑎𝑡′∼𝜋𝜃[𝑟(𝑠𝑡′,𝑎𝑡′)∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)]=0
那么中心思想其实就是咋来区分 𝑡′<𝑡 捏,我们考虑 𝑡′<𝑡 是先 reward,再选择:
𝔼𝑠𝑡′,𝑎𝑡′∼𝜋𝜃[𝑟(𝑠𝑡′,𝑎𝑡′)⋅𝔼𝑠𝑡,𝑎𝑡∼𝜋𝜃(⋅∣𝑠𝑡′,𝑎𝑡′)[∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)∣𝑠𝑡′,𝑎𝑡′]]
关键是先固定过去的历史,再对当前 action 取条件期望:给定 𝑠𝑡,有 𝔼𝑎𝑡∼𝜋𝜃(⋅∣𝑠𝑡)[∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)]=0。过去的 reward 可以和当前 state 相关,但不会由之后采样的 action 改写。
所以说最终结果是整个期望 0。
Introducing Baselines
另一个优化是我们考虑加入 baseline。这个直觉就更对了。就是我们考虑把 𝑟(𝑠,𝑎) 替换成 𝑟(𝑠,𝑎)−𝑏。这里减去的是梯度估计器中的 baseline,不是在改环境的 reward;baseline 不依赖当前 action 时,它乘上 score gradient 的期望为零。
不改变期望,不代表方差不变:baseline 的选择会改变梯度估计的波动。先看常数 baseline 的最优取值。
最小化梯度估计方差的常数 baseline
我们考虑
∇𝜃J(𝜃)=𝔼𝜏∼𝜋𝜃[∇𝜃log𝜋𝜃(𝜏)⋅(𝑟(𝜏)−𝑏)]
的方差(对于向量梯度,这里取各分量方差之和)
𝜎2=𝔼𝜏∼𝜋𝜃[‖∇𝜃log𝜋𝜃(𝜏)⋅(𝑟(𝜏)−𝑏)‖2]−‖𝔼𝜏∼𝜋𝜃[∇𝜃log𝜋𝜃(𝜏)⋅(𝑟(𝜏)−𝑏)]‖2=𝔼𝜏∼𝜋𝜃[‖∇𝜃log𝜋𝜃(𝜏)⋅(𝑟(𝜏)−𝑏)‖2]−‖𝔼𝜏∼𝜋𝜃[∇𝜃log𝜋𝜃(𝜏)⋅𝑟(𝜏)]‖2
我们解
𝜕𝜕𝑏𝜎2=𝜕𝜕𝑏𝔼𝜏∼𝜋𝜃[‖∇𝜃log𝜋𝜃(𝜏)⋅(𝑟(𝜏)−𝑏)‖2]=0
可以得到
𝑏=𝔼𝜏∼𝜋𝜃[‖∇𝜃log𝜋𝜃(𝜏)‖2⋅𝑟(𝜏)]𝔼𝜏∼𝜋𝜃[‖∇𝜃log𝜋𝜃(𝜏)‖2]
这啥捏,这其实是 reward 的加权期望。
但其实这个 baseline 挺难算的,所以我们通常不会用这个最优的 baseline。而是去找一个相对比较好的。
Actor Critic Methods
前面的 reward-to-go 和 baseline 都在调整每个 action 的梯度权重。接下来用 value function 估计这个权重:先得到 advantage,再讨论 critic 的训练和 GAE。
General Idea
我们回到式子
∇𝜃J(𝜃)≈1𝑁𝑁∑𝑖=1𝑇∑𝑡=1Ψ𝑖,𝑡∇𝜃log𝜋𝜃(𝑎𝑖,𝑡∣𝑠𝑖,𝑡).
我们观察这个 Ψ𝑡(先不考虑 baseline):Ψ𝑡=∑𝑇𝑡′=𝑡𝑟(𝑠𝑡′,𝑎𝑡′)。
我们发现一件事情,就是它其实是在估计 Q𝜋(𝑠𝑡,𝑎𝑡)。也就是我做了这个 action,之后继续按照 𝜋,会得到一个什么样的结果。这个和是 Q𝜋(𝑠𝑡,𝑎𝑡) 的一个无偏估计。
于是我们可以尝试 Ψ𝑡=Q𝜋(𝑠𝑡,𝑎𝑡)。我的理解是,如果能算出这个条件期望,就可以去掉后续轨迹采样带来的部分噪声。
然后我们考虑 baseline。我们大概这么想,就是某个操作比我现在的平均效果好,那么 Ψ𝑡 要大于 0,让它的概率增大。如果比我现在的 𝜋 还要垃圾,就减小这个 action 的概率。
所以我们考虑 𝑏=V𝜋(𝑠𝑡),于是我们定义:
A𝜋(𝑠𝑡,𝑎𝑡)=Q𝜋(𝑠𝑡,𝑎𝑡)−V𝜋(𝑠𝑡).
也就是做了这个操作,相比当前策略的平均表现能好多少。然后
∇𝜃J(𝜃)≈1𝑁𝑁∑𝑖=1𝑇∑𝑡=1A𝜋(𝑠𝑖,𝑡,𝑎𝑖,𝑡)∇𝜃log𝜋𝜃(𝑎𝑖,𝑡∣𝑠𝑖,𝑡).
在采样策略就是 𝜋=𝜋𝜃、advantage 使用真值或条件无偏估计的情况下,这东西是无偏的。那我们考虑怎么算这个 A𝜋(𝑠𝑡,𝑎𝑡)。
我们考虑
Q𝜋(𝑠𝑡,𝑎𝑡)=𝑟(𝑠𝑡,𝑎𝑡)+𝔼𝑠𝑡+1∼ℙ(⋅∣𝑠𝑡,𝑎𝑡)[V𝜋(𝑠𝑡+1)].
所以说
A𝜋(𝑠𝑡,𝑎𝑡)=𝔼𝑠𝑡+1∼ℙ(⋅∣𝑠𝑡,𝑎𝑡)[𝑟(𝑠𝑡,𝑎𝑡)+V𝜋(𝑠𝑡+1)−V𝜋(𝑠𝑡)].
也就是说,𝑟(𝑠𝑡,𝑎𝑡)+V𝜋(𝑠𝑡+1)−V𝜋(𝑠𝑡) 是对 A𝜋(𝑠𝑡,𝑎𝑡) 的一个条件无偏估计。这里需要真实的 V𝜋;换成学出来的近似值后,一般会引入 bias。
也就是我们现在的问题来到了怎么搞这个 V𝜋,最直接的方法是大力去做,然后求平均。
当然,更成熟的想法是我们可以训一个模型 𝜙 去预测这个 V𝜋。我们考虑 loss,一种直接的方法是:
L(𝜙)=12𝑁∑𝑖=1𝑇∑𝑡=1∥ˆV𝜋𝜙(𝑠𝑖,𝑡)−𝑇∑𝑡′=𝑡𝑟(𝑠𝑖,𝑡′,𝑎𝑖,𝑡′)∥2.
但是我们考虑有没有方差更低一些的方法,就是用 𝑟(𝑠𝑡,𝑎𝑡)+ˆV𝜋𝜙(𝑠𝑡+1) 来代替整个求和。这就变成了 TD error 的平方:
L(𝜙)=12𝑁∑𝑖=1𝑇∑𝑡=1∥ˆV𝜋𝜙(𝑠𝑖,𝑡)−sg[𝑟(𝑠𝑖,𝑡,𝑎𝑖,𝑡)+ˆV𝜋𝜙(𝑠𝑖,𝑡+1)]∥2.
这里 sg 表示 stop-gradient:当前更新把 bootstrap target 当作固定目标。它降低了对完整 Monte Carlo return 的依赖,但 target 本身的估计误差也会传过来。
Introducing Discount Factors
有时候我们会考虑 𝑇→∞ 的情况。为了在 reward 有界时让总 return 也是有穷的,我们可以取 0≤𝛾<1,增加一个 discount factor。这个其实是比较直觉的,因为现在给你一块钱和以后给你一块钱,肯定选马上要。
𝑟(𝜏)=𝑇∑𝑡=1𝛾𝑡−1𝑟(𝑠𝑡,𝑎𝑡).
那么我们就需要稍稍改一改式子。此时 V𝜋,𝛾 从当前时刻开始计算折扣 return:
A𝜋,𝛾(𝑠𝑡,𝑎𝑡)=𝔼𝑠𝑡+1∼ℙ(⋅∣𝑠𝑡,𝑎𝑡)[𝑟(𝑠𝑡,𝑎𝑡)+𝛾V𝜋,𝛾(𝑠𝑡+1)−V𝜋,𝛾(𝑠𝑡)].
这时候其实我们在估计导数的时候,要小心折扣的位置。直接用整条轨迹的 return,可以写成:
∇𝜃J(𝜃)≈1𝑁𝑁∑𝑖=1(𝑇∑𝑡=1𝛾𝑡−1𝑟(𝑠𝑖,𝑡,𝑎𝑖,𝑡))(𝑇∑𝑡=1∇𝜃log𝜋𝜃(𝑎𝑖,𝑡∣𝑠𝑖,𝑡)).
利用 reward-to-go,也可以使用下面的估计量:
ˆ𝑔=1𝑁𝑁∑𝑖=1𝑇∑𝑡=1𝛾𝑡−1∇𝜃log𝜋𝜃(𝑎𝑖,𝑡∣𝑠𝑖,𝑡)(𝑇∑𝑡′=𝑡𝛾𝑡′−𝑡𝑟(𝑠𝑖,𝑡′,𝑎𝑖,𝑡′)).
外层的 𝛾𝑡−1 与 return 内的 𝛾𝑡′−𝑡 作用不同,不能直接漏掉。两种估计量的期望相同,同一批轨迹上算出的数值不必相同。Thomas (Thomas, 2014) 专门讨论了 discount 与 policy gradient bias 的问题,有空填坑。
Implementation Details
在真正写代码的时候,我们需要构造一个能产生 policy gradient 的 surrogate。和前面 REINFORCE 的 loss 一样,考虑一个看似无意义的函数:
̃J(𝜃)=1𝑁𝑁∑𝑖=1𝑇∑𝑡=1sg[ˆA𝜙(𝑠𝑖,𝑡,𝑎𝑖,𝑡)]log𝜋𝜃(𝑎𝑖,𝑡∣𝑠𝑖,𝑡).
求导时,采到的 state、action 和 ˆA𝜙 都作为常量,所以这个 ∇𝜃̃J(𝜃) 就是相应的 actor gradient 估计。也就是说,我们其实是借助自动求导程序去计算前面推出来的更新。它的数值不是 J(𝜃);critic 若有误差,也不能直接声称这个梯度无偏。对于前面从初始状态定义的 discounted objective,还要给第 𝑡 项乘上 𝛾𝑡−1。
也就是说我们要训练两个网络 𝜃 和 𝜙。用当前策略采到的数据集 D𝑘,一轮更新里的两个目标可以写成:
L𝑉(𝜙)=̂𝔼(𝑠,𝑎,𝑟,𝑠′)∈D𝑘[12∥sg[𝑟+𝛾ˆV𝜙(𝑠′)]−ˆV𝜙(𝑠)∥2],L𝜋(𝜃)=−̂𝔼(𝑠,𝑎)∈D𝑘[sg[ˆA𝜙(𝑠,𝑎)]log𝜋𝜃(𝑎∣𝑠)].
两者都用梯度下降;actor loss 前面的负号对应最大化 surrogate。这里沿用不额外写外层时间权重的实现记法,具体采样与折扣约定仍要和目标一致。
Generalized Advantage Estimation
Actor-critic 用 advantage 判断一个 action 比当前策略的平均表现好多少。实际训练时,真实的 Q 和 V 都未知,我们需要从采到的轨迹和 critic 的预测中构造 ˆA𝑡。
我们需要决定观察多少步真实 reward,再让 critic 预测剩下的收益。只观察一步,估计很依赖 critic;一直观察到终点,又会混入后续 action 和环境带来的随机性。Schulman 等人提出的 Generalized Advantage Estimation(GAE) (Schulman et al., 2015) 把不同步数的估计结合起来,用 𝜆 调节两者的取舍。
From one step to multiple steps
固定采样策略 𝜋 和 discount factor 𝛾,记 𝑟𝑡=𝑟(𝑠𝑡,𝑎𝑡),把 critic 对 V𝜋,𝛾(𝑠𝑡) 的预测简记为 𝑣𝑡=ˆV𝜙(𝑠𝑡)。在同一条轨迹上,我们可以在不同位置交给 critic 接手:
每行都是“已观察的收益 + 预测的剩余收益 − 当前状态的 baseline”。GAE 接下来会把这些不同长度的估计加权平均。
观察 𝑛 步后,前半段用实际 reward,后半段用 𝑣𝑡+𝑛 补足。这种用估计值预测尚未观察到的收益的做法叫做 bootstrap。再减去当前状态的 baseline 𝑣𝑡,得到 𝑛-step advantage estimate:
ˆA(𝑛)𝑡=𝑛−1∑𝑙=0𝛾𝑙𝑟𝑡+𝑙⏟observed rewards+𝛾𝑛𝑣𝑡+𝑛⏟bootstrap−𝑣𝑡.
𝑛=1 时,它就是 TD residual:
𝛿𝑡=𝑟𝑡+𝛾𝑣𝑡+1−𝑣𝑡.
增加 𝑛,就是用更多实际发生的 reward 替换 critic 对未来的预测。这样通常能减少 bootstrap 误差的影响,但也纳入了更多后续轨迹的随机性。
Mixing the horizons
GAE 为这些不同长度的估计分配指数衰减的权重。先考虑 0≤𝜆<1:
ˆAGAE(𝛾,𝜆)𝑡=(1−𝜆)∞∑𝑛=1𝜆𝑛−1ˆA(𝑛)𝑡.
这些权重之和为 1。较小的 𝜆 把权重集中在短步数估计上;较大的 𝜆 让长步数估计参与得更多。对于已经终止的 episode,可以把终止后的 reward 和 value 都延拓为 0。
把各个 𝑛-step estimate 展开并合并,GAE 就变成了 TD residual 的折扣和:
ˆAGAE(𝛾,𝜆)𝑡=∞∑𝑙=0(𝛾𝜆)𝑙𝛿𝑡+𝑙=𝛿𝑡+𝛾𝜆𝛿𝑡+1+(𝛾𝜆)2𝛿𝑡+2+⋯.
前一个式子说明 GAE 如何结合不同步数的估计,后一个式子更方便计算。𝜆=1 时使用后一个表达式,或取前一个表达式在 𝜆→1 时的极限。
从 n-step average 到 TD residual sum
把 TD residual 展开后,中间的 value 项相消:
ˆA(𝑛)𝑡=𝑛−1∑𝑙=0𝛾𝑙𝛿𝑡+𝑙=𝑛−1∑𝑙=0𝛾𝑙𝑟𝑡+𝑙+𝛾𝑛𝑣𝑡+𝑛−𝑣𝑡.
𝛿𝑡+𝑙 出现在所有 𝑛≥𝑙+1 的估计里,因此它在加权平均中的系数是
(1−𝜆)𝛾𝑙∞∑𝑛=𝑙+1𝜆𝑛−1=(𝛾𝜆)𝑙.
若只采到后续 𝐻 步,有限长度版本把剩余权重交给最长的估计:
ˆAGAE,𝐻𝑡=(1−𝜆)𝐻−1∑𝑛=1𝜆𝑛−1ˆA(𝑛)𝑡+𝜆𝐻−1ˆA(𝐻)𝑡=𝐻−1∑𝑙=0(𝛾𝜆)𝑙𝛿𝑡+𝑙.
其中 𝐻=1 时只有 ˆA(1)𝑡。最长那一项仍可以在采样边界使用 critic 的预测。
What λ controls
| 𝜆 | 使用的信息 | 主要取舍 |
|---|
| 0 | 一步 reward 和下一状态的 value,ˆA𝑡=𝛿𝑡 | 通常方差较低,更依赖 critic 的准确性 |
| 0<𝜆<1 | 不同步数估计的加权平均 | 在 bootstrap 误差和轨迹采样噪声之间折中 |
| 1 | 若采到真正终止,使用完整 discounted return 减去 𝑣𝑡 | 后续收益完全来自采样,通常方差较高 |
Bootstrap 可能把 critic 的预测误差带入 policy gradient。若 critic 恰好等于真实的 V𝜋,𝛾,一步 TD 就已经是 advantage 的条件无偏估计;在同样的采样与边界条件下,其他 𝜆 也不会额外引入这种 bias。
𝛾 和 𝜆 的作用不同:𝛾 定义本节要估计的 discounted return;固定 𝛾 后,𝜆 调节估计这个量时观察多长的轨迹。改变 𝜆 不会改变真实 advantage 的定义。
Advantage bias 与 policy-gradient bias
GAE 最终要放进 actor 的梯度里,因此还要区分 advantage 数值的误差与它给 policy gradient 带来的 bias。原论文把满足下面条件的估计量称为 𝛾-just:
𝔼[ˆA𝑡∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)]=𝔼[A𝜋𝜃,𝛾(𝑠𝑡,𝑎𝑡)∇𝜃log𝜋𝜃(𝑎𝑡∣𝑠𝑡)].
当 𝑣𝑡=V𝜋,𝛾(𝑠𝑡) 时,
𝔼[𝛿𝑡∣𝑠𝑡,𝑎𝑡]=A𝜋,𝛾(𝑠𝑡,𝑎𝑡).
此时一步估计已经满足要求。使用近似 critic 并且 𝜆<1 时,bootstrap 误差一般会传入 policy gradient。
记完整的 discounted return 为 𝐺𝑡。当 𝜆=1 且采到真正终止时,ˆA𝑡=𝐺𝑡−𝑣𝑡。即使 𝑣𝑡 不准确,𝐺𝑡 仍是 discounted Q 的条件无偏估计,而 𝑣𝑡 是不依赖当前 action 的 baseline,所以这个估计量仍是 𝛾-just。但它的条件期望是 Q𝜋,𝛾(𝑠𝑡,𝑎𝑡)−𝑣𝑡,未必等于真实 advantage。
这里固定采样策略,并把 critic 当作给定的函数。𝛾-just 讨论的是 discounted policy-gradient 项;对于前文从初始状态定义的 discounted objective,仍沿用相应的外层时间权重。
Computing GAE on a rollout
实际收集到的轨迹是有限的。设最后一个 action 是 𝑎𝑇,下一状态为 𝑠𝑇+1。从后往前计算即可:
ˆA𝑡=𝛿𝑡+𝛾𝜆ˆA𝑡+1,ˆA𝑇+1=0.
这里的 ˆA𝑇+1=0 表示没有更多已采样的 TD residual;未来收益仍通过最后一个 𝛿𝑇 中的 𝑣𝑇+1 进入估计。边界 value 按轨迹停止的原因确定:
- 真正终止:未来没有 reward,令 𝑣𝑇+1=0。
- rollout 收集结束或外部 time limit 截断:任务本可继续,使用停止前最后一个状态的 critic 预测作为 𝑣𝑇+1。
Spinning Up 的 PPOBuffer 实现 就通过最后一个 value 处理这两种情况。Gymnasium (Farama Foundation, n.d.) 用 terminated 和 truncated 区分真正终止与外部截断;任务本身定义的有限时域终点属于前者。
有限 rollout 下,即使 𝜆=1,仍有
ˆA𝑡=𝑇−𝑡∑𝑙=0𝛾𝑙𝑟𝑡+𝑙+𝛾𝑇−𝑡+1𝑣𝑇+1−𝑣𝑡.
采到真正终止时,边界项为零,才得到纯 Monte Carlo return 减 baseline;截断时则保留 bootstrap。
下面用普通列表实现单段 rollout 的计算。rewards 长度为 𝑇,values 长度为 𝑇+1,最后一个元素已经按上面的规则设置。它们都是采样时记录并固定下来的数值。
def gae(rewards, values, gamma, lam):
assert len(values) == len(rewards) + 1
advantages = [0.0] * len(rewards)
carry = 0.0
for t in reversed(range(len(rewards))):
delta = rewards[t] + gamma * values[t + 1] - values[t]
carry = delta + gamma * lam * carry
advantages[t] = carry
return advantages
多条 episode 应分别计算;截断后 reset 得到的新初始状态也不属于上一段轨迹,不能把它的 value 或 advantage 接到上一段。
例如,一条三步后终止的轨迹只有最后一步得到 reward。取 𝛾=0.9、𝜆=0.8,因此 𝛾𝜆=0.72,并设终止状态 𝑣4=0:
| 𝑡 | 𝑟𝑡 | 𝑣𝑡 | 𝛿𝑡 | ˆA𝑡 |
|---|
| 1 | 0 | 0.4 | 0.05 | 0.28616 |
| 2 | 0 | 0.5 | 0.04 | 0.328 |
| 3 | 1 | 0.6 | 0.4 | 0.4 |
从最后一步开始,先得到 ˆA3=0.4,再算 ˆA2=0.04+0.72×0.4=0.328,最后得到 ˆA1=0.05+0.72×0.328=0.28616。终点的信息通过这次反向递推传到更早的 action。
训练 actor 时,把算好的 advantage 当作固定权重,代入前面的 policy-gradient loss 或 PPO objective。GAE 负责构造这个权重;下一篇的 TRPO 和 PPO 则控制策略如何利用它更新。
系列导读 · 下一篇
References
Achiam, J. (2018).
Spinning Up in Deep Reinforcement Learning.
spinningup.openai.com
Farama Foundation. (n.d.).
Handling Time Limits.
gymnasium.farama.org
Hogg, R. V., McKean, J. W., & Craig, A. T. (2013).
Introduction to Mathematical Statistics (7th ed.). Pearson.
scholarworks.wmich.edu
Schulman, J., Moritz, P., Levine, S., Jordan, M., & Abbeel, P. (2015). High-dimensional continuous control using generalized advantage estimation.
arXiv Preprint arXiv:1506.02438.
arxiv.org
Thomas, P. (2014). Bias in natural actor-critic algorithms.
International Conference on Machine Learning, 441–448.
proceedings.mlr.press
Williams, R. J. (1992). Simple statistical gradient-following algorithms for connectionist reinforcement learning.
Machine Learning,
8(3–4), 229–256.
doi.org