核心问题

强化学习要求智能体从经验中改进自己的行为,而没有一个监督者在每个状态告诉它”正确答案”是哪个动作。策略梯度对此给出的回答是:把策略本身当作被优化的对象,而不是先单独解决价值估计问题,再事后从价值里提取行为。贯穿本笔记的核心问题是:

智能体如何更新策略

πθ(as)\pi_\theta(a \mid s)

才能让通向更高未来回报的动作变得更可能被采样到?

这个问题听起来很简单,但背后藏着两个真正的困难。第一,策略赋予的是动作的概率,而不是直接赋予那些动作最终带来的回报,所以这里并没有一个现成的损失函数可以直接求导。第二,θ\theta 的一个微小变化,与它最终引起的期望回报变化之间,中间隔着整条未来状态、动作与奖励构成的轨迹,而不是一步就能算出的单一数字。本笔记接下来的内容,本质上就是在回答如何把这条连接关系变得精确、并且可微。

定义策略、轨迹与回报

策略 πθ(as)\pi_\theta(a \mid s) 就是被优化的对象:一个以 θ\theta 为参数、在给定状态下输出动作条件分布的函数,行为完全由 θ\theta 控制。

πθ(as)\pi_\theta(a \mid s)

让这个策略在环境中 rollout 一整个回合,得到的就是一条轨迹:从回合开始到结束所经历的完整状态-动作序列。

τ=(s1,a1,s2,a2,,sT,aT,sT+1)\tau = (s_1, a_1, s_2, a_2, \ldots, s_T, a_T, s_{T+1})

每条轨迹都带有一个轨迹回报,也就是沿着这条轨迹收集到的(折扣)奖励总和。

R(τ)R(\tau)

由于轨迹本身是随机的(它既取决于策略恰好采样出了哪些动作,也取决于环境恰好如何响应),真正值得优化的量,并不是某一次具体 rollout 的回报,而是期望轨迹回报:对 πθ\pi_\theta 下所有可能的 rollout 取平均之后的量。

J(θ)=Eτpθ[R(τ)]J(\theta) = \mathbb{E}_{\tau \sim p_\theta}[R(\tau)]

与基于价值方法的关系

在正式展开推导之前,先把策略梯度放到它所偏离的那一整个方法家族里对照一下会更有帮助。基于价值的方法(动态规划、蒙特卡洛控制、时序差分学习)都是先估计一个状态或状态-动作对有多”好”,然后才从这些估计值里事后导出行为。形式上,它们学习的是这样的价值量:

Qπ(s,a)Q^\pi(s,a)

再事后从中提取策略,通常是对学到的价值贪心地选择动作。

策略梯度方法完全跳过了这个中间步骤。它不是先学习”这个动作有多好”,再把这个判断转换成决策规则,而是直接对决策规则本身参数化,并直接调整它的参数:

πθ(as)\pi_\theta(a \mid s)

关键的转变在于:从”估计哪个动作有价值”变成”根据回报或 advantage,直接增大或减小被采样动作的概率”。这并不只是两种同样好的做法之间的风格选择,下面第 1 节会具体讲清楚,基于价值的提取方式究竟会遇到哪些实际问题,而直接对策略参数化又是如何绕开这些问题的。

推导

这里 J(θ)J(\theta) 是策略 πθ\pi_\theta 的期望回报,θJ(θt)\nabla_\theta J(\theta_t) 是期望回报关于参数 θ\theta 在时间步 tt 处的梯度。梯度上升的目标是沿着正梯度方向迭代更新参数,从而最大化期望回报。

1. 目标、记号与直觉

动机

在确定性策略中,策略把状态直接映射到一个动作:

μθ:SA.\mu_\theta : \mathcal{S} \to \mathcal{A}.

但策略梯度方法通常从随机性策略出发:

πθ(as),\pi_\theta(a \mid s),

它把一个状态映射到动作上的一个概率分布。采样出的动作记作:

atπθ(st),a_t \sim \pi_\theta(\cdot \mid s_t),

这里的点号表示动作变量是留空的:给定状态 sts_tπθ(st)\pi_\theta(\cdot \mid s_t) 是所有可能动作上的完整概率分布。

在实践中,πθ\pi_\theta 可以由一个神经网络、一个线性函数近似器,或者其他带参数的控制器来实现。关键点在于:θ\theta 控制着策略的行为,即使这个策略不是一张简单的表。

这一点很重要,因为策略梯度并不先更新一张价值表,而是直接更新那些给采样动作赋予概率的策略参数。

更早的动态规划、蒙特卡洛和时序差分方法,通常学习的是像这样的价值估计:

Vπ(s)orQπ(s,a).V^\pi(s) \quad \text{or} \quad Q^\pi(s,a).

