目录

强化学习(13):A2C 与 A3C——Actor-Critic 的并行扩展

从 Actor-Critic 到并行扩展

上一篇已经讨论过,行动器—评判器方法(Actor-Critic Method)的核心思想,是把策略学习和价值估计放在同一个框架中共同进行。行动器(Actor)负责学习策略,通常用参数化策略表示为

$$ \pi(a\mid s;\boldsymbol{\theta}) $$

其中,$\boldsymbol{\theta}$ 是策略参数。评判器(Critic)负责估计价值函数,常见形式为

$$ V(s;\mathbf{w}) $$

其中,$\mathbf{w}$ 是价值函数参数。

在交互过程中,Actor 根据当前状态 $s_t$ 选择动作 $a_t$,环境返回奖励 $r_t$ 并转移到下一个状态 $s_{t+1}$。Critic 根据这一步转移估计当前动作的结果好坏,并将这个评价信号提供给 Actor,用于更新策略。这样一来,策略更新就不再完全依赖完整回报 $G_t$,而可以借助价值函数估计进行更及时的调整。

在基础 Actor-Critic 中,常见的策略参数更新形式为

$$ \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \alpha \delta_t \nabla_{\boldsymbol{\theta}} \log \pi(a_t\mid s_t;\boldsymbol{\theta}) $$

其中,$\alpha$ 是 Actor 的学习率,$\delta_t$ 是 Critic 提供的评价信号。这个式子的含义是:如果当前动作带来的结果好于 Critic 的预期,那么就提高 Actor 在状态 $s_t$ 下选择动作 $a_t$ 的概率;如果结果差于预期,就降低该动作被选择的概率。

这里的 $\delta_t$ 通常采用一步时间差分误差(One-step Temporal Difference Error):

$$ \delta_t = r_t+\gamma V(s_{t+1};\mathbf{w})-V(s_t;\mathbf{w}) $$

它由两部分相减得到。第一部分

$$ r_t+\gamma V(s_{t+1};\mathbf{w}) $$

表示根据当前一步经验得到的价值目标;第二部分

$$ V(s_t;\mathbf{w}) $$

表示 Critic 原本对状态 $s_t$ 的价值估计。二者之差衡量的是这一步实际结果相对于原有预期的偏差。

因此,基础 Actor-Critic 已经完成了一个重要结合:Actor 负责直接优化策略,Critic 负责通过价值估计提供低方差、可在线更新的评价信号。和 REINFORCE 相比,它不必等到整个回合结束后才能更新策略;和单纯的价值学习方法相比,它直接维护策略函数,更适合处理随机策略和连续动作空间。

不过,基础 Actor-Critic 仍然通常建立在单个环境、单个智能体持续交互的形式上。智能体在同一个环境副本中按时间顺序采样,得到的相邻样本往往高度相关。例如,连续几个时间步的状态可能非常接近,动作也由同一套当前策略产生,这会使训练数据缺乏足够多样性。与此同时,单环境交互获得经验的速度有限,尤其在深度强化学习中,策略网络和价值网络需要大量样本才能稳定更新,单线程采样容易成为训练效率的限制。

此外,由于 Actor 和 Critic 在训练过程中相互影响,基础 Actor-Critic 的训练波动也可能比较明显。Actor 的策略变化会改变后续采样到的数据分布,Critic 的价值估计误差又会直接影响 Actor 的更新方向。当采样数据数量较少、相关性较强时,这种波动会更加突出。

于是,接下来的改进方向就变得自然:如果一个智能体在单个环境中采样太慢,且连续样本相关性较强,那么可以让多个智能体或多个环境副本同时采样。这样不仅能够更快获得经验,也能让不同环境副本产生更丰富的轨迹,从而降低训练数据之间的相关性。

这正是 A2C 和 A3C 要引入的关键思想:它们并没有改变 Actor-Critic 的基本框架,而是在 Actor-Critic 的基础上进一步引入优势估计和并行采样,使策略学习更适合深度强化学习中的大规模训练。

优势函数与 Advantage Actor-Critic

在基础 Actor-Critic 中,Actor 的更新需要一个评价当前动作好坏的信号。上一篇已经看到,一步 TD 误差

$$ \delta_t= r_t+\gamma V(s_{t+1};\mathbf{w})-V(s_t;\mathbf{w}) $$

