diff --git a/chapter_reinforcement_learning/distributed_node_rl.md b/chapter_reinforcement_learning/distributed_node_rl.md index 506859c..dfb5b90 100644 --- a/chapter_reinforcement_learning/distributed_node_rl.md +++ b/chapter_reinforcement_learning/distributed_node_rl.md @@ -20,7 +20,7 @@ 以上是两个著名的分布式强化学习算法A3C和IMPALA,最近研究中还有许多其他成果,如SEED :cite:`espeholt2019seed`、Ape-X :cite:`horgan2018distributed`等都对分布式强化学习有更好的效果,我们不再做过多介绍。下面我们将讨论几个典型的分布式强化学习算法库。 -![RLlib系统架构](../img/ch12/ch12-rllib-arch.png) +![RLlib系统架构](../img/ch12/ch12-rllib-arch.svg) :width:`800px` @@ -28,7 +28,7 @@ Ray :cite:`moritz2018ray`是由伯克利大学几名研究人员发起的一个分布式计算框架,基于Ray之上构建了一个专门针对强化学习的系统RLlib :cite:`liang2017ray`。RLlib是一个面向工业级应用的开源强化学习框架,同时包含了强化学习的算法库,它对非强化学习专家使用也很方便。 -![RLlib分布式训练](../img/ch12/ch12-rllib-distributed.png) +![RLlib分布式训练](../img/ch12/ch12-rllib-distributed.svg) :width:`800px` diff --git a/chapter_reinforcement_learning/marl_sys.md b/chapter_reinforcement_learning/marl_sys.md index 4b351b6..4082d3a 100644 --- a/chapter_reinforcement_learning/marl_sys.md +++ b/chapter_reinforcement_learning/marl_sys.md @@ -2,7 +2,7 @@ 上述的简单例子只是为了帮助读者理解强化学习在多智能体问题里的角色,而如今前沿的多智能体强化学习算法已经能够解决相当大规模的复杂多智能体问题,如星际争霸(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),是一种通过分布式训练提高策略种群多样性进而提升模型表现的方式。可见,在实践中这类方法自然需要分布式系统支持,来实现多个智能体的训练和相互博弈,这很好地体现了多智能体强化学习对分布式计算的依赖性。 -![集群式多智能体强化学习训练示意图](../img/ch12/ch12-marl-train.png) +![集群式多智能体强化学习训练示意图](../img/ch12/ch12-marl-train.svg) :width:`800px` @@ -10,7 +10,7 @@ 我们将对构建多智能体强化学习系统中的困难分为以下几点进行讨论: -* **智能体个数带来的复杂度**:从单智能体系统到多智能体系统最直接的变化,就是智能体个数从1变为大于1个。对于一个各个智能体独立的$N$智能体系统而言,这种变化带来的策略空间表示复杂度是指数增加的,即$\tilde{O}(e^N)$。举个简单的例子,对于一个离散空间的单智能体系统,假设其状态空间大小为$S$, 动作空间大小为$A$,游戏步长为$H$,那么这个离散策略空间的大小为$O(HSA)$;而直接将该游戏扩展为$N$玩家游戏后,所有玩家策略的联合分布空间大小为$O((HSA)^N)$。这是因为每个独立玩家的策略空间构成联合策略空间是乘积关系$\mathcal{A}=\mathcal{A}_1\times\dots\mathcal{A}_N$。而这将直接导致算法搜索复杂度提升。 +* **智能体个数带来的复杂度**:从单智能体系统到多智能体系统最直接的变化,就是智能体个数从1变为大于1个。对于一个各个智能体独立的$N$智能体系统而言,这种变化带来的策略空间表示复杂度是指数增加的,即$\tilde{O}(e^N)$。举个简单的例子,对于一个离散空间的单智能体系统,假设其状态空间大小为$S$, 动作空间大小为$A$,游戏步长为$H$,那么这个离散策略空间的大小为$O(HSA)$;而直接将该游戏扩展为$N$玩家游戏后,所有玩家策略的联合分布空间大小为$O(HSA^N)$。这是因为每个独立玩家的策略空间构成联合策略空间是乘积关系$\mathcal{A}=\mathcal{A}_1\times\dots\mathcal{A}_N$。而这将直接导致算法搜索复杂度提升。 * **游戏类型带来的复杂度**:从博弈论的角度,多智能系统所产生的游戏类型是复杂的。从最直接的分类角度,有竞争型、合作型、混合型。在混合型游戏中,部分智能体之间为合作关系,部分智能体或智能体的集合间为竞争关系。复杂的关系需要更普适的系统进行表达,这也对多智能体系统的构建提出了挑战。多智能体游戏类型也有许多其他的分类角度,如单轮进行的游戏、多轮进行的游戏、多智能体同时决策的、多智能体序贯决策等等,每一类不同的游戏都有相应不同的算法。而现有的多智能体系统往往针对单一类型游戏或者单一算法,缺少普适性多智能体强化学习系统,尤其是分布式的系统。 diff --git a/chapter_reinforcement_learning/single_node_rl.md b/chapter_reinforcement_learning/single_node_rl.md index a3f68f2..30c9079 100644 --- a/chapter_reinforcement_learning/single_node_rl.md +++ b/chapter_reinforcement_learning/single_node_rl.md @@ -5,7 +5,7 @@ 我们先对单节点强化学习系统进行介绍。 在这里,我们以RLzoo :cite:`ding2020efficient`为例,讲解一个单节点强化学习系统构建所需要的基本模块。如 :numref:`ch12/ch12-rlzoo`所示,是RLzoo中采用的一个典型的单节点强化学习系统,它包括几个基本的组成部分:神经网络、适配器、策略网络和价值网络、环境实例、模型学习器、经验回放缓存(Experience Replay Buffer)等。 -我们先对前三个,神经网络、适配器、策略网络和价值网络进行介绍。神经网络即一般深度学习中使用的神经网络,用于实现基于数据的函数拟合,特点是可以用梯度下降的方法更新。我们在图中简单列出常见的三类神经网络:全连接网络,卷积网络和循环网络。策略网络和价值网络是一般深度强化学习的常见组成部分,分别是对策略函数和价值函数的近似表示。策略网络即一个由参数化深度神经网络表示的动作策略,而价值网络为神经网络表示的状态价值(State-Value)或状态-动作价值(State-Action Value)函数。这里我们不妨称全连接网络,卷积网络和循环网络为一般神经网络,它们常作为基本构建模块而被用来搭建强化学习中的策略网络和价值网络。在RLzoo中,适配器则是为实现强化学习特定函数近似而选配一般神经网络的功能模块,每个适配器是一个根据网络输入输出格式决定的网络格式选择函数。如 :numref:`ch12/ch12-rlzoo`所示,RLzoo在实现中使用了三个不类型的适配器来使得强化学习算法构建过程有自适应能力。首先,根据不同的观察量类型,强化学习智能体所用的神经网络头部会有不同的结构,这一选择可以由一个基于观察量的适配器来实现;其次,根据所采用的强化学习算法类型,相应的策略网络尾部需要有不同的输出类型,包括确定性策略和随机性策略,RLzoo中使用一个策略适配器来进行选择;最后,根据不同的动作输出,如离散型、连续型、类别型等,需要使用一个动作适配器来选择。介绍完这些,我们已经有了可用的策略网络和价值网络,这构成了强化学习智能体核心学习模块。除此之外,还需要一个学习器(Learner)来更新这些学习模块,更新的规则就是强化学习算法给出的损失函数。而要想实现学习模块的更新,最重要的是输入的学习数据,即智能体跟环境交互过程中所采集的样本。对于**离线**(Off-Policy)强化学习,这些样本通常被存储于一个称为经验回放缓存的地方,学习器在需要更新模型时从该缓存中采得一些样本来进行更新。这里说到的离线强化学习是强化学习算法中的一类,强化学习算法可以分为**在线**(On-Policy)强化学习和离线强化学习两类,按照某个特定判据。这个判据是,用于更新的模型和用于采样的模型是否为同一个,如果是,则称在线强化学习算法,否则为离线强化学习算法。因而,离线强化学习通常允许与环境交互的策略采集的样本被存储于一个较大的缓存内,从而允许在许久之后再从这个缓存中抽取样本对模型进行更新。而对于在线强化学习,这个“缓存”有时其实也是存在的,只不过它所存储的是非常近期内采集的数据,从而被更新模型和用于采样的模型可以近似认为是同一个。从而,这里我们简单表示RLzoo的强化学习系统统一包括这个经验回放缓存模块。有了以上策略和价值网络、经验回放缓存、适配器、学习器,我们就得到了RLzoo中一个单节点的强化学习智能体,将这个智能体与环境实例交互,并采集数据进行模型更新,我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。 +我们先对前三个,神经网络、适配器、策略网络和价值网络进行介绍。神经网络即一般深度学习中使用的神经网络,用于实现基于数据的函数拟合,特点是可以用梯度下降的方法更新。我们在图中简单列出常见的三类神经网络:全连接网络,卷积网络和循环网络。策略网络和价值网络是一般深度强化学习的常见组成部分,分别是对策略函数和价值函数的近似表示。策略网络即一个由参数化深度神经网络表示的动作策略,而价值网络为神经网络表示的状态价值(State-Value)或状态-动作价值(State-Action Value)函数。这里我们不妨称全连接网络,卷积网络和循环网络为一般神经网络,它们常作为基本构建模块而被用来搭建强化学习中的策略网络和价值网络。在RLzoo中,适配器则是为实现强化学习特定函数近似而选配一般神经网络的功能模块,每个适配器是一个根据网络输入输出格式决定的网络格式选择函数。如:numref:`ch12/ch12-rlzoo`所示,RLzoo在实现中使用了三个不类型的适配器来使得强化学习算法构建过程有自适应能力。首先,根据不同的观察量类型,强化学习智能体所用的神经网络头部会有不同的结构,这一选择可以由一个基于观察量的适配器来实现;其次,根据所采用的强化学习算法类型,相应的策略网络尾部需要有不同的输出类型,包括确定性策略和随机性策略,RLzoo中使用一个策略适配器来进行选择;最后,根据不同的动作输出,如离散型、连续型、类别型等,需要使用一个动作适配器来选择。介绍完这些,我们已经有了可用的策略网络和价值网络,这构成了强化学习智能体核心学习模块。除此之外,还需要一个学习器(Learner)来更新这些学习模块,更新的规则就是强化学习算法给出的损失函数。而要想实现学习模块的更新,最重要的是输入的学习数据,即智能体跟环境交互过程中所采集的样本。对于**离线**(Off-Policy)强化学习,这些样本通常被存储于一个称为经验回放缓存的地方,学习器在需要更新模型时从该缓存中采得一些样本来进行更新。这里说到的离线强化学习是强化学习算法中的一类,强化学习算法可以分为**在线**(On-Policy)强化学习和离线强化学习两类,按照某个特定判据。这个判据是,用于更新的模型和用于采样的模型是否为同一个,如果是,则称在线强化学习算法,否则为离线强化学习算法。因而,离线强化学习通常允许与环境交互的策略采集的样本被存储于一个较大的缓存内,从而允许在许久之后再从这个缓存中抽取样本对模型进行更新。而对于在线强化学习,这个“缓存”有时其实也是存在的,只不过它所存储的是非常近期内采集的数据,从而被更新模型和用于采样的模型可以近似认为是同一个。从而,这里我们简单表示RLzoo的强化学习系统统一包括这个经验回放缓存模块。有了以上策略和价值网络、经验回放缓存、适配器、学习器,我们就得到了RLzoo中一个单节点的强化学习智能体,将这个智能体与环境实例交互,并采集数据进行模型更新,我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。 ![RLzoo算法库中使用的强化学习系统](../img/ch12/ch12-rlzoo.png) diff --git a/img/ch12/ch12-marl-train.svg b/img/ch12/ch12-marl-train.svg new file mode 100644 index 0000000..54ad1da --- /dev/null +++ b/img/ch12/ch12-marl-train.svg @@ -0,0 +1,1202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 智能体 + + 智能体 + + 智能体 + + 剥削者 + + 剥削者 + + 剥削者 + + + 剥削 + + 剥削 + + 剥削 + + + 博弈更新 + + 智能体 + + 智能体 + + 智能体 + + 剥削者 + + 剥削者 + + + + 剥削者 + + 剥削 + + 剥削 + + 剥削 + + + 博弈更新 + + 智能体 + + 智能体 + + 智能体 + + 剥削者 + + 剥削者 + + 剥削者 + + 剥削 + + 剥削 + + 剥削 + + + 博弈更新 + + 智能体 + + 智能体 + + 智能体 + + 智能体 + + 剥削者 + + 剥削者 + + 剥削者 + + 剥削 + + 剥削 + + 剥削 + + + 博弈更新 + + + + + + + 筛选 + 筛选 + + diff --git a/img/ch12/ch12-rllib-arch.png b/img/ch12/ch12-rllib-arch.png index f172c12..8946af1 100644 Binary files a/img/ch12/ch12-rllib-arch.png and b/img/ch12/ch12-rllib-arch.png differ diff --git a/img/ch12/ch12-rllib-arch.svg b/img/ch12/ch12-rllib-arch.svg new file mode 100644 index 0000000..468dc35 --- /dev/null +++ b/img/ch12/ch12-rllib-arch.svg @@ -0,0 +1,222 @@ + + + + + + + + + + 内置环境适配器(如gym.Env, OpenSpiel, Unity3D) + + RLlib内核抽象环境,工作者,输入阅读器,训练器,策略 + + @ray.remote: 任务和行动者 + + 内置算法(如PPOTrainer) + + 内置客户端/服务器支持(用于外部模拟器) + + 内置默认模型(包括LSTM+注意力机制) + + 内置策略和损失函数 + + + diff --git a/img/ch12/ch12-rllib-distributed.png b/img/ch12/ch12-rllib-distributed.png index 7fe207b..6949273 100644 Binary files a/img/ch12/ch12-rllib-distributed.png and b/img/ch12/ch12-rllib-distributed.png differ diff --git a/img/ch12/ch12-rllib-distributed.svg b/img/ch12/ch12-rllib-distributed.svg new file mode 100644 index 0000000..7a2a71b --- /dev/null +++ b/img/ch12/ch12-rllib-distributed.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + 训练器 + + 拼接 + + 学习器 + + + + 采样工作者 + + + + 批样本 + 新的权重 + 同步广播 + 同步采样 + 同步采样(如A2C, PG, PPO) + + +