强化学习的数学原理(九):策略梯度方法
策略梯度方法将策略直接参数化为一个由 $θ$ 定义的可微函数 $\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$ 就是这个神经网络的权重参数。
两种表示法的主要差异
从表格表示到函数表示的转变,带来了三个核心变化:
最优策略的定义:
- 表格:一个策略 $\pi$ 是最优的,如果它能使每一个状态的价值函数最大化,即 $\forall s, V_\pi(s) \geq V_{\pi’}(s)$。
- 函数:由于无法保证对所有状态都最优,我们转而寻求一个能最大化**某个标量性能度量(scalar performance metric)**的策略。
获取动作概率的方式:
- 表格:直接查表获得。
- 函数:通过输入状态 $s$ 和参数 $\theta$ 计算 $\pi(a|s, \theta)$。
策略更新的方式:
- 表格:直接修改表格中的概率值。
- 函数:通过修改参数 $\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$:
- 均匀分布:将权重平均分配给所有状态,即 $d_0(s) = \frac{1}{|S|}$。
- 指定初始状态:在某些任务中,我们只关心从某一个特定初始状态 $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}$$
度量之间的关系总结
- 与参数 $\theta$ 的关系:上述所有度量都是策略 $\pi$ 的函数,而 $\pi$ 由参数 $\theta$ 决定,因此这些度量最终都是 $\theta$ 的函数,我们可以通过优化 $\theta$ 来最大化它们。
- 与折扣因子 $\gamma$ 的关系:平均状态价值通常用于折扣情况($\gamma \in [0, 1)$),而平均奖励用于非折扣情况($\gamma=1$)。
- 等价性:在折扣情况下,平均状态价值和平均奖励是等价的,它们之间存在一个简单的比例关系:$\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. 策略梯度的基本思想与推导
策略梯度法的核心思想非常直接:
- 选择一个性能度量作为目标函数 $J(\theta)$。
- 使用梯度上升算法来寻找最优参数 $\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)——将其转化为更实用的期望形式。
证明:
首先,我们将关于状态的求和改写为期望形式: $$\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]$$
应用对数导数技巧:$\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)$$
将此式代入第 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]$$
最后,我们将关于动作的求和也改写为期望形式,因为内部求和项正是对动作 $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)$ 背后是清晰的采样流程:
- 如何采样状态 S? 状态 $S_t$ 从策略 $\pi$ 与环境交互产生的长期状态分布中采样得到。
- 如何采样动作 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:
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$}.
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)$
$\theta_k = \theta_T$
通过不断重复上述过程,策略参数 $\theta$ 会朝着最大化长期回报的方向收敛,最终得到一个近似最优的策略。