可以承担这一作用。进一步分析这个式子,会发现它与前面策略梯度中引入的优势函数有直接联系。

优势函数(Advantage Function)定义为

$$ A_\pi(s,a)=Q_\pi(s,a)-V_\pi(s) $$

其中,$Q_\pi(s,a)$ 表示在状态 $s$ 下采取动作 $a$ 后继续按照策略 $\pi$ 行动时的期望回报,而 $V_\pi(s)$ 表示在状态 $s$ 下按照策略 $\pi$ 行动时的平均价值。

因此,

$$ A_\pi(s,a) $$

衡量的是某个具体动作相对于当前状态下策略平均水平的优势。

如果

$$ A_\pi(s,a)>0 $$

说明动作 $a$ 的长期价值高于当前策略在状态 $s$ 下的平均水平,因此策略应该提高选择该动作的概率。

如果

$$ A_\pi(s,a)<0 $$

说明该动作的长期价值低于当前策略的平均水平,因此策略应该降低选择该动作的概率。

于是,Actor 的策略更新可以写成

$$ \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \alpha \hat{A}_t \nabla_{\boldsymbol{\theta}} \log\pi(a_t\mid s_t;\boldsymbol{\theta}) $$

其中,$\hat{A}_t$ 表示对真实优势

$$ A_\pi(s_t,a_t) $$

的估计。

这种明确使用优势估计作为策略更新信号的 Actor-Critic 方法,通常可以称为优势行动器—评判器(Advantage Actor-Critic)。

这里需要注意,“Advantage Actor-Critic”首先描述的是一种算法结构:Actor 根据优势估计更新策略,Critic 负责提供价值信息。后面将讨论的 A2C 通常也写作 Advantage Actor-Critic,但它在实际算法名称中进一步特指采用同步并行采样和更新方式的一类实现。这里暂时只关注优势估计本身。

真正的问题在于,真实的优势函数通常无法直接得到。根据定义,

$$ A_\pi(s_t,a_t) = Q_\pi(s_t,a_t)-V_\pi(s_t) $$

要准确计算它,就需要同时知道真实的动作价值函数 $Q_\pi$ 和状态价值函数 $V_\pi$。在实际强化学习任务中,这两个量本身就是需要估计的,因此算法通常会根据采样数据构造优势的近似值。

最简单的一种方法,就是使用一步 TD 误差。

根据动作价值函数的定义,可以写出

$$ Q_\pi(s_t,a_t) = \mathbb{E}_\pi \left[ r_t+\gamma V_\pi(s_{t+1}) \mid s_t,a_t \right] $$

因此,

$$ A_\pi(s_t,a_t) = \mathbb{E}_\pi \left[ r_t+\gamma V_\pi(s_{t+1})-V_\pi(s_t) \mid s_t,a_t \right] $$

而一次实际交互只能观察到其中的一个采样结果:

$$ r_t+\gamma V(s_{t+1};\mathbf{w})-V(s_t;\mathbf{w}) $$

这恰好就是一步 TD 误差

$$ \delta_t $$

因此,在最简单的 Actor-Critic 实现中,可以使用

$$ \hat{A}_t=\delta_t $$

也就是写成

$$ A_\pi(s_t,a_t)\approx \delta_t $$

进而得到 Actor 的更新:

$$ \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \alpha \delta_t \nabla_{\boldsymbol{\theta}} \log\pi(a_t\mid s_t;\boldsymbol{\theta}) $$

这里需要更准确地理解这个近似关系。单次采样得到的 $\delta_t$ 本身带有环境转移和策略采样产生的随机性,因此它通常不会精确等于真实优势 $A_\pi(s_t,a_t)$。当价值函数估计足够准确时,在给定 $s_t$ 和 $a_t$ 的条件下,一步 TD 误差的期望对应真实优势:

$$ \mathbb{E}_\pi[\delta_t\mid s_t,a_t] \approx A_\pi(s_t,a_t) $$

因此,可以把 $\delta_t$ 看作优势函数的一个单步采样估计。

实际算法中还可以使用多步回报、完整回报或后面 PPO 中常见的广义优势估计(Generalized Advantage Estimation, GAE)来构造 $\hat{A}_t$。这些方法在偏差、方差以及需要利用的轨迹长度上有所不同,但它们服务于同一个目标:为 Actor 提供一个能够衡量当前动作相对于状态平均水平好坏程度的学习信号。

