Contents

强化学习的数学原理(九):策略梯度方法

策略梯度方法将策略直接参数化为一个由 $θ$ 定义的可微函数 $\pi_\theta$(如神经网络),进而将强化学习问题转化为一个优化问题:它定义了一个衡量策略优劣的性能度量 $J(θ)$,并计算该度量关于参数 $θ$ 的梯度,最终通过梯度上升算法,沿着梯度方向迭代更新参数,以寻找能使性能度量最大化的最优策略。

在强化学习领域,策略的表示方法直接决定了算法的设计和应用范围。传统方法通常依赖于表格形式,但这在处理大规模或连续状态空间时会遇到维度灾难问题。为此,我们引入了基于函数逼近的策略表示,这正是策略梯度法(Policy Gradient Methods)的基石。

1. 策略表示的演进:从表格到函数

传统表格策略

在早期的方法中,策略 $\pi(a|s)$ 被存储在一个二维表格中,行代表状态(state),列代表动作(action),表格中的每个条目则表示在特定状态下选择某个动作的概率。

$a_1$$a_2$$\dots$
$s_1$$\pi(a_1|s_1)$$\pi(a_2|s_1)$$\dots$
$\dots$$\dots$$\dots$$\dots$

参数化策略函数

为了应对高维空间,我们使用一个带有参数 $\theta \in \mathbb{R}^m$ 的函数来表示策略: $$\pi(a|s, \theta)$$ 这个函数通常是一个神经网络,其中状态 $s$ 作为输入,网络输出在状态 $s$ 下采取各个动作的概率分布,而 $\theta$ 就是这个神经网络的权重参数。

两种表示法的主要差异

从表格表示到函数表示的转变,带来了三个核心变化:

  1. 最优策略的定义

    • 表格:一个策略 $\pi$ 是最优的,如果它能使每一个状态的价值函数最大化,即 $\forall s, V_\pi(s) \geq V_{\pi’}(s)$。
    • 函数:由于无法保证对所有状态都最优,我们转而寻求一个能最大化**某个标量性能度量(scalar performance metric)**的策略。
  2. 获取动作概率的方式

    • 表格:直接查表获得。
    • 函数:通过输入状态 $s$ 和参数 $\theta$ 计算 $\pi(a|s, \theta)$。
  3. 策略更新的方式

    • 表格直接修改表格中的概率值。
    • 函数:通过修改参数 $\theta$ 来间接改变策略。

3. 定义最优策略的性能度量

为了使用参数化策略,我们需要一个可优化的目标函数 $J(\theta)$。常见的性能度量有两种。

3.1. 平均状态价值 (Average State Value)

该度量是所有状态价值的加权平均值: $$\bar{V}_{\pi} = \sum_{s \in S} d(s) V_\pi(s)$$ 其中,$d(s) \geq 0$ 是状态 $s$ 的权重,且 $\sum_{s \in S} d(s)=1$。因此,$d(s)$ 可以被看作一个状态的概率分布,该度量可以写作期望形式: $$\bar{V}_{\pi} = E[V_\pi(S)] \quad \text{where } S \sim d$$ 写成向量形式则为 $\bar{V}_{\pi} = \mathbf{d}^T \mathbf{V}_\pi$。

where $$\mathbf{V}_\pi = [\dots, V_\pi(s), \dots]^T \in \mathbb{R}^{|S|}$$ $$\mathbf{d} = [\dots, d(s), \dots]^T \in \mathbb{R}^{|S|}$$

关于状态分布 $d(s)$ 的选择,通常有两种情况:

d 独立于策略 π (d is independent of the policy π)

这种方式的主要优点是便于求解梯度。我们将这种独立于策略的分布记为 $d_0$,对应的性能度量记为 $\bar{V}_{\pi}^0$。由于 $d_0$ 不依赖于策略参数 $\theta$,其梯度可以直接表示为:$\nabla \bar{V}_{\pi}^0 = \mathbf{d}_0^T \nabla \mathbf{V}_{\pi}$。