在表格型方法中,这些价值会为每个状态或状态-动作对显式存储。例如,一个表格型 Q-learning 风格的更新形如:

Q(st,at)Q(st,at)+α[rt+1+γmaxaQ(st+1,a)Q(st,at)].Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha \left[ r_{t+1} + \gamma \max_{a'} Q(s_{t+1},a') - Q(s_t,a_t) \right].

这一类方法在概念上很重要,但有实际的局限性。只有当状态和动作空间小到可以枚举时,表格型价值函数才是自然的选择。一旦状态变成高维观测、图像、视频或连续特征向量,为每一个可能的 (s,a)(s,a) 对维护单独的价值就变得不可行了。

即便 Q(s,a)Q(s,a) 可以用一个函数来近似,策略通常仍然是间接导出的,例如通过:

a(s)=argmaxaQ(s,a).a^*(s)=\arg\max_a Q(s,a).

这种间接提取在连续动作空间中也会很别扭,因为在每个决策步计算 argmaxaQ(s,a)\arg\max_a Q(s,a) 可能需要求解一个困难的优化问题。当我们想要的行为本身就是一个随机性策略而不是确定性贪心动作时,这种做法也不自然。

策略梯度直接对策略参数化并优化其参数,从而解决了这个问题:

θt+1=θt+αθJ(θt).\theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta_t).

这是在期望回报目标 J(θ)J(\theta) 上做梯度上升,形式上类似于神经网络的梯度下降,

θt+1=θtαθL(θt),\theta_{t+1} = \theta_t - \alpha \nabla_\theta L(\theta_t),

但符号不同,因为监督学习通常是在最小化一个损失 L(θ)L(\theta),而策略梯度是在最大化期望回报 J(θ)J(\theta)

正式展开之前

顾名思义,策略梯度是一种寻找最优策略 πθ\pi_\theta 的 on-policy 方法,θ\theta 是策略的参数向量。这仍然是一个优化问题,但我们并不是直接对一个监督损失关于某个 ground-truth 标签求导,而是在当前策略采样出的轨迹下,最大化期望回报。

定义马尔可夫决策过程

考虑一个由元组

(S,A,P,R,γ)(S, A, P, R, \gamma)

定义的完整 MDP 系统,其中:

  • SS 是状态空间;
  • AA 是动作空间;
  • PP 是转移概率;
  • RR 是奖励函数;
  • γ\gamma 是折扣因子。

单步奖励函数 RR 可以写作:

R(s,a)=E[Rt+1st=s,at=a]R(s, a) = \mathbb{E}[R_{t+1} \mid s_t = s, a_t = a]

当动作由策略采样得到,

atπθ(st),a_t \sim \pi_\theta(\cdot\mid s_t),

观测到的奖励就通过被采样的动作和下一步的环境转移变成了随机量。奖励函数本身并不直接被 θ\theta 参数化;θ\theta 改变的是动作上的分布,进而改变轨迹上的分布。

关键点在于:ata_t 是一个随机变量,单步奖励函数通常并不能直接对 θ\theta 求导。

定义回报与轨迹回报

回报 GtG_t 定义为从时间步 tt 到该回合结束的折扣奖励总和。一种常见的约定是:

Gt=k=tT1γktRk+1=Rt+1+γRt+2+γ2Rt+3++γTt1RTG_t = \sum_{k=t}^{T-1} \gamma^{k-t} R_{k+1} = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \ldots + \gamma^{T-t-1} R_T

回忆轨迹 τ=(s1,a1,s2,a2,,sT,aT,sT+1)\tau = (s_1, a_1, s_2, a_2, \ldots, s_T, a_T, s_{T+1})。这里把最后一个状态也包含进来,是因为转移项 p(st+1st,at)p(s_{t+1}\mid s_t,a_t) 会出现在轨迹概率中;有些文献会在简写记号里省略它。

由此可以把一条轨迹的回报定义为:

R(τ)=t=1Tγt1Rt=G0R(\tau) = \sum_{t=1}^{T} \gamma^{t-1} R_t = G_0
下标约定

这个等式使用的约定是:第一个被采样的奖励是 R1R_1,整条轨迹的回报是 G0G_0。如果某篇文献把轨迹起点记作 (s1,a1)(s_1,a_1),并把第一步的回报记作 G1G_1,同一个量就可能写成 R(τ)=G1R(\tau)=G_1

不同教材使用的下标习惯略有不同,但经过重新对齐指标后,它们指的是同一个折扣求和。在本笔记中,动作 ata_t 在状态 sts_t 处被采取,紧接着的奖励是 Rt+1R_{t+1},从决策时刻 tt 开始的 reward-to-go 是:

Gt=k=tT1γktRk+1.G_t = \sum_{k=t}^{T-1} \gamma^{k-t} R_{k+1}.

在这个约定下,整回合的轨迹回报可以写作:

R(τ)=t=1Tγt1Rt=G0.R(\tau) = \sum_{t=1}^{T} \gamma^{t-1} R_t = G_0.

其他常见的约定还包括:

  • t=0t=0 开始,写成 R(τ)=t=0T1γtRt+1R(\tau)=\sum_{t=0}^{T-1}\gamma^t R_{t+1}
  • 把 reward-to-go 写成 Gt=k=0Tt1γkRt+k+1G_t=\sum_{k=0}^{T-t-1}\gamma^k R_{t+k+1}
  • 用小写的奖励记号,如 rtr_trt+1r_{t+1},而不是 RtR_t
  • 在轨迹的简写记号中省略最后一个状态 sT+1s_{T+1}

这些公式只有在指标经过一致的重新对齐之后才是等价的。在同一个推导内部混用不同约定,是最需要避免的事情,跨笔记也是如此:强化学习问题那一章里用来做非正式说明的交互序列,用的是上面 00 起始的约定(s0,a0,,sT,rTs_0,a_0,\dots,s_T,r_T),而本笔记在整个推导过程中统一固定使用 11 起始的约定。

综上,直观来说(用 \to 表示因果关系):

θπθ(st)atst+1,Rt+1τR(τ) or Gt\theta \rightarrow \pi_\theta(s_t) \rightarrow a_t \rightarrow s_{t+1}, R_{t+1} \rightarrow \tau \rightarrow R(\tau)\ \text{or}\ G_t

2. 轨迹概率

一条轨迹并不是提前固定好的。它是通过在环境中 rollout 当前策略 πθ\pi_\theta 采样得到的,所以我们记作:

τpθ\tau \sim p_\theta

其中 pθp_\theta 是由策略和环境动态共同诱导出的轨迹分布。

定义轨迹分布

这里,pθp_\theta 表示整个轨迹分布,而 pθ(τ)p_\theta(\tau) 表示赋给某一条具体轨迹的概率质量或密度。轨迹概率可以分解为:

pθ(τ)=p(s1)πθ(a1s1)p(s2s1,a1)πθ(a2s2)p(s3s2,a2)=p(s1)t=1Tπθ(atst)p(st+1st,at).\begin{aligned} p_\theta(\tau) &= p(s_1) \pi_\theta(a_1 \mid s_1) p(s_2 \mid s_1,a_1) \pi_\theta(a_2 \mid s_2) p(s_3 \mid s_2,a_2) \cdots \\ &= p(s_1) \prod_{t=1}^{T} \pi_\theta(a_t \mid s_t) p(s_{t+1}\mid s_t,a_t). \end{aligned}

这里,p(s1)p(s_1)p(st+1st,at)p(s_{t+1}\mid s_t,a_t) 来自环境本身。策略项 πθ(atst)\pi_\theta(a_t\mid s_t) 才是被 θ\theta 控制的部分。

这一点很重要,因为它说明期望回报 J(θ)J(\theta) 是通过轨迹分布成为 θ\theta 的函数的,而不是直接通过奖励函数。期望回报目标为:

J(θ)=Eτpθ[R(τ)]=τpθ(τ)R(τ).J(\theta) = \mathbb{E}_{\tau \sim p_\theta}[R(\tau)] = \sum_\tau p_\theta(\tau) R(\tau).
期望的定义

这只是期望的定义。如果 τ\tau 是一个具有概率质量函数 pθ(τ)p_\theta(\tau) 的离散随机变量,那么对任意函数 ff

Eτpθ[f(τ)]=τpθ(τ)f(τ).\mathbb{E}_{\tau \sim p_\theta}[f(\tau)] = \sum_\tau p_\theta(\tau) f(\tau).

f(τ)=R(τ)f(\tau)=R(\tau) 就得到上面的期望轨迹回报。如果轨迹空间是连续的,求和会替换成积分,但期望这个记号所表示的意思是一样的。

关键点在于:τ\tau 是随机的,因而 R(τ)R(\tau) 是一个随机回报。但是对固定的参数向量 θ\theta 而言,J(θ)J(\theta) 并不是一个随机变量;它是一个确定的标量目标:策略 πθ\pi_\theta 的平均回报。

从优化的角度看,策略梯度试图求解:

θargmaxθJ(θ).\theta^* \in \arg\max_\theta J(\theta).

在实践中,我们并不知道如何枚举所有可能的轨迹,环境动态通常也无法对智能体的参数求导。这里的技巧是:从采样到的轨迹中估计 J(θ)J(\theta) 的梯度,然后应用随机梯度上升:

θk+1=θk+αθJ(θk)^.\theta_{k+1} = \theta_k + \alpha \widehat{\nabla_\theta J(\theta_k)}.
假设正则性条件

下面的推导假设 R(τ)R(\tau) 不直接被 θ\theta 参数化,环境动态 p(st+1st,at)p(s_{t+1}\mid s_t,a_t) 不依赖于 θ\theta,并且轨迹分布在被采样到的支撑集上对 θ\theta 是可微的。它还假设我们可以交换梯度与求和(或期望)的顺序:

θτpθ(τ)R(τ)=τR(τ)θpθ(τ).\nabla_\theta \sum_\tau p_\theta(\tau)R(\tau) = \sum_\tau R(\tau) \nabla_\theta p_\theta(\tau).

对于 log-derivative 技巧,我们还需要在求值 logpθ(τ)\log p_\theta(\tau) 的轨迹上有 pθ(τ)>0p_\theta(\tau)>0

3. Log-Derivative 技巧

我们从求和形式的目标出发:

J(θ)=τpθ(τ)R(τ).J(\theta) = \sum_\tau p_\theta(\tau)R(\tau).

关于 θ\theta 求梯度:

θJ(θ)=θτpθ(τ)R(τ).\nabla_\theta J(\theta) = \nabla_\theta \sum_\tau p_\theta(\tau)R(\tau).

由于奖励函数被视为与 θ\theta 无关,梯度作用在轨迹概率上:

θJ(θ)=τR(τ)θpθ(τ).\nabla_\theta J(\theta) = \sum_\tau R(\tau) \nabla_\theta p_\theta(\tau).

到这一步,表达式还不太方便,因为它要求我们对一整条轨迹的概率求导。log-derivative 技巧用一个正的、可微的函数 fθ(x)f_\theta(x) 重写了这一项。

引理Log-Derivative(Score-Function)恒等式

对一个正的、关于 θ\theta 可微的函数 fθ(x)f_\theta(x)

θfθ(x)=fθ(x)θlogfθ(x).\nabla_\theta f_\theta(x) = f_\theta(x) \nabla_\theta \log f_\theta(x).

请仔细看左边这个式子。结果 xx 是固定的;只有参数 θ\theta 在变动。所以 θfθ(x)\nabla_\theta f_\theta(x) 的意思是:

如果我们稍微改变一下 θ\theta,赋给这个固定结果 xx 的概率或密度会怎么变?

它不是关于 xx 的导数。在策略梯度中,xx 之后会变成一条被采样的轨迹 τ\tau,我们要问的是:当前的策略参数如何改变赋给这条轨迹的概率。

证明Log-Derivative 恒等式的证明

对标量参数 θ\theta,链式法则给出:

θlogfθ(x)=1fθ(x)θfθ(x).\frac{\partial}{\partial \theta} \log f_\theta(x) = \frac{1}{f_\theta(x)} \frac{\partial}{\partial \theta} f_\theta(x).

对向量参数 θ=(θ1,,θd)\theta=(\theta_1,\ldots,\theta_d),同样的结论逐分量成立:

θjlogfθ(x)=1fθ(x)θjfθ(x),j=1,,d.\frac{\partial}{\partial \theta_j} \log f_\theta(x) = \frac{1}{f_\theta(x)} \frac{\partial}{\partial \theta_j} f_\theta(x), \qquad j=1,\ldots,d.

把这些偏导数堆叠回一个梯度向量:

θlogfθ(x)=1fθ(x)θfθ(x).\nabla_\theta \log f_\theta(x) = \frac{1}{f_\theta(x)} \nabla_\theta f_\theta(x).

两边同乘 fθ(x)f_\theta(x) 得到:

θfθ(x)=fθ(x)θlogfθ(x).\nabla_\theta f_\theta(x) = f_\theta(x) \nabla_\theta \log f_\theta(x).

条件 fθ(x)>0f_\theta(x)>0 存在的唯一原因是 logfθ(x)\log f_\theta(x) 必须有定义。在概率场景下,这意味着我们只在采样结果具有非零概率或密度的支撑集上应用这个恒等式。

推论轨迹概率上的 Log-Derivative 技巧

将引理应用到 fθ(x)=pθ(τ)f_\theta(x)=p_\theta(\tau) 上:

θpθ(τ)=pθ(τ)θlogpθ(τ).\nabla_\theta p_\theta(\tau) = p_\theta(\tau) \nabla_\theta \log p_\theta(\tau).

这里 τ\tau 在求导中被当作一条固定的采样轨迹。我们并不是在对已经实现的状态和动作本身求导,而是在对”当前策略赋给观测到这整条轨迹的概率有多大”这件事求导。