到这里,Actor-Critic 的更新结构就可以进一步写成更一般的形式:

$$ \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \alpha \hat{A}_t \nabla_{\boldsymbol{\theta}} \log\pi(a_t\mid s_t;\boldsymbol{\theta}) $$

其中具体怎样构造 $\hat{A}_t$ 可以有多种选择。

优势估计解决了“用什么信号更新 Actor”的问题。接下来还需要处理上一篇末尾留下的另一个问题:如果所有经验仍然来自一个环境按照时间顺序采集,那么采样速度和样本相关性依然受到限制。A3C 正是在这一基础上进一步引入多个并行 worker,并采用异步方式完成采样和参数更新。

A3C:异步并行的 Actor-Critic

前面已经看到,Actor-Critic 可以利用优势估计来更新策略,但如果所有经验都由单个环境顺序产生,采样速度和样本多样性仍然受到限制。一个直接的扩展思路,就是同时运行多个环境副本,让多个智能体并行与环境交互,从而在相同时间内获得更多经验。

异步优势行动器—评判器(Asynchronous Advantage Actor-Critic, A3C)就是沿着这一思路提出的方法。

A3C 的核心结构可以分成两部分:

  • 一个共享的全局 Actor-Critic 网络;
  • 多个并行运行的工作进程(Worker)。

全局网络维护当前的策略参数和价值函数参数,例如写成

$$ \pi(a\mid s;\boldsymbol{\theta}) $$

以及

$$ V(s;\mathbf{w}) $$

其中,$\boldsymbol{\theta}$ 和 $\mathbf{w}$ 是所有 worker 共同更新的全局参数。

每个 worker 都拥有自己的环境副本,并在本地维护一份网络参数的副本。开始一次采样时,worker 会从全局网络获取当前参数,然后使用这组参数在自己的环境中执行策略,得到一段局部轨迹:

$$ (s_t,a_t,r_t,s_{t+1}), (s_{t+1},a_{t+1},r_{t+1},s_{t+2}), \dots $$

根据这些经验,worker 可以计算 Actor 和 Critic 所需要的更新量。

对于 Actor,可以利用优势估计构造策略梯度。例如采用一步 TD 误差时,

$$ \hat{A}_t \approx \delta_t = r_t+\gamma V(s_{t+1};\mathbf{w})-V(s_t;\mathbf{w}) $$

于是对应的策略梯度项可以写成

$$ \hat{A}_t \nabla_{\boldsymbol{\theta}} \log \pi(a_t\mid s_t;\boldsymbol{\theta}) $$

对于 Critic,则可以利用采样得到的回报或 TD 目标,使价值估计更加准确。例如,希望

$$ V(s_t;\mathbf{w}) $$

逐渐接近对应的目标值。

A3C 的关键在于:这些 worker 不需要按照统一的节奏完成采样和更新。

某个 worker 完成一段轨迹后,就可以根据自己的经验计算梯度,并立即把这些梯度提交给全局网络。全局参数更新完成后,该 worker 再从全局网络获取新的参数,继续下一轮交互。与此同时,其他 worker 可能仍然处于采样或梯度计算过程中。

这就是 A3C 中“异步(Asynchronous)”的含义。

假设存在三个 worker。某一时刻可能出现如下情况:

  • Worker 1 已经完成采样,正在更新全局参数;
  • Worker 2 仍然在环境中执行策略;
  • Worker 3 已经计算完梯度,准备提交更新。

它们之间没有严格的同步点。Worker 1 不需要等待 Worker 2 和 Worker 3 完成当前任务之后再统一更新,而是可以直接使用自己的采样结果修改全局网络。

因此,A3C 的整体过程可以概括为:

多个 worker 从共享的全局网络获得参数; 各自在独立环境中采样经验; 根据自己的轨迹计算 Actor 和 Critic 的梯度; 将梯度异步应用到共享的全局参数; 再获取更新后的参数并继续采样。

这种结构首先带来的变化是采样速度的提升。由于多个环境可以同时运行,在相同时间内能够产生更多交互数据。对于强化学习而言,这一点尤其重要,因为大量训练时间往往消耗在环境交互和经验采集上。