如何选择 $d_0$:

  1. 均匀分布:将权重平均分配给所有状态,即 $d_0(s) = \frac{1}{|S|}$。
  2. 指定初始状态:在某些任务中,我们只关心从某一个特定初始状态 $s_0$ 出发的情况(例如,所有回合都从同一状态开始)。此时,我们只关心从 $s_0$ 开始的长期回报,可以将分布设置为 $d_0(s_0) = 1$,而对于所有其他状态 $s \neq s_0$,则 $d_0(s) = 0$。

d 依赖于策略 π (d depends on the policy π)

一种更常见且理论上更重要的方式是将 $d$ 选为当前策略 $\pi$ 下的稳态分布 (stationary distribution),记为 $d_{\pi}(s)$。

稳态分布描述了当智能体遵循策略 $\pi$ 与环境长期交互后,处于各个状态的概率分布。它满足以下方程: $$d_{\pi} P_{\pi} = d_{\pi}^T$$ 其中 $P_{\pi}$ 是在策略 $\pi$ 下的状态转移矩阵。使用稳态分布作为权重,意味着我们关心的是在策略 $\pi$ 的长期影响下,智能体能够获得的平均价值。

3.2. 平均奖励 (Average Reward)

该度量定义为在稳态分布下的单步即时奖励的期望: $$\bar{r}_{\pi} \doteq \sum_{s \in S} d_{\pi}(s) r_{\pi}(s) = E[r_{\pi}(S)], \quad \text{where } S \sim d_{\pi}$$ 其中,$r_{\pi}(s) \doteq \sum_{a \in A} \pi(a|s) r(s,a)$ 是在状态 $s$ 下的期望即时奖励。

  • The weight $d_{\pi}$ is the stationary distribution.
  • $\bar{r}_{\pi}$ is simply a weighted average of the one-step immediate rewards.

一个等价且更直观的定义是:智能体遵循策略 $\pi$ 产生的轨迹上,单步奖励的长期时间平均值$(R_{t+1}, R_{t+2}, …)$。一个重要的性质是,这个长期平均值收敛于 $\bar{r}_{\pi}$,且与初始状态无关。

  • 沿着轨迹得到的单步奖励平均值:

    $$\lim_{n \to \infty} \frac{1}{n} E[R_{t+1} + R_{t+2} + \dots + R_{t+n} | S_t = s_0]$$

    $$= \lim_{n \to \infty} \frac{1}{n} E[\sum_{k=1}^{n} R_{t+k} | S_t = s_0]$$

    Where $S_0$ is the starting state of the trajectory.

    $$\begin{aligned} & \lim_{n \to \infty} \frac{1}{n} E[\sum_{k=1}^{n} R_{t+k} | S_t = s_0] \\ &= \lim_{n \to \infty} \frac{1}{n} E[\sum_{k=1}^{n} R_{t+k}]\\ &= \sum_{s} d_{\pi}(s) r_{\pi}(s)\\ &= \bar{r}_{\pi}(s)\\ \end{aligned}$$

度量之间的关系总结

  1. 与参数 $\theta$ 的关系:上述所有度量都是策略 $\pi$ 的函数,而 $\pi$ 由参数 $\theta$ 决定,因此这些度量最终都是 $\theta$ 的函数,我们可以通过优化 $\theta$ 来最大化它们。
  2. 与折扣因子 $\gamma$ 的关系:平均状态价值通常用于折扣情况($\gamma \in [0, 1)$),而平均奖励用于非折扣情况($\gamma=1$)。
  3. 等价性:在折扣情况下,平均状态价值和平均奖励是等价的,它们之间存在一个简单的比例关系:$\bar{r}_{\pi} = (1-\gamma) \bar{V}_{\pi}$。

