Massively Parallel Methods for Deep Reinforcement Learning
文章标题:大规模并行深度强化学习方法
作者/机构:Arun Nair, Praveen Srinivasan, Sam Blackwell, Cagdas Alcicek, Rory Fearon, Alessandro De Maria, Vedavyas Panneershelvam, Mustafa Suleyman, Charles Beattie, Stig Petersen, Shane Legg, Volodymyr Mnih, Koray Kavukcuoglu, David Silver
机构:Google DeepMind, London
A1 主要贡献
本文介绍了一种首次为深度强化学习设计的大规模分布式架构。由于先前最先进的深度强化学习算法,如深度Q网络(DQN),仅在单机架构上应用,导致训练时间过长(例如,在单个Atari游戏上训练需要12-14天),本文的研究目标是构建一个能够利用大规模计算资源来扩展深度强化学习算法的分布式架构。
核心问题:
单机深度强化学习算法(如DQN)训练时间长,难以利用大规模计算资源进行加速和扩展。
研究目标:
构建一个可扩展的分布式架构,以并行化和加速深度强化学习算法的训练过程,从而在更短的时间内获得更好的性能。
创新点/主要贡献:
本文提出了一个名为 Gorila (General Reinforcement Learning Architecture) 的通用强化学习架构,它包含四个核心组件:
1. 并行执行器 (Actors):部署多个并行运行的智能体,与环境的多个实例进行交互,从而生成更多样化的训练数据。
2. 并行学习器 (Learners):一组独立的学习器进程,从存储的经验中采样数据,并行计算参数梯度以更新模型。
3. 分布式神经网络:将价值函数或策略网络的参数分布在多台机器上,由一个中央参数服务器进行管理和更新。
4. 分布式经验回放存储:将执行器生成的经验存储在一个大的分布式经验池中,供学习器采样。
通过将此架构应用于DQN算法(称为Gorila DQN),并在49款Atari 2600游戏上进行实验,本文证明了该架构的有效性。实验结果显示,Gorila DQN在41款游戏中的表现超过了单机DQN,并且在大多数游戏中将达到同等性能所需的时间缩短了一个数量级。
A3 背景知识/关键Observation/设计原则
相关工作
以往的并行/分布式RL方法。先前已有多种并行或分布式强化学习方法。一部分工作关注分布式多智能体系统【【19,Distributed reinforcement learning,1995】,【9,An algorithm for distributed reinforcement learning in cooperative multi-agent systems,2000】】,其目标是在一个共享环境中让多个智能体协作完成共同目标,重点在于团队合作和群体行为。另一研究范式是并发强化学习【【14,Concurrent reinforcement learning from customer interactions,2013】】,智能体与一个固有的分布式环境并行交互。本文的目标与这两者不同,旨在通过并行计算更有效地解决单智能体问题。
基于MapReduce的MDP解决方法。MapReduce框架已被应用于策略评估、策略迭代和价值迭代等标准MDP求解方法中,通过分布式计算处理大规模矩阵乘法【【10,Mapreduce for parallel reinforcement learning,2011】】。然而,该工作主要针对使用线性函数逼近的批处理方法,不能直接应用于在未知动态环境中使用非线性表示的在线强化学习。
与本文最接近的先前工作。与本文最相似的工作是在多台机器上并行化经典的Sarsa算法【【7,Parallel reinforcement learning with linear function approximation,2208】】。在该方法中,每台机器都有自己的智能体和环境实例,运行一个简单的强化学习算法(线性Sarsa)。线性函数逼近器的参数变化通过点对点机制定期通信,尤其关注变化最大的参数。相比之下,本文提出的架构允许客户端-服务器通信,并将行动、学习和参数更新分离开;此外,我们利用一个用于深度学习的分布式框架来支持更强大的函数逼近器。
3.1 DistBelief
DistBelief的并行机制。DistBelief【【4,Large scale distributed deep networks,2012】】是一个分布式系统,通过两种并行方式高效地训练大型神经网络。模型并行将模型的不同部分存储在不同机器上进行训练,从而能够训练远超单机或单个GPU能力的超大型模型。数据并行则通过在数据的不同部分上并行训练模型的多个副本(replicas),从而在海量数据集上实现比单进程更高效的训练。DistBelief架构主要包含两个组件:中央参数服务器和模型副本。
中央参数服务器。参数服务器持有模型的主副本,其职责是接收并应用来自各个副本的梯度,并在被请求时将最新的模型副本发送给它们。参数服务器可以分片到多台机器上,不同分片独立地应用梯度。
模型副本。每个副本都维护一个正在训练的模型的拷贝。如果模型过大,这个拷贝也可以分片到多台机器上。副本的任务是根据一个小批量(mini-batch)数据计算梯度,将其发送到参数服务器,并定期从参数服务器请求更新后的模型。由于各个副本独立地发送梯度和请求参数,它们在任何给定时间点的参数可能不是同步的。
3.2 强化学习
强化学习范式。在强化学习(RL)中,智能体与环境顺序交互,目标是最大化累积奖励。在每个时间步 $t$,智能体观察状态 $s_t$,选择动作 $a_t$,并收到奖励 $r_t$。智能体的策略 $\pi(a|s)$ 定义了其行为。RL智能体的目标是最大化其期望总回报,其中奖励按折扣因子 $\gamma \in [0, 1]$ 进行衰减。具体来说,时间 $t$ 的回报为 $R_t = \sum_{t'=t}^{T} \gamma^{t'-t} r_{t'}$。动作价值函数 $Q^{\pi}(s, a)$ 是在策略 $\pi$ 下,观察到状态 $s_t$ 并采取动作 $a_t$ 后的期望回报,即 $Q^{\pi}(s, a) = \mathbb{E}[R_t | s_t = s, a_t = a, \pi]$。最优动作价值函数是任何策略能达到的最大可能价值,即 $Q^*(s, a) = \max_{\pi} Q^{\pi}(s, a)$。该函数遵循一个称为贝尔曼方程的基本递归关系:$Q^*(s, a) = \mathbb{E}[r + \gamma \max_{a'} Q^*(s', a')]$。
函数逼近与不稳定性。强化学习的核心思想之一是使用函数逼近器(如神经网络)来表示动作价值函数,即 $Q(s, a) \approx Q(s, a; \theta)$。通过优化参数 $\theta$ 来近似求解贝尔曼方程。例如,Q学习算法通过一个贝尔曼目标的样本 $r + \gamma \max_{a'} Q(s', a'; \theta)$ 来迭代更新动作价值函数。然而,众所周知,当Q学习与非线性函数逼近器(如深度神经网络)结合时,算法会变得非常不稳定【【18,An analysis of temporal-difference learning with function approximation,1997】】。
3.3 深度Q网络 (Deep Q-Networks)
DQN的稳定性改进。最近,一种新的RL算法被开发出来,它与深度Q网络结合时在实践中表现得更稳定【【12,Playing atari with deep reinforcement learning,2013】,【13,Human-level control through deep reinforcement learning,2015】】。与Q学习类似,它也通过将Q网络的参数向贝尔曼目标调整来迭代求解贝尔曼方程。然而,如图1所示,DQN在两个方面与Q学习不同。首先,DQN使用经验回放(experience replay)【【11,Reinforcement learning for robots using neural networks,1993】】。在与环境交互的每个时间步 $t$,智能体将经验元组 $e_t = (s_t, a_t, r_t, s_{t+1})$ 存储到经验回放存储器 $D_t = \{e_1, ..., e_t\}$ 中。
双网络结构。其次,DQN维护两个独立的Q网络:一个具有当前参数 $\theta$ 的当前网络 $Q(s, a; \theta)$ 和一个具有旧参数 $\theta^-$ 的目标网络 $Q(s, a; \theta^-)$。当前参数 $\theta$ 在每个时间步可能更新多次,并在 $N$ 次迭代后被复制到旧参数 $\theta^-$ 中。在每次更新迭代 $i$ 中,通过优化以下损失函数(DQN损失),更新当前参数 $\theta$ 以最小化相对于旧参数 $\theta^-$ 的均方贝尔曼误差:
参数更新过程。在每次更新 $i$ 中,从经验回放存储器 $D$ 中均匀采样一个经验元组 $(s, a, r, s') \sim U(D)$(或一个小批量样本)。对于每个样本(或小批量),当前参数 $\theta$ 通过随机梯度下降算法进行更新。具体来说,$\theta$ 会沿着损失函数关于 $\theta$ 的样本梯度 $g_i$ 的方向进行调整:
行为策略。最后,在每个时间步 $t$,智能体通过相对于当前Q网络 $Q(s, a; \theta)$ 的 $\epsilon$-贪心策略来选择动作。
A2 方法细节
4. 分布式架构
Gorila架构概览。我们介绍用于大规模分布式强化学习的框架Gorila(General Reinforcement Learning Architecture)。如图2所示,Gorila架构包含以下组件:
执行器 (Actors)。任何强化学习智能体最终都必须选择动作 $a_t$ 应用于其环境。我们将此过程称为“行动”。Gorila架构包含 $N_{act}$ 个不同的执行器进程,应用于同一个环境的 $N_{act}$ 个相应实例。每个执行器 $i$ 在环境中生成自己的经验轨迹 $s^i_1, a^i_1, r^i_1, ..., s^i_T, a^i_T, r^i_T$,因此每个执行器可能会访问状态空间的不同部分。在 $T$ 个时间步后,执行器生成的经验总量约为 $T \times N_{act}$。每个执行器包含一个Q网络的副本,用于确定行为(例如使用 $\epsilon$-贪心策略)。Q网络的参数会定期从参数服务器同步。
经验回放存储 (Experience replay memory)。执行器生成的经验元组 $e^i_t = (s^i_t, a^i_t, r^i_t, s^i_{t+1})$ 被存储在经验回放存储器 $D$ 中。我们考虑两种形式的经验回放存储。第一种是本地经验回放存储,将每个执行器的经验 $D^i_t = \{e^i_1, ..., e^i_t\}$ 存储在执行器自己的机器上。如果单台机器有足够的内存存储 $M$ 个经验元组,那么总内存容量将变为 $M \times N_{act}$。第二种是全局经验回放存储,将经验聚合到一个分布式数据库中。在这种方法中,总内存容量与 $N_{act}$ 无关,可以按需扩展,但会增加额外的通信开销。
学习器 (Learners)。Gorila包含 $N_{learn}$ 个学习器进程。每个学习器包含一个Q网络的副本,其任务是计算对Q网络参数的期望更改。在每次学习器更新 $k$ 时,从本地或全局经验回放存储器 $D$ 中采样一个小批量的经验元组 $e = (s, a, r, s')$。学习器将像DQN【【12,Playing atari with deep reinforcement learning,2013】】这样的离策略(off-policy)RL算法应用于这个小批量经验,以生成一个梯度向量 $g_i$。梯度 $g_i$ 被传送到参数服务器;Q网络的参数也定期从参数服务器更新。
参数服务器 (Parameter server)。与DistBelief类似,Gorila架构使用一个中央参数服务器来维护Q网络 $Q(s, a; \theta^+)$ 的分布式表示。参数向量 $\theta^+$ 被不相交地分割到 $N_{param}$ 台不同的机器上。每台机器负责对其参数子集应用梯度更新。参数服务器接收来自学习器的梯度,并使用异步随机梯度下降算法将这些梯度应用于修改参数向量 $\theta^+$。
Gorila的灵活性与捆绑模式。Gorila架构在RL智能体的并行化方式上提供了相当大的灵活性。可以采用并行行动将大量数据生成到一个全局回放数据库中,然后用单个串行学习器处理这些数据。相反,也可以用单个执行器生成数据到本地回放存储器中,然后让多个学习器并行处理这些数据以尽可能有效地学习。然而,为了避免任何单个组件成为瓶颈,Gorila架构通常允许任意数量的执行器、学习器和参数服务器来可扩展地、完全分布式地生成数据、学习数据和更新模型。我们后续实验中考虑的Gorila最简单的整体实例是捆绑模式(bundled mode),其中执行器、回放存储和学习器之间存在一对一的对应关系($N_{act} = N_{learn}$)。每个捆绑包都有一个生成经验的执行器、一个存储经验的本地回放存储,以及一个基于本地回放存储中经验样本更新参数的学习器。捆绑包之间唯一的通信是通过参数:学习器将其梯度传达给参数服务器;执行器和学习器中的Q网络定期与参数服务器同步。
算法1 分布式DQN算法
4.1 Gorila DQN
Gorila DQN的实现。我们现在考虑实现DQN算法的Gorila架构的一个具体实例。如前所述,DQN算法利用了Q网络的两个副本:一个具有参数 $\theta$ 的当前Q网络和一个具有参数 $\theta^-$ 的目标Q网络。DQN算法在Gorila中的分布式实现如下:参数服务器维护当前参数 $\theta^+$,而执行器和学习器包含当前Q网络 $Q(s, a; \theta)$ 的副本,这些副本在每次行动步骤之前从参数服务器同步。
目标网络的维护。学习器额外维护目标Q网络 $Q(s, a; \theta^-)$。学习器的目标网络在中央参数服务器每执行 $N$ 次梯度更新后,从参数服务器 $\theta^+$ 进行更新。需要注意的是,$N$ 是一个全局参数,它计算的是中央参数服务器的总更新次数,而不是本地学习器的更新次数。
梯度生成与应用。学习器使用方程2中给出的DQN梯度来生成梯度。然而,这些梯度并不直接应用,而是传达给参数服务器。然后,参数服务器应用从许多学习器累积而来的更新。
4.2 稳定性
分布式训练的稳定性挑战与保障措施。尽管DQN训练算法旨在确保神经网络与强化学习结合训练的稳定性,但在一个运行着多个其他任务的大型机器集群上进行训练带来了额外的挑战。Gorila DQN的实现采用了额外的保障措施来确保在节点消失、网络流量减速和单机减速等情况下的稳定性。其中一项保障措施是一个参数,用于确定本地参数 $\theta$(梯度 $g_i$ 使用 $\theta$ 计算)与参数服务器中的参数 $\theta^+$ 之间的最大时间延迟。所有超过该阈值的旧梯度都会被参数服务器丢弃。此外,每个执行器/学习器都会对其所见数据的绝对DQN损失保持一个运行平均值和标准差,并丢弃绝对损失高于均值加若干标准差的梯度。最后,我们使用了AdaGrad更新规则【【5,Adaptive subgradient methods for online learning and stochastic optimization,2011】】。
A4 实验
实验环境
- 数据集/环境:在49款Atari 2600游戏上进行评估,使用Arcade Learning Environment(ALE)【【1,The arcade learning environment: An evaluation platform for general agents,2012】】。智能体直接从210×160的RGB视频输入中学习,奖励信号仅为游戏得分的变化。
- 模型架构与预处理:
- 遵循DQN【【13,Human-level control through deep reinforcement learning,2015】】的设置,使用相同的预处理和网络架构。
- 预处理:将210×160的RGB图像下采样至84×84,并提取亮度通道。网络输入为4个连续预处理帧拼接而成的84×84×4图像。
- Q网络架构:3个卷积层后接1个全连接隐藏层。
- 卷积层1: 32个8×8的滤波器,步长为4。
- 卷积层2: 64个4×4的滤波器,步长为2。
- 卷积层3: 64个3×3的滤波器,步长为1。
- 全连接层: 512个输出单元。
- 输出层: 一个线性的全连接层,为每个有效动作提供一个输出单元。
- 激活函数:每个隐藏层后都使用ReLU非线性激活函数。
- 硬件配置:
- 实验在一个大规模分布式集群上运行,具体硬件型号未说明。
- Gorila DQN配置为:$N_{param} = 31$ (参数服务器分片数),$N_{learn} = N_{act} = 100$ (学习器和执行器数量)。
- 软件与超参数配置:
- 采用捆绑模式(bundled mode)。
- 经验回放存储大小:100万帧。
- 行为策略:$\epsilon$-贪心策略,$\epsilon$ 在前100万次全局更新中从1线性退火到0.1。
- 目标网络更新频率:参数服务器每执行60,000次参数更新,每个学习器同步一次其目标网络参数 $\theta^-$。
- 动作重复:采用与DQN相同的跳帧技术,每个选定的动作重复执行4帧。
- 超参数选择:在Breakout、Pong和Seaquest这几款游戏上进行非正式搜索后确定超参数,并固定用于所有游戏。
实验结果
实验采用两种评估方式:null op starts(智能体在随机数量的空操作后开始游戏)和human starts(从人类专家玩游戏时采样的100个随机状态开始,以测试泛化能力)。所有分数都被归一化,其中0分代表随机智能体,100分代表人类专家。
-
与单GPU DQN的性能比较 (图3):
- 实验内容:将训练了6天的Gorila DQN与训练了12-14天的单GPU DQN进行比较。
- 实验结果:
- 在 human starts 评估下,Gorila DQN在49款游戏中的41款上表现优于单GPU DQN。其中,在22款游戏中得分是DQN的两倍以上,在11款游戏中得分是DQN的五倍以上。
- 在 null op starts 评估下,Gorila DQN在49款游戏中的31款上优于单GPU DQN。
- 分析结论:并行训练显著提升了性能,并且所需训练时间更短。在human starts上更好的表现表明Gorila DQN相较于单GPU DQN具有更强的泛化能力,能更好地处理未见过的状态。
图3. Gorila智能体在49款Atari游戏上使用human starts评估的性能,与DQN的性能进行比较,分数已根据人类专家性能进行归一化。字体颜色表示哪种方法得分更高。
-
泛化能力提升分析 (图4):
- 实验内容:比较Gorila DQN和GPU DQN在human starts和null op starts两种评估方式下的归一化分数增益。
- 实验结果:图4显示,Gorila DQN在human starts上的性能提升(蓝色条)普遍高于null op starts上的提升(灰色条),进一步证实了其泛化能力的改善。
- 分析结论:泛化能力提升的一个可能原因是Gorila DQN通过100个并行执行器观察到了远比单机DQN更多的状态。Gorila DQN在25款游戏中达到了与人类专家相当或更高的水平(超过人类分数的75%)。
图4. Gorila智能体在49款Atari游戏上使用human starts和null op评估的性能,分别相对于DQN的human start和null op分数进行归一化。该图显示了Gorila相比于DQN在泛化方面的改进。
-
训练速度分析 (图5):
- 实验内容:记录Gorila DQN达到单GPU DQN最佳性能以及自身最佳性能所需的时间。
- 实验结果:
- Gorila DQN在6小时内于19款游戏中超越了单GPU DQN的最佳分数,12小时内达到23款,24小时内达到30款,36小时内达到38款(红色曲线)。
- 这表明达到单进程DQN的分数所需的训练时间减少了大约一个数量级。
- 在某些游戏中,Gorila DQN在不到两天内就达到了最佳性能,但大多数游戏的性能会随着训练时间的延长而持续提升(蓝色曲线)。
- 分析结论:分布式架构极大地加速了训练过程。
图5. Gorila DQN超越单DQN性能所需的时间(红色曲线)和达到其峰值性能所需的时间(蓝色曲线)。
A5 结论
本文介绍了首个用于深度强化学习的大规模分布式架构——Gorila。该架构通过分布式经验回放存储和分布式神经网络,实现了行动和学习的并行化。我们将Gorila应用于当时最先进的DQN算法的异步变体。通过利用大规模并行计算,Gorila DQN在49款Atari 2600游戏中的41款上显著优于单GPU DQN,取得了当时该领域最好的结果。这证明了DQN的优异性能可以通过增加计算资源来继续扩展。Gorila的成功朝着实现深度学习在强化学习领域的承诺迈出了重要一步:一个可扩展的架构,其性能能够随着计算和内存资源的增加而不断提升。
A6 附录
8. 数据
附录内容说明。本附录提供了论文中使用的所有数据。
- 表1:展示了在null op评估下的各种归一化分数。
- 表2:展示了在human start评估下的各种归一化分数。
- 表3:展示了在human start评估下的各种原始分数。
- 表4:展示了在null op评估下的各种原始分数。
表1. NULL OP 归一化分数
表2. HUMAN STARTS 归一化分数
表3. 原始数据 - HUMAN STARTS
表4. 原始数据 - NULL OP
💬 评论讨论
欢迎在这里分享您的想法和见解!