同时,不同 worker 所处的环境状态和采样轨迹通常并不相同。即使它们使用相近的策略参数,由于环境随机性、初始状态以及动作采样的差异,也会产生不同的经验。这样可以增加训练数据的多样性,并降低单条连续轨迹中相邻样本高度相关带来的影响。

这一点与 DQN 中经验回放降低样本相关性的目的有一定联系,但实现方式不同。DQN 主要通过保存历史经验并随机采样来打乱时间相关性,而 A3C 通过多个并行环境同时产生不同轨迹,使训练数据来源本身更加分散。

因此,A3C 的主要作用可以概括为三个方面:

第一,通过多个 worker 同时与环境交互,提高经验采集速度;

第二,通过不同环境副本产生多样化轨迹,降低连续样本之间的相关性;

第三,在保持 Actor-Critic 基本结构的同时,使采样和学习能够并行进行。

不过,异步更新也会带来新的问题。由于不同 worker 独立运行,从全局网络获取参数到真正提交梯度之间存在时间差,因此某个 worker 计算梯度时使用的参数,可能已经落后于当前最新的全局参数。这个现象通常称为参数滞后(Parameter Staleness)。

也就是说,一个 worker 开始采样时使用的是参数

$$ \boldsymbol{\theta}_{\text{old}} $$

但当它完成采样并提交梯度时,全局网络可能已经被其他 worker 更新到了

$$ \boldsymbol{\theta}_{\text{new}} $$

此时,这个梯度实际上是基于较旧策略计算出来的,却被应用到了较新的参数上。

这种异步机制能够提高并行效率,但也使优化过程更加复杂。不同 worker 的梯度可能基于略有差异的参数和数据分布,训练过程中的更新顺序也不再完全确定。因此,A3C 在实现和调试上通常比单线程 Actor-Critic 更复杂。

正是在这一背景下,一个更规整的并行方案自然出现:保留多个环境同时采样,但在参数更新时进行同步。这就引出了 A2C。

A2C:同步并行的 Actor-Critic

A3C 通过多个 worker 并行采样,提高了经验采集速度,也增加了轨迹的多样性。但它采用异步方式更新全局参数,不同 worker 之间没有统一的更新节奏,因此会出现参数滞后,并使训练过程和实现逻辑更加复杂。

如果保留“多个环境同时采样”这一结构,同时让所有环境在更新时保持同步,就得到了一种更规整的并行方式。这就是通常所说的优势行动器—评判器(Advantage Actor-Critic, A2C)。

A2C 与 A3C 的基本思想非常接近。它仍然维护 Actor 和 Critic,例如

$$ \pi(a\mid s;\boldsymbol{\theta}) $$

$$ V(s;\mathbf{w}) $$

并使用优势估计

$$ \hat{A}_t $$

作为 Actor 的主要更新信号。

区别主要出现在并行环境如何组织采样和参数更新上。

在 A2C 中,通常会同时运行多个环境副本。假设一共有 $N$ 个并行环境,在某个时间步,它们分别处于

$$ s_t^{(1)},s_t^{(2)},\dots,s_t^{(N)} $$

所有环境都使用同一套当前策略参数

$$ \boldsymbol{\theta} $$

选择动作:

$$ a_t^{(i)} \sim \pi(\cdot\mid s_t^{(i)};\boldsymbol{\theta}) $$

其中,

$$ i=1,2,\dots,N $$

随后,各个环境分别执行对应动作,并获得自己的奖励和下一状态:

$$ \big(s_t^{(i)},a_t^{(i)},r_t^{(i)},s_{t+1}^{(i)}\big) $$

这样,在一次环境推进之后,就可以同时得到 $N$ 条转移样本。

如果继续向后采样若干步,就可以从每个环境中得到一小段轨迹。假设每个环境连续采样 $T$ 步,那么一次更新前总共可以收集大约

$$ N\times T $$

个时间步的数据。

关键在于,A2C 不会让某个环境采样完成后立即单独修改网络参数。

所有并行环境会先按照当前这一套参数完成规定长度的数据采集。等这一批数据全部准备完成之后,再把来自不同环境的样本集中起来,统一计算 Actor 和 Critic 的损失,并进行一次参数更新。

因此,A2C 的基本流程可以概括为:

多个环境使用相同的当前网络参数同时采样;

等待所有环境完成当前一批数据采集;