两种度量的统一形式

  • 平均状态价值: $$J(\theta) = E[\sum_{t=0}^{\infty} \gamma^t R_{t+1}] = \sum_{s \in S} d(s) E[\sum_{t=0}^{\infty} \gamma^t R_{t+1} | S_0=s] = E[V_{\pi}(S)] = \sum_{s \in S} d_{\pi}(s) V_{\pi}(s)$$
  • 平均奖励: $$J(\theta) = \lim_{n \to \infty} \frac{1}{n} E[\sum_{t=1}^{n} R_t] = E[r_{\pi}(s)] = \sum_{s \in S} d_{\pi}(s) r_{\pi}(s)$$

4. 策略梯度的基本思想与推导

策略梯度法的核心思想非常直接:

  1. 选择一个性能度量作为目标函数 $J(\theta)$。
  2. 使用梯度上升算法来寻找最优参数 $\theta$。 $$\theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta_t)$$ 这里的关键在于如何计算梯度 $\nabla_\theta J(\theta)$。

策略梯度定理 (Policy Gradient Theorem)

幸运的是,对于我们之前定义的几类性能度量($\bar{V}_{\pi}$, $\bar{r}_{\pi}$, $\bar{V}_{\pi}^0$),它们的梯度形式具有惊人的一致性。该定理给出了一个统一的梯度表达式: $$\nabla_{\theta} J(\theta) = \sum_{s \in S} \eta(s) \sum_{a \in A} \nabla_{\theta} \pi(a|s,\theta) q_{\pi}(s,a)$$ 其中:

  • $J(\theta)$ can be $\bar{V}_{\pi}$, $\bar{r}_{\pi}$, or $\bar{V}_{\pi}^0$
  • “=” may denote strict 等于, 近似, or 成比例.
  • $\eta(s)$ 是一个与策略相关的状态分布。

推导过程:从求和到期望

上述求和形式在理论上很优美,但在实践中难以直接使用。我们可以通过一个关键的数学技巧——对数导数技巧 (Log-derivative Trick)——将其转化为更实用的期望形式。

证明:

  1. 首先,我们将关于状态的求和改写为期望形式: $$\nabla_{\theta} J(\theta) = \sum_{s \in S} \eta(s) \left[ \sum_{a \in A} \nabla_{\theta} \pi(a|s,\theta) q_{\pi}(s,a) \right] = E_{S \sim \eta}\left[\sum_{a \in A} \nabla_{\theta} \pi(a|S,\theta) q_{\pi}(S,a)\right]$$

  2. 应用对数导数技巧:$\nabla_x \ln f(x) = \frac{\nabla_x f(x)}{f(x)}$,变形后得到 $\nabla_x f(x) = f(x) \nabla_x \ln f(x)$。我们将其应用于策略 $\pi$: $$\nabla_{\theta} \pi(a|s,\theta) = \pi(a|s,\theta) \nabla_{\theta} \ln \pi(a|s,\theta)$$

  3. 将此式代入第 1 步的期望中: $$\nabla_{\theta} J(\theta) = E_{S \sim \eta}\left[\sum_{a \in A} \pi(a|s,\theta) \nabla_{\theta} \ln \pi(a|s,\theta) q_{\pi}(s,a)\right]$$

  4. 最后,我们将关于动作的求和也改写为期望形式,因为内部求和项正是对动作 $A \sim \pi(\cdot|S, \theta)$ 的期望: $$\nabla_{\theta} J(\theta) = E_{S \sim \eta, A \sim \pi(S,\theta)}[\nabla_{\theta} \ln \pi(A|S,\theta) q_{\pi}(S,A)]$$ 这个最终的期望形式是大多数现代策略梯度算法的基础。

具体度量的梯度形式 (Gradients for Specific Metrics)

