首先我们的目标是最大化累计奖励期望,期望是当前策略下,每一条轨迹的概率乘上每条轨迹的奖励。
为什么我们能对累计奖励期望这个常数求导?是因为我们假设策略是一个随机分布,在训练过程中,它的参数会不断变化,每条轨迹的概率发生变化,则累计奖励期望会随着改参数的变化而变化。我们实际是对这个参数求导。那么自然就想到如果能找出梯度上升的方向,就能找到最大化累计奖励期望的策略分布参数。
那么我们首先写出累计奖励回报的公式:
J(θ)=Eτ∼pθ(τ)[R(τ)]
其中:
- θ 是策略网络 πθ(a∣s) 的参数。
- τ 代表一个完整的轨迹(trajectory),即一连串的状态和动作序列:τ=(s0,a0,s1,a1,…,sT,aT)。
- R(τ)=∑t=0Tr(st,at) 是这条轨迹的总回报。
- pθ(τ) 是在策略 πθ 下,这条轨迹发生的概率。
对累计奖励回报求导:
∇θJ(θ)=∇θEτ∼pθ(τ)[R(τ)]
我们可以将期望写成积分(或求和)的形式,根据莱布尼兹法则可以把求导符号移到积分内部:
∇θJ(θ)=∇θ∫pθ(τ)R(τ)dτ=∫∇θ(pθ(τ)R(τ))dτ=∫∇θpθ(τ)R(τ)dτ
对于任意可微函数 f(x),我们有:∇xlogf(x)=f(x)∇xf(x)
移项可得:∇xf(x)=f(x)∇xlogf(x)
我们将这个技巧应用到我们的轨迹概率 pθ(τ)上:
∇θpθ(τ)=pθ(τ)∇θlogpθ(τ)
代入原式:
∇θJ(θ)=∫(pθ(τ)∇θlogpθ(τ))R(τ)dτ=∫pθ(τ)(∇θlogpθ(τ)R(τ))dτ
此时我们发现可以将改公式写回期望的形式,于是我们就可以通过采样估计期望:
∇θJ(θ)=Eτ∼pθ(τ)[∇θlogpθ(τ)R(τ)]
我们只需要从当前策略 πθ 采样一批轨迹 τi,然后计算 ∇θlogpθ(τi)R(τi) 的平均值即可近似得到梯度。
现在我们来求∇θlogpθ(τ).
由于pθ(τ)=p(s0)∏t=0T−1πθ(at∣st)p(st+1∣st,at),取对数后,连乘变成连加:logpθ(τ)=logp(s0)+∑t=0T−1(logπθ(at∣st)+logp(st+1∣st,at))。
则对 θ 求梯度:∇θlogpθ(τ)=∇θ(logp(s0)+∑t=0T−1(logπθ(at∣st)+logp(st+1∣st,at)))
非常重要的一点是,环境动力学 p(st+1∣st,at) 和初始状态分布 p(s0) 都不依赖于我们的策略参数 θ。所以它们的梯度为零。
∇θlogpθ(τ)=t=0∑T−1∇θlogπθ(at∣st)
于是对轨迹求导变成了对策略求导。
再次代入期望公式中:
∇θJ(θ)=Eτ∼pθ(τ)[(t=0∑T−1∇θlogπθ(at∣st))R(τ)]
其中 R(τ)=∑t=0Trt。这个公式就是 Policy Gradient 定理的一种形式。
R(τ) 如何转变为 ∑t=0Tγtrt?
本质是我们定义了更好的求解目标。
在评估当前动作奖励时,用未来的累计奖励回报比用从 t=0 时刻开始的所有奖励回报要合理,因为过去时刻获得的奖励回报已经拿到了,与当前动作的选择无关。
对于 Policy Gradient,我们可以选择折扣奖励回报期望 Gt 作为更合理的优化目标。主要是三个原因:
- 便于处理无限长度的任务,总回报可以收敛,而不是无限增长。
- 降低方差,强调即时奖励。
- 符合数学基础,贝尔曼方程依赖折扣因子,马尔科夫性也说明未来状态只与当前状态有关。
那么重新回顾策略梯度的公式:
∇θJ(θ)=Eτ∼pθ(τ)[∇θlogpθ(τ)⋅SomeValue(τ)]
在我们已经确立了求解目标的基础上,我们希望优化求解过程。
现在的 Eτ∼pθ(τ)[(∑t=0T−1∇θlogπθ(at∣st))Gt] 是通过采样一整条轨迹得到的无偏估计,面临的问题就是方差过大,更新不稳定。
我们希望能够找到方差更小的无偏估计,一个很简单的方法就是降低 Gt 的绝对值大小,即减去一个 baseline。这和采用 Reward-to-go 代替整条轨迹的奖励回报的推理是同样的思路。
首先我们直观理解为什么可以用 Reward-to-go 代替 Gt?
因为一个在时间点 做出的动作 ,不可能影响它之前的奖励(r0,r1,…,rt−1)。
在策略梯度中加入过去的奖励,对期望值的计算没有贡献,但会给单词采样的梯度估计增加不必要的噪声,从而增大方差。
我们要证明,用 替换 (即 R(τ)) 是无偏的。这意味着:
Eπθ[t=0∑T∇θlogπθ(at∣st)Gt]=Eπθ[t=0∑T∇θlogπθ(at∣st)G0]
等价于证明它们差值的期望为零:
Eπθ[t=0∑T∇θlogπθ(at∣st)(G0−Gt)]=0
令 Ct=G0−Gt=∑k=0t−1γkrk,我们来看求和中的任意一项 Eπθ[∇θlogπθ(at∣st)Ct]。
期望可以写成对状态和动作的积分(或求和)形式:
Es∼dπ,a∼πθ[∇θlogπθ(a∣s)Ct]=∫sdπ(s)∫aπθ(a∣s)[∇θlogπθ(a∣s)Ct]dads
因为Ct只依赖于状态 s,不依赖于动作 a,所以可以把它提出来:
∫aπθ(a∣s)∇θlogπθ(a∣s)Ctda=Ct∫aπθ(a∣s)∇θlogπθ(a∣s)da
再次使用 Log-Derivative Trick
我们知道 ∇θlogπθ(a∣s)=πθ(a∣s)∇θπθ(a∣s)。代入上式:
Ct∫aπθ(a∣s)πθ(a∣s)∇θπθ(a∣s)da=Ct∫a∇θπθ(a∣s)da
由于积分域(所有动作空间)不依赖于 θ,我们可以交换积分和梯度算子:
=Ct∇θ∫aπθ(a∣s)da=Ct∇θ(1)=0
Baseline 的证明同理,只要和 a 或θ没有关系,梯度都可以被提到积分号外面。
很多教科书和原始论文在证明策略梯度定理时,推导出的就是使用完整轨迹回报 R(τ) 的形式。reward-to-go 和 baseline 都可以看作后续的实践技巧和理论优化。
即 Reward-to-go 怎么变成At?
既然任何只依赖于状态的 b(s) 都可以,那么选择什么样的 b(s) 最好呢?理论上可以证明,能够最大程度减小方差的最优基线是状态价值函数 (State-Value Function):
b(st)=Vπθ(st)=E[Gt∣St=st]
当我们用 V(st)作为基线时,我们得到的差值有了一个专门的名字:优势函数 (Advantage Function)。
A(st,at)=Gt−V(st)
(在实际应用中,通常用 Q(st,at) 的估计来代替 Gt,即 A(st,at)=Q(st,at)−V(st))。
优势函数 A(st,at) 直观地衡量了在状态 st 下,采取动作 at 相对于采取平均动作要好多少。这正是我们进行策略更新最想要的、最纯净的信号。这也是所有Actor-Critic算法(如A2C, A3C)的核心思想。
综上所述,减去一个基线在数学上是无偏的,并且在实践中通过将回报中心化,显著降低了梯度方差,是Policy Gradient方法不可或缺的一项关键技术。
至此, 经过这四个步骤, 我们得到了策略梯度定理的一种常见形式
∇θJ(θ)=Eτ∼pθ(τ)[(t=0∑T−1∇θlogπθ(at∣st))A(st,at)]
Proximal Policy Optimization Algorithms