根据整批样本计算优势估计以及 Actor、Critic 的训练目标;

将所有样本组成一个批次,统一计算梯度;

同步更新 Actor 和 Critic 的网络参数;

所有环境再使用更新后的新参数开始下一轮采样。

这就是 A2C 中“同步(Synchronous)”的含义。

在同一个采样阶段内,各个并行环境使用的是同一组固定参数。参数不会因为某个环境提前完成采样而立刻发生变化。只有当这一轮所有环境的数据都已经收集完成后,网络才统一更新一次。

因此,可以把 A2C 的一次训练循环写成

$$ \boldsymbol{\theta}_k \longrightarrow \text{并行采样} \longrightarrow \mathcal{D}_k \longrightarrow \text{统一更新} \longrightarrow \boldsymbol{\theta}_{k+1} $$

其中,$\mathcal{D}_k$ 表示第 $k$ 轮由多个环境共同收集得到的训练数据。

对于某个样本,可以继续使用一步 TD 误差作为优势估计:

$$ \hat{A}_t^{(i)} = r_t^{(i)} + \gamma V(s_{t+1}^{(i)};\mathbf{w}) - V(s_t^{(i)};\mathbf{w}) $$

于是 Actor 可以根据整批样本估计策略梯度,例如写成

$$ \nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}) \approx \frac{1}{NT} \sum_{i=1}^{N} \sum_{t=1}^{T} \hat{A}_t^{(i)} \nabla_{\boldsymbol{\theta}} \log \pi \left( a_t^{(i)} \mid s_t^{(i)}; \boldsymbol{\theta} \right) $$

这里不需要过分关注前面的归一化系数,重点在于:一次参数更新可以同时利用多个环境、多条轨迹中的样本。

Critic 也可以基于同一批数据更新价值函数。例如,让

$$ V(s_t^{(i)};\mathbf{w}) $$

逐渐接近对应的 TD 目标或多步回报。

这种同步方式有一个明显特点:每一批数据都是在同一组策略参数下采集的。因此,相比 A3C 中不同 worker 可能使用不同版本参数计算梯度的情况,A2C 的数据和更新之间关系更加清晰,也不会出现典型的异步参数滞后问题。

与此同时,A2C 仍然保留了并行环境带来的优势。多个环境能够同时产生经验,因此采样过程可以并行进行;不同环境的状态和轨迹不同,也能够提高一批训练数据内部的多样性。

更加重要的是,来自多个环境的数据可以直接组织成一个批次进行矩阵计算。这种方式能够较好地利用 GPU 等现代硬件的批量计算能力。随着深度学习硬件的发展,同步收集一批数据后统一进行大规模张量运算,往往比频繁处理多个独立的异步梯度更新更加方便。

当然,同步机制也有自己的代价。由于所有环境必须完成当前采样阶段之后才能进入更新,如果不同环境的执行速度差异较大,较快的环境可能需要等待较慢的环境。这类等待会降低部分并行效率。

不过,在大量仿真环境能够以相近速度运行的场景中,这种同步开销通常比较容易管理。训练过程也更加确定,批量计算更加直接,因此 A2C 成为了 Actor-Critic 并行训练中一种重要的组织方式。

从这里可以看出,A2C 和 A3C 的主要差别并不在 Actor-Critic 本身,也不在优势函数的定义,而在于并行采样之后如何组织参数更新。

A3C 允许各个 worker 独立采样并异步提交梯度;A2C 则让多个环境先同步完成一批采样,再统一更新网络。

理解了这一点之后,就可以进一步把两种方法放在一起比较。

A2C 与 A3C 的对比

前面分别讨论了 A3C 和 A2C。两者都建立在 Actor-Critic 框架之上,也都通过多个环境并行采样经验,并利用优势估计更新策略。它们之间最核心的区别,是多个并行环境产生的数据如何参与参数更新。

A3C 采用异步更新。

不同 worker 各自在自己的环境中独立采样。当某个 worker 收集到一段经验并计算出梯度之后,就可以立即利用这个梯度更新共享的全局网络,不需要等待其他 worker。

因此,A3C 中不同 worker 的运行过程可以彼此交错。某些 worker 正在采样,另一些 worker 可能正在计算梯度,还有一些 worker 正在更新全局参数。

从参数更新的角度看,可以把这种过程简单表示为