术语与扩散模型的联系

这个恒等式通常被称为 log-derivative 技巧。在随机梯度相关文献中,由此得到的估计量也被称为 score-function estimator、likelihood-ratio estimator,或 REINFORCE estimator。它在精神上与 DDPM 及基于 score 的扩散模型推导相关,因为两者都在处理对数概率的梯度。但对象是不同的:这里的 score 是一个参数 score,θlogpθ(τ)\nabla_\theta \log p_\theta(\tau),用于在不对环境求导的情况下估计 θJ(θ)\nabla_\theta J(\theta)。而在 DDPM 风格的推导中,score 通常指的是数据空间上的 score,如 xlogpt(x)\nabla_x \log p_t(x),训练通常通过 denoising score matching 加上一个重参数化的加噪过程来呈现。

定理策略梯度恒等式(Score-Function 形式)
θJ(θ)=Eτpθ[R(τ)θlogpθ(τ)].\nabla_\theta J(\theta) = \mathbb{E}_{\tau\sim p_\theta} \left[ R(\tau) \nabla_\theta \log p_\theta(\tau) \right].
证明
θJ(θ)=τR(τ)pθ(τ)θlogpθ(τ)=τpθ(τ)R(τ)θlogpθ(τ)=Eτpθ[R(τ)θlogpθ(τ)].\begin{aligned} \nabla_\theta J(\theta) &= \sum_\tau R(\tau) p_\theta(\tau) \nabla_\theta \log p_\theta(\tau) \\ &= \sum_\tau p_\theta(\tau) R(\tau) \nabla_\theta \log p_\theta(\tau) \\ &= \mathbb{E}_{\tau\sim p_\theta} \left[ R(\tau) \nabla_\theta \log p_\theta(\tau) \right]. \end{aligned}

第一行把上面的推论代入 θJ(θ)=τR(τ)θpθ(τ)\nabla_\theta J(\theta)=\sum_\tau R(\tau)\nabla_\theta p_\theta(\tau);最后一行就是期望的定义。

这就是核心的策略梯度恒等式。它把一个关于期望回报的优化问题,转化成了一个 score function 的期望,即 θlogpθ(τ)\nabla_\theta \log p_\theta(\tau)。用优化的语言来说,这给了我们一个随机梯度估计量:从当前策略采样轨迹,计算回报,计算被采样轨迹的 score,然后把 θ\theta 沿着估计出的上升方向移动。

4. 消去环境项

这里的”展开”不是指泰勒展开,而是指代入上一节中分解好的轨迹概率,然后使用对数乘积的规则。

命题轨迹概率的 Score 可以归约为策略的对数概率
θlogpθ(τ)=t=1Tθlogπθ(atst).\nabla_\theta \log p_\theta(\tau) = \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t\mid s_t).
证明

回忆轨迹概率:

pθ(τ)=p(s1)t=1Tπθ(atst)p(st+1st,at).p_\theta(\tau) = p(s_1) \prod_{t=1}^{T} \pi_\theta(a_t \mid s_t) p(s_{t+1}\mid s_t,a_t).

两边取 log\log

logpθ(τ)=log[p(s1)t=1Tπθ(atst)p(st+1st,at)]=logp(s1)+t=1Tlog[πθ(atst)p(st+1st,at)]=logp(s1)+t=1Tlogπθ(atst)+t=1Tlogp(st+1st,at).\begin{aligned} \log p_\theta(\tau) &= \log \left[ p(s_1) \prod_{t=1}^{T} \pi_\theta(a_t \mid s_t) p(s_{t+1}\mid s_t,a_t) \right] \\ &= \log p(s_1) + \sum_{t=1}^{T} \log \left[ \pi_\theta(a_t \mid s_t) p(s_{t+1}\mid s_t,a_t) \right] \\ &= \log p(s_1) + \sum_{t=1}^{T} \log \pi_\theta(a_t\mid s_t) + \sum_{t=1}^{T} \log p(s_{t+1}\mid s_t,a_t). \end{aligned}

这里用到的代数运算只有:

log(xy)=logx+logy,logt=1Txt=t=1Tlogxt.\log(xy)=\log x+\log y, \qquad \log\prod_{t=1}^{T}x_t = \sum_{t=1}^{T}\log x_t.

关于 θ\theta 求梯度:

θlogpθ(τ)=θlogp(s1)+t=1Tθlogπθ(atst)+t=1Tθlogp(st+1st,at).\begin{aligned} \nabla_\theta \log p_\theta(\tau) &= \nabla_\theta \log p(s_1) + \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t\mid s_t) \\ &\quad+ \sum_{t=1}^{T} \nabla_\theta \log p(s_{t+1}\mid s_t,a_t). \end{aligned}

