add reference

This commit is contained in:
quantumiracle
2022-03-08 11:52:06 -05:00
parent 562de18425
commit f623a9ed57
3 changed files with 9575 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
## 多智能体强化学习系统
上述的简单例子只是为了帮助读者理解强化学习在多智能体问题里的角色而如今前沿的多智能体强化学习算法已经能够解决相当大规模的复杂多智能体问题如星际争霸StarCraft II、Dota 2等游戏已相继被DeepMind、OpenAI等公司所研究的智能体AlphaStar~\citep{vinyals2019grandmaster}和OpenAI Five~\citep{berner2019dota}攻克达到超越人类顶级玩家的水平。国内公司如腾讯、启元世界等也提出了星际争霸游戏的多智能体强化学习解决方案TStarBot-X~\citep{han2020tstarbot}和SCC~\citep{wang2021scc}。对于这类高度复杂的游戏环境整个训练过程对分布式计算系统的要求更高而整个训练过程可能需要分为多个阶段。以AlphaStar为例它训练的智能体采用了监督学习与强化学习结合的方式。在训练早期往往先采用大量的人类专业玩家标定数据进行有监督的学习从而使智能体快速获得较好的能力随后训练会切换到强化学习过程使用前面介绍的虚构自学习的算法进行训练即自我博弈。为了得到一个表现最好的智能体算法需要充分探索整个策略空间从而在训练中不止对一个策略进行训练而是对一个策略集群League进行训练并通过类似演化算法的方式对策略集群进行筛选得到大量策略中表现最好的策略。如图:numref:`ch12/ch12-marl_train`所示在训练过程中每个智能体往往需要和其他智能体以及剥削者Exploiter进行博弈剥削者是专门针对某一个智能体策略的最佳对手策略与之对抗可以提高策略自身的防剥削能力。通过对大量智能体策略进行训练并筛选的这类方法称为集群式训练Population-based Training/League Training是一种通过分布式训练提高策略种群多样性进而提升模型表现的方式。可见在实践中这类方法自然需要分布式系统支持来实现多个智能体的训练和相互博弈这很好地体现了多智能体强化学习对分布式计算的依赖性。
上述的简单例子只是为了帮助读者理解强化学习在多智能体问题里的角色而如今前沿的多智能体强化学习算法已经能够解决相当大规模的复杂多智能体问题如星际争霸StarCraft II、Dota 2等游戏已相继被DeepMind、OpenAI等公司所研究的智能体AlphaStar:cite:`vinyals2019grandmaster`和OpenAI Five:cite:`berner2019dota`攻克达到超越人类顶级玩家的水平。国内公司如腾讯、启元世界等也提出了星际争霸游戏的多智能体强化学习解决方案TStarBot-X:cite:`han2020tstarbot`和SCC:cite:`wang2021scc`。对于这类高度复杂的游戏环境整个训练过程对分布式计算系统的要求更高而整个训练过程可能需要分为多个阶段。以AlphaStar为例它训练的智能体采用了监督学习与强化学习结合的方式。在训练早期往往先采用大量的人类专业玩家标定数据进行有监督的学习从而使智能体快速获得较好的能力随后训练会切换到强化学习过程使用前面介绍的虚构自学习的算法进行训练即自我博弈。为了得到一个表现最好的智能体算法需要充分探索整个策略空间从而在训练中不止对一个策略进行训练而是对一个策略集群League进行训练并通过类似演化算法的方式对策略集群进行筛选得到大量策略中表现最好的策略。如图:numref:`ch12/ch12-marl_train`所示在训练过程中每个智能体往往需要和其他智能体以及剥削者Exploiter进行博弈剥削者是专门针对某一个智能体策略的最佳对手策略与之对抗可以提高策略自身的防剥削能力。通过对大量智能体策略进行训练并筛选的这类方法称为集群式训练Population-based Training/League Training是一种通过分布式训练提高策略种群多样性进而提升模型表现的方式。可见在实践中这类方法自然需要分布式系统支持来实现多个智能体的训练和相互博弈这很好地体现了多智能体强化学习对分布式计算的依赖性。
我们将对构建多智能体强化学习系统中的困难分为以下几点进行讨论:
@@ -10,4 +10,4 @@
* **算法的异构**从前面介绍的几个简单的多智能体算法如自学习、虚构自学习等可以看出多智能体算法有时由许多轮单智能体强化学习过程组成。而对不同的游戏类型算法的类型也不相同。比如对合作型游戏许多算法是基于奖励分配Credit Assignment的思想如何将多个智能体获得的共同奖励合理分配给单个智能体是这类算法的核心。而这里面按照具体算法执行方式也可以分为集成训练统一执行的Centralized Training Centralized Execution、集成训练分别执行的Centralized Training Decentralized Execution、分别训练并分别执行Decentralized Training Decentralized Execution的几类来描述不同智能体训练过程和执行过程的统一性。对于竞争型游戏往往采用各种计算纳什均衡的近似方法如前面提到的虚构自学习、Double Oracle、Mirror Descent等等将获取单个最优策略的单智能体强化学习过程看做一个“动作”而对这些“动作”组成的元问题上进行纳什均衡近似。现有的算法在类似问题上有很大的差异性使得构建一个统一的多智能体强化学习系统比较困难。
* **学习方法组合**在前面提到的AlphaStar~\citep{vinyals2019grandmaster}等工作中,多智能体系统中优化得到一个好的策略往往不只需要强化学习算法,还需要其他学习方法如模仿学习等的辅助。比如从一些顶级人类玩家的游戏记录中形成有标签的训练样本,来预训练智能体。由于这些大规模游戏的复杂性,这往往是一个在训练前期快速提升智能体表现的有效方式。而对于整个学习系统而言,这就需要对不同学习范式进行结合,如合理地在模仿学习和强化学习之间进行切换等。这也使得大规模多智能体系统不单一是构建强化学习系统的问题,而需要许多其他学习机制和协调机制的配合实现。
* **学习方法组合**在前面提到的AlphaStar:cite:`vinyals2019grandmaster`等工作中,多智能体系统中优化得到一个好的策略往往不只需要强化学习算法,还需要其他学习方法如模仿学习等的辅助。比如从一些顶级人类玩家的游戏记录中形成有标签的训练样本,来预训练智能体。由于这些大规模游戏的复杂性,这往往是一个在训练前期快速提升智能体表现的有效方式。而对于整个学习系统而言,这就需要对不同学习范式进行结合,如合理地在模仿学习和强化学习之间进行切换等。这也使得大规模多智能体系统不单一是构建强化学习系统的问题,而需要许多其他学习机制和协调机制的配合实现。

