Reading

Actor-Critic Methods

概述与理论背景

Actor-Critic方法是强化学习中的一类重要算法,它巧妙地结合了基于策略(policy-based)和基于价值(value-based)的方法。在这种结构中,"Actor"指策略更新步骤,负责根据策略执行动作;而"Critic"指价值更新步骤,负责评估Actor的表现。从另一个角度看,Actor-Critic方法本质上仍是策略梯度算法,可以通过扩展策略梯度算法获得。

Actor-Critic方法在强化学习中的位置非常重要,它既保留了策略梯度方法直接优化策略的优势,又利用了值函数方法的效率。这种结合使得Actor-Critic方法成为解决复杂强化学习问题的强大工具。

最简单的Actor-Critic算法(QAC)

QAC算法通过扩展策略梯度方法得到。策略梯度方法的核心思想是通过最大化标量度量\(J(\theta)\)来搜索最优策略。其梯度上升算法为:

\[\begin{equation}\begin{aligned}\theta_{t+1} &= \theta_t + \alpha\nabla_\theta J(\theta_t)\\&= \theta_t + \alpha E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)q_\pi(S, A)]\end{aligned}\tag{1}\end{equation}\]

由于真实梯度未知,我们使用随机梯度近似:

\[\begin{equation}\theta_{t+1} = \theta_t + \alpha\nabla_\theta \ln \pi(a_t|s_t, \theta_t)q_t(s_t, a_t)\tag{2}\end{equation}\]

(2)非常重要,因为它清楚地展示了如何结合基于策略和基于价值的方法:

  1. 基于策略的特性:该算法直接更新策略参数,因此是基于策略的算法。
  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)\) 的估计方法,策略梯度算法也可以分为两类:

  1. REINFORCE或蒙特卡洛策略梯度:如果 \(q_t(s_t, a_t)\) 是通过蒙特卡洛学习估计的,相应的算法称为REINFORCE或蒙特卡洛策略梯度,这已经在 策略梯度算法 介绍过。
  2. Actor-Critic:如果 \(q_t(s_t, a_t)\) 是通过TD学习估计的,相应的算法通常称为actor-critic。因此,actor-critic方法可以通过将基于TD的价值估计整合到策略梯度方法中获得。

Q actor-critic(QAC) 的伪代码算法如下:

image

在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

在策略梯度中,一个有趣的属性是,它对于额外的基线不变的:

\[\begin{equation}E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)q_\pi(S, A)] = E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)(q_\pi(S, A) - b(S))]\tag{3}\end{equation}\]

其中 \(b(S)\) 是状态 \(S\) 的任意标量函数。(3)这种不变性成立的条件是:

\[E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)b(S)] = 0\]

这个等式成立的证明如下:

\[\begin{aligned} E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)b(S)] &= \sum_{s\in S}\eta(s)\sum_{a\in A}\pi(a|s, \theta_t)\nabla_\theta \ln \pi(a|s, \theta_t)b(s)\\ &= \sum_{s\in S}\eta(s)\sum_{a\in A}\nabla_\theta\pi(a|s, \theta_t)b(s)\\ &= \sum_{s\in S}\eta(s)b(s)\sum_{a\in A}\nabla_\theta\pi(a|s, \theta_t)\\ &= \sum_{s\in S}\eta(s)b(s)\nabla_\theta\sum_{a\in A}\pi(a|s, \theta_t)\\ &= \sum_{s\in S}\eta(s)b(s)\nabla_\theta 1 = 0 \end{aligned}\]

基线之所以有用,是因为它能在我们使用样本近似真实梯度时减少近似方差。具体来说,定义:

\[\begin{equation}X(S, A) \stackrel{.}{=} \nabla_\theta \ln \pi(A|S, \theta_t)[q_\pi(S, A) - b(S)]\tag{4}\end{equation}\]

真实梯度是\(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)\) 的最优基线是:

\[\begin{equation}b^*(s) = \frac{E_{A\sim\pi}[\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2 q_\pi(s, A)]}{E_{A\sim\pi}[\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2]}, \quad s \in S\tag{5}\end{equation}\]

证明 \(b^*(s)\) 是最优基线

\(\bar{x} \stackrel{.}{=} E[X]\),这对任何 \(b(s)\) 都是不变的。如果 \(X\) 是一个向量,它的方差是一个矩阵。通常选择 \(\text{var}(X)\) 的迹作为优化的标量目标函数:

\[\begin{equation} \begin{aligned} \text{tr}[\text{var}(X)] &= \text{tr}E[(X - \bar{x})(X - \bar{x})^T] \\ &= \text{tr}E[XX^T - \bar{x}X^T - X\bar{x}^T + \bar{x}\bar{x}^T] \\ &= E[X^TX - X^T\bar{x} - \bar{x}^TX + \bar{x}^T\bar{x}] \\ &= E[X^TX] - \bar{x}^T\bar{x} \end{aligned}\tag{6}\end{equation}\]

在推导上述等式时,我们使用了迹的性质:对于任何适当维度的方阵 \(A\)\(B\)\(\text{tr}(AB) = \text{tr}(BA)\)。由于 \(\bar{x}\) 是不变的,(6)表明我们只需要最小化 \(E[X^TX]\)。根据(4)\(X\)的定义,我们有:

\[\begin{aligned} E[X^TX] &= E[(\nabla_\theta \ln \pi)^T(\nabla_\theta \ln \pi)(q_\pi(S, A) - b(S))^2] \\ &= E[\|\nabla_\theta \ln \pi\|^2(q_\pi(S, A) - b(S))^2] \end{aligned}\]

其中\(\pi(A|S, \theta)\) 简写为 \(\pi\)。由于\(S \sim \eta\)\(A \sim \pi\),上述等式可以重写为:

\[E[X^TX] = \sum_{s\in S}\eta(s)E_{A\sim\pi}[\|\nabla_\theta \ln \pi\|^2(q_\pi(s, A) - b(s))^2]\]

为确保\(\nabla_b E[X^TX] = 0\),任何 \(s \in S\)\(b(s)\) 应满足:

\[E_{A\sim\pi}[\|\nabla_\theta \ln \pi\|^2(b(s) - q_\pi(s, A))] = 0, \quad s \in S\]

上述等式可以轻松求解得到最优基线:

\[b^*(s) = \frac{E_{A\sim\pi}[\|\nabla_\theta \ln \pi\|^2q_\pi(s, A)]}{E_{A\sim\pi}[\|\nabla_\theta \ln \pi\|^2]}, \quad s \in S\]

虽然(5)中的基线是最优的,但它在实践中过于复杂,难以使用。如果从(5)中移除权重\(\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2\),我们可以得到一个表达简洁的次优基线:

\[b^\dagger(s) = E_{A\sim\pi}[q_\pi(s, A)] = v_\pi(s), \quad s \in S\]

有趣的是,这个次优基线就是状态值函数。

  • 为什么最优基线能减少方差?
    最优基线 \(b^*(s)\) 的设计目标是最小化随机梯度估计的方差。从直观上理解,它试图找到一个"参考点",使得策略梯度的估计更加稳定。
    具体来说,基线的作用是:
    1. 中心化优势:通过从\(q_\pi(s,A)\) 中减去基线,我们得到了一个中心化的优势估计
    2. 减少极端值的影响:当某些动作的值特别高或特别低时,基线可以减少这些极端值对梯度估计的过度影响
    3. 提高样本效率:较低的方差意味着我们需要更少的样本来获得准确的梯度估计
  • 最优基线与权重的关系
    最优基线\(b^*(s)\)\(q_\pi(s,A)\)的加权平均,权重是\(\|\nabla_\theta \ln \pi(A|s, \theta_t)\|^2\)。这个权重有特殊的意义:
    • 它表示策略梯度的"大小"或"重要性"
    • 当某个动作的策略梯度范数较大时,该动作的 \(q\) 在基线计算中获得更大的权重
    • 这确保了基线对那些对策略更新影响更大的动作更加"敏感"
  • 为什么状态值是一个好的次优基线?
    状态值\(v_\pi(s)\)作为基线有几个优点:
    1. 计算简单:相比最优基线,状态值更容易估计
    2. 直观解释\(v_\pi(s)\) 是在状态 \(s\) 下遵循策略 \(\pi\) 的期望回报,代表了该状态下的"平均表现"
    3. 自然参考点:使用 \(v_\pi(s)\) 作为基线,优势函数 \(q_\pi(s,A) - v_\pi(s)\) 表示选择动作 \(A\) 相对于平均表现的优势

A2C算法实现

\(b(s) = v_\pi(s)\) 时,梯度上升算法变为:

\[\begin{equation}\begin{aligned}\theta_{t+1} &= \theta_t + \alpha E[\nabla_\theta \ln \pi(A|S, \theta_t)[q_\pi(S, A) - v_\pi(S)]]\\&= \theta_t + \alpha E[\nabla_\theta \ln \pi(A|S, \theta_t)\delta_\pi(S, A)]\end{aligned}\tag{7}\end{equation}\]