根据所选度量的不同,策略梯度定理有一些具体的结果:

  • 对于平均奖励 $\bar{r}_{\pi}$:

    $$\nabla_{\theta} \bar{r}_{\pi} \approx \sum_{s} d_{\pi}(s) \sum_{a} \nabla_{\theta} \pi(a|s,\theta) q_{\pi}(s,a)$$

  • 平均状态价值 $\bar{V}_{\pi}$ 和平均奖励的梯度关系:

    $$\nabla_{\theta} \bar{V}_{\pi} = \frac{1}{1-\gamma} \nabla_{\theta} \bar{r}_{\pi}$$

  • 对于指定初始状态的平均状态价值 $\bar{V}_{\pi}^0$:

    $$\nabla_{\theta} \bar{V}_{\pi}^0 = \sum_{s \in S} \rho_{\pi}(s) \sum_{a \in A} \nabla_{\theta} \pi(a|s,\theta) q_{\pi}(s,a)$$ (注:$\rho_{\pi}(s)$ 是另一种状态分布,表示从初始状态出发,在策略 $\pi$ 下访问状态 $s$ 的加权时间总和。)

实现说明

  • 为了计算 $\ln \pi$,我们必须保证策略在任何情况下选择任一动作的概率都大于零,即 $\pi(a|s,\theta) > 0$。这通常通过 Softmax 函数来实现,例如: $$\pi(a|s,\theta) = \frac{e^{h(s,a,\theta)}}{\sum_{a’ \in A} e^{h(s,a’,\theta)}}$$
  • 由于 Softmax 输出的概率总是大于零,参数化策略天然就是**随机性(stochastic)的,因此自带一定的探索(exploratory)能力。与之相对的,也存在确定性策略梯度(Deterministic Policy Gradient, DPG)**方法。

5. 梯度上升算法

基于梯度的期望形式,策略更新规则为: $$\theta_{t+1} = \theta_t + \alpha E_{S \sim \eta, A \sim \pi}[\nabla_{\theta} \ln \pi(A|S, \theta_t) q_{\pi}(S,A)]$$

从理论到实践:随机梯度上升

在实践中,我们无法计算完整的期望,因此使用随机梯度,即在每个时间步 $t$ 用一个从环境中采样得到的样本 $(s_t, a_t)$ 来近似梯度: $$\theta_{t+1} = \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) q_{\pi}(s_t, a_t)$$ 但这里的动作价值函数 $q_{\pi}$ 仍然是未知的。我们可以用一个估计值 $q_t(s_t, a_t)$ 来替代它,常用的估计方法包括:

  • 蒙特卡洛(Monte-Carlo)方法:使用一个完整回合的未来回报作为估计值(如 REINFORCE 算法)。
  • 时序差分(TD)方法:使用当前回报和下一状态的价值估计来构建目标(如 Actor-Critic 算法)。

采样方式与在线策略

从期望到单样本的近似 $ E_{S \sim \eta, A \sim \pi}[\nabla_{\theta} \ln \pi(A|S, \theta_t) q_{\pi}(S,A)] \rightarrow \nabla_{\theta} \ln \pi(a|s, \theta_t) q_{\pi}(s, a)$ 背后是清晰的采样流程:

  1. 如何采样状态 S? 状态 $S_t$ 从策略 $\pi$ 与环境交互产生的长期状态分布中采样得到。
  2. 如何采样动作 A? 动作 $a_t$ 必须根据当前的策略 $\pi(\cdot|S_t, \theta_t)$ 进行采样。

由于参数更新依赖于当前策略所产生的样本,策略梯度法是典型的**在线策略(On-policy)**方法。

算法的直观解释

为了深入理解策略梯度算法的行为,我们可以对其更新规则进行一次巧妙的改写。算法的原始更新形式是: $$\theta_{t+1} = \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) q_t(s_t, a_t)$$利用 $\nabla_{\theta} \ln \pi = \frac{\nabla_{\theta} \pi}{\pi}$,我们可以得到等价形式:$$\theta_{t+1} = \theta_t + \alpha \underbrace{\left( \frac{q_t(s_t, a_t)}{\pi(a_t|s_t, \theta_t)} \right)}_{\text{核心系数} \beta_t} \nabla_{\theta} \pi(a_t|s_t, \theta_t)$$ 整个算法的精髓,都蕴含在这个核心系数 $\beta_t$ 中。我们可以从它的符号大小两个维度来进行分析。