$$ \text{Worker}_1 \rightarrow \text{Update} $$$$ \text{Worker}_3 \rightarrow \text{Update} $$$$ \text{Worker}_2 \rightarrow \text{Update} $$

不同 worker 的更新到达顺序由实际运行过程决定,没有统一的同步点。

A2C 则采用同步更新。

多个环境同时使用同一组当前参数采样,并分别得到自己的经验。当所有环境完成这一轮规定的数据采集之后,再把这些样本组合成一个批次,统一计算梯度并更新网络。

因此,A2C 的过程更加接近

$$ \begin{aligned} &\text{Environment}_1\\ &\text{Environment}_2\\ &\qquad\vdots\\ &\text{Environment}_N \end{aligned} \quad \longrightarrow \quad \text{Batch} \quad \longrightarrow \quad \text{Update} $$

也就是说,所有并行环境共同组成一次更新所需要的数据。

从这个区别出发,可以进一步理解两种方法各自的特点。

首先是参数一致性。

在 A2C 中,同一批数据通常由同一版本的策略参数产生。设第 $k$ 次更新开始时的策略参数为

$\boldsymbol{\theta}_k$

那么多个环境都使用

$\pi(a\mid s;\boldsymbol{\theta}_k)$

进行采样。采样结束后,再根据整批数据得到新的参数

$\boldsymbol{\theta}_{k+1}$

因此,每一轮采样和每一次参数更新之间的对应关系比较清晰。

A3C 中的情况更复杂。某个 worker 开始采样时,全局参数可能是

$\boldsymbol{\theta}_k$

但在它完成采样之前,其他 worker 可能已经对全局网络进行了多次更新。当这个 worker 最终提交梯度时,全局参数可能已经变成

$\boldsymbol{\theta}_{k+m}$

因此,A3C 中会存在前面提到的参数滞后现象。

其次是并行效率。

A3C 的 worker 之间不需要相互等待。某个 worker 只要完成自己的计算,就可以继续执行下一步,因此能够减少由不同 worker 运行速度差异带来的等待。

A2C 设置了明确的同步点。如果某些环境运行得较快,而另一些环境运行得较慢,那么较快的环境需要等待这一批中的其他环境完成采样之后,才能进行下一次更新。

不过,这种同步机制同时带来了另一个重要优势:批量计算。

A2C 可以直接把多个环境中的状态组织成批量输入,例如

$\left[ s_t^{(1)}, s_t^{(2)}, \dots, s_t^{(N)} \right]$

然后一次性输入神经网络,得到所有环境对应的策略输出和价值估计。

类似地,来自多个环境、多个时间步的数据也可以统一组织成较大的 batch,再利用 GPU 完成前向传播、反向传播和参数更新。

因此,在现代深度学习硬件上,A2C 的同步结构通常更容易发挥批量矩阵计算的效率,训练过程也更加规整。

从样本来源来看,两者则非常相似。

无论 A2C 还是 A3C,多个环境都会产生不同的轨迹:

$\tau^{(1)},\tau^{(2)},\dots,\tau^{(N)}$

即使各个环境使用相同或相近的策略参数,由于环境初始状态、状态转移以及动作采样具有随机性,不同轨迹通常也不会完全相同。

因此,两种方法都可以利用并行环境提高经验的多样性,并缓解单条连续轨迹中相邻样本高度相关的问题。

如果把两者的主要区别总结在一起,可以得到:

特征A3CA2C
环境采样多 worker 并行多环境并行
参数更新异步同步
worker 是否等待通常不等待每批采样后需要同步
参数滞后可能存在通常较弱
数据组织各 worker 独立处理适合统一组成 batch
GPU 批量计算相对不直接更容易利用
训练过程更新顺序较复杂更加规整

需要注意,这些差异主要集中在并行训练和优化过程上。

从强化学习的核心结构看,两者仍然非常接近。它们都维护 Actor 和 Critic,都需要根据采样轨迹估计价值,也都可以使用

$$ \hat{A}_t $$

作为 Actor 的策略更新信号。

因此,A2C 和 A3C 的关系更适合从“同步与异步”来理解:

A3C 让多个 worker 独立运行,并异步更新共享参数;

A2C 让多个环境并行采样,再把得到的数据统一起来同步更新参数。