其中,

\[\delta_\pi(S, A) = q_\pi(S, A) - 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)的随机版本是:

\[\begin{equation}\begin{aligned}\theta_{t+1} &= \theta_t + \alpha\nabla_\theta \ln \pi(a_t|s_t, \theta_t)[q_t(s_t, a_t) - v_t(s_t)]\\&= \theta_t + \alpha\nabla_\theta \ln \pi(a_t|s_t, \theta_t)\delta_t(s_t, a_t)\end{aligned}\tag{8}\end{equation}\]

其中 \(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)\) 的估计方式,我们可以得到不同的算法:

  1. 带基线的REINFORCE:如果\(q_t(s_t, a_t)\)\(v_t(s_t)\) 通过蒙特卡洛学习估计,(8)中的算法被称为带基线的REINFORCE。
  2. 优势Actor-Critic (A2C)如果 \(q_t(s_t, a_t)\)\(v_t(s_t)\) 通过TD学习估计,该算法通常被称为advantage actor-critic (A2C)。

A2C的实现在算法如下:

image

值得注意的是,这个实现中的优势函数通过TD误差近似

\[q_t(s_t, a_t) - v_t(s_t) \approx r_{t+1} + \gamma v_t(s_{t+1}) - v_t(s_t)\]

这种近似是合理的,因为:

\[q_\pi(s_t, a_t) - v_\pi(s_t) = E[R_{t+1} + \gamma v_\pi(S_{t+1}) - v_\pi(S_t)|S_t = s_t, A_t = a_t]\]