View File

@@ -3,11 +3,11 @@
前面介绍了强化学习的基本知识和在系统层面的一般需求,这里我们介绍常见的单智能体强化学习系统中较为简单的一类,即单节点强化学习系统。这里,我们按照是否对模型训练和更新进行并行处理,将强化学习系统分为单节点和分布式强化学习系统。其中,单节点强化学习系统可以理解为只实例化一个类对象作为智能体,与环境交互进行采样和利用所采得的样本进行更新的过程分别视为这个类内的不同函数。除此之外的更为复杂的强化学习框架都可视为分布式强化学习系统。分布式强化学习系统的具体形式有很多,这也往往依赖于所实现的算法。从最简单的情况考虑,假设我们仍在同一个计算单元上实现算法,但是将强化学习的采样过程和更新过程实现为两个并行的进程,甚至各自实现为多个进程,以满足不同计算资源间的平衡。这时就需要进程间通信来协调采样和更新过程,这是一个最基础的分布式强化学习框架。更为复杂的情况是,整个算法的运行在多个计算设备上进行(如一个多机的计算集群),智能体的函数可能需要跨机跨进程间的通信来实现。对于多智能体系统,还需要同时对多个智能体的模型进行更新,则需要更为复杂的计算系统设计。我们将逐步介绍这些不同的系统内的实现机制。
我们先对单节点强化学习系统进行介绍。
在这里我们以RLzoo\citep{ding2020efficient}为例,讲解一个单节点强化学习系统构建所需要的基本模块。如图:numref:`ch12/ch12-rlzoo`所示是RLzoo中采用的一个典型的单节点强化学习系统它包括几个基本的组成部分神经网络、适配器、策略网络和价值网络、环境实例、模型学习器、经验回放缓存Experience Replay Buffer等。我们先对前三个神经网络、适配器、策略网络和价值网络进行介绍。神经网络即一般深度学习中的神经网络用于实现基于数据的函数拟合我们在图中简单列出常见的三类神经网络全连接网络卷积网络和循环网络。策略网络和价值网络是一般深度强化学习的常见组成部分策略网络即一个由深度神经网络参数化的策略表示而价值网络为神经网络表示的状态价值State-Value或状态-动作价值State-Action Value函数。这里我们不妨称前三类神经网络为一般神经网络策略网络和价值网络为强化学习特定网络前者往往是后者的重要组成部分。在RLzoo中适配器则是为实现强化学习特定网络而选配一般神经网络的功能模块。首先根据不同的观察量类型强化学习智能体所用的神经网络头部会有不同的结构这一选择可以由一个基于观察量的适配器来实现其次根据所采用的强化学习算法类型相应的策略网络尾部需要有不同的输出类型包括确定性策略和随机性策略RLzoo中使用一个策略适配器来进行选择最后根据不同的动作输出如离散型、连续型、类别型等需要使用一个动作适配器来选择。图:numref:`fig:ch12/ch12-rlzoo`中我们统称这三个不类型的适配器为适配器。介绍完这些我们已经有了可用的策略网络和价值网络这构成了强化学习智能体核心学习模块。除此之外还需要一个学习器Learner来更新这些学习模块更新的规则就是强化学习算法给出的损失函数。而要想实现学习模块的更新最重要的是输入的学习数据即智能体跟环境交互过程中所采集的样本。对于**离线**Off-Policy强化学习这些样本通常被存储于一个称为经验回放缓存的地方学习器在需要更新模型时从该缓存中采得一些样本来进行更新。这里说到的离线强化学习是强化学习算法中的一类强化学习算法可以分为**在线**On-Policy强化学习和离线强化学习两类按照某个特定判据。这个判据是用于更新的模型和用于采样的模型是否为同一个如果是则称在线强化学习算法否则为离线强化学习算法。因而离线强化学习通常允许与环境交互的策略采集的样本被存储于一个较大的缓存内从而允许在许久之后再从这个缓存中抽取样本对模型进行更新。而对于在线强化学习这个“缓存”有时其实也是存在的只不过它所存储的是非常近期内采集的数据从而被更新模型和用于采样的模型可以近似认为是同一个。从而这里我们简单表示RLzoo的强化学习系统统一包括这个经验回放缓存模块。有了以上策略和价值网络、经验回放缓存、适配器、学习器我们就得到了RLzoo中一个单节点的强化学习智能体将这个智能体与环境实例交互并采集数据进行模型更新我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。
在这里我们以RLzoo:cite:`ding2020efficient`为例,讲解一个单节点强化学习系统构建所需要的基本模块。如图:numref:`ch12/ch12-rlzoo`所示是RLzoo中采用的一个典型的单节点强化学习系统它包括几个基本的组成部分神经网络、适配器、策略网络和价值网络、环境实例、模型学习器、经验回放缓存Experience Replay Buffer等。我们先对前三个神经网络、适配器、策略网络和价值网络进行介绍。神经网络即一般深度学习中的神经网络用于实现基于数据的函数拟合我们在图中简单列出常见的三类神经网络全连接网络卷积网络和循环网络。策略网络和价值网络是一般深度强化学习的常见组成部分策略网络即一个由深度神经网络参数化的策略表示而价值网络为神经网络表示的状态价值State-Value或状态-动作价值State-Action Value函数。这里我们不妨称前三类神经网络为一般神经网络策略网络和价值网络为强化学习特定网络前者往往是后者的重要组成部分。在RLzoo中适配器则是为实现强化学习特定网络而选配一般神经网络的功能模块。首先根据不同的观察量类型强化学习智能体所用的神经网络头部会有不同的结构这一选择可以由一个基于观察量的适配器来实现其次根据所采用的强化学习算法类型相应的策略网络尾部需要有不同的输出类型包括确定性策略和随机性策略RLzoo中使用一个策略适配器来进行选择最后根据不同的动作输出如离散型、连续型、类别型等需要使用一个动作适配器来选择。图:numref:`fig:ch12/ch12-rlzoo`中我们统称这三个不类型的适配器为适配器。介绍完这些我们已经有了可用的策略网络和价值网络这构成了强化学习智能体核心学习模块。除此之外还需要一个学习器Learner来更新这些学习模块更新的规则就是强化学习算法给出的损失函数。而要想实现学习模块的更新最重要的是输入的学习数据即智能体跟环境交互过程中所采集的样本。对于**离线**Off-Policy强化学习这些样本通常被存储于一个称为经验回放缓存的地方学习器在需要更新模型时从该缓存中采得一些样本来进行更新。这里说到的离线强化学习是强化学习算法中的一类强化学习算法可以分为**在线**On-Policy强化学习和离线强化学习两类按照某个特定判据。这个判据是用于更新的模型和用于采样的模型是否为同一个如果是则称在线强化学习算法否则为离线强化学习算法。因而离线强化学习通常允许与环境交互的策略采集的样本被存储于一个较大的缓存内从而允许在许久之后再从这个缓存中抽取样本对模型进行更新。而对于在线强化学习这个“缓存”有时其实也是存在的只不过它所存储的是非常近期内采集的数据从而被更新模型和用于采样的模型可以近似认为是同一个。从而这里我们简单表示RLzoo的强化学习系统统一包括这个经验回放缓存模块。有了以上策略和价值网络、经验回放缓存、适配器、学习器我们就得到了RLzoo中一个单节点的强化学习智能体将这个智能体与环境实例交互并采集数据进行模型更新我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。
[loading-ag-175](../img/ch12/ch12-rlzoo.png)
:width:`800px`
:label:`ch12/ch12-rlzoo`
近来研究人员发现强化学习算法领域的发展瓶颈可能不仅在于算法本身而在于智能体采集数据的模拟器的模拟速度。Issac Gym\citep{makoviychuk2021isaac}是Nvidia公司于2021年推出的基于GPU的模拟引擎在单GPU上实现2-3倍于之前基于CPU的模拟器的运行速度。关于GPU上运行加速我们已经在章节5中有所介绍。之所以GPU模拟能够对强化学习任务实现显著的加速效果除了GPU本身多核心的并行运算能力之外还在于这省却了CPU与GPU之间的数据传输和通信时间。传统的强化学习环境如OpenAI Gym这是一个常用的强化学习基准测试环境都是基于CPU进行的模拟计算而深度学习方法的神经网络训练通常是在GPU或TPU上进行的。从智能体与CPU上实例化的模拟环境交互过程所收集的数据样本通常先暂时以CPU的数据格式存储在使用的时候被转移到GPU上成为具有GPU数据类型的数据如使用PyTorch时可通过tensor.to(device)的函数实现只需将device设为“cuda”即可将一个类型为troch.Tensor的tensor转移到GPU上然后来进行模型训练。同时由于模型参数是以GPU上数据的类型存储的调用模型进行前向传递的过程中也需要先将输入数据从CPU转移到GPU上并且可能需要将模型输出的GPU数据再转移回CPU类型。这一系列冗余的数据转换操作都会显著增长模型学习的时间并且也增加了算法实际使用过程中的工程量。Isaac Gym模拟器的设计从底层上解决了这一困难由于模拟器和模型双双实现在GPU上他们之间的数据通信不再需要通过CPU来实现从而绕过了CPU与GPU数据双向传输这一问题实现了对强化学习任务中模拟过程的特定加速。
近来研究人员发现强化学习算法领域的发展瓶颈可能不仅在于算法本身而在于智能体采集数据的模拟器的模拟速度。Issac Gym:cite:`makoviychuk2021isaac`是Nvidia公司于2021年推出的基于GPU的模拟引擎在单GPU上实现2-3倍于之前基于CPU的模拟器的运行速度。关于GPU上运行加速我们已经在章节5中有所介绍。之所以GPU模拟能够对强化学习任务实现显著的加速效果除了GPU本身多核心的并行运算能力之外还在于这省却了CPU与GPU之间的数据传输和通信时间。传统的强化学习环境如OpenAI Gym这是一个常用的强化学习基准测试环境都是基于CPU进行的模拟计算而深度学习方法的神经网络训练通常是在GPU或TPU上进行的。从智能体与CPU上实例化的模拟环境交互过程所收集的数据样本通常先暂时以CPU的数据格式存储在使用的时候被转移到GPU上成为具有GPU数据类型的数据如使用PyTorch时可通过tensor.to(device)的函数实现只需将device设为“cuda”即可将一个类型为troch.Tensor的tensor转移到GPU上然后来进行模型训练。同时由于模型参数是以GPU上数据的类型存储的调用模型进行前向传递的过程中也需要先将输入数据从CPU转移到GPU上并且可能需要将模型输出的GPU数据再转移回CPU类型。这一系列冗余的数据转换操作都会显著增长模型学习的时间并且也增加了算法实际使用过程中的工程量。Isaac Gym模拟器的设计从底层上解决了这一困难由于模拟器和模型双双实现在GPU上他们之间的数据通信不再需要通过CPU来实现从而绕过了CPU与GPU数据双向传输这一问题实现了对强化学习任务中模拟过程的特定加速。

9571
mlsys.bib

File diff suppressed because it is too large Load Diff