在阅读本文前,需要了解 强化学习的基本概念。本文按顺序探讨了以下几个部分:

  • 策略方法的目标
  • 朴素策略梯度的计算
  • 策略网络的简易训练步骤
  • reward-to-go 策略梯度
  • 一般形式的策略梯度

在深度学习的背景下,我们规定策略函数使用神经网络近似,表示为:πθ(as)\pi_{\theta}(a \mid s)。其中,θ\theta 为策略网络的参数。

本文主要参考 OpenAI Spinning Up Documentation Part 3: Intro to Policy Optimization 编写,对部分内容的进行了删减,感兴趣的读者可以阅读原文。此外,为了确保数学公式的严谨性,参考了 Policy Gradient Algorithms | Lil’Log,该文章主要围绕数学理论展开。类似的文章还有 Going Deeper Into Reinforcement Learning: Fundamentals of Policy Gradients

Optimization Objective

回顾即时收益与回报的定义:

Gt=Rt+γRt+1+γ2Rt+2+=k=0γkRt+kG_{t} = R_{t} + \gamma R_{t+1} + \gamma^{2} R_{t+2} + \cdots = \sum_{k=0}^{\infty} \gamma^{k} R_{t+k}

其中:

  • GtG_{t}: 自 tt 时刻起的无限步折扣汇报,γ\gamma 为折扣因子
  • Rt=R(st,at,st+1)R_{t} = R(s_{t}, a_{t}, s_{t+1}): tt 时刻的即时收益,由收益函数 RR 计算得到。依赖于当前状态 sts_{t} 和动作 ata_{t},与下一时刻的状态 st+1s_{t+1}

为了简化后续策略梯度的分析,我们从轨迹回报入手。首先,定义长度为 TT 的轨迹(Trajectory)为 τ=(s0,a0,,sT)\tau = (s_{0},a_{0},\ldots,s_{T})。则轨迹 τ\tau 的回报可简化表示为:

G(τ)=t=0T1γtRtG(\tau)=\sum_{t=0}^{T-1} \gamma^{t} R_{t}

强化学习的目标是找到一个策略(Policy),使得 Agent 在与环境(Environment)交互时,能够最大化期望回报(Expected Return)。策略梯度方法的优化目标可定义如下:

maxJ(θ)=EτP(;θ)[G(τ)]\max J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}[G(\tau)]

其中,P(;θ)\mathbb{P}(\cdot;\theta) 为轨迹 τ\tau 的概率分布,可表示如下:

P(τ;θ)=ρ0(s0)t=0T1πθ(atst)P(st+1st,at)\mathbb{P}(\tau;\theta)=\rho_{0}(s_{0}) \prod_{t=0}^{T-1} \pi_{\theta}(a_{t} \mid s_{t}) \cdot P(s_{t+1} \mid s_{t},a_{t})

其中:

  • ρ0(s0)\rho_{0}(s_{0}): 初始状态 s0s_{0} 的概率分布
  • πθ(atst)\pi_{\theta}(a_{t} \mid s_{t}): 参数化的策略函数,表示在状态 sts_{t} 下选择动作 ata_{t} 的概率
  • P(st+1st,at)P(s_{t+1} \mid s_{t},a_{t}): 状态转移函数,表示在状态 sts_{t} 下选择动作 ata_{t},并转移至状态 st+1s_{t+1} 的概率

至此,我们已完成对 Policy-based 方法优化目标的定义。接着,可以通过梯度上升法对策略进行优化:

θk+1=θk+αθJ(θ)θ=θk\theta_{k+1} = \theta_{k} + \alpha \nabla_{\theta}J(\theta)|_{\theta=\theta_{k}}

其中,θJ(θ)\nabla_{\theta}J(\theta) 为策略梯度,α\alpha 为学习率。下一节将讲解如何对策略梯度进行求导。

Naive Policy Gradient

为了便于后续策略梯度的计算,我们首先计算轨迹概率的梯度。

第一步,利用对数导数技巧 xlnx=1/x\nabla_{x} \ln x = 1/x,可得出:

θP(τ;θ)=P(τ;θ)θlnP(τ;θ)\nabla_{\theta} \mathbb{P}(\tau;\theta)=\mathbb{P}(\tau;\theta) \nabla_{\theta} \ln \mathbb{P}(\tau;\theta)

上式从右往左推导便显而易见。一些教程中将自然对数函数 lnx\ln x 写作一般形式 logx\log x。为了保持严谨,我们仍采用前者。