这是由于\(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算法简介:

回忆下之前的DQN算法,为了方便收敛使用了经验回放的技巧。那么Actor-Critic是不是也可以使用经验回放的技巧呢?当然可以!不过A3C更进一步,还克服了一些经验回放的问题。经验回放有什么问题呢? 回放池经验数据相关性太强,用于训练的时候效果很可能不佳。举个例子,我们学习下棋,总是和同一个人下,期望能提高棋艺。这当然没有问题,但是到一定程度就再难提高了,此时最好的方法是另寻高手切磋。

A3C的思路也是如此,它利用多线程的方法,同时在多个线程里面分别和环境进行交互学习,每个线程都把学习的成果汇总起来,整理保存在一个公共的地方。并且,定期从公共的地方把大家的齐心学习的成果拿回来,指导自己和环境后面的学习交互。

通过这种方法,A3C避免了经验回放相关性过强的问题,同时做到了异步并发的学习模型。

相比Actor-Critic,A3C的优化主要有3点,分别是异步训练框架,网络结构优化,Critic评估点的优化。其中异步训练框架是最大的优化。

  • 每个线程里有和公共的神经网络一样的网络结构,每个线程会独立的和环境进行交互得到经验数据,这些线程之间互不干扰,独立运行。 每个线程和环境交互到一定量的数据后,就计算在自己线程里的神经网络损失函数的梯度,但是这些梯度却并不更新自己线程里的神经网络,而是去更新公共的神经网络。也就是n个线程会独立的使用累积的梯度分别更新公共部分的神经网络模型参数。每隔一段时间,线程会将自己的神经网络的参数更新为公共神经网络的参数,进而指导后面的环境交互。 可见,公共部分的网络模型就是我们要学习的模型,而线程里的网络模型主要是用于和环境交互使用的,这些线程里的模型可以帮助线程更好的和环境交互,拿到高质量的数据帮助模型更快收敛。
  • 现在我们来看看第二个优化,网络结构的优化。之前在Actor-Critic中,我们使用了两个不同的网络Actor和Critic。在A3C这里,我们把两个网络放到了一起,即输入状态\(S\),可以输出状态价值\(V\),和对应的策略\(π\), 当然,我们仍然可以把Actor和Critic看做独立的两块,分别处理
  • 第三个优化点是Critic评估点的优化,在 Actor-Critic使用了时序差分的单步采样近似估计优势函数,而在A3C中,采样更进一步,使用了\(N\)步采样,以加速收敛。

整体算法伪代码如下图所示:

image.png

Off-policy Actor-Critic

到目前为止我们研究的策略梯度方法,包括REINFORCE、QAC和A2C,都是在线策略(on-policy)的。这一点可以从真实梯度的表达式中看出:

\[\nabla_\theta J(\theta) = E_{S\sim\eta,A\sim\pi}[\nabla_\theta \ln \pi(A|S, \theta_t)(q_\pi(S, A) - v_\pi(S))]\]

要使用样本近似这个真实梯度,我们必须通过遵循策略 \(\pi(\theta)\) 来生成动作样本。因此,\(\pi(\theta)\) 是行为策略(behavior policy)。由于 \(\pi(\theta)\) 也是我们要改进的目标策略(target policy),所以策略梯度方法是在线策略的。

这种在线策略的特性带来了一个重要限制:我们只能使用当前策略生成的数据来改进该策略,这可能导致样本效率低下,特别是在数据收集成本高的环境中。

在实际应用中,我们可能已经有一些由给定行为策略生成的样本,希望能够利用这些样本来学习和改进目标策略。例如:

  1. 历史数据利用:利用之前收集的交互数据
  2. 专家演示学习:利用人类专家生成的示范数据
  3. 探索效率提升:使用更具探索性的行为策略收集多样化数据

为了实现这一点,我们可以采用一种称为重要性采样(importance sampling)的技术。值得一提的是,重要性采样技术不限于强化学习领域,它是一种通用技术,用于使用从一个概率分布中抽取的样本来估计在另一个概率分布上定义的期望值。

重要性采样技术

我们接下来介绍重要性采样技术。考虑一个随机变量 \(X \in \mathcal{X}\)。假设 \(p_0(X)\) 是一个概率分布。我们的目标是估计 \(E_{X\sim p_0}[X]\)。假设我们有一些独立同分布的样本\(\{x_i\}_{i=1}^n\)

这里有两种情况需要考虑:

  • 情况1:样本来自目标分布
    如果样本 \(\{x_i\}{i=1}^n\)是通过遵循 \(p_0\) 生成的,那么平均值 \(\bar{x} = \frac{1}{n}\sum{i=1}^n x_i\)可以用来近似 \(E_{X\sim p_0}[X]\),因为 \(\bar{x}\)\(E_{X\sim p_0}[X]\) 的无偏估计,且随着 \(n \to \infty\),估计方差收敛到零。
  • 情况2:样本来自不同分布
    考虑一个新的场景,其中样本 \(\{x_i\}{i=1}^n\)不是由 \(p_0\) 生成的,而是由另一个分布 \(p_1\) 生成的。我们仍然可以使用这些样本来近似\(E{X\sim p_0}[X]\)吗?答案是肯定的。但是,我们不能再使用\(\bar{x} = \frac{1}{n}\sum_{i=1}^n x_i\) 来近似 \(E_{X\sim p_0}[X]\),因为\(\bar{x} \approx E_{X\sim p_1}[X]\)而不是 \(E_{X\sim p_0}[X]\)

在第二种情况下,\(E_{X\sim p_0}[X]\) 可以基于重要性采样技术来近似。具体来说,\(E_{X\sim p_0}[X]\) 满足:

\[\begin{equation} \begin{aligned} E_{X\sim p_0}[X] &= \sum_{x\in\mathcal{X}}p_0(x)x \\ &= \sum_{x\in\mathcal{X}}p_1(x) \frac{p_0(x)}{p_1(x)}x \\ &= E_{X\sim p_1}\left[\frac{p_0(X)}{p_1(X)}X\right] \end{aligned}\tag{9} \end{equation}\]

因此,估计 \(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} \stackrel{.}{=} \frac{1}{n}\sum_{i=1}^n f(x_i)\]

由于 \(\bar{f}\) 可以有效地近似 \(E_{X\sim p_1}[f(X)]\),从(9)可以得出:

\[\begin{equation}E_{X\sim p_0}[X] = E_{X\sim p_1}[f(X)] \approx \bar{f} = \frac{1}{n}\sum_{i=1}^n f(x_i) = \frac{1}{n}\sum_{i=1}^n \underbrace{\frac{p_0(x_i)}{p_1(x_i)}}_{importence \ weight}x_i\tag{10}\end{equation}\]

方程(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]\)?

答案如下:要使用定义,我们需要知道 \(p_0\) 的解析表达式或者 \(\mathcal{X}\) 中每个\(x\)\(p_0(x)\) 值。然而,当分布由例如神经网络表示时,获取 \(p_0\) 的解析表达式是困难的。当 \(\mathcal{X}\) 很大时,获取每个 \(x \in \mathcal{X}\)\(p_0(x)\) 值也是困难的。相比之下,**方程(10)** 仅需要一些样本的 \(p_0(x_i)\) 值,在实践中更容易实现。

重要性采样的实例说明

为了更好地理解重要性采样,我们来看一个具体例子:

考虑 \(X \in \mathcal{X} \stackrel{.}{=} \{+1, -1\}\)。假设 \(p_0\) 是一个概率分布,满足:

  • \(p_0(X = +1) = 0.5\)
  • \(p_0(X = -1) = 0.5\)

\(X\)\(p_0\) 上的期望是:\(E_{X\sim p_0}[X] = (+1) \cdot 0.5 + (-1) \cdot 0.5 = 0\)

假设 \(p_1\) 是另一个分布,满足:

  • \(p_1(X = +1) = 0.8\)
  • \(p_1(X = -1) = 0.2\)

\(X\)\(p_1\) 上的期望是:\(E_{X\sim p_1}[X] = (+1) \cdot 0.8 + (-1) \cdot 0.2 = 0.6\)

假设我们有一些从\(p_1\) 中抽取的样本\(\{x_i\}\)。我们的目标是使用这些样本来估计\(E_{X\sim p_0}[X]\)

如下图所示,\(+1\) 的样本比 \(-1\) 的样本多。这是因为 \(p_1(X = +1) = 0.8 > p_1(X = -1) = 0.2\)。如果我们直接计算样本的平均值 \(\sum_{i=1}^n x_i/n\),这个值会收敛到 \(E_{X\sim p_1}[X] = 0.6\)(见图中的虚线)。相比之下,如果我们按照 (10)计算加权平均值,这个值可以成功地收敛到\(E_{X\sim p_0}[X] = 0\)(见图中的实线)。

image.png

最后,用于生成样本的分布 \(p_1\) 必须满足:当 \(p_0(x) \neq 0\) 时,\(p_1(x) \neq 0\)。如果 \(p_1(x) = 0\)\(p_0(x) \neq 0\),估计结果可能会有问题。

例如,如果:

  • \(p_1(X = +1) = 1\)
  • \(p_1(X = -1) = 0\)

那么由 \(p_1\) 生成的样本全部为正:\(\{x_i\} = \{+1, +1, \ldots, +1\}\)。这些样本不能被用来正确估计\(E_{X\sim p_0}[X] = 0\),因为:

\[\frac{1}{n}\sum_{i=1}^n \frac{p_0(x_i)}{p_1(x_i)}x_i = \frac{1}{n}\sum_{i=1}^n \frac{p_0(+1)}{p_1(+1)} \cdot 1 = \frac{1}{n}\sum_{i=1}^n \frac{0.5}{1} \cdot 1 \equiv 0.5\]

无论\(n\)有多大,这个估计都不会收敛到真实值0。

off-policy 策略梯度定理

假设 \(\beta\) 是行为策略,我们的目标是使用由 \(\beta\) 生成的样本来学习最大化以下度量的目标策略 \(\pi\)

\[J(\theta) = \sum_{s\in S}d_\beta(s)v_\pi(s) = E_{S\sim d_\beta}[v_\pi(S)]\]

其中\(d_\beta\) 是策略 \(\beta\) 下的稳态分布。

off policy policy gradient定理: 在折扣情况下,\(J(\theta)\) 的梯度为:

\[\begin{equation}\nabla_\theta J(\theta) = E_{S\sim\rho,A\sim\beta}\left[\underbrace{\frac{\pi(A|S, \theta)}{\beta(A|S)}}{importance\ weight}\nabla\theta \ln \pi(A|S, \theta)q_\pi(S, A)\right]\tag{11}\end{equation}\]

其中状态分布 \(\rho\) 为:

\[\rho(s) = \sum_{s'\in S}d_\beta(s')Pr_\pi(s|s'),\ \ s\in S\]

这里\(Pr_\pi(s|s') = \sum_{k=0}^{\infty}\gamma^k[P_\pi^k]{s's} = [(I-\gamma P\pi)^{-1}]{s's}\) 是在策略 \(\pi\) 下从 \(s'\) 转移到 \(s\) 的折扣总概率。(11) 和之前的policy gradient 的梯度区别主要体现在两点:

  1. 动作分布之前是 \(A\sim \pi\), 这里为\(A\sim\beta\)
  2. 这里用了重要性采样

(11)的证明:

由于 \(d_\beta\)(行为策略 \(\beta\) 下的稳态分布)独立于参数 \(\theta\)\(J(\theta)\) 的梯度满足:

\[\begin{equation}\nabla_\theta J(\theta) = \nabla_\theta \sum_{s\in S}d_\beta(s)v_\pi(s) = \sum_{s\in S}d_\beta(s)\nabla_\theta v_\pi(s)\tag{12}\end{equation}\]

\(\nabla_\theta v_\pi(s)\) 的表达式是:

\[\nabla_\theta v_\pi(s) = \sum_{s'\in S}Pr_\pi(s'|s)\sum_{a\in A}\nabla_\theta\pi(a|s', \theta)q_\pi(s', a)\]

其中\(Pr_\pi(s'|s) \stackrel{.}{=} \sum_{k=0}^{\infty} \gamma^k[P_\pi^k]{ss'} = [(I_n - \gamma P\pi)^{-1}]_{ss'}\)

\(Pr_\pi(s'|s)\) 表示在策略 \(\pi\) 下,从状态\(s\)开始,考虑折扣因子 \(\gamma\),最终到达状态 \(s'\) 的总概率。

\(\nabla_\theta v_\pi(s)\) 的表达式代入 \(\nabla_\theta J(\theta)\) 的表达式:

\[ \begin{aligned} \nabla_\theta J(\theta) &= \sum_{s\in S}d_\beta(s)\nabla_\theta v_\pi(s) \\ &= \sum_{s\in S}d_\beta(s)\sum_{s'\in S}Pr_\pi(s'|s)\sum_{a\in A}\nabla_\theta\pi(a|s', \theta)q_\pi(s', a) \\ &= \sum_{s'\in S}\left(\sum_{s\in S}d_\beta(s)Pr_\pi(s'|s)\right)\sum_{a\in A}\nabla_\theta\pi(a|s', \theta)q_\pi(s', a) \\ &= \sum_{s'\in S}\rho(s')\sum_{a\in A}\nabla_\theta\pi(a|s', \theta)q_\pi(s', a) \\ &= \sum_{s\in S}\rho(s)\sum_{a\in A}\nabla_\theta\pi(a|s, \theta)q_\pi(s, a) \quad \text{(将$s'$改为$s$)} \\ &= E_{S\sim\rho}\left[\sum_{a\in A}\nabla_\theta\pi(a|S, \theta)q_\pi(S, a)\right] \end{aligned}\]

这里,\(\rho(s') = \sum_{s\in S}d_\beta(s)Pr_\pi(s'|s)\) 代表了一个新的状态分布,它结合了行为策略 \(\beta\) 的稳态分布 \(d_\beta\) 和目标策略 \(\pi\) 下的状态转移概率。

通过使用重要性采样技术,上面的方程可以进一步重写为:

\[\begin{aligned} E_{S\sim\rho}\left[\sum_{a\in A}\nabla_\theta\pi(a|S, \theta)q_\pi(S, a)\right] &= E_{S\sim\rho}\left[\sum_{a\in A}\beta(a|S)\frac{\pi(a|S, \theta)}{\beta(a|S)}\frac{\nabla_\theta\pi(a|S, \theta)}{\pi(a|S, \theta)}q_\pi(S, a)\right] \\ &= E_{S\sim\rho}\left[\sum_{a\in A}\beta(a|S)\frac{\pi(a|S, \theta)}{\beta(a|S)}\nabla_\theta\ln\pi(a|S, \theta)q_\pi(S, a)\right] \\ &= E_{S\sim\rho,A\sim\beta}\left[\frac{\pi(A|S, \theta)}{\beta(A|S)}\nabla_\theta\ln\pi(A|S, \theta)q_\pi(S, A)\right] \end{aligned}\]

这就完成了证明。


算法描述

基于离线策略策略梯度定理,我们可以提出离线策略Actor-Critic算法。由于离线策略情况与在线策略情况非常相似,我们仅介绍一些关键步骤。

首先,离线策略策略梯度对任何额外的基线 \(b(s)\) 也是不变的。具体来说,我们有:

\[\nabla_\theta J(\theta) = E_{S\sim\rho,A\sim\beta}\left[\frac{\pi(A|S, \theta)}{\beta(A|S)}\nabla_\theta \ln \pi(A|S, \theta)(q_\pi(S, A) - b(S))\right]\]

这是因为:

\[E\left[\frac{\pi(A|S,\theta)}{\beta(A|S)}\nabla_\theta \ln \pi(A|S, \theta)b(S)\right] = 0\]

为了减少估计方差,我们可以选择基线为 \(b(S) = v_\pi(S)\),得到:

\[\nabla_\theta J(\theta) = E\left[\frac{\pi(A|S, \theta)}{\beta(A|S)}\nabla_\theta \ln \pi(A|S, \theta)(q_\pi(S, A) - v_\pi(S))\right]\]

相应的随机梯度上升算法是:

\[\theta_{t+1} = \theta_t + \alpha_\theta\frac{\pi(a_t|s_t, \theta_t)}{\beta(a_t|s_t)}\nabla_\theta \ln \pi(a_t|s_t, \theta_t)(q_t(s_t, a_t) - v_t(s_t))\]

其中 \(\alpha_\theta > 0\)。类似于在线策略情况,优势函数 \(q_t(s, a) - v_t(s)\) 可以用TD误差替代。即:

\[q_t(s_t, a_t) - v_t(s_t) \approx r_{t+1} + \gamma v_t(s_{t+1}) - v_t(s_t) \stackrel{.}{=} \delta_t(s_t, a_t)\]

然后,算法变为:

\[\theta_{t+1} = \theta_t + \alpha_\theta\frac{\pi(a_t|s_t, \theta)}{\beta(a_t|s_t)}\nabla_\theta \ln \pi(a_t|s_t, \theta)\delta_t(s_t, a_t)\]

离线策略Actor-Critic算法的实现总结在下面算法伪代码中。可以看出,该算法与优势Actor-Critic算法相同,只是在critic和actor中都增加了重要性权重。

image.png

值得注意的是,除了actor,critic也通过重要性采样技术从在线策略转换为离线策略。实际上,重要性采样是一种通用技术,可以应用于基于策略和基于价值的算法。

离线策略Actor-Critic算法的核心是重要性权重 \(\frac{\pi(a_t|s_t,\theta_t)}{\beta(a_t|s_t)}\),它在算法中起到两个关键作用:

  1. 梯度校正:在actor更新中,重要性权重调整了梯度估计,使其反映目标策略 \(\pi\) 而不是行为策略\(\beta\)的性能。
  2. 值函数更新校正:在critic更新中,重要性权重确保值函数估计收敛到目标策略 \(\pi\) 的值函数,而不是行为策略 \(\beta\) 的值函数。

算法10.3可以通过多种方式扩展:

  1. 资格迹:结合资格迹可以更有效地传播奖励信号
  2. 经验回放:添加经验回放缓冲区可以进一步提高样本效率
  3. 多步回报:使用多步回报而不是单步TD误差可以加速学习
  4. 并行实现:多个agent并行收集经验可以提高训练效率

离线策略Actor-Critic算法代表了强化学习中的一个重要进展,它结合了策略梯度方法的直接策略优化能力和离线学习的数据效率,为解决复杂的序列决策问题提供了强大工具。

确定性Actor-Critic

之前的策略梯度方法都使用随机策略,但确定性策略也可以用于策略梯度方法。确定性策略用

\[a = \mu(s, \theta)\]

表示,它直接给出动作而不是动作的概率分布。

确定性策略梯度定理

\(J(\theta)\) 的梯度为:
\[\begin{equation}\begin{aligned}\nabla_\theta J(\theta) &= \sum_{s\in S}\eta(s)\nabla_\theta\mu(s)\nabla_a q_\mu(s, a)|_{a=\mu(s)} \\&= E_{S\sim\eta}[\nabla_\theta\mu(S)(\nabla_a q_\mu(S, a))|_{a=\mu(S)}]\end{aligned}\tag{13}\end{equation}\]

其中 \(\eta\) 是状态的分布。

与随机策略不同,确定性策略梯度不涉及动作随机变量 $A$。因此,在使用样本近似真实梯度时不需要采样动作,这使得确定性策略梯度方法天然是离线策略的。

(13)实际上是两个定理的总结:一个用于平均值度量,一个用于平均奖励度量, 并且讨论了折扣奖励和非折扣奖励的情况,关于这些定理的证明可以参考 Mathematical Foundations of Reinforcement Learning的 Theorem 10.3 和 Theorem 10.4。

对于平均值度量:

\[J(\theta) = E[v_\mu(s)] = \sum_{s\in S}d_0(s)v_\mu(s)\]

其中 \(d_0\) 是状态的概率分布,与 \(\mu\) 无关。

对于平均奖励度量:

\[J(\theta) = \bar{r}\mu = \sum{s\in S}d_\mu(s)r_\mu(s) = E_{S\sim d_\mu}[r_\mu(S)]\]

其中\(r_\mu(s) = E[R|s, a = \mu(s)] = \sum_r r p(r|s, a = \mu(s))\) 是即时奖励的期望.

此外,一些读者可能会想知道为什么 \((\nabla_a q_\mu(S, a))|{a=\mu(S)}\) 不能写成 \(\nabla_a q\mu(S, \mu(S))\),这似乎更简洁。 这仅仅是因为,我们目前尚不清楚 \(\nabla_a q_\mu(S, \mu(S))\) 如何成为 \(a\) 的函数。简洁但令人困惑的表达可能是 \(\nabla_a q_\mu(S, a=\mu(S))\)

算法描述

基于确定性策略梯度定理 给出的梯度,我们可以应用梯度上升算法来最大化 \(J(\theta)\)

\[\theta_{t+1} = \theta_t + \alpha_\theta E_{S\sim\eta}[\nabla_\theta\mu(S)(\nabla_a q_\mu(S, a))|_{a=\mu(S)}]\]

相应的随机梯度上升算法是:

\[\theta_{t+1} = \theta_t + \alpha_\theta\nabla_\theta\mu(s_t)(\nabla_a q_\mu(s_t, a))|_{a=\mu(s_t)}\]

确定性策略梯度(或确定性Actor-Critic)算法的实现总结

image.png

对于这个算法有几点补充说明:

  • 离线策略
    应当注意,这个算法是离线策略的,因为行为策略 \(\beta\) 可能与目标策略 \(\mu\) 不同。这里有两个关键点需要理解:
    1. Actor是离线策略的
      我们在介绍确定性策略梯度定理时已经解释了原因。确定性策略梯度不涉及动作随机变量,因此在使用样本近似真实梯度时,不需要按照目标策略采样动作。这使得确定性策略梯度方法天然是离线策略的。
    2. Critic也是离线策略的
      这里需要特别注意为什么critic是离线策略但不需要重要性采样技术。具体来说,critic需要的经验样本是 \((s_t, a_t, r_{t+1}, s_{t+1}, \tilde{a}{t+1})\),其中 \(\tilde{a}{t+1} = \mu(s_{t+1})\)
      这个经验样本的生成涉及两个策略:
      需要注意的是,\(\tilde{a}_{t+1}\) 不用于在下一个时间步与环境交互。因此,\(\mu\) 不是行为策略。这就是为什么critic是离线策略的原因。
      • 第一个策略用于在 \(s_t\) 生成 \(a_t\), 这个策略是行为策略,因为 \(a_t\) 用于与环境交互。
      • 第二个策略用于在 \(s_{t+1}\) 生成 \(\tilde{a}_{t+1}=\mu(s_{t+1}, \theta_t)\),这个策略必须是 \(\mu\),因为它是critic旨在评估的策略。因此,\(\mu\) 是目标策略。
  • 函数表示选择
    Deterministic Policy(确定性策略)使用 \(q(s,a)\) 的原因:确定性策略 \(μ(s)\) 直接输出一个确定的动作 \(a\),不存在动作的概率分布,而是一个确定性映射:\(S → A\), 使用 \(q(s,a)\) 是必要的,因为(13)需要直接评估特定状态-动作对的价值,因为策略只输出单一动作.
    如何选择函数 \(q(s, a, w)\)?提出确定性策略梯度方法的原始研究工作采用了线性函数:\(q(s, a, w) = \phi^T(s, a)w\),其中 \(\phi(s, a)\) 是特征向量。
    目前,使用神经网络表示 \(q(s, a, w)\) 很流行,正如深度确定性策略梯度(DDPG)方法中所建议的。
  • 行为策略选择
    如何选择行为策略 \(\beta\) ?它可以是任何具有探索性的策略。它也可以是通过向 \(\mu\) 添加噪声获得的随机策略。在这种情况下,\(\mu\) 也是行为策略,因此这种方式是在线策略实现。

另外值得说明的是,目前很流行的算法, 深度确定性策略梯度(DDPG)是确定性Actor-Critic的一个扩展,它结合了以下增强:

  1. 使用深度神经网络表示策略和值函数
  2. 采用目标网络来稳定训练
  3. 使用经验回放缓冲区提高样本效率
  4. 添加探索噪声(如Ornstein-Uhlenbeck过程)到确定性动作

总结

Actor-Critic方法通过结合基于策略和基于价值的方法,为强化学习提供了一个强大的框架。从最简单的QAC算法开始,我们可以通过引入基线(A2C)、使用重要性采样(离线策略Actor-Critic)和采用确定性策略(确定性Actor-Critic)来进一步扩展这个框架。

这些方法构成了现代强化学习算法的基础,为解决复杂决策问题提供了强大工具。随着深度学习的发展,基于这些基本方法的高级算法如SAC、TRPO、PPO和TD3等已经在各种应用领域取得了显著成功。

Reference

3 - Chapter 10 Actor-Critic Methods

强化学习(十五) A3C - 刘建平Pinard - 博客园