1. 分析 $\beta_t$ 的符号:决定策略更新的方向

$\beta_t$ 的符号完全由回报的估计 $q_t(s_t, a_t)$ 的符号决定。这直接控制了策略更新是奖励还是惩罚一个动作:

  • 当 $\beta_t > 0$ (即 $q_t > 0$,这是一个“好”动作):

    • 此时算法执行的是对动作概率 $\pi(a_t|s_t, \theta_t)$ 的梯度上升
    • 其效果是 $\pi(a_t|s_t, \theta_{t+1}) > \pi(a_t|s_t, \theta_t)$,即增大未来选择这个好动作的概率。
  • 当 $\beta_t < 0$ (即 $q_t < 0$,这是一个“坏”动作):

    • 此时算法执行的是对动作概率 $\pi(a_t|s_t, \theta_t)$ 的梯度下降
    • 其效果是 $\pi(a_t|s_t, \theta_{t+1}) < \pi(a_t|s_t, \theta_t)$,即减小未来选择这个坏动作的概率。

2. 分析 $\beta_t$ 的大小:平衡探索(Exploration)与利用(Exploitation)

$\beta_t$ 的大小(绝对值)决定了本次更新的步长或强度,它由分子和分母共同作用,完美地平衡了探索与利用:

  • 分子 $q_t(s_t, a_t)$ 驱动“利用”:

    • $\beta_t$ 的大小与回报 $q_t$ 的大小成正比
    • 一个动作带来的回报越高,$\beta_t$ 的绝对值就越大,参数更新的幅度也越大。
    • 这鼓励算法去**利用(Exploitation)**那些它已知的、能带来高回报的动作。
  • 分母 $\pi(a_t|s_t, \theta_t)$ 驱动“探索”:

    • $\beta_t$ 的大小与动作概率 $\pi$ 成反比
    • 如果一个罕见的、低概率的动作(即 $\pi$ 很小)碰巧带来了很高的回报(即 $q_t$ 很大),那么 $\beta_t$ 的值将会被急剧放大。
    • 这使得策略参数会进行一次非常大的调整,来响应这个“惊喜”的、出乎意料的好结果。这鼓励算法去**探索(Exploration)**那些当前不被看好但可能具有巨大潜力的动作。

6. 算法伪代码:REINFORCE (蒙特卡洛策略梯度)

REINFORCE 算法是策略梯度法最基础的实现之一,它使用蒙特卡洛方法来估计 $q_{\pi}$。

Pseudocode: Policy Gradient by Monte Carlo (REINFORCE)

Initialization: A parameterized function $\pi(a|s, \theta)$, $\gamma \in (0, 1)$, and $\alpha > 0$.

Aim: Search for an optimal policy maximizing $J(\theta)$.


For the k-th iteration, do:

  1. Select $s_0$ and generate an episode following $\pi(\theta_k)$. Suppose the episode is {$s_0, a_0, r_1, \dots, s_{T-1}, a_{T-1}, r_T$}.

  2. For $t = 0, 1, \dots, T-1$, do:

    • Value update: $q_t(s_t, a_t) = \sum_{k=t+1}^{T} \gamma^{k-t-1} r_k$
    • Policy update: $\theta_{t+1} = \theta_t + \alpha \nabla \ln \pi(a_t|s_t, \theta_t) q_t(s_t, a_t)$
  3. $\theta_k = \theta_T$

通过不断重复上述过程,策略参数 $\theta$ 会朝着最大化长期回报的方向收敛,最终得到一个近似最优的策略。