环境项不依赖于 θ\theta,所以它们的梯度为零:

θlogp(s1)=0,θlogp(st+1st,at)=0.\nabla_\theta \log p(s_1)=0, \qquad \nabla_\theta \log p(s_{t+1}\mid s_t,a_t)=0.

因此:

θlogpθ(τ)=t=1Tθlogπθ(atst).\nabla_\theta \log p_\theta(\tau) = \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t\mid s_t).
推论实用的策略梯度公式

把上面的命题代入策略梯度恒等式,得到:

θJ(θ)=Eτpθ[R(τ)t=1Tθlogπθ(atst)].\nabla_\theta J(\theta) = \mathbb{E}_{\tau\sim p_\theta} \left[ R(\tau) \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t\mid s_t) \right].

这正是策略梯度之所以实用的原因:我们不需要对环境的转移模型求导,只需要当前策略赋给它实际采样出的动作的对数概率。

5. 采样梯度估计

上面的期望在大多数环境中仍然无法精确计算。

算法蒙特卡洛策略梯度估计

通过 rollout 当前策略采样 NN 条轨迹,

τ(i)pθ,i=1,,N,\tau^{(i)}\sim p_\theta, \qquad i=1,\ldots,N,

用样本均值近似期望:

θJ(θ)^=1Ni=1NR(τ(i))t=1Tθlogπθ(at(i)st(i)).\widehat{\nabla_\theta J(\theta)} = \frac{1}{N} \sum_{i=1}^{N} R(\tau^{(i)}) \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t^{(i)}\mid s_t^{(i)}).

然后执行梯度上升:

θk+1=θk+αθJ(θk)^.\theta_{k+1} = \theta_k + \alpha \widehat{\nabla_\theta J(\theta_k)}.

这就是最基本的 REINFORCE 思路:出现在高回报轨迹中的动作会被更强地强化。由于策略参数化和动作上的归一化,提高某些采样动作的概率也会改变分配给其他动作的概率质量。

所以其数学本质与许多随机优化算法是一样的:

  • 定义一个目标 J(θ)J(\theta)
  • 推导一个梯度恒等式;
  • 用样本代替真实期望;
  • 用随机梯度上升更新参数。

6. 核心推导之后:信用分配

上面的推导给出了最”干净”的形式:

R(τ)t=1Tθlogπθ(atst).R(\tau) \sum_{t=1}^{T} \nabla_\theta \log \pi_\theta(a_t\mid s_t).

但这把同一个整条轨迹的回报 R(τ)R(\tau) 分配给了这一回合中的每一个动作。这在数学上是成立的,但噪声很大。如果一个动作发生在回合早期,用这个动作之前就已经发生的奖励来评价它,在信用分配上并不合乎因果直觉。

一种常见的改进是:用 reward-to-go 替换整条轨迹的回报。沿用上面固定的约定,这意味着使用采样动作之后的未来回报 Gt=k=tT1γktRk+1G_t=\sum_{k=t}^{T-1}\gamma^{k-t}R_{k+1}。和到目前为止的推导不同,这个改进本身是一个真正需要证明的命题:用 GtG_t 替换 R(τ)R(\tau) 之后,估计量的期望基本不变,值得真正证明一遍,而不只是断言。

引理Score Function 的期望为零

对任意状态 ss

Eaπθ(s)[θlogπθ(as)]=0.\mathbb{E}_{a\sim\pi_\theta(\cdot\mid s)}\big[\nabla_\theta\log\pi_\theta(a\mid s)\big] = 0.
证明
Eaπθ(s)[θlogπθ(as)]=aπθ(as)θlogπθ(as)=aθπθ(as)=θaπθ(as)=θ1=0,\mathbb{E}_{a\sim\pi_\theta(\cdot\mid s)}\big[\nabla_\theta\log\pi_\theta(a\mid s)\big] = \sum_a \pi_\theta(a\mid s)\,\nabla_\theta\log\pi_\theta(a\mid s) = \sum_a \nabla_\theta\pi_\theta(a\mid s) = \nabla_\theta\sum_a\pi_\theta(a\mid s) = \nabla_\theta 1 = 0,

第二个等号用了第 3 节的 log-derivative 技巧,最后一个等号用了 πθ(s)\pi_\theta(\cdot\mid s) 对任意 θ\theta 求和都等于 11 这一事实。

命题因果性:只有未来的奖励依赖于当下的动作
Eτpθ[R(τ)t=1Tθlogπθ(atst)]=Eτpθ[t=1TγtGtθlogπθ(atst)]\mathbb{E}_{\tau\sim p_\theta}\left[R(\tau)\sum_{t=1}^T\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right] = \mathbb{E}_{\tau\sim p_\theta}\left[\sum_{t=1}^T \gamma^t\,G_t\,\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right]
证明

