概述与理论背景
Actor-Critic方法是强化学习中的一类重要算法,它巧妙地结合了基于策略(policy-based)和基于价值(value-based)的方法。在这种结构中,"Actor"指策略更新步骤,负责根据策略执行动作;而"Critic"指价值更新步骤,负责评估Actor的表现。从另一个角度看,Actor-Critic方法本质上仍是策略梯度算法,可以通过扩展策略梯度算法获得。
Actor-Critic方法在强化学习中的位置非常重要,它既保留了策略梯度方法直接优化策略的优势,又利用了值函数方法的效率。这种结合使得Actor-Critic方法成为解决复杂强化学习问题的强大工具。
最简单的Actor-Critic算法(QAC)
QAC算法通过扩展策略梯度方法得到。策略梯度方法的核心思想是通过最大化标量度量\(J(\theta)\)来搜索最优策略。其梯度上升算法为:
由于真实梯度未知,我们使用随机梯度近似:
方程(2) 非常重要,因为它清楚地展示了如何结合基于策略和基于价值的方法:
- 基于策略的特性:该算法直接更新策略参数,因此是基于策略的算法。
- 基于价值的需求:该方程需要知道 \(q_t(s_t, a_t)\),这是动作价值 \(q_\pi(s_t, a_t)\) 的估计。因此,需要另一个基于价值的算法来生成 \(q_t(s_t, a_t)\)。
到目前为止,我们主要研究了两种估计动作价值的方法:
- 第一种基于蒙特卡洛学习
- 第二种是时序差分(TD)学习
根据 \(q_t(s_t, a_t)\) 的估计方法,策略梯度算法也可以分为两类:
- REINFORCE或蒙特卡洛策略梯度:如果 \(q_t(s_t, a_t)\) 是通过蒙特卡洛学习估计的,相应的算法称为REINFORCE或蒙特卡洛策略梯度,这已经在 策略梯度算法 介绍过。
- Actor-Critic:如果 \(q_t(s_t, a_t)\) 是通过TD学习估计的,相应的算法通常称为actor-critic。因此,actor-critic方法可以通过将基于TD的价值估计整合到策略梯度方法中获得。
Q actor-critic(QAC) 的伪代码算法如下:

在QAC算法中:
- Critic对应于通过Sarsa算法 进行的值更新步骤。动作值由参数化函数 \(q(s, a, w)\) 表示。
- Actor对应于方程(2) 中的策略更新步骤。
这个actor-critic算法有时被称为Q actor-critic (QAC)。尽管它很简单,但QAC揭示了actor-critic方法的核心思想。正如本文其余部分所示,它可以被扩展以生成许多高级算法。
Advantage Actor-Critic (A2C)
Advantage Actor-Critic 的核心观点是在策略梯度方法中引入基线(baseline)来降低估计的方差。
Baseline invariance
在策略梯度中,一个有趣的属性是,它对于额外的基线不变的:
其中 \(b(S)\) 是状态 \(S\) 的任意标量函数。(3)式 这种不变性成立的条件是:
这个等式成立的证明如下:
基线之所以有用,是因为它能在我们使用样本近似真实梯度时减少近似方差。具体来说,定义:
真实梯度是\(E[X(S, A)]\)。由于我们需要使用随机样本 \(x\) 来近似 \(E[X]\),如果方差 \(\text{var}(X)\) 较小,这将是有利的。例如:
- 如果\(\text{var}(X)\)接近零,那么任何样本 \(x\) 都能准确地近似 \(E[X]\)
- 相反,如果 \(\text{var}(X)\) 很大,样本值可能与 \(E[X]\) 相差很远
虽然 \(E[X]\) 对基线不变,但方差 \(\text{var}(X)\) 不是。我们的目标是设计一个好的基线来最小化 \(\text{var}(X)\)。在REINFORCE和QAC算法的设定中,我们设置\(b = 0\),但这不能保证是一个好的基线。
实际上,能最小化 \(\text{var}(X)\) 的最优基线是:
🧾 *证明 *\(b^*(s)\) 是最优基线****
虽然 (5) 中的基线是最优的,但它在实践中过于复杂,难以使用。如果从(5) 中移除权重\(\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2\),我们可以得到一个表达简洁的次优基线:
有趣的是,这个次优基线就是状态值函数。
- 为什么最优基线能减少方差?
- 最优基线与权重的关系
- 为什么状态值是一个好的次优基线?
A2C算法实现
当 \(b(s) = v_\pi(s)\) 时,梯度上升算法变为:
其中,
称为优势函数(advantage function),它反映了一个动作相对于其他动作的优势。更具体地说,注意到\(v_\pi(s) = \sum_{a\in A} \pi(a|s)q_\pi(s, a)\) 是动作值的平均值。如果\(\delta_\pi(s, a) > 0\),这意味着相应的动作具有比平均值更大的价值。
这种相对度量比绝对的 \(q\) 值更有用,因为它直接告诉我们哪些动作值得执行,哪些应该避免。
方程(7) 的随机版本是:
其中 \(s_t, a_t\) 是时间 \(t\) 时\(S, A\)的样本。这里,\(q_t(s_t, a_t)\) 和 \(v_t(s_t)\) 分别是\(q_{\pi(\theta_t)}(s_t, a_t)\)和\(v_{\pi(\theta_t)}(s_t)\)的近似。
方程(8) 中的算法基于 \(q_t\) 相对于 \(v_t\) 的相对值而非 \(q_t\) 的绝对值来更新策略。这在直觉上是合理的,因为当我们尝试在某个状态选择动作时,我们只关心哪个动作相对于其他动作具有最大的价值。
这种相对值的有几个优点:
- 消除状态依赖的偏差:不同状态可能有不同的值范围,使用相对值可以消除这种偏差
- 聚焦于动作选择:强化学习的核心是选择最佳动作,而不是精确估计每个动作的绝对值
- 减少方差:如前所述,使用基线可以减少梯度估计的方差
根据 \(q_t(s_t, a_t)\) 和 \(v_t(s_t)\) 的估计方式,我们可以得到不同的算法:
- 带基线的REINFORCE:如果\(q_t(s_t, a_t)\) 和 \(v_t(s_t)\) 通过蒙特卡洛学习估计,方程(8) 中的算法被称为带基线的REINFORCE。
- 优势Actor-Critic (A2C):如果 \(q_t(s_t, a_t)\) 和 \(v_t(s_t)\) 通过TD学习估计,该算法通常被称为advantage actor-critic (A2C)。
A2C的实现在算法如下:

值得注意的是,这个实现中的优势函数通过TD误差近似:
这种近似是合理的,因为:
这是由于\(q_\pi(s_t, a_t)\) 的定义。使用TD误差的一个优点是我们只需要使用单个神经网络来表示 \(v_\pi(s)\)。否则,如果\(\delta_t = q_t(s_t, a_t) - v_t(s_t)\),我们需要维护两个网络分别表示 \(v_\pi(s)\) 和 \(q_\pi(s, a)\)。
当我们使用TD误差时,该算法也可以被称为TD Actor-Critic。此外,值得注意的是,策略\(\pi(\theta_t)\) 本身是随机的,因此具有探索性。因此,它可以直接用于生成经验样本,而不依赖于\(\epsilon\)-贪心等技术。
A2C算法展示了如何将理论见解(如基线不变性和优势函数)转化为实用算法。通过使用TD误差作为优势函数的近似,A2C在理论优雅性和实践效率之间取得了很好的平衡。
这种平衡使A2C成为现代深度强化学习中的基础算法,并催生了许多变体和改进,如A3C等,这些算法在各种复杂任务中都取得了显著成功。
💡 *A3C算法简介:*
Off-policy Actor-Critic
到目前为止我们研究的策略梯度方法,包括REINFORCE、QAC和A2C,都是在线策略(on-policy)的。这一点可以从真实梯度的表达式中看出:
要使用样本近似这个真实梯度,我们必须通过遵循策略 \(\pi(\theta)\) 来生成动作样本。因此,\(\pi(\theta)\) 是行为策略(behavior policy)。由于 \(\pi(\theta)\) 也是我们要改进的目标策略(target policy),所以策略梯度方法是在线策略的。
这种在线策略的特性带来了一个重要限制:我们只能使用当前策略生成的数据来改进该策略,这可能导致样本效率低下,特别是在数据收集成本高的环境中。
在实际应用中,我们可能已经有一些由给定行为策略生成的样本,希望能够利用这些样本来学习和改进目标策略。例如:
- 历史数据利用:利用之前收集的交互数据
- 专家演示学习:利用人类专家生成的示范数据
- 探索效率提升:使用更具探索性的行为策略收集多样化数据
为了实现这一点,我们可以采用一种称为重要性采样(importance sampling)的技术。值得一提的是,重要性采样技术不限于强化学习领域,它是一种通用技术,用于使用从一个概率分布中抽取的样本来估计在另一个概率分布上定义的期望值。
重要性采样技术
我们接下来介绍重要性采样技术。考虑一个随机变量 \(X \in \mathcal{X}\)。假设 \(p_0(X)\) 是一个概率分布。我们的目标是估计 \(E_{X\sim p_0}[X]\)。假设我们有一些独立同分布的样本\(\{x_i\}_{i=1}^n\)。
这里有两种情况需要考虑:
- 情况1:样本来自目标分布
- 情况2:样本来自不同分布
在第二种情况下,\(E_{X\sim p_0}[X]\) 可以基于重要性采样技术来近似。具体来说,\(E_{X\sim p_0}[X]\) 满足:
因此,估计 \(E_{X\sim p_0}[X]\) 变成了估计 \(E_{X\sim p_1}[f(X)]\) 的问题,其中 \(f(x) = \frac{p_0(x)}{p_1(x)}x\)。让
由于 \(\bar{f}\) 可以有效地近似 \(E_{X\sim p_1}[f(X)]\),从 (9) 可以得出:
方程(10) 表明,\(E_{X\sim p_0}[X]\) 可以通过 \(x_i\) 的加权平均来近似。这里,\(\frac{p_0(x_i)}{p_1(x_i)}\) 被称为重要性权重。当\(p_1 = p_0\) 时,重要性权重为 1,\(\bar{f}\) 变为 \(\bar{x}\)。当 \(p_0(x_i) \geq p_1(x_i)\) 时,\(x_i\) 在 \(p_0\) 下可以被更频繁地采样,但在 \(p_1\) 下较少被采样。在这种情况下,重要性权重大于1,强调了这个样本的重要性。
一些读者可能会问以下问题:既然方程(10) 中需要 \(p_0(x)\),为什么不直接使用其定义 \(E_{X\sim p_0}[X] = \sum_{x\in\mathcal{X}} p_0(x)x\)来计算 \(E_{X\sim p_0}[X]\)?