第二步,计算轨迹 τ\tau 的对数概率:

lnP(τ;θ)=lnρ0(s0)+t=0T1lnπθ(atst)+t=0T1P(st+1st,at)\ln \mathbb{P}(\tau;\theta)=\ln \rho_{0}(s_{0}) + \sum_{t=0}^{T-1} \ln \pi_{\theta}(a_{t} \mid s_{t}) + \sum_{t=0}^{T-1} P(s_{t+1} \mid s_{t},a_{t})

由于环境不依赖于策略网络参数 θ\theta,则 ρ0(s0)\rho_{0}(s_{0}), P(st+1st,at)P(s_{t+1} \mid s_{t},a_{t})G(τ)G(\tau) 的梯度均为 00

第三步,计算轨迹 τ\tau 的对数概率梯度:

θlnP(τ;θ)=θlnρ0(s0)+t=0T1θlnπθ(atst)+t=0T1θP(st+1st,at)=t=0T1θlnπθ(atst)\begin{aligned} \nabla_{\theta} \ln \mathbb{P}(\tau;\theta)&=\cancel{\nabla_{\theta} \ln \rho_{0}(s_{0})} + \sum_{t=0}^{T-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t}) + \sum_{t=0}^{T-1} \cancel{\nabla_{\theta} P(s_{t+1} \mid s_{t},a_{t})} \\ &= \sum_{t=0}^{T-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t}) \end{aligned}

最终,对策略梯度的计算归纳如下:

θJ(θ)=θEτP(;θ)[G(τ)]=θτP(τ;θ)G(τ)dτExpand expectation=τθP(τ;θ)G(τ)dτBring gradient under integral=τP(τ;θ)θlnP(τ;θ)G(τ)dτLog-derivation trick=EτP(;θ)[θlnP(τ;θ)G(τ)]Return to expectation form=EτP(;θ)[t=0T1θlnπθ(atst)G(τ)]Grad-log-prob\begin{aligned} \nabla_{\theta} J(\theta) &= \nabla_{\theta}\mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}[G(\tau)] \\ &= \nabla_{\theta} \int_{\tau} \mathbb{P}(\tau;\theta) G(\tau) d\tau & \text{Expand expectation} \\ &= \int_{\tau} \nabla_{\theta} \mathbb{P}(\tau;\theta) G(\tau) d\tau & \text{Bring gradient under integral} \\ &= \int_{\tau} \mathbb{P}(\tau;\theta) \nabla_{\theta} \ln \mathbb{P}(\tau;\theta) G(\tau) d\tau & \text{Log-derivation trick} \\ &= \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)} \big[\nabla_{\theta} \ln \mathbb{P}(\tau;\theta) G(\tau)\big] & \text{Return to expectation form} \\ &= \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[\sum_{t=0}^{T-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t}) G(\tau)\Bigg]& \text{Grad-log-prob} \end{aligned}

Note

值得注意的是,这里我们假设 G(τ)G(\tau)θ\theta 无关,因而不参与 θ\theta 的梯度计算。事实上,给定轨迹 τ\tau 后,该轨迹的回报 G(τ)G(\tau) 由环境计算得到,而不依赖于策略。换句话说,策略网络参数 θ\theta 只影响哪些 τ\tau 更易出现(通过轨迹分布 P(τ;θ)\mathbb{P}(\tau;\theta)),而不影响给定 τ\tauG(τ)G(\tau) 是多少。

为了突出 G(τ)G(\tau) 不依赖于 θ\theta,我们将该项前置于梯度算子 \nabla:

θJ(θ)=EτP(;θ)[G(τ)t=0T1θlnπθ(atst)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[G(\tau) \sum_{t=0}^{T-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t})\Bigg]

至此,我们已经分析得到目标函数的梯度。在接下来的一节里,我们将站在深度学习的角度,来粗略给出策略网络的训练步骤。

Training the Policy Network

梯度 θJ(θ)\nabla_{\theta} J(\theta) 是一个期望,可以使用样本均值对其估计。首先,采样一系列轨迹 {τn}n=1N\{\tau_{n}\}_{n=1}^{N},每条轨迹都是 agent 与 environment 在最近更新的策略 πθ\pi_{\theta} 下交互得到。接着,策略梯度可估计如下:

g^=1Nn=1NG(τn)t=0Tn1θlnπθ(atnstn)\hat{g} = \frac{1}{N} \sum_{n=1}^{N} G(\tau^{n}) \sum_{t=0}^{T_{n}-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t}^{n} \mid s_{t}^{n})

直观地,每一步参数更新,都需要计算梯度,而梯度需要通过收集 NN 回合游戏的数据来近似。换句话说,在这 NN 个回合游戏中(相当于 1 个 mini-batch),agent 的策略都是一样的。具体步骤如下:

  1. 数据采样:重复 NN 回合游戏,在第 nn 个回合中:
    1. 共有 TnT_{n} 个时间步,在第 tt 个时间步中:
      1. 观测到状态 stns_{t}^{n}
      2. 从最近更新的策略中随机采样动作 atnπθ(stn)a_{t}^{n} \sim \pi_{\theta}(\cdot \mid s_{t}^{n}) 并执行
      3. 环境给出下一状态 st+1ns_{t+1}^{n} 与奖励 rtn=R(st,at,st+1)r_{t}^{n} = R(s_{t}, a_{t}, s_{t+1})
    2. 累计 TnT_{n} 个时间步得到轨迹 τn\tau^{n}
    3. 计算轨迹 τn\tau^{n} 的回报 G(τn)G(\tau^{n})
  2. 梯度近似:根据 NN 回合游戏的轨迹与回报来计算 g^\hat{g},以近似策略梯度 θJ(θ)\nabla_{\theta} J(\theta)
  3. 参数更新θ=θ+αg^\theta^{\prime} = \theta + \alpha \cdot \hat{g}
Note

以上训练步骤仅仅为了直观地了解策略方法的训练过程。而在实际的实现中,mini-batch 的选取可能并非是 NN 个回合。

Reward-to-Go Policy Gradient

回顾在 前面章节 得到的策略梯度公式:

θJ(θ)=EτP(;θ)[G(τ)t=0T1θlnπθ(atst)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[G(\tau) \sum_{t=0}^{T-1} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t})\Bigg]

该公式的核心思路在于,根据获得的奖励之和 G(τ)G(\tau) 来更新动作 ata_{t}。事实上,动作 ata_{t} 只能影响时刻 tt 之后的奖励 GtG_{t},但 G(τ)G(\tau) 包含了所有奖励,也包括采取 ata_{t} 之前的奖励。因此,公式可以修正如下:

θJ(θ)=EτP(;θ)[t=0T1Gtθlnπθ(atst)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[\sum_{t=0}^{T-1} G_{t} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t})\Bigg]

我们称之为 “reward-to-go” 策略梯度,其中,回报 GtG_{t} 可定义如下(忽略折扣因子 γ\gamma):

Gt=Rt+Rt+1++RT1=t=tT1RtG_{t} = R_{t} + R_{t+1} + \cdots + R_{T-1}= \sum_{t^{\prime}=t}^{T-1} R_{t^{\prime}}

该方法的核心在于,通过 GtG_{t} 来衡量 tt 时刻某个动作 ata_{t} 的好坏。然而,在强化学习中,通常并不使用绝对意义上的指标来衡量动作的好坏,更关注该动作比其他动作好多少。在下一节中,我们将通过引入 baseline 来解决这一问题。

Baselines in Policy Gradients

baseline 是一个状态 sts_{t} 的函数,通过从回报 GtG_{t} 中减去 b(st)b(s_{t}),策略梯度公式变为:

θJ(θ)=EτP(;θ)[t=0T1(Gtb(st))θlnπθ(atst)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[\sum_{t=0}^{T-1} \big(G_{t} - b(s_{t})\big) \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t})\Bigg]

我们希望 baseline 的引入可以减小方差,同时保持期望不变。对于方差的减小,因具体 baseline 函数而异。经验表明,b(st)=Vπ(st)b(s_{t}) = V^{\pi}(s_{t}) 可以有效降低方差。而对于期望的保持,如果对于任意函数 b(s)b(s),有:

Eaπθ(s)[θlnπθ(as)b(s)]=0\operatorname*{\mathbb{E}}_{a \sim \pi_\theta(\cdot \mid s)} [\nabla_{\theta} \ln \pi_\theta(a \mid s) b(s)] = 0

那么引入 b(s)b(s) 后,期望将保持不变。为了证明这一结论,我们首先证明一个引理,称为 Expected Grad-Log-Prob (EGLP) lemma。