展开 R(τ)=t=1Tγt1RtR(\tau) = \sum_{t'=1}^T \gamma^{t'-1}R_{t'},并交换求和顺序:

Eτpθ[R(τ)t=1Tθlogπθ(atst)]=t=1Tt=1Tγt1Eτpθ[Rtθlogπθ(atst)].\mathbb{E}_{\tau\sim p_\theta}\left[R(\tau)\sum_{t=1}^T\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right] = \sum_{t=1}^T\sum_{t'=1}^T\gamma^{t'-1}\,\mathbb{E}_{\tau\sim p_\theta}\big[R_{t'}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\big].

固定 tt,在 t=tt'=t 处把内层求和拆开。对 ttt' \le t,奖励 RtR_{t'} 是由 (s1,a1,,st1,at1)(s_1,a_1,\dots,s_{t'-1},a_{t'-1}) 决定的(这些状态和动作都严格早于 ata_t 被采样),所以以直到 sts_t 的轨迹前缀为条件时,RtR_{t'} 已经固定,只有 atπθ(st)a_t\sim\pi_\theta(\cdot\mid s_t) 仍然是随机的,用上面的引理就得到:

Eτpθ[Rtθlogπθ(atst)]=0(tt).\mathbb{E}_{\tau\sim p_\theta}\big[R_{t'}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\big] = 0 \qquad (t'\le t).

只有 tt+1t' \ge t+1 的项能留下来:

t=1Tt=t+1Tγt1Eτpθ[Rtθlogπθ(atst)]=t=1TγtEτpθ[(t=t+1Tγt1tRt)θlogπθ(atst)],\sum_{t=1}^T\sum_{t'=t+1}^T\gamma^{t'-1}\,\mathbb{E}_{\tau\sim p_\theta}\big[R_{t'}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\big] = \sum_{t=1}^T\gamma^t\,\mathbb{E}_{\tau\sim p_\theta}\left[\Big(\sum_{t'=t+1}^T\gamma^{t'-1-t}R_{t'}\Big)\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right],

γt\gamma^t 从留下来的项里提出来。剩下的内层求和按定义恰好就是 Gt=t=t+1Tγt1tRtG_t = \sum_{t'=t+1}^T\gamma^{t'-1-t}R_{t'},这就得到了要证明的恒等式。

常规写法的 Reward-to-Go 公式漏掉了一个 $\gamma^t$ 因子

刚证明的命题说明:严格无偏的 reward-to-go 估计量,在时间步 tt 的那一项上还要额外乘上一个 γt\gamma^t 权重。而下面这个公式(本笔记接下来一直沿用,包括 REINFORCE 那一节,以及后面每一个基于 advantage 的估计量)用的却是不带 γt\gamma^t 因子的 GtG_t。这不是疏漏;这是策略梯度文献里几乎普遍采用的写法,包括本文引用的 Sutton and Barto 和 OpenAI Spinning Up 本身的写法都是如此。丢掉 γt\gamma^t,使得这个估计量精确对应的是一个相近的、每步不打折扣的目标的梯度,而不是 J(θ)J(\theta) 本身的梯度,用一个有据可查的小偏差,换来更低的方差,以及一个对早期和晚期时间步一视同仁的更新规则。既然这是一个标准的、刻意为之的简化,而不是一个错误,本笔记接下来也遵循这个惯例。

命题Reward-to-Go 策略梯度估计量(常规形式)
θJ(θ)^=1Ni=1Nt=1TGt(i)θlogπθ(at(i)st(i)).\widehat{\nabla_\theta J(\theta)} = \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} G_t^{(i)} \nabla_\theta \log \pi_\theta(a_t^{(i)}\mid s_t^{(i)}).

这并没有改变策略梯度最基本的思想,只是为每个被采样的动作给出了一个与未来回报更相关的度量。

7. Baseline 与 Advantage 作为方差缩减

Baseline 和 advantage 很有用,但它们并不属于核心的 log-trick 推导本身。它们回答的是一个数值优化问题:在不改变梯度估计量期望方向的前提下,如何降低采样梯度估计量的方差?

定义Baseline

Baseline 减去一个与状态相关的参考值:

GtGtb(st).G_t \quad\rightarrow\quad G_t-b(s_t).

常见的选择是 b(st)=Vπ(st)b(s_t)=V^\pi(s_t)

命题Baseline 的无偏性

如果 baseline b(st)b(s_t) 不依赖于被采样的动作 ata_t,它就不会在期望意义上给策略梯度的方向引入偏差。

证明

减去一个 baseline,给估计量的期望带来的变化恰好是

Eτpθ[t=1Tb(st)θlogπθ(atst)]=t=1TE[b(st)Eatπθ(st)[θlogπθ(atst)]由上面的引理=0]=0,\mathbb{E}_{\tau\sim p_\theta}\left[\sum_{t=1}^T b(s_t)\,\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right] = \sum_{t=1}^T \mathbb{E}\Big[b(s_t)\,\underbrace{\mathbb{E}_{a_t\sim\pi_\theta(\cdot\mid s_t)}\big[\nabla_\theta\log\pi_\theta(a_t\mid s_t)\big]}_{\text{由上面的引理} = 0}\Big] = 0,

这里用到 b(st)b(s_t) 只依赖于 sts_t,因此可以提到关于 atπθ(st)a_t\sim\pi_\theta(\cdot\mid s_t) 的内层期望之外,因为它不依赖于 ata_t。只要 bb 满足这个条件,baseline 这一项对 E[θJ(θ)^]\mathbb{E}[\widehat{\nabla_\theta J(\theta)}] 的贡献就恰好是零。

定义Advantage 函数
Aπ(st,at)=Qπ(st,at)Vπ(st).A^\pi(s_t,a_t) = Q^\pi(s_t,a_t) - V^\pi(s_t).
定义样本 Advantage 估计

A^t(i):=Gt(i)b(st(i))\widehat A_t^{(i)} := G_t^{(i)} - b(s_t^{(i)}) 为加了 baseline 的 reward-to-go,并取 b(st)=Vπ(st)b(s_t)=V^\pi(s_t) 如上所述,那么 A^t(i)\widehat A_t^{(i)} 就是 Aπ(st(i),at(i))A^\pi(s_t^{(i)},a_t^{(i)}) 的一个蒙特卡洛估计:采样得到的 reward-to-go Gt(i)G_t^{(i)}Qπ(st(i),at(i))Q^\pi(s_t^{(i)},a_t^{(i)}) 的一个无偏(但高方差)估计,因为 Qπ(s,a)=Eπ[GtSt=s,At=a]Q^\pi(s,a)=\mathbb{E}_\pi[G_t\mid S_t=s,A_t=a],所以 A^t(i)\widehat A_t^{(i)} 估计的正是 Qπ(st(i),at(i))Vπ(st(i))=Aπ(st(i),at(i))Q^\pi(s_t^{(i)},a_t^{(i)}) - V^\pi(s_t^{(i)}) = A^\pi(s_t^{(i)},a_t^{(i)})

推论基于 Advantage 的策略梯度估计量
θJ(θ)^1Ni=1Nt=1TA^t(i)θlogπθ(at(i)st(i)).\widehat{\nabla_\theta J(\theta)} \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \widehat A_t^{(i)} \nabla_\theta \log \pi_\theta(a_t^{(i)}\mid s_t^{(i)}).

这正是通往 actor-critic 和 PPO 的桥梁。就本笔记而言,关键点只是:advantage 用一个对随机梯度上升更稳定的信号,替换了原始的回报。

REINFORCE

REINFORCE 是与上面推导相对应的蒙特卡洛策略梯度算法。它在当前策略下采样完整的回合,并用它们的回报来估计 J(θ)J(\theta) 的上升方向。

算法REINFORCE
θJ(θ)1Ni=1Nt=1TGt(i)θlogπθ(at(i)st(i)).\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} G_t^{(i)} \nabla_\theta \log \pi_\theta(a_t^{(i)} \mid s_t^{(i)}).

用文字来说:从当前策略采样轨迹,估计哪些被采样的动作带来了较好的未来回报,然后通过梯度上升提高这些动作的对数概率。

通往 PPO 的桥梁

PPO 保留了策略梯度的核心思想,但限制了新策略相对旧策略能够移动多远。

定义概率比
rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)} {\pi_{\theta_{\text{old}}}(a_t \mid s_t)}
建议的学习顺序

在能够把策略梯度的推导讲清楚之前,不要急着深入学习 PPO。

延伸阅读

这篇笔记假设读者已经熟悉作为概率分布的策略里搭建起来的策略记号,以及回报、价值与 Bellman 方程里的价值函数和 Bellman 方程,Bellman 方程尤其是理解本文所对照的基于价值方法的有用背景,而 VπV^\piQπQ^\piAπA^\pi 正是上文 baseline 和 advantage 那两节直接用到的对象。这里推导出的估计量是 on-policy 的,意味着每一批轨迹只够支撑一次更新就会变馊。近端策略优化直接接手这个问题:它用重要性采样买来样本重用,然后用整章的篇幅为此付账。

参考资料