这种区别也解释了两者名称中的字母来源。A3C 中的三个 “A” 分别对应 Asynchronous、Advantage 和 Actor-Critic,其中最突出的特点是异步更新;A2C 去掉了 Asynchronous,对应同步实现的 Advantage Actor-Critic。

从算法发展的角度看,这两种方法都说明了一件重要的事情:Actor-Critic 不需要局限于“单个环境产生一条轨迹,再进行一次更新”的训练方式。通过同时运行多个环境,可以把策略梯度方法扩展到更高效的并行采样和批量训练形式。

而这一训练范式并没有随着 A2C 和 A3C 结束。后面的 PPO 等算法同样广泛使用多个并行环境收集轨迹,再基于一批经验更新 Actor 和 Critic。真正发生变化的,是策略更新目标和优势估计方式会进一步得到改进。

小结

本文在基础 Actor-Critic 方法的基础上,进一步讨论了优势估计和并行采样,并介绍了 A3C 与 A2C 两种典型的并行 Actor-Critic 方法。

基础 Actor-Critic 同时维护 Actor 和 Critic。Actor 使用参数化策略

$$ \pi(a\mid s;\boldsymbol{\theta}) $$

直接学习动作选择方式,Critic 使用价值函数

$$ V(s;\mathbf{w}) $$

估计当前策略下的状态价值,并为 Actor 提供评价信号。

在最简单的一步 Actor-Critic 中,可以使用 TD 误差

$$ \delta_t= r_t+\gamma V(s_{t+1};\mathbf{w})-V(s_t;\mathbf{w}) $$

作为策略更新信号:

$$ \boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \alpha \delta_t \nabla_{\boldsymbol{\theta}} \log\pi(a_t\mid s_t;\boldsymbol{\theta}) $$

进一步引入优势函数

$$ A_\pi(s,a)=Q_\pi(s,a)-V_\pi(s) $$

以后,可以更加明确地把 Actor 的更新理解为:提高优势为正的动作概率,降低优势为负的动作概率。由于真实优势通常无法直接计算,实际算法需要构造优势估计

$$ \hat{A}_t $$

其中,一步 TD 误差就是最简单的估计方式之一:

$$ \hat{A}_t\approx\delta_t $$

在这一基础上,A3C 引入多个 worker,每个 worker 在自己的环境副本中独立采样,并根据局部轨迹计算梯度。这些梯度被异步提交到共享的全局 Actor-Critic 网络。不同 worker 无需等待彼此,因此可以同时进行环境交互、梯度计算和参数更新。这样的结构能够提高采样速度并增加轨迹多样性,但也可能产生参数滞后,使不同 worker 的梯度基于不同版本的网络参数。

A2C 保留了多个环境并行采样的结构,同时采用同步更新方式。多个环境使用同一组当前策略参数收集一批数据,完成采样之后,再统一计算梯度并更新网络。由于数据可以直接组成 batch,A2C 更容易利用现代 GPU 的批量计算能力,训练过程也更加规整。

因此,A2C 和 A3C 最主要的区别可以归结为参数更新方式:

  • A3C:多个 worker 独立运行,异步更新共享参数;
  • A2C:多个环境并行采样,统一进行同步更新。

从更大的算法结构来看,A2C 和 A3C 都没有改变 Actor-Critic 的基本思想。它们仍然由 Actor 学习策略,由 Critic 估计价值,并利用优势估计连接策略学习和价值学习。它们主要解决的是如何利用多个环境更加高效地采集经验,以及如何组织这些经验进行网络训练。

这套结构也为后续策略优化方法提供了基础。PPO 等算法通常同样采用 Actor-Critic 框架,通过多个环境采集轨迹,利用 Critic 计算优势估计,再根据一批数据更新策略。进一步的改进主要集中在策略目标本身,例如限制一次更新中新旧策略之间的变化幅度,从而提高训练稳定性。

因此,从前几篇的策略学习主线来看,可以得到如下发展关系:

$$ \text{REINFORCE} \rightarrow \text{Actor-Critic} \rightarrow \text{A2C / A3C} \rightarrow \text{PPO} $$

A2C 和 A3C 的意义主要在于,它们把 Actor-Critic 从单环境下的基本学习结构进一步扩展到了并行采样和批量训练,使优势估计、价值学习和多环境数据采集能够结合在同一套深度强化学习框架中。