强化学习算法(A3C)
深度强化学习的异步方法(A3C)
摘要
我们提出了一个概念简单、轻量级的深度强化学习框架,该框架使用异步梯度下降优化深度神经网络控制器。我们提出了四种标准强化学习算法的异步变体,并表明并行的智能体-学习器对训练具有稳定作用,使这四种方法都能成功训练神经网络控制器。性能最佳的方法是异步变体的 Actor-Critic,它在 Atari 领域超越了当前最先进水平,同时在单个多核 CPU 上的训练时间仅为 GPU 的一半。此外,我们还表明异步 Actor-Critic 在各种连续电机控制问题以及使用视觉输入导航随机 3D 迷宫这一新任务上均取得了成功。
0 阅读指引与要点
文档目标:本文档详细介绍了 A3C(Asynchronous Advantage Actor-Critic)算法,这是第一个使用异步并行训练稳定深度强化学习的方法,无需经验回放即可实现稳定训练。
- 🔑 核心目标:通过异步并行智能体-学习器 + n 步回报 + 优势函数,实现稳定且高效的深度强化学习。
- 🧩 关键组件:
- 异步并行训练:多个 worker 并行收集经验,异步更新全局网络
- n 步回报:使用前向视角计算 n 步回报,加速奖励传播
- 优势函数:A(st,at)=∑i=0k−1γirt+i+γkV(st+k)−V(st)A(s_t, a_t) = \sum_{i=0}^{k-1} \gamma^i r_{t+i} + \gamma^k V(s_{t+k}) - V(s_t)A(st,at)=∑i=0k−1γirt+i+γkV(st+k)−V(st)
- 策略梯度:∇θlogπ(at∣st)A(st,at)\nabla_\theta \log \pi(a_t|s_t) A(s_t, a_t)∇θlogπ(at∣st)A(st,at)
- 熵正则化:鼓励探索,防止过早收敛到次优策略
- 🧭 推荐阅读路径:
- 第 1 节(引言):了解问题背景和 A3C 的动机
- 第 3 节(强化学习背景):理解 n 步回报、优势函数、策略梯度
- 第 4 节(异步强化学习框架):重点阅读,理解 A3C 的核心机制
- 第 5 节(实验):了解 A3C 在不同任务上的性能表现
- 🧪 实践提示:
- 本实现为单 worker 版本,真正的 A3C 需要多线程/多进程并行
- n 步回报长度 tmaxt_{\max}tmax 影响训练速度和稳定性
- 熵正则化系数 β\betaβ 控制探索程度
- 学习率对稳定性至关重要,建议从 3×10−43 \times 10^{-4}3×10−4 开始
与项目代码的对应:
- 策略网络 →
src/a3c.py中的PolicyNet类 - 价值网络 →
src/a3c.py中的ValueNet类 - n 步回报计算 →
A3CAgent._compute_returns_adv方法 - 优势函数计算 →
A3CAgent._compute_returns_adv方法 - 策略更新 →
A3CAgent.update方法 - 价值更新 →
A3CAgent.update方法
1. 引言
深度神经网络提供了丰富的表示,能够使强化学习(RL)算法有效执行。然而,以前人们认为简单的在线 RL 算法与深度神经网络的结合本质上是不稳定的。为此,研究人员提出了多种解决方案来稳定算法(Riedmiller, 2005; Mnih et al., 2013; 2015; Van Hasselt et al., 2015; Schulman et al., 2015a)。这些方法有一个共同的思路:在线 RL 智能体遇到的观测数据序列是非平稳的,且在线 RL 更新具有强相关性。
通过将智能体的数据存储在经验回放内存中,可以对不同时间步的数据进行批处理(Riedmiller, 2005; Schulman et al., 2015a)或随机采样(Mnih et al., 2013; 2015; Van Hasselt et al., 2015)。以这种方式对内存进行聚合可以减少非平稳性并降低更新的相关性,但同时也将这些方法限制在了离策略强化学习算法中。
基于经验回放的深度强化学习算法在Atari 2600等具有挑战性的领域取得了前所未有的成功。然而,经验回放存在若干缺点:每次真实交互需要更多的内存和计算;并且需要能够从旧策略生成的数据中进行更新的离策略学习算法。
本文提出了一种截然不同的深度强化学习范式。我们不再采用经验回放,而是在多个环境实例上异步并行执行多个智能体。这种并行性还能将智能体的数据去相关化为更平稳的过程,因为在任何给定时间步,并行智能体将经历各种不同的状态。这一简单思想使得更广泛的基础在线策略强化学习算法(如Sarsa、n步方法和演员-评论家方法)以及离策略强化学习算法(如Q学习)能够稳健且有效地通过深度神经网络加以应用。
我们的并行强化学习范式还具有实际优势。以往的深度强化学习方法严重依赖GPU等专用硬件(Mnih et al., 2015; Van Hasselt et al., 2015; Schaul et al., 2015)或大规模分布式架构(Nair et al., 2015),而我们的实验在配备标准多核CPU的单台机器上运行。在多种Atari 2600领域中,异步强化学习在许多游戏上取得了更好的结果,所需时间远少于以往基于GPU的算法,资源消耗也远低于大规模分布式方法。所提出的方法中表现最佳的异步优势演员-评论家(A3C)算法,还掌握了多种连续电机控制任务,并仅通过视觉输入学习到了探索3D迷宫的通用策略。我们认为,A3C在2D和3D游戏、离散和连续动作空间上的成功,以及其训练前馈和循环智能体的能力,使其成为迄今为止最通用且最成功的强化学习智能体。
2. 相关工作
(Nair et al., 2015)的通用强化学习架构(Gorila)在分布式环境中对强化学习智能体进行异步训练。在Gorila中,每个进程包含一个在自身环境副本中行动的执行者、一个独立的回放内存,以及一个从回放内存中采样数据并计算DQN损失(Mnih et al., 2015)相对于策略参数梯度的学习器。梯度被异步发送到中央参数服务器,由其更新模型的中央副本。更新后的策略参数会按固定间隔发送给执行者-学习器。通过使用100个独立的执行者-学习器进程和30个参数服务器实例(共130台机器),Gorila在49款Atari游戏上显著优于DQN。在许多游戏中,Gorila达到DQN所获分数的速度是DQN的20多倍。我们还注意到,(Chavez et al., 2015)也提出了类似的DQN并行化方法。
在早期工作中,(Li & Schuurmans, 2011)将Map Reduce框架应用于具有线性函数近似的批处理强化学习方法的并行化。并行性用于加速大型矩阵运算,而非并行化经验收集或稳定学习。(Grounds & Kudenko, 2008)提出了Sarsa算法的并行版本,该版本使用多个独立的执行者-学习器来加速训练。每个执行者-学习器独立学习,并通过对等通信定期向其他学习器发送发生显著变化的权重更新。
(Tsitsiklis, 1994)研究了异步优化设置下Q学习的收敛特性。这些结果表明,只要过时信息最终被丢弃且满足其他几个技术假设,即使存在部分过时信息,Q学习仍能保证收敛。更早之前,(Bertsekas, 1982)研究了分布式动态规划的相关问题。
另一个相关工作领域是进化方法,通过在多台机器或线程上分布适应度评估,进化方法通常易于并行化(Tomassini, 1999)。此类并行进化方法最近已应用于一些视觉强化学习任务。例如,(Koutník et al., 2014)通过在8个CPU核心上并行执行适应度评估,为TORCS驾驶模拟器进化出了卷积神经网络控制器。
3. 强化学习背景
我们考虑标准强化学习设置,其中智能体与环境E\mathcal{E}E在多个离散时间步长上进行交互。在每个时间步ttt,智能体接收状态st{s}_{t}st并根据其策略π\piπ从可能动作集A\mathcal{A}A中选择动作at{a}_{t}at,其中π\piπ是从状态st{s}_{t}st到动作at{a}_{t}at的映射。作为回报,智能体接收下一个状态st+1{s}_{t + 1}st+1和标量奖励rt{r}_{t}rt。该过程持续到智能体到达终端状态,之后过程重新开始。回报Rt=∑k=0∞γkrt+k{R}_{t} = \mathop{\sum }\limits_{{k = 0}}^{\infty }{\gamma }^{k}{r}_{t + k}Rt=k=0∑∞γkrt+k是从时间步ttt开始的总累积回报,带有折扣因子γ∈(0,1]\gamma \in (0,1\rbrackγ∈(0,1]。智能体的目标是最大化每个状态st{s}_{t}st的期望回报。
符号说明:
- 基础符号:
- ttt:时间步索引(离散时间步)
- sts_tst:时刻 ttt 的状态(State),st∈Ss_t \in \mathcal{S}st∈S
- ata_tat:时刻 ttt 执行的动作(Action),at∈Aa_t \in \mathcal{A}at∈A
- st+1s_{t+1}st+1:执行动作 ata_tat 后的下一状态
- rtr_trt:时刻 ttt 获得的标量奖励(Reward)
- E\mathcal{E}E:环境(Environment),产生状态转移和奖励
- π\piπ:策略(Policy),从状态到动作的映射,π(at∣st)\pi(a_t | s_t)π(at∣st)
- S\mathcal{S}S:状态空间(State Space)
- A\mathcal{A}A:动作空间(Action Space)
- 回报和目标函数符号:
- RtR_tRt:从时刻 ttt 开始的累积回报(Return),Rt=∑k=0∞γkrt+kR_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k}Rt=∑k=0∞γkrt+k
- γ\gammaγ:折扣因子(Discount Factor),范围 (0,1](0, 1](0,1],控制未来奖励的重要性
- rt+kr_{t+k}rt+k:时刻 t+kt+kt+k 的即时奖励
- 智能体的目标:最大化每个状态 sts_tst 的期望回报
动作价值Qπ(s,a)=E[Rt∣st=s,a]{Q}^{\pi }\left( {s,a}\right) = \mathbb{E}\left\lbrack {{R}_{t} \mid {s}_{t} = s,a}\right\rbrackQπ(s,a)=E[Rt∣st=s,a]是在状态sss中选择动作aaa并遵循策略π\piπ的期望回报。最优价值函数Q∗(s,a)= maxπQπ(s,a){Q}^{ * }\left( {s,a}\right) = \; \mathop{\max }\limits_{\pi }{Q}^{\pi }\left( {s,a}\right)Q∗(s,a)=πmaxQπ(s,a)给出了任何策略可实现的状态sss和动作aaa的最大动作价值。类似地,策略π\piπ下状态sss的值定义为Vπ(s)= E[Rt∣st=s]{V}^{\pi }\left( s\right) = \; \mathbb{E}\left\lbrack {{R}_{t} \mid {s}_{t} = s}\right\rbrackVπ(s)=E[Rt∣st=s],即从状态sss遵循策略π\piπ的期望回报。
Q 函数和价值函数公式详解:
- Q 函数:Qπ(s,a)=E[Rt∣st=s,a]Q^{\pi}(s,a) = \mathbb{E}[R_t | s_t = s, a]Qπ(s,a)=E[Rt∣st=s,a]
- 变量含义:
- Qπ(s,a)Q^{\pi}(s,a)Qπ(s,a):在状态 sss 下执行动作 aaa,之后遵循策略 π\piπ 的动作价值函数(期望累积奖励)
- sss:状态(State)
- aaa:动作(Action)
- π\piπ:策略
- RtR_tRt:从时刻 ttt 开始的累积回报
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子,对所有可能的未来轨迹取平均
- 物理意义:衡量在状态 sss 下执行动作 aaa 的长期价值
- 最优 Q 函数:Q∗(s,a)=maxπQπ(s,a)Q^*(s,a) = \max_{\pi} Q^{\pi}(s,a)Q∗(s,a)=maxπQπ(s,a)
- 变量含义:
- Q∗(s,a)Q^*(s,a)Q∗(s,a):最优动作价值函数,所有策略中最大的 Q 值
- maxπ\max_{\pi}maxπ:对所有策略取最大值
- 物理意义:最优策略下的动作价值
- 状态价值函数:Vπ(s)=E[Rt∣st=s]V^{\pi}(s) = \mathbb{E}[R_t | s_t = s]Vπ(s)=E[Rt∣st=s]
- 变量含义:
- Vπ(s)V^{\pi}(s)Vπ(s):在状态 sss 下遵循策略 π\piπ 的状态价值函数(期望累积奖励)
- sss:状态
- π\piπ:策略
- RtR_tRt:从时刻 ttt 开始的累积回报
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子
- 物理意义:衡量在状态 sss 下遵循策略 π\piπ 的长期价值
- 与 Q 函数的关系:Vπ(s)=Ea∼π[Qπ(s,a)]V^{\pi}(s) = \mathbb{E}_{a \sim \pi}[Q^{\pi}(s,a)]Vπ(s)=Ea∼π[Qπ(s,a)](状态价值是 Q 函数在策略下的期望)
在基于价值的无模型强化学习方法中,动作价值函数使用函数逼近器(如神经网络)表示。令Q(s,a;θ)Q\left( {s,a;\theta }\right)Q(s,a;θ)为具有参数θ\thetaθ的近似动作价值函数。对θ\thetaθ的更新可通过多种强化学习算法推导得出。此类算法的一个例子是Q学习,其旨在直接逼近最优动作价值函数:Q∗(s,a)≈Q(s,a;θ){Q}^{ * }\left( {s,a}\right) \approx Q\left( {s,a;\theta }\right)Q∗(s,a)≈Q(s,a;θ)。在一步Q学习中,动作价值函数Q(s,a;θ)Q\left( {s,a;\theta }\right)Q(s,a;θ)的参数θ\thetaθ通过迭代最小化一系列损失函数来学习,其中第iii个损失函数定义为
Li(θi)=E(r+γmaxa′Q(s′,a′;θi−1)−Q(s,a;θi))2 {L}_{i}\left( {\theta }_{i}\right) = \mathbb{E}{\left( r + \gamma \mathop{\max }\limits_{{a}^{\prime }}Q\left( {s}^{\prime },{a}^{\prime };{\theta }_{i - 1}\right) - Q\left( s,a;{\theta }_{i}\right) \right) }^{2} Li(θi)=E(r+γa′maxQ(s′,a′;θi−1)−Q(s,a;θi))2
Q 学习损失函数详解:
- 变量含义:
- Li(θi)L_i(\theta_i)Li(θi):第 iii 次迭代的损失函数(均方误差)
- θi\theta_iθi:第 iii 次迭代的 Q 网络参数
- rrr:即时奖励(Reward)
- γ\gammaγ:折扣因子
- sss:当前状态
- aaa:当前动作
- s′s's′:下一状态(状态 sss 之后遇到的状态)
- a′a'a′:下一动作
- Q(s′,a′;θi−1)Q(s', a'; \theta_{i-1})Q(s′,a′;θi−1):使用旧参数 θi−1\theta_{i-1}θi−1 的 Q 网络对下一状态-动作对的 Q 值估计
- maxa′Q(s′,a′;θi−1)\max_{a'} Q(s', a'; \theta_{i-1})maxa′Q(s′,a′;θi−1):在下一状态 s′s's′ 下所有动作的最大 Q 值(贪婪策略)
- Q(s,a;θi)Q(s, a; \theta_i)Q(s,a;θi):使用当前参数 θi\theta_iθi 的 Q 网络对当前状态-动作对的 Q 值预测
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子
- 物理意义:
- TD 目标:r+γmaxa′Q(s′,a′;θi−1)r + \gamma \max_{a'} Q(s', a'; \theta_{i-1})r+γmaxa′Q(s′,a′;θi−1)(即时奖励 + 折扣后的最大未来 Q 值)
- TD 误差:r+γmaxa′Q(s′,a′;θi−1)−Q(s,a;θi)r + \gamma \max_{a'} Q(s', a'; \theta_{i-1}) - Q(s, a; \theta_i)r+γmaxa′Q(s′,a′;θi−1)−Q(s,a;θi)
- 最小化 TD 误差的平方,使 Q 值预测接近 TD 目标
- 关键特点:
- 使用目标网络(θi−1\theta_{i-1}θi−1)计算 TD 目标,提供稳定的目标
- 使用 max\maxmax 操作选择最优动作(Q 学习是离策略算法)
其中s′{s}^{\prime }s′是状态sss之后遇到的状态。
我们将上述方法称为一步Q学习,因为它将动作价值Q(s,a)Q\left( {s,a}\right)Q(s,a)朝着一步回报r+γmaxa′Q(s′,a′;θ)r + \gamma \mathop{\max }\limits_{{a}^{\prime }}Q\left( {{s}^{\prime },{a}^{\prime };\theta }\right)r+γa′maxQ(s′,a′;θ)更新。使用一步方法的一个缺点是,获得奖励rrr仅直接影响导致该奖励的状态动作对s,as,as,a的值。其他状态动作对的值仅通过更新后的价值Q(s,a)Q\left( {s,a}\right)Q(s,a)间接受到影响。这会使学习过程变慢,因为需要多次更新才能将奖励传播到相关的先前状态和动作。
加快奖励传播速度的一种方法是使用nnn步回报(Watkins, 1989; Peng & Williams, 1996)。在nnn步Q学习中,Q(s,a)Q\left( {s,a}\right)Q(s,a)朝着定义为rt+γrt+1+⋯+γn−1rt+n−1+ maxaγnQ(st+n,a){r}_{t} + \gamma {r}_{t + 1} + \cdots + {\gamma }^{n - 1}{r}_{t + n - 1} + \; \mathop{\max }\limits_{a}{\gamma }^{n}Q\left( {{s}_{t + n},a}\right)rt+γrt+1+⋯+γn−1rt+n−1+amaxγnQ(st+n,a)的nnn步回报更新。这使得单个奖励rrr直接影响nnn个先前状态动作对的值。这可能会大大提高将奖励传播到相关状态-动作对的效率。
n 步回报公式详解:
- 变量含义:
- nnn:步数(Steps),向前看的步数
- rt,rt+1,…,rt+n−1r_t, r_{t+1}, \ldots, r_{t+n-1}rt,rt+1,…,rt+n−1:从时刻 ttt 到 t+n−1t+n-1t+n−1 的即时奖励序列
- γ\gammaγ:折扣因子
- st+ns_{t+n}st+n:时刻 t+nt+nt+n 的状态
- Q(st+n,a)Q(s_{t+n}, a)Q(st+n,a):在状态 st+ns_{t+n}st+n 下执行动作 aaa 的 Q 值
- maxaQ(st+n,a)\max_a Q(s_{t+n}, a)maxaQ(st+n,a):在状态 st+ns_{t+n}st+n 下所有动作的最大 Q 值
- n 步回报:rt+γrt+1+⋯+γn−1rt+n−1+γnmaxaQ(st+n,a)r_t + \gamma r_{t+1} + \cdots + \gamma^{n-1} r_{t+n-1} + \gamma^n \max_a Q(s_{t+n}, a)rt+γrt+1+⋯+γn−1rt+n−1+γnmaxaQ(st+n,a)
- 前 n 步奖励:∑i=0n−1γirt+i\sum_{i=0}^{n-1} \gamma^i r_{t+i}∑i=0n−1γirt+i(直接使用未来 n 步的奖励)
- n 步后的 Q 值:γnmaxaQ(st+n,a)\gamma^n \max_a Q(s_{t+n}, a)γnmaxaQ(st+n,a)(使用 Q 函数估计剩余价值)
- 物理意义:
- 单步回报:rt+γmaxaQ(st+1,a)r_t + \gamma \max_a Q(s_{t+1}, a)rt+γmaxaQ(st+1,a)(只使用一步奖励)
- n 步回报:使用未来 n 步的奖励,加速奖励传播
- n 越大,偏差越大但方差越小;n 越小,偏差越小但方差越大
- 优势:
- 单个奖励 rrr 直接影响 nnn 个先前状态-动作对的值
- 提高奖励传播效率,加快学习速度
- 平衡偏差和方差
与基于价值的方法不同,基于策略的无模型方法直接对策略π(a∣s;θ)\pi \left( {a \mid s;\theta }\right)π(a∣s;θ)进行参数化,并通过对E[Rt]\mathbb{E}\left\lbrack {R}_{t}\right\rbrackE[Rt]执行通常为近似的梯度上升来更新参数θ\thetaθ。此类方法的一个例子是Williams(1992)提出的REINFORCE算法家族。标准REINFORCE沿方向∇θlogπ(at∣st;θ)Rt{\nabla }_{\theta }\log \pi \left( {{a}_{t} \mid {s}_{t};\theta }\right) {R}_{t}∇θlogπ(at∣st;θ)Rt更新策略参数θ\thetaθ,这是对∇θE[Rt]{\nabla }_{\theta }\mathbb{E}\left\lbrack {R}_{t}\right\rbrack∇θE[Rt]的无偏估计。通过从回报中减去状态bt(st){b}_{t}\left( {s}_{t}\right)bt(st)的学习函数(称为基线(Williams, 1992)),可以在保持无偏的同时降低该估计的方差。得到的梯度为∇θlogπ(at∣st;θ)(Rt−bt(st)){\nabla }_{\theta }\log \pi \left( {{a}_{t} \mid {s}_{t};\theta }\right) \left( {{R}_{t} - {b}_{t}\left( {s}_{t}\right) }\right)∇θlogπ(at∣st;θ)(Rt−bt(st))。
REINFORCE 策略梯度公式详解:
- 标准 REINFORCE 梯度:∇θlogπ(at∣st;θ)Rt\nabla_\theta \log \pi(a_t | s_t; \theta) R_t∇θlogπ(at∣st;θ)Rt
- 变量含义:
- ∇θ\nabla_\theta∇θ:对策略参数 θ\thetaθ 的梯度
- logπ(at∣st;θ)\log \pi(a_t | s_t; \theta)logπ(at∣st;θ):策略的对数概率密度
- RtR_tRt:从时刻 ttt 开始的累积回报
- sts_tst:时刻 ttt 的状态
- ata_tat:时刻 ttt 执行的动作
- 物理意义:使用回报 RtR_tRt 作为权重,更新策略参数
- 问题:回报 RtR_tRt 的方差很大,导致策略梯度估计不稳定
- 带基线的 REINFORCE 梯度:∇θlogπ(at∣st;θ)(Rt−bt(st))\nabla_\theta \log \pi(a_t | s_t; \theta) (R_t - b_t(s_t))∇θlogπ(at∣st;θ)(Rt−bt(st))
- 变量含义:
- bt(st)b_t(s_t)bt(st):基线(Baseline),状态 sts_tst 的函数,通常使用价值函数 V(st)V(s_t)V(st)
- Rt−bt(st)R_t - b_t(s_t)Rt−bt(st):优势估计(Advantage Estimate),回报减去基线
- 物理意义:
- 基线不改变期望:E[∇θlogπ(at∣st;θ)bt(st)]=0\mathbb{E}[\nabla_\theta \log \pi(a_t | s_t; \theta) b_t(s_t)] = 0E[∇θlogπ(at∣st;θ)bt(st)]=0(无偏性)
- 但减少方差:Var[∇θlogπ(at∣st;θ)(Rt−bt(st))]<Var[∇θlogπ(at∣st;θ)Rt]\text{Var}[\nabla_\theta \log \pi(a_t | s_t; \theta) (R_t - b_t(s_t))] < \text{Var}[\nabla_\theta \log \pi(a_t | s_t; \theta) R_t]Var[∇θlogπ(at∣st;θ)(Rt−bt(st))]<Var[∇θlogπ(at∣st;θ)Rt]
- 优势函数衡量动作相对于平均水平的优劣,而非绝对好坏
- 优势:方差更小,训练更稳定,样本效率更高
价值函数的学习估计通常用作基线bt(st)≈Vπ(st){b}_{t}\left( {s}_{t}\right) \approx {V}^{\pi }\left( {s}_{t}\right)bt(st)≈Vπ(st),从而得到方差低得多的策略梯度估计。当使用近似价值函数作为基线时,用于缩放策略梯度的量Rt−bt{R}_{t} - {b}_{t}Rt−bt可被视为状态st{s}_{t}st中动作at{a}_{t}at的优势估计,即A(at,st)=Q(at,st)−V(st)A\left( {{a}_{t},{s}_{t}}\right) = Q\left( {{a}_{t},{s}_{t}}\right) - V\left( {s}_{t}\right)A(at,st)=Q(at,st)−V(st),因为Rt{R}_{t}Rt是Qπ(at,st){Q}^{\pi }\left( {{a}_{t},{s}_{t}}\right)Qπ(at,st)的估计,而bt{b}_{t}bt是Vπ(st){V}^{\pi }\left( {s}_{t}\right)Vπ(st)的估计。这种方法可以看作是一种演员-评论家架构,其中策略π\piπ是演员,基线bt{b}_{t}bt是评论家(Sutton & Barto, 1998; Degris et al., 2012)。
优势函数详解:
- 问题:REINFORCE 使用回报 RtR_tRt 作为权重,方差很大
- 策略梯度:∇θJ=E[∇θlogπ(at∣st)Rt]\nabla_\theta J = \mathbb{E}[\nabla_\theta \log \pi(a_t|s_t) R_t]∇θJ=E[∇θlogπ(at∣st)Rt]
- 问题:回报 RtR_tRt 的方差很大,导致策略梯度估计不稳定
- 需要大量样本才能获得准确的梯度估计,训练效率低
- 回报的尺度可能很大,导致梯度爆炸或消失
- 解决方案:使用价值函数作为基线,减少方差
- 基线:bt(st)≈Vπ(st)b_t(s_t) \approx V^\pi(s_t)bt(st)≈Vπ(st),使用价值函数作为基线
- 优势函数:A(st,at)=Q(st,at)−V(st)=Rt−btA(s_t, a_t) = Q(s_t, a_t) - V(s_t) = R_t - b_tA(st,at)=Q(st,at)−V(st)=Rt−bt
- 改进后的梯度:∇θJ=E[∇θlogπ(at∣st)A(st,at)]\nabla_\theta J = \mathbb{E}[\nabla_\theta \log \pi(a_t|s_t) A(s_t, a_t)]∇θJ=E[∇θlogπ(at∣st)A(st,at)]
- n 步优势:A(st,at)=∑i=0k−1γirt+i+γkV(st+k)−V(st)A(s_t, a_t) = \sum_{i=0}^{k-1} \gamma^i r_{t+i} + \gamma^k V(s_{t+k}) - V(s_t)A(st,at)=∑i=0k−1γirt+i+γkV(st+k)−V(st),平衡偏差和方差
- 关键特点:
- 无偏性:基线不改变期望,E[A(st,at)]=E[Rt−V(st)]=Q(st,at)−V(st)\mathbb{E}[A(s_t, a_t)] = \mathbb{E}[R_t - V(s_t)] = Q(s_t, a_t) - V(s_t)E[A(st,at)]=E[Rt−V(st)]=Q(st,at)−V(st)
- 方差减少:优势函数的方差通常远小于回报的方差
- 相对评估:优势函数衡量动作相对于平均水平的优劣,而非绝对好坏
- 正优势:动作优于平均水平,增加其概率
- 负优势:动作劣于平均水平,减少其概率
- n 步优势的优势:
- 单步优势:A=rt+γV(st+1)−V(st)A = r_t + \gamma V(s_{t+1}) - V(s_t)A=rt+γV(st+1)−V(st),偏差小但方差大
- n 步优势:A=∑i=0n−1γirt+i+γnV(st+n)−V(st)A = \sum_{i=0}^{n-1} \gamma^i r_{t+i} + \gamma^n V(s_{t+n}) - V(s_t)A=∑i=0n−1γirt+i+γnV(st+n)−V(st),平衡偏差和方差
- n 越大,偏差越大但方差越小;n 越小,偏差越小但方差越大
- Actor-Critic 架构:
- Actor(策略 π\piπ):根据优势函数更新策略,选择动作
- Critic(价值函数 VVV):估计状态价值,作为基线,减少方差
- 与 REINFORCE 的对比:
- REINFORCE:使用回报 RtR_tRt,方差大,需要大量样本
- Actor-Critic:使用优势 A(st,at)A(s_t, a_t)A(st,at),方差小,样本效率高
- Actor-Critic 需要额外的价值网络,但通常值得
- 项目对应:
src/a3c.py中的A3CAgent._compute_returns_adv()方法计算 n 步优势函数,使用 GAE(Generalized Advantage Estimation)进一步减少方差
4. 异步强化学习框架
我们现在提出单步Sarsa、单步Q学习、n步Q学习和优势演员-评论家的多线程异步变体。设计这些方法的目的是找到能够可靠训练深度神经网络策略且无需大量资源的强化学习算法。尽管底层强化学习方法有很大不同,演员-评论家是一种在线策略搜索方法,而Q学习是一种离线策略基于价值的方法,但我们使用两个主要思想使所有四种算法在我们的设计目标下切实可行。
首先,我们使用异步演员-学习者,类似于Gorila框架(Nair et al., 2015),但我们没有使用单独的机器和参数服务器,而是在单台机器上使用多个CPU线程。将学习者放在单台机器上消除了发送梯度和参数的通信成本,并使我们能够使用Hogwild!(Recht et al., 2011)风格的更新进行训练。
其次,我们观察到并行运行的多个智能体-学习器可能正在探索环境的不同部分。此外,可以在每个智能体-学习器中显式使用不同的探索策略以最大化这种多样性。通过在不同线程中运行不同的探索策略,多个智能体-学习器并行应用在线更新对参数所做的整体更改,在时间上的相关性可能低于单个智能体应用在线更新的情况。因此,我们不使用回放内存,而是依靠采用不同探索策略的并行智能体来发挥DQN训练算法中经验回放所承担的稳定作用。
算法1 异步单步Q学习——每个智能体-学习器线程的伪代码
算法流程详解:
-
初始化
- 假设全局共享参数 θ\thetaθ、目标网络参数 θ−\theta^-θ− 和全局计数器 T=0T = 0T=0
- 初始化线程步数计数器 t←0t \leftarrow 0t←0
- 初始化目标网络权重 θ−←θ\theta^- \leftarrow \thetaθ−←θ
- 初始化网络梯度 dθ←0d\theta \leftarrow 0dθ←0
- 获取初始状态 sss
-
主循环(repeat until T>TmaxT > T_{\max}T>Tmax):
步骤 1:选择动作
- 基于 Q(s,a;θ)Q(s,a;\theta)Q(s,a;θ),采用 ϵ\epsilonϵ-贪婪策略执行动作 aaa
步骤 2:执行动作并接收反馈
- 接收新状态 s′s's′ 和奖励 rrr
步骤 3:计算 TD 目标值
- 计算目标值 yyy:
y={r如果 s′ 是终止状态r+γmaxa′Q(s′,a′;θ−)如果 s′ 是非终止状态 y = \begin{cases} r & \text{如果 } s' \text{ 是终止状态} \\ r + \gamma \max_{a'} Q(s', a'; \theta^-) & \text{如果 } s' \text{ 是非终止状态} \end{cases} y={rr+γmaxa′Q(s′,a′;θ−)如果 s′ 是终止状态如果 s′ 是非终止状态
步骤 4:累积梯度
- 累积关于 θ\thetaθ 的梯度:
dθ←dθ+∂(y−Q(s,a;θ))2∂θ d\theta \leftarrow d\theta + \frac{\partial (y - Q(s,a;\theta))^2}{\partial \theta} dθ←dθ+∂θ∂(y−Q(s,a;θ))2
步骤 5:更新状态和计数器
- s←s′s \leftarrow s's←s′
- T←T+1T \leftarrow T + 1T←T+1(全局计数器)
- t←t+1t \leftarrow t + 1t←t+1(线程计数器)
步骤 6:更新目标网络(周期性)
- 如果 T mod Itarget=0T \bmod I_{\text{target}} = 0TmodItarget=0,则更新目标网络:θ−←θ\theta^- \leftarrow \thetaθ−←θ
步骤 7:异步更新(周期性或终止时)
- 如果 t mod IAsyncUpdate=0t \bmod I_{\text{AsyncUpdate}} = 0tmodIAsyncUpdate=0 或 sss 为终止状态:
- 使用 dθd\thetadθ 对 θ\thetaθ 执行异步更新
- 清除梯度:dθ←0d\theta \leftarrow 0dθ←0
-
循环结束,直到 T>TmaxT > T_{\max}T>Tmax
关键要点:
- 异步更新:多个线程并行收集经验并异步更新全局参数
- 在线策略学习:不使用经验回放,依靠并行探索的多样性来稳定学习
- 目标网络:周期性更新目标网络,提供稳定的 TD 目标
- 梯度累积:在本地累积梯度,定期异步更新全局参数
除稳定学习过程外,使用多个并行智能体-学习器还具有多种实际优势。首先,训练时间的减少量与并行智能体-学习器的数量大致呈线性关系。其次,由于不再依赖经验回放来稳定学习,我们能够使用在线策略强化学习方法(如Sarsa和演员-评论家算法)以稳定方式训练神经网络。现在我们将介绍单步Q学习、单步Sarsa、n步Q学习和优势演员-评论家算法的变体。
异步单步Q学习:我们提出的Q学习变体(称为异步单步Q学习)的伪代码如算法1所示。每个线程与其自身的环境副本交互,并在每一步计算Q学习损失的梯度。我们在计算Q学习损失时使用共享且缓慢变化的目标网络,正如DQN训练方法中所提出的。我们还会在应用梯度之前累积多个时间步的梯度,这类似于使用小批量数据。这减少了多个智能体-学习器相互覆盖更新的可能性。通过多个步骤累积更新还提供了一定的能力,可以在计算效率和数据效率之间进行权衡。
最后,我们发现为每个线程提供不同的探索策略有助于提高鲁棒性。通过这种方式增加探索的多样性通常还能通过更好的探索来提升性能。虽然有多种方法可以使探索策略不同,但我们尝试使用ϵ\epsilonϵ-贪婪探索,其中每个线程会定期从某个分布中采样ϵ\epsilonϵ。
异步单步Sarsa:异步单步Sarsa算法与算法1中给出的异步单步Q学习相同,不同之处在于它对Q(s,a)Q\left( {s,a}\right)Q(s,a)使用不同的目标值。单步Sarsa使用的目标值为r+γQ(s′,a′;θ−)r + {\gamma Q}\left( {{s}^{\prime },{a}^{\prime };{\theta }^{ - }}\right)r+γQ(s′,a′;θ−),其中a′{a}^{\prime }a′是在状态s′{s}^{\prime }s′中采取的动作(Rummery & Niranjan, 1994; Sutton & Barto, 1998)。我们再次使用目标网络和多个时间步累积的更新来稳定学习。
异步n步Q学习:我们提出的多步Q学习变体的伪代码如补充算法S1所示。该算法有些特殊,因为它通过显式计算n步回报在前向视角下运行,这与资格迹等技术常用的后向视角不同(Sutton & Barto, 1998)。我们发现,在使用基于动量的方法和时间反向传播训练神经网络时,前向视角更容易实现。为了计算单次更新,该算法首先使用其探索策略选择动作,最多执行tmax{t}_{\max }tmax步或直到达到终端状态。此过程使智能体自上次更新以来从环境中获得最多tmax{t}_{\max }tmax个奖励。然后,算法为自上次更新以来遇到的每个状态-动作对计算n步Q学习更新的梯度。每个n步更新使用尽可能长的n步回报,从而对最后一个状态进行单步更新,对倒数第二个状态进行两步更新,依此类推,总共最多进行tmax{t}_{\max }tmax次更新。累积的更新通过单个梯度步骤应用。
异步优势演员-评论家:我们称之为异步优势演员-评论家(A3C)的算法维护一个策略π(at∣st;θ)\pi \left( {{a}_{t} \mid {s}_{t};\theta }\right)π(at∣st;θ)和一个价值函数估计V(st;θv)V\left( {{s}_{t};{\theta }_{v}}\right)V(st;θv)。与我们的n步Q学习变体类似,我们的演员-评论家变体也在前向视图中运行,并使用相同的n步回报组合来更新策略和价值函数。每执行tmax{t}_{\max }tmax个动作后或到达终端状态时,更新策略和价值函数。该算法执行的更新可表示为∇θ′logπ(at∣st;θ′)A(st,at;θ,θv){\nabla }_{{\theta }^{\prime }}\log \pi \left( {{a}_{t} \mid {s}_{t};{\theta }^{\prime }}\right) A\left( {{s}_{t},{a}_{t};\theta ,{\theta }_{v}}\right)∇θ′logπ(at∣st;θ′)A(st,at;θ,θv),其中A(st,at;θ,θv)A\left( {{s}_{t},{a}_{t};\theta ,{\theta }_{v}}\right)A(st,at;θ,θv)是优势函数的估计值,由∑i=0k−1γirt+i+γkV(st+k;θv)−V(st;θv)\mathop{\sum }\limits_{{i = 0}}^{{k - 1}}{\gamma }^{i}{r}_{t + i} + {\gamma }^{k}V\left( {{s}_{t + k};{\theta }_{v}}\right) - V\left( {{s}_{t};{\theta }_{v}}\right)i=0∑k−1γirt+i+γkV(st+k;θv)−V(st;θv)给出,kkk可因状态而异,且上限为tmax{t}_{\max }tmax。该算法的伪代码见补充算法S2。
与基于价值的方法一样,我们依靠并行的演员-学习器和累积更新来提高训练稳定性。请注意,虽然为了通用性,策略的参数θ\thetaθ和价值函数的参数θv{\theta }_{v}θv显示为分开的,但在实践中我们总是共享部分参数。我们通常使用卷积神经网络,该网络有一个用于策略π(at∣st;θ)\pi \left( {{a}_{t} \mid {s}_{t};\theta }\right)π(at∣st;θ)的softmax输出和一个用于价值函数V(st;θv)V\left( {{s}_{t};{\theta }_{v}}\right)V(st;θv)的线性输出,所有非输出层均共享。
我们还发现,将策略的熵π\piπ添加到目标函数中,通过阻止过早收敛到次优确定性策略,改善了探索效果。该技术最初由(Williams & Peng, 1991)提出,他们发现该技术在需要层次化行为的任务上特别有用。包含熵正则化项的完整目标函数相对于策略参数的梯度形式为∇θ′logπ(at∣st;θ′)(Rt−V(st;θv))+ β∇θ′H(π(st;θ′)){\nabla }_{{\theta }^{\prime }}\log \pi \left( {{a}_{t} \mid {s}_{t};{\theta }^{\prime }}\right) \left( {{R}_{t} - V\left( {{s}_{t};{\theta }_{v}}\right) }\right) + \; \beta {\nabla }_{{\theta }^{\prime }}H\left( {\pi \left( {{s}_{t};{\theta }^{\prime }}\right) }\right)∇θ′logπ(at∣st;θ′)(Rt−V(st;θv))+β∇θ′H(π(st;θ′)),其中HHH是熵。超参数β\betaβ控制熵正则化项的强度。
优化:我们在异步框架中研究了三种不同的优化算法——带动量的SGD、无共享统计量的RMSProp(Tieleman & Hinton, 2012)以及有共享统计量的RMSProp。我们使用标准的非中心RMSProp更新,公式如下
g=αg+(1−α)Δθ2 and θ←θ−ηΔθg+ϵ,(1) g = {\alpha g} + \left( {1 - \alpha }\right) \Delta {\theta }^{2}\text{ and }\theta \leftarrow \theta - \eta \frac{\Delta \theta }{\sqrt{g + \epsilon }}, \tag{1} g=αg+(1−α)Δθ2 and θ←θ−ηg+ϵΔθ,(1)
其中所有运算均按元素进行。在Atari 2600游戏子集上的比较表明,跨线程共享统计量ggg的RMSProp变体比其他两种方法稳健得多。方法和比较的全部细节见补充部分1。
5. 鲁棒性和稳定性
最后,我们分析了所提出的四种异步算法的稳定性和鲁棒性。对于每种算法,我们使用50种不同的学习率和随机初始化在五个游戏(Breakout、Beamrider、Pong、Q*bert、Space Invaders)上训练模型。图2显示了A3C的结果分数散点图,而补充图S7显示了其他三种方法的结果图。对于每种方法和游戏组合,通常存在一个学习率范围可产生良好分数,表明所有方法对学习率选择和随机初始化均具有较强的鲁棒性。在良好学习率区域几乎不存在分数为0的点,这表明这些方法在学习过程中是稳定的,不会崩溃或发散。
6. 结论与讨论
我们提出了四种标准强化学习算法的异步版本,并证明它们能够在多种领域稳定训练神经网络控制器。结果表明,在我们提出的框架中,通过强化学习稳定训练神经网络对于基于价值和基于策略的方法、离策略和在策略方法,以及离散和连续领域都是可行的。在Atari领域使用16个CPU核心训练时,所提出的异步算法比在Nvidia K40 GPU上训练的DQN更快,其中A3C在一半的训练时间内就超越了当前最先进水平。
我们的主要发现之一是,使用并行actor-learners更新共享模型对我们所考虑的三种基于价值的方法的学习过程具有稳定作用。虽然这表明无需经验回放(DQN中用于此目的)也能实现稳定的在线Q学习,但这并不意味着经验回放没有用处。将经验回放整合到异步强化学习框架中,可以通过重用旧数据大幅提高这些方法的数据效率。这反过来可能会在像TORCS这样的领域中显著加快训练时间,在这些领域中,对于我们使用的架构而言,与环境交互比更新模型的成本更高。
将其他现有的强化学习方法或深度强化学习的最新进展与我们的异步框架相结合,为立即改进我们提出的方法提供了许多可能性。虽然我们的n步方法通过直接使用校正后的n步回报作为目标在前向视角(Sutton & Barto, 1998)下运行,但更常见的是使用后向视角通过资格迹(Watkins, 1989; Sutton & Barto, 1998; Peng & Williams, 1996)隐式组合不同的回报。异步优势actor-critic方法可以通过使用其他估计优势函数的方式来潜在地改进,例如(Schulman et al., 2015b)的广义优势估计。我们研究的所有基于价值的方法都可以从减少Q值高估偏差的不同方法中受益(Van Hasselt et al., 2015; Bellemare et al., 2016)。另一个更具推测性的方向是尝试将最近关于真正在线时间差分方法的研究(van Seijen et al., 2015)与非线性函数近似相结合。
除了这些算法改进之外,对神经网络架构进行一些补充改进也是可能的。(Wang et al., 2015)的竞争架构通过在网络中包含状态值和优势的单独流,已被证明能产生更准确的Q值估计。(Levine et al., 2015)提出的空间soft-max可以通过使网络更容易表示特征坐标来改进基于价值和基于策略的方法。
7 总结与理解要点
7.1 A3C 核心思想总结
A3C 的核心创新:
- 异步并行训练:多个 worker 并行收集经验,异步更新全局网络,无需经验回放
- n 步回报:使用前向视角计算 n 步回报,加速奖励传播,提高样本效率
- 优势函数:使用价值函数作为基线,减少策略梯度的方差
- 熵正则化:鼓励探索,防止过早收敛到次优策略
- 简单实现:使用标准优化器(Adam),无需复杂的约束或搜索
为什么 A3C 能工作:
- 异步并行:多个 worker 并行探索不同状态,打破数据相关性,稳定训练
- n 步回报:直接使用未来 n 步的奖励,加速奖励传播,减少偏差
- 优势函数:使用价值函数作为基线,减少策略梯度的方差,提高稳定性
- 熵正则化:鼓励探索,防止过早收敛,提高鲁棒性
- 简单优化:使用标准优化器,实现简单,易于调试
7.2 与项目实现的对应关系
算法组件对应:
- 策略网络 →
src/a3c.py中的PolicyNet类 - 价值网络 →
src/a3c.py中的ValueNet类 - n 步回报计算 →
A3CAgent._compute_returns_adv方法 - 优势函数计算 →
A3CAgent._compute_returns_adv方法 - 策略更新 →
A3CAgent.update方法中的策略梯度计算 - 价值更新 →
A3CAgent.update方法中的价值损失计算
超参数对应:
- 学习率 →
config.py中的A3C_POLICY_LR和A3C_VALUE_LR(默认 3e-4 和 1e-3) - GAE 参数 →
config.py中的A3C_GAE_LAMBDA(默认 0.95) - 熵正则化系数 →
config.py中的A3C_ENTROPY_COEF(默认 1e-3) - 梯度裁剪阈值 →
config.py中的A3C_MAX_GRAD_NORM(默认 0.5) - n 步回报长度 → 在代码中通过 episode 长度自动确定
7.3 关键设计决策的理解
为什么需要异步并行训练?
- 在线 RL 算法遇到的数据序列是非平稳的,且更新具有强相关性
- 经验回放可以解决这个问题,但需要离策略算法
- 异步并行训练通过多个 worker 并行探索不同状态,打破数据相关性
- 无需经验回放,可以使用在策略算法(如 A2C)
为什么使用 n 步回报?
- 单步回报:奖励传播慢,需要多次更新才能传播到相关状态
- n 步回报:直接使用未来 n 步的奖励,加速奖励传播
- 前向视角:直接计算 n 步回报,实现简单,适合神经网络训练
为什么需要优势函数?
- 策略梯度:∇θJ=E[∇θlogπ(a∣s)R]\nabla_\theta J = \mathbb{E}[\nabla_\theta \log \pi(a|s) R]∇θJ=E[∇θlogπ(a∣s)R]
- 使用回报 RRR 作为权重,方差很大
- 优势函数:A(s,a)=Q(s,a)−V(s)A(s,a) = Q(s,a) - V(s)A(s,a)=Q(s,a)−V(s),减少方差
- 价值函数 V(s)V(s)V(s) 作为基线,不改变期望,但减少方差
为什么需要熵正则化?
- 防止过早收敛到次优确定性策略
- 鼓励探索,提高鲁棒性
- 在需要层次化行为的任务上特别有用
为什么本实现是单 worker 版本?
- 真正的 A3C 需要多线程/多进程并行收集经验
- 在单机环境中,A3C 和 A2C 基本相同
- 本实现保留接口以便将来扩展为真正的异步版本
- 单 worker 版本已经足够稳定,适合大多数任务
7.4 A3C vs A2C vs TRPO vs PPO 综合对比
| 特性 | A3C | A2C | TRPO | PPO |
|---|---|---|---|---|
| 训练方式 | 异步并行(理论) | 同步 | 同步 | 同步 |
| 实现复杂度 | 中等(单 worker 简单) | 简单 | 复杂 | 简单 |
| 稳定性保证 | 无(但经验上稳定) | 无 | 有(KL 约束) | 无(但裁剪机制) |
| 样本效率 | 高(n 步回报) | 高(n 步回报) | 中(在策略) | 高(多轮更新) |
| 计算复杂度 | 中(单 worker) | 中 | 高(共轭梯度) | 中 |
| 适用场景 | 需要并行训练 | 通用 RL 任务 | 需要稳定训练 | 通用 RL 任务 |
| 探索机制 | 熵正则化 | 熵正则化 | 熵正则化 | 熵正则化 |
| 优势估计 | n 步回报 | n 步回报 | GAE | GAE |
7.5 常见问题与解答
Q1: A3C 与 A2C 的主要区别是什么?
- A2C:同步训练,所有 worker 等待完成后统一更新
- A3C:异步训练,每个 worker 独立更新全局网络
- 本实现:单 worker 版本,A3C 和 A2C 基本相同
Q2: 为什么本实现是单 worker 版本?
- 真正的 A3C 需要多线程/多进程并行收集经验
- 在单机环境中,单 worker 版本已经足够稳定
- 本实现保留接口以便将来扩展为真正的异步版本
Q3: n 步回报长度如何选择?
- 通常设置为 episode 长度或固定值(如 20-50 步)
- 太短:奖励传播慢,样本效率低
- 太长:偏差增大,训练不稳定
- 建议从默认值开始,根据任务特点调整
Q4: 如何判断训练是否收敛?
- 观察训练曲线:奖励应该逐渐上升并趋于稳定
- 观察策略熵:应该逐渐减小但不会完全消失
- 测试性能:在测试环境中评估策略性能
Q5: A3C 与 DQN 的关系是什么?
- DQN:基于价值的方法,使用经验回放和目标网络
- A3C:基于策略的方法,使用异步并行训练和 n 步回报
- A3C 优势:无需经验回放,可以使用在策略算法,训练更快
Q6: 如何实现真正的异步 A3C?
- 使用多线程/多进程创建多个 worker
- 每个 worker 独立收集经验并计算梯度
- 异步更新全局网络(使用锁或原子操作)
- 本实现为单 worker 版本,可以在此基础上扩展
7.6 实践建议
训练技巧:
- 从简单开始:先在简单环境上验证实现
- 监控训练:观察训练曲线、策略熵、价值估计等
- 调整超参数:根据任务特点调整学习率、熵系数等
- 保存检查点:定期保存模型,避免训练中断丢失
调参建议:
- 学习率:从 3×10−43 \times 10^{-4}3×10−4 开始,如果训练不稳定则减小
- 熵正则化系数:通常 10−310^{-3}10−3,如果探索不足则增大
- GAE 参数:通常 0.95,平衡偏差和方差
- 梯度裁剪:通常 0.5,防止梯度爆炸
常见问题:
- 训练不稳定:减小学习率、增加梯度裁剪、检查网络初始化
- 不收敛:检查奖励函数、增加探索、调整网络结构
- 性能不佳:检查超参数、增加训练时间、尝试不同网络结构
- 探索不足:增大熵正则化系数、增加 n 步回报长度
7.7 进一步阅读
相关论文:
- Mnih et al. (2016): “Asynchronous Methods for Deep Reinforcement Learning”(A3C 原始论文)
- Mnih et al. (2016): “A3C”(A2C 的异步版本)
- Schulman et al. (2017): “Proximal Policy Optimization Algorithms”(PPO,A3C 的改进)
扩展算法:
- IMPALA:大规模分布式策略梯度算法
- Ape-X:分布式深度 Q 学习
- R2D2:循环经验回放分布式深度 Q 学习
应用领域:
- 游戏 AI:Atari 游戏、3D 游戏
- 机器人控制:连续控制任务
- 自然语言处理:序列决策问题
7.8 算法选择指南
何时选择 A3C?
- ✅ 适用场景:
- 需要并行训练的场景(多核 CPU)
- 离散或连续动作空间都可以
- 需要快速训练的场景
- 不需要理论保证的场景
- ❌ 不适用场景:
- 需要理论保证的场景(TRPO 更合适)
- 单核 CPU 环境(A2C 更合适)
- 需要非常稳定训练的场景(PPO 更合适)
- 项目对应:车辆路径跟踪任务可以使用 A3C
- 动作空间:离散转向角(17 个动作)
- 状态空间:横向误差、航向误差(低维)
- 优势:实现简单,训练快速
- 劣势:单 worker 版本,无法充分利用并行性
- 建议:如果不需要并行训练,优先使用 A2C
与其他算法的选择建议:
- A3C vs A2C:需要并行训练用 A3C,单 worker 用 A2C
- A3C vs TRPO/PPO:需要快速训练用 A3C,需要稳定训练用 TRPO/PPO
- A3C vs DQN:需要并行训练用 A3C,需要经验回放用 DQN
7.9 性能优化技巧
提高训练速度:
- 并行训练:使用多线程/多进程并行收集经验
- 减少 n 步回报长度:减少计算量,但可能降低样本效率
- 使用更小的网络:减少计算量,但可能降低表达能力
提高样本效率:
- n 步回报:使用更长的 n 步回报,加速奖励传播
- GAE:使用 GAE 减少优势估计的方差
- 熵正则化:鼓励探索,提高样本效率
提高稳定性:
- 学习率:使用较小的学习率,提高稳定性
- 梯度裁剪:防止梯度爆炸
- 网络初始化:使用合适的初始化方法
更多推荐

所有评论(0)