在阅读本文前,需要了解 Policy Gradient Theorem,主要包括策略梯度的求导,强化学习的目标函数。
Policy Gradient Theorem
策略梯度一般的形式如下:
∇θJ(θ)=Eτ∼P(⋅;θ)[t=0∑T−1Ψt∇θlnπθ(at∣st)]
其中,Ψt 可以有如下取值:
- G(τ): 整个轨迹上的回报
- Gt: 自动作 at 后的回报
- Gt−b(st): 自动作 at 后回报的 baseline 版本
- Qπ(st,at): 动作价值函数
- Aπ(st,at)=Qπ(st,at)−Vπ(st): 优势函数
- δt=rt+γVπ(st+1)−Vπ(st): TD Error
后文介绍的各算法都是围绕这个基本形式展开,而这一公式主要在 Policy Gradient Theorem 一文展开详细的推导。
REINFORCE
REINFORCE (Monte-Carlo policy gradient) 通过采集完整的轨迹,并使用轨迹中的实际回报 Gt 来近似策略梯度。算法如下:
- Initialize the policy parameter θ
- Generate an episode τ=(s0,a0,r0,s1,a1,…,sT) following policy πθ
- For t=0,1,…,T−1:
- Value Update: Gt=∑k=tT−1γk−trk
- Policy Update: θ←θ+α∇θlnπθ(at∣st)Gt
REINFORCE 的特点在于无偏与高方差。在介绍之前,通过一个打靶比喻,直观地感受强化学习中的偏差(Bias)与方差(Variance)。
- Low Bias & Low Variance:每次射击都紧密地聚集在靶心。
- High Bias:射击系统性地偏离靶心。每次射击都无法打在靶心。说明瞄准系统(模型)本身就有问题。无论多少射击,都估计不准靶心位置。
- High Variance & Low Bias:射击点平均下来是在靶心周围,但每次射击的位置都非常分散,毫无规律。这说明瞄准过程(估计方法)非常不稳定。但可以通过足够多的射击来估计靶心位置。
接下来,我们详细分析 REINFORCE 的无偏性与高方差。
无偏
REINFORCE 直接使用蒙特卡洛采样得到的 Gt 作为回报的估计。虽然单次采样的 Gt 可能与期望值 Qπ(st,at) 相差甚远,但只要我们采样足够多的轨迹,Gt 的平均值就会收敛到其真实的期望值 Qπ(st,at)。因此,使用 Gt 计算出的梯度在期望上是等于真实梯度的,所以它是无偏的。
高方差
方差的来源在于 Gt 的计算方式,这里的 Gt 是从时间步 t 到轨迹结束 T 所有奖励的总和:
Gt=Gt:T=Rt+γRt+1+…+γT−1−tRT−1
Gt 的值是一个很长的随机变量序列和,随机性来源包括:
- 策略的随机性:未来的每个动作 ak(k≥t) 都是从策略 πθ(⋅∣sk) 中随机采样的。
- 环境的随机性:未来的每个状态转移 sk+1∼P(⋅∣sk,ak) 也可能是随机的。
这一长串的随机事件累积起来,导致最终 Var(Gt) 非常大,从而使得梯度估计的方差非常高
Actor-Critic
Actor-Critic 算法(更合适的说法是框架)本质上是一个神经网络(或两个共享部分权重的网络)同时学习两个任务:策略(Actor)和价值(Critic):
- Actor: πθ(a∣s) 由参数为 θ 的网络表示,输入状态 s,输出一个动作 a 的概率分布。
- Critic: Vw(s) 由参数为 w 的网络表示,输入状态 s,输出该状态的价值。
在实践中,Actor 和 Critic 网络通常共享大部分底层网络层,只在最后一层分开输出策略和价值,因此参数可以统一表示为 θ(即 θ 同时包含 Actor 和 Critic 的参数)。这里为了概念清晰,我们暂时分开表示为 θ 和 w。
直观地理解,一个演员(Actor)在台上表演,同时有一个评论家(Critic)在台下评估他的表现。演员根据评论家的反馈来调整自己的表演,而评论家则通过观察演员的表演和观众的反应来提升自己的评判水准。
对于 Actor,我们希望其执行能够获得更高优势的动作。目标函数表示如下:
θmaxJ(θ)=Et[A^tlnπθ(at∣st)]
此时的算法称为 A2C (Advantage Actor-Critic),我们使用 TD Error 来近似单步优势 A^t:
A^t=δt=rt+γVw(st+1)−Vw(st)
其中,rt 是采样得到的即时奖励,Vw(⋅) 通过 Critic 网络进行近似。此时,我们将优势 A^t 视为一个常数,即:不会通过它反向传播梯度到 Critic 网络。这是因为,这是因为 Actor 的职责 " 迎合 " Critic 的评价(即 A^t)来更新自己,而不是 " 改变 " 评价标准,反过来去影响这个信号的计算。
此外,我们使用了单步优势,所以可直接按照单步方法进行更新。式中的 Et[⋅] 表示对同一个 batch 中的所有单步数据求期望,这也表明整体算法流程是 " 数据采样 - 参数更新 " 交互进行的。这里我们展开 Et[⋅],给出更严谨的目标函数表示:
θmaxJ(θ)=Est+1∼P(⋅∣st,at),at∼πθ(⋅∣st)[A^tlnπθ(at∣st)]
对于 Critic,我们希望其尽可能准确地估计状态价值。换句话说,其目标是为了拟合理论上的真实状态价值函数 Vπ(s)。标准的监督学习使用均方误差(Mean Squared Error, MSE)损失函数:
θminL(w)=21Et[(Vπ(st)−Vw(st))2]
问题在于,我们永远无法知道 Vπ(s) 这个真值。因此,我们必须用一个从真实采样数据中计算出来的 target V^π(s) 来替代它,不同 V^π(s) 的选择就构成了不同的算法。
根据状态价值函数的定义 Vπ(s)=Eπ[Gt∣St=s] 可知,Gt 是对 Vπ(st) 的一个无偏估计。回顾前面提及的 REINFORCE 算法,虽然蒙特卡洛回报对 Vπ(st) 的估计是无偏的,但是方差较大。
根据 Bellman Equation:
Vπ(s)=Ea∼π(⋅∣s)[Es′∼P(⋅∣s,a)[TD TargetRt+γVπ(s′)]]=Et[Rt+γVπ(s′)]
TD Target 是理论真值 Vπ(s) 的无偏估计。因此,目标函数可以定义为最小化其当前步预测值 Vw(st) 与基于下一步真实情况的新预测值 TD Target rt+γVw(st+1) 之间的差异:
wminL(w)=21Et[(rt+γVw(st+1)−Vw(st))2]
我们发现,Critic 的目标就是最小化 TD Error δt 的平方。因此,当计算完 δt 后,不仅能用于近似单步优势 A^t,还能够用于计算 Critic 的损失。与 Actor 类似,依然使用单步数据进行训练。
最后,总结训练步骤如下:
- Initialize the parameter θ, w
- For t=0,1,…,T−1:
- Sample the action at∼πθ(a∣s) and then observe rt, st+1
- Calculate the TD error: δt=rt+γVw(st+1)−Vw(st)
- Actor (Policy Update): θt+1←θt+αθA^t∇θlnπθt(at∣st)
- Critic (Value Update): wt+1←wt−αw∇wL(w)
A2C 的特点在于有偏与低方差
低方差
A2C 不再使用完整的未来回报 Gt,而是使用 TD Error δt 来指导 Actor 更新。这个估计值仅依赖于一步的真实奖励 rt 与下一状态 st+1,将未来的期望回报直接使用 Vw(st+1) 来近似。因此,A2C 无需经历漫长的随机过程,极大降低了随机性。
有偏
A2C 偏差的来源正是降低方差的 Critic 网络 Vw(s),该网络是真实状态价值函数 Vπ(s) 的一个近似。在训练的任何时刻,尤其是早期,Vw(s) 几乎不可能是完美的,即 Vw(s)=Vπ(s)。具体来说:
- 假设 Critic 网络可以准确衡量 π(⋅∣s) 的价值,即:Vw(s)≈Vπ(s),那么 δt 是真实优势函数 Aπ(s,a) 的无偏估计,不会产生系统性的偏差
- 假设 Critic 网络无法准确衡量 π(⋅∣s) 的价值,即:Vw(s)=Vπ(s),那么 δt 是真实优势函数 Aπ(s,a) 的有偏估计。尤其是在训练早期,Critic 网络尚未收敛时,Vw(s) 对 Vπ(s) 的近似都是偏离真值的,引入了系统性的偏差。
然而,尽管初始时 Critic 是有偏的,但随着训练的进行,Critic 会越来越准,即:Vw(s)→Vπ(s),这个偏差也会越来越小。为了更好地平衡偏差与方差,下节将介绍 GAE (Generalized Advantage Estimation) 来解决这一问题。
Generalized Advantage Estimator (GAE)
在 A2C 中,我们使用 TD Error 来估计单步优势 A^t:
A^t=δt=rt+γVw(st+1)−Vw(st)
由于 Critic 网络 Vw(s) 对真实状态价值函数 Vπ(s) 的近似可能不准,所以引入了系统性的偏差。
这里讨论的偏差,指的是对最终策略梯度 ∇θJ(θ) 估计的偏差,而不是对优势函数 Aπ(s,a) 估计的偏差。因此,对于 A^t(k),尽管最后一项 Vw(st),可能由于 Critic 网络的不准确性,带来优势估计的偏差,但对于最终策略梯度的估计并没有影响。因为 Vw(st) 仅依赖当前状态 st,可视为 baseline。我们已经证明 baseline 对策略梯度的期望无影响。
直观上,为了减少这一偏差,我们可以尽可能少地使用 Vw(s) 去近似,尽可能多地信任实际采样结果。为此,不妨将 Vw(st+1) 递推展开,便可得到以下一系列优势函数的近似:
A^t(1)A^t(2)⋯A^t(k)⋯A^t(∞)=rt+γVw(st+1)−Vw(st)=rt+γrt+1+γ2Vw(st+2)−Vw(st)=⋯=l=0∑k−1γlrt+l+γkVw(st+k)−Vw(st)=⋯=rt+γrt+1+γ2rt+2+⋯−Vw(st)=l=0∑∞γlrt+l−Vw(st)=G^t(1)−Vw(st)=G^t(2)−Vw(st)=G^t(k)−Vw(st)=G^t(∞)−Vw(st)
注意到:
- 当 k=1 时,对应于 A2C 算法,或者称为 1-step TD 估计
- 低方差:只依赖于一步的随机性
- 高偏差(有偏):只有 rt 是实际采样得到的客观事实,而绝大部分的未来价值都被压缩在可能不准确的 Critic Vw(st+1) 这个主观猜测里
- 当 k→∞ 时,对应于 REINFORCE with baseline 算法,或者称为蒙特卡洛估计
- 高方差:累积了整条轨迹的随机性
- 低偏差(无偏):使用真实的奖励序列来近似回报 G^t(∞)=∑l=0∞γlrt+l
- 当 k 逐渐增加时,
- 方差逐渐增大:引入的随机变量 rt+l 逐渐增多,因而方差逐渐增大
- 偏差逐渐减小:回报 G^t(k)=∑l=0k−1γlrt+l+γkVw(st+k) 的前 k 步都是实际采样得到的奖励序列,只有在 k 步之后,才使用 Vw(st+k) 进行近似
因此,为了更好的平衡偏差与方差,GAE (Generalized Advantage Estimator) 通过引入一个平衡因子 λ∈[0,1] 来权衡 bias-variance tradeoff。在正式给出定义前,我们尝试将 k-step 优势使用 TD Error 来表示:
A^t(1)A^t(2)⋯A^t(k)⋯A^t(∞)=rt+γVw(st+1)−Vw(st)=δt=rt+γrt+1+γ2Vw(st+2)−Vw(st)=rt+γVw(st+1)−Vw(st)+γrt+1+γ2Vw(st+2)−γVw(st+1)=(rt+γVw(st+1)−Vw(st))+γ(rt+1+γVw(st+2)−Vw(st+1))=δt+γδt+1=⋯=δt+γδt+1+…+γk−1δt+k−1=l=0∑k−1γlδt+l=⋯=l=0∑∞γlδt+l
GAE 被定义为所有 k-step 优势估计的指数加权平均:
A^tGAE(γ,λ)=(1−λ)(A^t(1)+λA^t(2)+λ2A^t(3)+…)=(1−λ)(δt+λ(δt+γδt+1)+λ2(δt+γδt+1+γ2δt+2)+⋯)=(1−λ)(δt(1+λ+λ2+⋯)+γδt+1(λ+λ2+…)+…)=(1−λ)(δt1−λ1+(γλ)δt+11−λ1+…)=l=0∑∞(γλ)lδt+l
观察上式可知,
- 当 λ=0 时,A^tGAE(γ,0)=A^t(1)=δt 退化成 A2C 算法,有偏低方差
- 当 λ=1 时,A^tGAE(γ,1)=A^t(∞)=G^t(∞)−Vw(st) 退化成 REINFORCE with baseline 算法,无偏高方差
也就是说,λ→0 时,方差越小,偏差越大;λ→1 时,方差越大,偏差越小。
为了更深入地探讨 GAE 的本质,我们引入对 λ-return 的介绍。与 GAE 类似,λ-return 被定义为所有 n-step 回报 Gt(n) 的指数加权平均:
Gtλ=(1−λ)(Gt(1)+λGt(2)+λ2Gt(3)+⋯)=(1−λ)n=1∑∞λn−1Gt(n)
观察上式可知,
- 当 λ=0 时,G^tλ=0=G^t(1)=rt+γVw(st+1) 退化单步 TD Target
- 当 λ=1 时,G^tλ=1=G^t(∞) 退化成蒙特卡洛回报(这里不给出严谨证明)
直观地,我们感觉到 A^tGAE(γ,λ)=G^tλ−Vw(st),GAE 就是用 λ-return G^tλ 作为价值目标,然后减去 baseline Vw(st) 得到的优势函数估计。接下来,我们利用 A^tGAE(γ,λ) 与 Gtλ 的定义进行推导:
A^tGAE(γ,λ)=(1−λ)n=1∑∞λn−1A^t(n)=(1−λ)n=1∑∞λn−1(G^t(n)−Vw(st))=(1−λ)n=1∑∞λn−1G^t(n)−(1−λ)n=1∑∞λn−1Vw(st)=(1−λ)n=1∑∞λn−1G^t(n)−Vw(st)=G^tλ−Vw(st)
这里的推导涉及了几何级数的运算:
(1−λ)n=1∑∞λn−1=(1−λ)⋅1−λ1=1
具体过程不详细给出。
接下来,我们证明 λ-return Gtλ 是对 Vπ(st) 的无偏估计。在前文,我们已经证明了 n-step return Gt(n) 是对 Vπ(st) 的无偏估计。由 Gtλ 的定义与期望的线性性质可以推导:
Eπ[Gtλ∣St=st]=Eπ[(1−λ)n=1∑∞λn−1Gt(n)∣St=st]=(1−λ)n=1∑∞λn−1Eπ[Gt(n)∣St=st]=(1−λ)n=1∑∞λn−1⋅Vπ(st)=Vπ(st)⋅((1−λ)n=1∑∞λn−1)=Vπ(st)⋅1=Vπ(st)
故 Gtλ 是对 Vπ(st) 的无偏估计。注意,当使用 Vw(st) 进行近似时,G^tλ 对 Vπ(st) 近似的偏差方差变化,与 A^tGAE(γ,λ) 对 Aπ(st,at) 的变化一致:
- λ→0 时,方差越小,偏差越大;
- λ→1 时,方差越大,偏差越小。
最后,我们来探讨 GAE 的计算方法。尽管 GAE 的无限求和公式在理论上很完美,但在实际计算中并不可行。幸运的是,它可以被写成一个反向迭代的形式。假设轨迹 τ 长度为 T,GAE 可以从 t=T−1 向前遍历到 0 进行递推计算:
A^tGAE(γ,λ)=δt+γλA^t+1GAE(γ,λ)
在一次轨迹采样结束后,可以计算所有时间步的 TD Error δt。关注最后一个时刻 T−1,由于回合已经结束,进而未来期望收益 Vw(sT) 与未来优势 A^TGAE(γ,λ) 均为 0,因此 δT−1=rT−1+γVw(sT)−Vw(sT)=rT−Vw(sT−1),而 A^T−1GAE(γ,λ)=δT−1+γλ⋅0=δT−1=rT−1−Vw(sT−1)。rT−1 由环境给出,而 Vw(sT−1) 由 Critic 网络给出,因而 A^T−1GAE(γ,λ) 就可以计算。从后往前扫描一遍,就能计算出所有时间步的 GAE。
当计算完 GAE 后,我们可以根据 GAE 与 λ-return 的关系,进而计算出 λ-return:
G^tλ=A^tGAE(γ,λ)+Vw(st)
后续便可作为 Critic 网络的 target。
Importance Sampling
本文不讨论 on-policy 与 off-policy 的严谨分类,更多关注具体的算法步骤。
此前介绍的算法,如 REINFORCE, A2C 面临一个核心问题:样本利用率低。这些算法要求用于更新策略的样本必须由当前策略 πθ 产生,这意味着每当策略参数 θ 更新后,之前采集的所有样本都必须被丢弃,Agent 需要使用新的策略重新与环境交互,来收集新的样本。而这一过程在很多应用中时间成本非常高,例如 LLMs 的推理。
为了解决这一问题,我们希望能够复用旧策略 πθold 采集的数据来更新当前策略 πθ,大致步骤如下:
- 假设某次参数更新后得到策略 πθold
- 使用策略 πθold 与环境交互收集数据
- 将收集到的数据重复使用 k 次,即:πθold→πθ1→⋯→πθk
- k 次更新后,令 πθold←πθk。重复 1-4,直至达到设定的停止条件。
重要性采样允许我们在给定来自一个分布 p(⋅) 的样本 x 时,估计另一个分布 q(⋅) 下的某个函数 f(x) 的期望值,基本思想如下:
Ex∼q(⋅)[f(x)]=∫q(x)f(x)dx=∫p(x)q(x)p(x)f(x)dx=Ex∼p(⋅)[p(x)q(x)f(x)]
其中,比值 q(x)/p(x) 称为重要性权重。该权重修正了由于在不同分布 p(⋅) 上采样而引入的偏差。
接下来,我们将重要性采样应用至 A2C 算法,如下:
∇θJ(θ)=Eτ∼πθold[πθold(at∣st)πθ(at∣st)A^t∇θlnπθ(at∣st)]
其中,τ∼πθold 意味着该批次数据由旧策略 πθold 收集而来。注意,这里我们只给出了 Actor 的梯度更新。
实际上,重要性采样存在一个问题:方差过高。如果重要性权重突然变得非常大,即:新旧策略对某一动作的概率分布差异较大(例如:新策略对某个动作的概率远大于旧策略),那么该样本就会主导整个梯度的计算,导致更新极不稳定。为了解决这一问题,PPO (Proximal Policy Optimization) 算法被提出。
Proximal Policy Optimization (PPO)
PPO 的核心思想在于:限制新旧策略之间的差异,防止重要性权重偏离 1 太远。对于限制方法,PPO 存在两种实现变体:PPO-Clip 与 PPO-Penalty。为了公式表示的简洁,我们引入符号 rt(θ) 来表示新旧策略概率比率:
rt(θ)=πθold(at∣st)πθ(at∣st)
PPO-Clip
损失函数如下:
LCLIP(θ)=−Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中,clip(rt(θ),1−ϵ,1+ϵ) 是一个裁剪函数,用于将概率比率 rt(θ) 限制在 [1−ϵ,1+ϵ] 的区间内。这里的 ϵ 是一个超参数,定义信任区域的大小。
接下来,具体分析该目标函数:
- 当优势 A^t>0 时,即 at 是一个好动作:
- 目标函数变为 min(rt(θ),1+ϵ)A^t。
- 为了最大化这个目标,我们会希望增大 rt(θ),也就是增加选择这个好动作的概率。
- 但由于裁剪的存在,rt(θ) 的上限被限制在 1+ϵ。这防止了策略更新过猛,尽管这是一个非常好的动作,策略的提升也是有限度的。
- 当优势 A^t<0 时,即 at 是一个坏动作:
- 目标函数变为 max(rt(θ),1−ϵ)A^t,因为负数乘以一个小于 1 的数会变得更大,所以 min 操作实际上变成了 max
- 为了最大化这个目标,我们会希望减小 rt(θ),也就是降低选择这个坏动作的概率。
- 同样,由于裁剪,rt(θ) 的下限被限制在 1−ϵ。这防止了策略因为一个糟糕的动作而过度 " 惩罚 " 自己。
PPO-Penalty
损失函数如下:
LKLPEN(θ)=−Et[rt(θ)A^t−βDKL(πθold(⋅∣st)∥πθ(⋅∣st))]
其中,DKL(πθold(⋅∣st)∥πθ(⋅∣st) 表示新旧策略概率分布的 KL 散度,这个值越大,表明策略变化越大。我们希望每次更新时,新旧策略不要变化太大,因此对 KL 散度施加惩罚。β 作为超参数,用于控制惩罚的强度。
Critic in PPO
在 Actor-Critic 框架下,PPO Critic 目标函数如下:
L(w)=21Et[Vπθold(st)−Vw(st))2]
Vπθold(st) 这一理论真值我们可以通过 λ-return G^tλ 近似。在计算完 GAE 后,便可计算得到 G^tλ:
G^tλ=A^tGAE(γ,λ)+Vwold(st)
因此,最终的目标函数如下:
L(w)=21Et[Vπθold(st)−Vw(st))2]=21Et[(G^tλ−Vw(st))2]=21Et[(A^tGAE(γ,λ)+Vwold(st)−Vw(st))2]
Reference