EGLP Lemma. 假设随机变量 xx 服从参数化的概率分布 P(x;θ)\mathbb{P}(x;\theta),则有:

ExP(;θ)[θlnP(x;θ)]=0\operatorname*{\mathbb{E}}_{x \sim \mathbb{P}(\cdot;\theta)} [\nabla_{\theta} \ln \mathbb{P}(x;\theta)] = 0

第一步,任意概率分布都是归一化的:

xP(x;θ)dx=1\int_{x} \mathbb{P}(x;\theta)dx = 1

第二步,对等式两边求梯度:

θxP(x;θ)dx=θ1=0\nabla_{\theta} \int_{x} \mathbb{P}(x;\theta)dx = \nabla_{\theta} \cdot 1 = 0

第三步,使用对数导数技巧:

0=θxP(x;θ)dx=xθP(x;θ)dx=xP(x;θ)θlnP(x;θ)dx=ExP(;θ)[θlnP(x;θ)]\begin{aligned} 0 &= \nabla_{\theta} \int_{x} \mathbb{P}(x;\theta)dx \\ &= \int_{x} \nabla_{\theta} \mathbb{P}(x;\theta)dx \\ &= \int_{x} \mathbb{P}(x;\theta) \nabla_{\theta} \ln \mathbb{P}(x;\theta)dx \\ &= \operatorname*{\mathbb{E}}_{x \sim \mathbb{P}(\cdot;\theta)} [\nabla_{\theta} \ln \mathbb{P}(x;\theta)] \end{aligned}

EGLP Lemma 证毕。此时,将 πθ(as)\pi_\theta(a \mid s) 代入 P(x;θ)\mathbb{P}(x;\theta) 可得:

Eaπθ(s)[θlnπθ(as)]=0\operatorname*{\mathbb{E}}_{a \sim \pi_\theta(\cdot \mid s)} [\nabla_{\theta} \ln \pi_\theta(a \mid s)] = 0

最后,引入 b(s)b(s) 可得:

Eaπθ(s)[θlnπθ(as)b(s)]=0\operatorname*{\mathbb{E}}_{a \sim \pi_\theta(\cdot \mid s)} [\nabla_{\theta} \ln \pi_\theta(a \mid s) b(s)] = 0

至此,我们证明了引入 baseline 并不会改变期望。一个自然的问题是,除了 G(τ)G(\tau), GtG_{t}Gtb(st)G_{t}-b(s_{t}) 等函数,是否存在其他函数来衡量 ata_{t} 的好坏?在下一节,我们将给出更一般的形式。

Towards More General Policy Gradient

首先,我们直接给出策略梯度更一般的形式:

θJ(θ)=EτP(;θ)[t=0T1Φtθlnπθ(atst)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \mathbb{P}(\cdot;\theta)}\Bigg[\sum_{t=0}^{T-1} \Phi_{t} \nabla_{\theta} \ln \pi_{\theta}(a_{t} \mid s_{t})\Bigg]

前文已经探讨了 Φt\Phi_{t}G(τ)G(\tau), GtG_{t}Gtb(st)G_{t}-b(s_{t}) 的形式。除此之外,还有以下选择:

  1. 状态价值函数:Φt=Qπ(st,at)\Phi_{t} = Q^{\pi}(s_{t},a_{t})
  2. 优势函数:Φt=Aπ(st,at)=Qπ(st,at)Vπ(st)\Phi_{t} = A^{\pi}(s_{t},a_{t}) = Q^{\pi}(s_{t},a_{t}) - V^{\pi}(s_{t})

对于 Φt=Qπ(st,at)\Phi_{t} = Q^{\pi}(s_{t},a_{t}) 合理性的证明我们不再给出,可见 Proof for Using Q-Function in Policy Gradient Formula。而对 Φt=Aπ(st,at)\Phi_{t} = A^{\pi}(s_{t},a_{t}) 合理性的证明,可以视为在 Qπ(st,at)Q^{\pi}(s_{t},a_{t}) 基础上采用 baseline b(st)=Vπ(st)b(s_{t}) = V^{\pi}(s_{t})

Note

后两种形式中的 Qπ(st,at)Q^{\pi}(s_{t},a_{t})Aπ(st,at)A^{\pi}(s_{t},a_{t}) 均与 πθ\pi_{\theta} 有关,但实际中会采用 Value Network 进行近似。所以在求对 θ\theta 的梯度时,可仍然视为常数。