chapter RL modified according to publisher feedback (#434)

* fix chap12 render

* add distributed rl chapter

* fix bug

* fix issue #212

* fix typo

* update imgs

* fix chinese

* fix svg img

* update contents in rl chapter

* update marl sys

* fix a fig

* fix ref

* fix error

* update rl chapter according to chinese modification

* Revert "update rl chapter according to chinese modification"

This reverts commit 413f5b679f.

* update rl chapter with chinese modification

---------

Co-authored-by: Dalong <39682259+eedalong@users.noreply.github.com>
This commit is contained in:
Zihan Ding
2023-03-25 20:21:38 -04:00
committed by GitHub
parent 842b5f5f79
commit 4ca2b6f698
6 changed files with 56 additions and 36 deletions

View File

@@ -2,7 +2,7 @@
分布式强化学习系统是比上面介绍的单节点强化学习系统更强大的一种。它能支持多环境多模型并行处理,主要是能同时在多个实际计算机系统上对多个模型进行更新,将大大提高强化学习系统的学习速度和整体表现。我们这里介绍分布式强化学习常见的算法和系统。
异步优势行动-批判者Asynchronous Advantage Actor-CriticA3C是由DeepMind研究人员 :cite:`mnih2016asynchronous`于2016年提出的可以在多个计算设备上并行更新网络的学习算法。相比于 :numref:`ch12/ch12-rlzoo`中的单节点强化学习系统A3C通过创建一组工作者Worker并将每个工作者分配到不同的计算设备上且为他们各自创建可以交互的环境来实现并行采样和模型更新同时用一个主Master节点维护这些行动者Actor和批判者Critic网络的更新。行动者是策略网络批判者是价值网络 分别对应强化学习中的策略和价值函数。通过这样的设计,整个算法的各个工作者可以实时将所采集到样本计算出的梯度回传到主节点,来更新主节点的模型参数,并在主节点模型更新后时下发到各个工作者进行模型更新。每个工作者可以单独在一个GPU上进行运算从而整个算法可以在一个GPU集群上并行更新模型算法结构由 :numref:`ch12/ch12-a3c`所示。研究表明,分布式强化学习训练除加速模型学习之外,由于其更新梯度是由多个计算节点各自对环境采样计算得到的,还有利于稳定学习表现。
异步优势行动-批判者Asynchronous Advantage Actor-CriticA3C是由DeepMind研究人员 :cite:`mnih2016asynchronous`于2016年提出的可以在多个计算设备上并行更新网络的学习算法。相比于 :numref:`ch12/ch12-rlzoo`中的单节点强化学习系统A3C通过创建一组工作者Worker并将每个工作者分配到不同的计算设备上且为他们各自创建可以交互的环境来实现并行采样和模型更新同时用一个主Master节点维护这些行动者Actor和批判者Critic网络的更新。行动者是策略网络批判者是价值网络分别对应强化学习中的策略和价值函数。通过这样的设计整个算法的各个工作者可以实时将所采集到样本计算出的梯度回传到主节点来更新主节点的模型参数并在主节点模型更新后时下发到各个工作者进行模型更新。每个工作者可以单独在一个 GPU 上进行运算,从而整个算法可以在一个 GPU 集群上并行更新模型算法结构由 :numref:`ch12/ch12-a3c`所示。研究表明,分布式强化学习训练除加速模型学习之外,由于其更新梯度是由多个计算节点各自对环境采样计算得到的,还有利于稳定学习表现。
![A3C分布式算法架构](../img/ch12/ch12-a3c.png)
@@ -10,7 +10,7 @@
:label:`ch12/ch12-a3c`
重要性加权行动-学习者架构Importance Weighted Actor-Learner ArchitectureIMPALA) 是由Lasse Espeholt等人于2018年 :cite:`espeholt2018impala`提出的能够实现多机集群训练的强化学习框架。与A3C算法类似IMPALA能够在多个GPU上并行进行梯度计算。具体地IMPALA并行多个行动者Actor和学习者Learner每个行动者包含一个策略网络并用它来和一个环境交互收集样本。所收集到的样本轨迹由行动者发送到各自的学习者进行梯度计算。所有的学习者中有一个称为主学习者它可以和其他所有学习者通信获取他们计算的梯度从而在主学习者内部对模型进行更新随后下发到各个学习者及行动者做新一轮的采样和梯度计算。IMPALA被证明是比A3C更高效的分布式计算架构它同时得益于一个特殊设计的学习者内的梯度计算函数称为V-轨迹目标V-trace Target通过重要性加权来稳定训练。我们这里侧重对分布式强化学习结构的介绍对此不再赘述。感兴趣的读者可以参考原论文
重要性加权行动-学习者架构Importance Weighted Actor-Learner ArchitectureIMPALA) 是由Lasse Espeholt等人于2018年 :cite:`espeholt2018impala`提出的能够实现多机集群训练的强化学习框架,如:numref:`ch12/ch12-impala`所示。与 A3C 算法类似IMPALA 能够在多个 GPU 上并行进行梯度计算。具体地IMPALA 并行多个行动者Actor和学习者Learner每个行动者包含一个策略网络并用这个策略网络与一个环境进行交互,以收集样本。所收集到的样本轨迹由行动者发送到各自的学习者进行梯度计算。所有的学习者中有一个称为主学习者它可以和其他所有学习者通信获取他们计算的梯度从而在主学习者内部对模型进行更新随后下发到各个学习者及行动者做新一轮的采样和梯度计算。IMPALA 被证明是比 A3C 更高效的分布式计算架构,它同时得益于一个特殊设计的学习者内的梯度计算函数,称为 V-轨迹目标V-trace Target通过重要性加权来稳定训练。我们这里侧重对分布式强化学习结构的介绍对此不再赘述。感兴趣的读者可以参考原论文
![IMPALA分布式算法架构](../img/ch12/ch12-impala.png)
@@ -26,7 +26,8 @@
:label:`ch12/ch12-rllib`
Ray :cite:`moritz2018ray`是由伯克利大学几名研究人员发起的一个分布式计算框架基于Ray之上构建了一个专门针对强化学习的系统RLlib :cite:`liang2017ray`。RLlib是一个面向工业级应用的开源强化学习框架同时包含了强化学习的算法库,它对非强化学习专家使用也很方便。
Ray :cite:`moritz2018ray`是由伯克利大学几名研究人员发起的一个分布式计算框架基于Ray之上构建了一个专门针对强化学习的系统RLlib :cite:`liang2017ray`。RLlib 是一个面向工业级应用的开源强化学习框架,同时
包含了强化学习的算法库,没有太多强化学习经验的人也可以很方便地使用 RLlib。
![RLlib分布式训练](../img/ch12/ch12-rllib-distributed.svg)
@@ -34,8 +35,9 @@ Ray :cite:`moritz2018ray`是由伯克利大学几名研究人员发起的一个
:label:`ch12/ch12-rllib_dist`
RLlib的系统架构如 :numref:`ch12/ch12-rllib`所示系统底层是构建在Ray的分布式计算和通信的基础组建之面向强化学习的领域概念在Python层抽象了Trainer, Environment, Policy等基础组件并为各个抽象组件提供了一些常用的内置实现同时用户可以根据自己的算法场景对组件进行扩展通过这些内置以及自定义的算法组件研究人员可以方便快速地实现具体的强化学习算法。RLlib支持多种范式的分布式强化学习训练如 :numref:`ch12/ch12-rllib_dist`所示为基于同步采样的强化学习算法的分布式训练架构。其中每一个Rollout Worker为一个独立进程负责和对应的环境进行交互以完成经验采集多个Rollout Worker可以并行地完成环境交互Trainer负责Rollout Worker之间的协调策略优化以及将更新后的策略同步到Rollout Worker中。
RLlib的系统架构如 :numref:`ch12/ch12-rllib`所示,系统底层是构建在 Ray 的分布式计算和通信的基础组建之
上,面向强化学习的领域概念,在 Python 层抽象了 Trainer, Environment, Policy 等基础组件并为各个抽象组件提供了一些常用的内置实现同时用户可以根据自己的算法场景对组件进行扩展通过这些内置以及自定义的算法组件研究人员可以方便快速地实现具体的强化学习算法。RLlib支持多种范式的分布式强化学习训练如 :numref:`ch12/ch12-rllib_dist`所示为基于同步采样的强化学习算法的分布式训练架构。其中每一个 Rollout Worker 为一个独立进程,负责和对应的环境进行交互以完成经验采集,多个 Rollout Worker 可以并行地完成环境交互Trainer 负责 Rollout Worker之间的协调策略优化以及将更新后的策略同步到 Rollout Worker 中。
强化学习中的策略通常可以采用深度神经网络而基于深度神经网络的分布式强化学习训练可以采用RLlib结合PyTorch或者TensorFlow等深度学习框架协同完成深度学习框架负责策略网络的训练和更新RLlib负责强化学习的算法计算。此外RLlib支持对环境交互使用向量化Vectorized的并行方式允许外接模拟器以及可以进行离线Offline强化学习。
强化学习中的策略通常可以采用深度神经网络,而基于深度神经网络的分布式强化学习训练,可以采用 RLlib 结合 PyTorch 或者 TensorFlow 等深度学习框架协同完成深度学习框架负责策略网络的训练和更新RLlib 负责强化学习的算法计算。此外 RLlib 支持与并行的向量化Vectorized环境交互允许外接模拟器以及可以进行离线Oine强化学习。
对于分布式系统中样本回放缓冲池的管理我们会提到另一个工作Reverb :cite:`cassirer2021reverb`。回忆本章开头我们介绍了强化学习中的状态、动作、奖励等概念实际强化学习算法进行训练所使用的数据正是存放在经验缓冲池中的这些数据元组而每种数据自身的格式可能又有不同实际使用时也需要对不同的数据做不同类型的操作。常见的数据操作类型如拼接、截取、乘积、转置、部分乘积、取均值、取极值等而每种操作都可能需要对特定数据的特定维度进行这常常给现有的强化学习框架在实践中产生一定的困难。为了方便强化学习过程中灵活使用不同的数据形式Reverb设计了数据块的概念Chunks所有使用的训练数据在缓冲池中都使用数据块的格式进行管理和调用这一设计基于数据是多维张量的特点增大了数据使用的灵活性和访问速度。Acme :cite:`hoffman2020acme`是近年来由DeepMind提出的一个分布式强化学习框架同样是针对学术界的研究和工业界的应用它基于Reverb对样本缓冲池的数据管理结合分布式采样的结构给出了一个更快的分布式强化学习解决方案。Reverb帮助解决了数据管理和传输的效率问题使得Acme得以将分布式计算的效力充分发挥研究人员用Acme在大量强化学习基准测试中取得了显著的速度提升。
对于分布式系统中样本回放缓冲池的管理我们会提到另一个工作Reverb :cite:`cassirer2021reverb`。回忆本章开头我们介绍了强化学习中的状态、动作、奖励等概念实际强化学习算法进行训练所使用的数据正是存放在经验缓冲池中的这些数据元组而每种数据自身的格式可能又有不同实际使用时也需要对不同的数据做不同类型的操作。常见的数据操作类型如拼接、截取、乘积、转置、部分乘积、取均值、取极值等而每种操作都可能需要对特定数据的特定维度进行这常常给现有的强化学习框架在实践中产生一定的困难。为了方便强化学习过程中灵活使用不同的数据形式Reverb 设计了数据块的概念Chunks所有使用的训练数据在缓冲池中都使用数据块的格式进行管理和调用这一设计基于数据是多维张量的特点增大了数据使用的灵活性和访问速度。Acme :cite:`hoffman2020acme`是近年来由DeepMind提出的一个分布式强化学习框架同样是针对学术界的研究和工业界的应用它基于 Reverb 对样本缓冲池的数据管理结合分布式采样的结构给出了一个更快的分布式强化学习解决方案。Reverb 帮助解决了数据管理和传输的效率问题,使得 Acme得以将分布式计算的效力充分发挥研究人员用 Acme 在大量强化学习基准测试中取得了显著的速度提升。

View File

@@ -1,8 +1,6 @@
## 多智能体强化学习
以上所讲述的强化学习内容都为单智能体强化学习,而在近来的强化学习研究中,多智能体强化学习越来越受到研究人员关注。回想在本小节初介绍的单智能体强化学习框架 :numref:`ch12/ch12-rl-framework`,其中我们只有单个智能体产生的单个动作对环境产生影响,环境也返回单个奖励值给智能体。这里我们把单智能体强化学习扩展到多智能体强化学习,可以得到至少两种可能的多智能体强化学习框架,如 :numref:`ch12/ch12-marl`所示。 :numref:`ch12/ch12-marl`(a)为多智能体同时执行动作的情况,他们相互之间观察不到彼此的动作,他们的动作一同对环境产生影响,并各自接受自己动作所产生的奖励。 :numref:`ch12/ch12-marl`(b)为多智能体顺序执行动作的情况,后续智能体可能观察到前序智能体的动作,他们的动作一同对环境产生影响,并接受到各自的奖励值或共同的奖励值。除此之外,还有许多其他可能的多智能体框架,如更复杂的智能体间观察机制、智能体间通讯机制、多智能体合作与竞争等等。同时,这里假设多个智能体对环境的观察量都为环境的状态,这是最简单的一种,也是现实中最不可能出现的一种,实际情况下的多智能体往往对环境有各自不同的观察量。
![两种可能的多智能体强化学习框架a同步式多智能体决策b异步式多智能体决策。](../img/ch12/ch12-marl.png)
以上所讲述的强化学习内容都为单智能体强化学习,而在近来的强化学习研究中,多智能体强化学习越来越受到研究人员关注。回想在本小节初介绍的单智能体强化学习框架 :numref:`ch12/ch12-rl-framework`,其中我们只有单个智能体产生的单个动作对环境产生影响,环境也返回单个奖励值给智能体。这里我们把单智能体强化学习扩展到多智能体强化学习,可以得到至少两种可能的多智能体强化学习框架,如 :numref:`ch12/ch12-marl`所示。 :numref:`ch12/ch12-marl`(a)为多智能体同时执行动作的情况,他们相互之间观察不到彼此的动作,他们的动作一同对环境产生影响,并各自接受自己动作所产生的奖励。 :numref:`ch12/ch12-marl`(b)为多智能体顺序执行动作的情况,后续智能体可能观察到前序智能体的动作,他们的动作一同对环境产生影响,并接受到各自的奖励值或共同的奖励值。除此之外,还有许多其他可能的多智能体框架,如更复杂的智能体间观察机制、智能体间通讯机制、多智能体合作与竞争等等。同时,这里假设多个智能体对环境的观察量都为环境的状态,这是最简单的一种,也是现实中最不可能出现的一种,实际情况下的多智能体往往对环境有各自不同的观察量。![两种可能的多智能体强化学习框架a同步式多智能体决策b异步式多智能体决策。](../img/ch12/ch12-marl.png)
:width:`800px`
@@ -12,16 +10,18 @@
由上述介绍和定义可以发现多智能体强化学习是一个比单智能体强化学习更加复杂的问题。而实际上多个智能体的存在对于每个智能体的决策而言绝对不是简单的把每个单智能体决策累加的难度实际情况要比单智能体决策问题复杂很多。多智能体系统的研究实际上是门古老的学科它与博弈论Game Theory密切相关在深度强化学习盛行以前早已有大量研究和许多理论上未解的难题。其中一个典型的问题是纳什均衡在双人非零和博弈下没有多项式时间内可解的方法实际上这是一个PPADPolynomial Parity Argument, Directed version类的问题。见论文Settling the Complexity of Computing Two-Player Nash Equilibria. Xi Chen, et al.)由于篇幅限制,我们这里无法对多智能体问题做深入探讨,我们可以用一个简单例子来介绍为什么多智能体强化学习问题无法简单地用单智能体强化学习算法来解。
:剪刀-石头-布奖励值
:剪刀-石头-布奖励值
| | 剪刀 | 石头 | 布 |
| 奖励值 | 剪刀 | 石头 | 布 |
| --- | ------- | ------- | ------- |
| 剪刀 | (0,0) | (-1,+1) | (+1,-1) |
| 石头 | (+1,-1) | (0,0) | (-1,+1) |
| | (-1,+1) | (+1,-1) | (0,0) |
:label:`tab_ch12_ch12_marl`
| **剪刀** | (0,0) | (-1,+1) | (+1,-1) |
| **石头** | (+1,-1) | (0,0) | (-1,+1) |
| **布** | (-1,+1) | (+1,-1) | (0,0) |
|:label:`tab_ch12_ch12_marl`||||
我们考虑一个大家都熟悉的游戏, 剪刀-石头-布,考虑两个玩家玩这个游戏的输赢情况,我们知道有这样的输赢关系:剪刀<石头<布<剪刀...这里的“<”即前一个纯策略被后一个纯策略完全压制,我们给予奖励值-1、+1到这两个玩家当他们选择相同的纯策略时奖励值均为0。于是我们得到一个奖励值表如 :numref:`tab_ch12_ch12_marl`所示横轴为玩家1纵轴为玩家2表内的数组为玩家1和玩家2各自在相应动作下得到的奖励值。由于这个矩阵的反对称性,这个问题的纳什均衡策略对两个玩家相同,均为$(\frac{1}{3}, \frac{1}{3}, \frac{1}{3})$的策略分布,即有各$\frac{1}{3}$的概率出剪刀、石头或布。如果我们把得到这个纳什均衡策略作为多智能体学习的目标那么我们可以简单分析得到这个均衡策略无法通过简单的单智能体算法得到。考虑我们随机初始化两个玩家为任意两个纯策略比如玩家1出剪刀玩家2出石头。这时假设玩家2策略固定可以把玩家2看做固定环境的一部分于是可以使用任意单智能体强化学习算法对玩家1进行训练使其最大化自己的奖励值。于是玩家1会收敛到布的纯策略。这时再把玩家1固定训练玩家2玩家2又收敛到剪刀的纯策略。于是循环往复整个训练过程始终无法收敛玩家1和2各自在3个策略中循环却无法得到正确的纳什均衡策略。
我们考虑一个大家都熟悉的游戏, 剪刀-石头-布,考虑两个玩家玩这个游戏的输赢情况,我们知道有这样的输赢关系:剪刀<石头<布<剪刀...这里的“<”即前一个纯策略被后一个纯策略完全压制,我们给予奖励值-1、+1到这两个玩家当他们选择相同的纯策略时奖励值均为0。于是我们得到一个奖励值表如 :numref:`tab_ch12_ch12_marl`所示横轴为玩家1纵轴为玩家2表内的数组为玩家1和玩家2各自在相应动作下得到的奖励值。
由于这个矩阵的反对称性,这个问题的纳什均衡策略对两个玩家相同,均为$(\frac{1}{3}, \frac{1}{3}, \frac{1}{3})$的策略分布,即有各$\frac{1}{3}$的概率出剪刀、石头或布。如果我们把得到这个纳什均衡策略作为多智能体学习的目标那么我们可以简单分析得到这个均衡策略无法通过简单的单智能体算法得到。考虑我们随机初始化两个玩家为任意两个纯策略比如玩家1出剪刀玩家2出石头。这时假设玩家2策略固定可以把玩家2看做固定环境的一部分于是可以使用任意单智能体强化学习算法对玩家1进行训练使其最大化自己的奖励值。于是玩家1会收敛到布的纯策略。这时再把玩家1固定训练玩家2玩家2又收敛到剪刀的纯策略。于是循环往复整个训练过程始终无法收敛玩家1和2各自在3个策略中循环却无法得到正确的纳什均衡策略。
![自学习算法示意图。](../img/ch12/ch12-marl-sp.png)
@@ -30,7 +30,9 @@
:label:`ch12/ch12-marl-sp`
我们在上面这个例子中采用的学习方法其实是多智能体强化学习中最基础的一种叫自学习Selfplay如 :numref:`ch12/ch12-marl-sp`所示。自学习的方法即固定当前对首次策略,按照单智能体优化的方法最大化一侧智能体的表现,这一过程称为最佳反应策略Best Response Strategy。之后再将这一最佳反应策略作为该智能体的固定策略,再来优化另一边的智能体策略,如此循环。我们可以看到自学习在特定的任务设置下可能无法收敛到我们想要的最终目标。正是由于多智能体学习过程中有类似循环结构的出现,我们需要更复杂的训练方法,和专门针对多智能体的学习方式来达到我们想要的目标。一般来讲多智能体强化学习是比单智能体强化学习更复杂的一类对于自学习的方法而言单智能体强化学习的过程可以看做一个多智能体强化学习的子任务。从前面这一小游戏的角度来理解当玩家1策略固定时玩家1加游戏环境构成玩家2的实际学习环境由于这个环境是固定的玩家2可以通过单智能体强化学习来达到自身奖励值最大化这时再固定玩家2的策略玩家1又可以进行单智能体强化学习......这样单智能体强化学习是多智能体任务的子任务。其他算法如虚构自学习Fictitious Self-play :numref:`ch12/ch12-marl-fsp`,需要在每个单智能体强化学习的步骤中,对对手历史策略的平均策略求得最优应对策略,而对手的训练也是如此,进行循环,能够在上面剪刀-石头-布一类的游戏中保证收敛到纳什均衡策略。
我们在上面这个例子中采用的学习方法其实是多智能体强化学习中最基础的一种叫自学习Selfplay如 :numref:`ch12/ch12-marl-sp`所示。自学习的方法即固定当前玩家 1 的策略,按照单智能体优化的方法最大化一侧智能体的表现,所得策略称为最佳反应策略Best Response Strategy。之后再将这一最佳反应策略作为玩家 2 的固定策略,再来优化另一边的智能体策略,如此循环。我们可以看到自学习在特定的任务设置下可能无法收敛到我们想要的最终目标。正是由于多智能体学习过程中有类似循环结构的出现,我们需要更复杂的训练方法,和专门针对多智能体的学习方式来达到我们想要的目标。
一般来讲,多智能体强化学习是比单智能体强化学习更复杂的一类,对于自学习的方法而言,单智能体强化学习的过程可以看做一个多智能体强化学习的子任务。从前面这一小游戏的角度来理解,当玩家 1 策略固定时,玩家 1 加游戏环境构成玩家 2 的实际学习环境,由于这个环境是固定的,玩家 2 可以通过单智能体强化学习来达到自身奖励值最大化;这时再固定玩家 2 的策略,玩家 1 又可以进行单智能体强化学习...... 这样,单智能体强化学习是多智能体任务的子任务。如 :numref:`ch12/ch12-marl-fsp`其他算法如虚构自学习Fictitious Self-play需要在每个单智能体强化学习的步骤中对对手历史策略的平均策略求得最优应对策略而对手的训练也是如此进行循环能够在上面剪刀-石头-布一类的游戏中保证收敛到纳什均衡策略。
![虚构自学习算法示意图。](../img/ch12/ch12-marl-fsp.png)

View File

@@ -1,6 +1,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是一种通过分布式训练提高策略种群多样性进而提升模型表现的方式。可见在实践中这类方法自然需要分布式系统支持来实现多个智能体的训练和相互博弈这很好地体现了多智能体强化学习对分布式计算的依赖性。
上述的简单例子只是为了帮助读者理解强化学习在多智能体问题里的角色而如今前沿的多智能体强化学习算法已经能够解决相当大规模的复杂多智能体问题如星际争霸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.svg)
@@ -12,22 +13,26 @@
* **智能体个数带来的复杂度**从单智能体系统到多智能体系统最直接的变化就是智能体个数从1变为大于1个。对于一个各个智能体独立的$N$智能体系统而言,这种变化带来的策略空间表示复杂度是指数增加的,即$\tilde{O}(e^N)$。举个简单的例子,对于一个离散空间的单智能体系统,假设其状态空间大小为$S$, 动作空间大小为$A$,游戏步长为$H$,那么这个离散策略空间的大小为$O(HSA)$;而直接将该游戏扩展为$N$玩家游戏后,在最一般的情况下,即所有玩家有对称的动作空间动作空间大小为$A$且不共享任何结构信息,所有玩家策略的联合分布空间大小为$O(HSA^N)$。这是因为每个独立玩家的策略空间构成联合策略空间是乘积关系$\mathcal{A}=\mathcal{A}_1\times\dots\mathcal{A}_N$。而这将直接导致算法搜索复杂度提升。
* **游戏类型带来的复杂度**:从博弈论的角度,多智能系统所产生的游戏类型是复杂的。从最直接的分类角度,有竞争型、合作型、混合型。在竞争型游戏中,最典型的研究模型是二人零和博弈,如前一小结中提到的剪刀-石头-布的游戏。这类游戏中的纳什均衡策略一般为混合型策略即无法通过单一纯策略达到均衡条件。纯策略纳什均衡存在于少数零和游戏中。合作型游戏即多个智能体需要通过合作来提升整体奖励。在这类问题研究中一般采用基于值分解的思路将所有智能体得到的奖励值分配到单个智能体作为其奖励值。这一类的算法有VDN :cite:`sunehag2017value`, COMA :cite:`foerster2018counterfactual`, QMIX :cite:`rashid2018qmix`等。在混合型游戏中部分智能体之间为合作关系部分智能体或智能体的集合间为竞争关系。一般的非零和博弈且非纯合作型游戏为混合型游戏举个简单的例子如囚徒困境Prisoner's Dilemma 其奖励值表如 :numref:`tab_ch12_ch12_marl_prison`所示。囚徒困境的两个玩家各有两个动作沉默和背叛。可以用警察审查两名罪犯来理解奖励值的绝对值即他们将被判处的年数。纯所有玩家的奖励值之和非常数故其为非零和博弈型游戏。因此这一游戏不能被认为是纯竞争型或纯合作型游戏因为当他们中的一方选择沉默一方选择背叛时二者没有有效合作而一方拿到了0的奖励另一方为-3。而两者都选择沉默时是一种合作策略各自拿到-1的奖励值。尽管这一策略看起来优于其他策略但是这并不是这个游戏的纳什均衡策略因为纳什均衡策略假设玩家间策略需要单独制定无法形成联合策略分布。这实际上切断了玩家间的信息沟通和潜在合作的可能。因此囚徒困境的纳什均衡策略是两个玩家都选择背叛对方。诸如此类的博弈论游戏类型导致单智能体强化学习不能被直接用来优化多智能体系统中的个智能体的策略。单智能体强化学习一般是找极值的过程,而多智能体系统求解纳什均衡策略往往是找极大-极小值即鞍点的过程,从优化的角度看这也是不同的。复杂的关系需要更普适的系统进行表达,这也对多智能体系统的构建提出了挑战。多智能体游戏类型也有许多其他的分类角度,如单轮进行的游戏、多轮进行的游戏、多智能体同时决策的、多智能体序贯决策等等,每一类不同的游戏都有相应不同的算法。而现有的多智能体系统往往针对单一类型游戏或者单一算法,缺少普适性多智能体强化学习系统,尤其是分布式的系统
在这种情况下,原先的单智能系统,需要扩展为对多智能体策略进行优化的系统,这意味着单智能体分布式系统内的每个并行化的模块现在需要相应扩展到多智能体系统中的个智能体上。而在复杂的情况下,还需要考虑智能体之间通信过程、智能体之间的异质性等,甚至不同智能体可能需要采用不完全对称模型进行表示,以及采用不同的算法进行优化等等
* **游戏类型带来的复杂度**:从博弈论的角度,多智能系统所产生的游戏类型是复杂的。从最直接的分类角度,有竞争型、合作型、混合型。在竞争型游戏中,最典型的研究模型是二人零和博弈,如前一小节中提到的剪刀-石头-布的游戏。这类游戏中的纳什均衡策略一般为混合型策略即无法通过单一纯策略达到均衡条件。纯策略纳什均衡存在于少数零和游戏中。合作型游戏即多个智能体需要通过合作来提升整体奖励。在这类问题研究中一般采用基于值分解的思路将所有智能体得到的奖励值分配到单个智能体作为其奖励值。这一类的算法有VDN :cite:`sunehag2017value`, COMA :cite:`foerster2018counterfactual`, QMIX :cite:`rashid2018qmix`等。
在混合型游戏中部分智能体之间为合作关系部分智能体或智能体的集合间为竞争关系。一般的非零和博弈且非纯合作型游戏为混合型游戏举个简单的例子如囚徒困境Prisoner's Dilemma 其奖励值表如 :numref:`tab_ch12_ch12_marl_prison`所示。囚徒困境的两个玩家各有两个动作,沉默和背叛。可以用警察审查两名罪犯来理解,奖励值的绝对值即他们将被判处的年数。纯所有玩家的奖励值之和非常数,故其为非零和博弈型游戏。因此这一游戏不能被认为是纯竞争型或纯合作型游戏,因为当他们中的一方选择沉默一方选择背叛时,二者没有有效合作,而一方拿到了 0 的奖励,另一方为-3。而两者都选择沉默时是一种合作策略各自拿到-1 的奖励值。尽管这一策略看起来优于其他策略,但是这并不是这个游戏的纳什均衡策略,因为纳什均衡策略假设玩家间策略需要单独制定,无法形成联合策略分布。这实际上切断了玩家间的信息沟通和潜在合作的可能。因此,囚徒困境的纳什均衡策略是两个玩家都选择背叛对方。
诸如此类的博弈论游戏类型,导致单智能体强化学习不能被直接用来优化多智能体系统中的各个智能体的策略。单智能体强化学习一般是找极值的过程,而多智能体系统求解纳什均衡策略往往是找极大-极小值即鞍点的过程,从优化的角度看这也是不同的。复杂的关系需要更普适的系统进行表达,这也对多智能体系统的构建提出了挑战。多智能体游戏类型也有许多其他的分类角度,如单轮进行的游戏、多轮进行的游戏、多智能体同时决策的、多智能体序贯决策等等,每一类不同的游戏都有相应不同的算法。而现有的多智能体系统往往针对单一类型游戏或者单一算法,缺少普适性多智能体强化学习系统,尤其是分布式的系统。
:囚徒困境奖励值
| | 沉默 | 背叛 |
| --- | ------- | ------- |
| 沉默 | (-1,-1) | (-3,0) |
| 背叛 | (0,-3) | (-2,-2) |
:label:`tab_ch12_ch12_marl_prison`
| 奖励值 | 沉默 | 背叛 |
| --- | ------- | ------- |
| **沉默** | (-1,-1) | (-3,0) |
| **背叛** | (0,-3) | (-2,-2) |
|:label:`tab_ch12_ch12_marl_prison`|||
* **算法的异构**:从前面介绍的几个简单的多智能体算法,如自学习、虚构自学习等可以看出,多智能体算法有时由许多轮单智能体强化学习过程组成。而对不同的游戏类型,算法的类型也不相同。比如,对合作型游戏,许多算法是基于奖励分配Credit Assignment的思想如何将多个智能体获得的共同奖励合理分配给单个智能体是这类算法的核心。而这里面按照具体算法执行方式也可以分为集成训练统一执行的Centralized Training Centralized Execution、集成训练分别执行的Centralized Training Decentralized Execution、分别训练并分别执行Decentralized Training Decentralized Execution的几类来描述不同智能体训练过程和执行过程的统一性。对于竞争型游戏往往采用各种计算纳什均衡的近似方法如前面提到的虚构自学习、Double Oracle、Mirror Descent等等将获取单个最优策略的单智能体强化学习过程看做一个“动作”而对这些“动作”组成的元问题上进行纳什均衡近似。现有的算法在类似问题上有很大的差异性使得构建一个统一的多智能体强化学习系统比较困难。
* **算法的异构**:从前面介绍的几个简单的多智能体算法,如自学习、虚构自学习等可以看出,多智能体算法有时由许多轮单智能体强化学习过程组成。而对不同的游戏类型,算法的类型也不相同。比如,对合作型游戏,许多算法是基于功劳分配Credit Assignment的思想如何将多个智能体获得的共同奖励合理分配给单个智能体是这类算法的核心。而这里面按照具体算法执行方式也可以分为集成训练统一执行的Centralized Training Centralized Execution、集成训练分别执行的Centralized Training Decentralized Execution、分别训练并分别执行Decentralized Training Decentralized Execution的几类来描述不同智能体训练过程和执行过程的统一性。对于竞争型游戏往往采用各种计算纳什均衡的近似方法如前面提到的虚构自学习、Double Oracle、Mirror Descent 等等,将获取单个最优策略的单智能体强化学习过程看做一个“动作”,而对这些“动作”组成的元问题上进行纳什均衡近似。现有的算法在类似问题上有很大的差异性,使得构建一个统一的多智能体强化学习系统比较困难。
* **学习方法组合**在前面提到的AlphaStar :cite:`vinyals2019grandmaster`等工作中,多智能体系统中优化得到一个好的策略往往不只需要强化学习算法,还需要其他学习方法如模仿学习等的辅助。比如从一些顶级人类玩家的游戏记录中形成有标签的训练样本,来预训练智能体。由于这些大规模游戏的复杂性,这往往是一个在训练前期快速提升智能体表现的有效方式。而对于整个学习系统而言,这就需要对不同学习范式进行结合,如合理地在模仿学习和强化学习之间进行切换等。这也使得大规模多智能体系统不单一是构建强化学习系统的问题,而需要许多其他学习机制和协调机制的配合实现。
如 :numref:`ch12/ch12_marl_sys`所示为一个分布式多智能体强化学习系统。图中的两个智能体可以类似扩展到多个智能体。每个智能体包含多个行动者Actor用于采样和学习者Learner用于更新模型这些行动者和学习者可以并行处理来加速训练过程具体方法可以参考单智能体分布式系统章节介绍的A3C和IMPALA架构。训练好的模型被统一存储和管理在模型存储器中是否对各个智能体的模型分别存储取决于各个智能体是否对称。存储器中的模型可以被模型评估器用来打分从而为下一步模型选择器做准备。模型选择器根据模型评估器或者元学习者如PSRO算法 :cite:`lanctot2017unified`以及均衡求解器等进行模型选择并将选出的模型分发到各个智能体的行动者上。这一处理过程我们称为联盟型管理League-based Management。对于与环境交互的部分分布式系统可以通过一个推理服务器Inference Server对各个并行进程中的模型进行集中推理将基于观察量Observation的动作Action发送给环境。环境部分也可以是并行的。推理服务器将采集到的交互轨迹发送给各个智能体进行模型训练。以上为一个分布式多智能体系统的例子实际中根据不同的游戏类型和算法结构可能会有不同的设计。
如 :numref:`ch12/ch12_marl_sys`所示为一个分布式多智能体强化学习系统。图中的两个智能体可以类似扩展到多个智能体。每个智能体包含多个行动者Actor用于采样和学习者Learner用于更新模型这些行动者和学习者可以并行处理来加速训练过程具体方法可以参考单智能体分布式系统章节介绍的A3C和IMPALA架构。训练好的模型被统一存储和管理在模型存储器中是否对各个智能体的模型统一存储取决于各个智能体是否对称——如果不对称,需要将模型分别存储。存储器中的模型可以被模型评估器用来打分从而为下一步模型选择器做准备。模型选择器根据模型评估器或者元学习者如PSRO算法 :cite:`lanctot2017unified`以及均衡求解器等进行模型选择并将选出的模型分发到各个智能体的行动者上。这一处理过程我们称为联盟型管理League-based Management。对于与环境交互的部分分布式系统可以通过一个推理服务器Inference Server对各个并行进程中的模型进行集中推理将基于观察量Observation的动作Action发送给环境。环境部分也可以是并行的,对推理服务器传递来的动作进行并行处理后,返回观察量。推理服务器将采集到的交互轨迹发送给各个智能体进行模型训练。以上为一个分布式多智能体系统的例子,实际中根据不同的游戏类型和算法结构可能会有不同的设计。
![分布式多智能体强化学习系统](../img/ch12/ch12-marl-sys.png)

View File

@@ -1,13 +1,17 @@
## 强化学习介绍
近年来,强化学习作为机器学习的一个分支受到越来越多的关注。2013年起,DeepMind公司的研究人员提出深度Q学习 :cite:`mnih2013playing`Deep Q-learning用于学习7个不同的电子游戏中对象的操作。自此以后以DeepMind为首的科研机构推出了像AlphaGo围棋这类的引人瞩目的强化学习成果并在2016年与世界顶级围棋高手李世石的对战中取得胜利。自那以后强化学习领域连续取得了一系列成就如星际争霸游戏智能体AlphaStar、Dota 2游戏智能体OpenAI Five、多人零和博弈德州扑克的Pluribus、机器狗运动控制算法等。在这一系列科研成就的背后是整个强化学习领域算法在这些年内快速迭代进步的结果基于模拟器产生的大量数据使得对数据“饥饿”Data Hungry的深度神经网络能够表现出很好的拟合效果从而将强化学习算法的能力充分发挥出来在以上领域中达到或者超过人类专家的学习表现。目前强化学习已经从电子游戏逐步走向更广阔的应用场景如机器人控制、机械手灵巧操作、能源系统调度、网络负载分配、股票期货交易等一系列更加现实和富有意义的领域对传统控制方法和启发式决策理论发起冲击。
近年来强化学习作为机器学习的一个分支受到越来越多的关注。2013DeepMind 公司的研究人员提出深度 Q 学习 :cite:`mnih2013playing`Deep Q-learning,成功让 AI 从图像中学习玩电子游戏。自此以后,以 DeepMind 为首的科研机构推出了像 AlphaGo 围棋 AI 这类的引人瞩目的强化学习成果,并在 2016 年与世界顶级围棋高手李世石的对战中取得胜利。自那以后,强化学习领域连续取得了一系列成就,如星际争霸游戏智能体 AlphaStar、Dota 2 游戏智能体 OpenAI Five、多人零和博弈德州扑克的 Pluribus、机器狗运动控制算法等。在这一系列科研成就的背后是整个强化学习领域算法在这些年内快速迭代进步的结果基于模拟器产生的大量数据使得对数据“饥饿”Data Hungry的深度神经网络能够表现出很好的拟合效果从而将强化学习算法的能力充分发挥出来在以上领域中达到或者超过人类专家的学习表现。目前强化学习已经从电子游戏逐步走向更广阔的应用场景如机器人控制、机械手灵巧操作、能源系统调度、网络负载分配、股票期货交易等一系列更加现实和富有意义的领域对传统控制方法和启发式决策理论发起冲击。
![强化学习框架](../img/ch12/ch12-rl.png)
:width:`400px`
:label:`ch12/ch12-rl-framework`
强化学习的核心是决策,即基于某个**状态**State下的**动作**Action的选择。进行这一决策的对象我们常称为**智能体**Agent而这一决策的影响将在**环境**Environment中体现。更具体地不同的决策会影响环境的**状态转移**State Transition,以及**奖励**Reward。以上过程可以抽象为 :numref:`ch12/ch12-rl-framework`所示,这是文献中最常见的强化学习的模型描述。举例来说,当人在玩某个电子游戏的时候,需要逐渐熟悉游戏的操作以取得更好的游戏结果,那么人从刚接触到这个游戏到逐步掌握游戏技巧的这个过程为一个类似于强化学习的过程。该游戏从开始后的任一时刻,会处于一个特定的状态,而人通过观察这个状态(如观察游戏机显示屏的图像)会获得一个**观察量**Observation并基于这个观察量做出一个操作动作这一动作将改变这个游戏状态使其转移到下一个状态并且玩家可以知道当前动作的效果如产生了一个正或负的分数。这时玩家再基于下一个状态的观察量做出新的动作选择周而复始直到游戏结束。通过反复的操作和观察人能够逐步掌握这个游戏的技巧一个强化学习智能体也是如此。这里注意有几个比较关键的问题1观察量未必等于状态而通常观察量是状态的函数从状态到观察量的映射可能有一定的信息损失。对于观察量等于状态或者根据观察量能够完全恢复环境状态的情况我们称为**完全可观测**Fully Observable否则我们称为**部分可观测**Partially Observable环境2玩家的每个动作未必会产生立即反馈某个动作可能在许多步之后才产生效果强化学习模型允许这种延迟反馈的存在3这种反馈对人的学习过程而言未必是个数字但是我们对强化学习智能体所得到的反馈进行数学抽象将其转变为一个数字称为奖励值。奖励值可以是状态的函数也可以是状态和动作的函数依具体问题而定。奖励值的存在是强化学习问题的一个基本假设也是现有强化学习算法训练智能体与监督式深度学习的一个主要区别
强化学习的核心是不断地与环境交互来优化策略从而提升奖励的过程,主要表现为基于某个**状态**State下的**动作**Action的选择。进行这一决策的对象我们常称为**智能体**Agent而这一决策的影响将在**环境**Environment中体现。更具体地不同的决策会影响环境的**状态转移**State Transition**奖励**Reward。以上状态转移是环境从当前状态转移到下一状态的函数,它可以是确定性也可以是随机性的。奖励是环境对智能体动作的反馈,通常是一个标量。以上过程可以抽象为 :numref:`ch12/ch12-rl-framework`所示,这是文献中最常见的强化学习的模型描述。
举例来说,当人在玩某个电子游戏的时候,需要逐渐熟悉游戏的操作以取得更好的游戏结果,那么人从刚接触到这个游戏到逐步掌握游戏技巧的这个过程为一个类似于强化学习的过程。该游戏从开始后的任一时刻,会处于一个特定的状态,而人通过观察这个状态会获得一个**观察量**Observation如观察游戏机显示屏的图像并基于这个观察量做出一个操作动作如发射子弹这一动作将改变这个游戏下一时刻的状态使其转移到下一个状态如把怪物打败了并且玩家可以知道当前动作的效果如产生了一个正或负的分数怪物打败了则获得正分数。这时玩家再基于下一个状态的观察量做出新的动作选择周而复始直到游戏结束。通过反复的操作和观察人能够逐步掌握这个游戏的技巧一个强化学习智能体也是如此。
这里注意,有几个比较关键的问题:一是观察量未必等于状态,而通常观察量是状态的函数,从状态到观察量的映射可能有一定的信息损失。对于观察量等于状态或者根据观察量能够完全恢复环境状态的情况,我们称为**完全可观测**Fully Observable否则我们称为**部分可观测**Partially Observable环境二是玩家的每个动作未必会产生立即反馈某个动作可能在许多步之后才产生效果强化学习模型允许这种延迟反馈的存在三是这种反馈对人的学习过程而言未必是个数字但是我们对强化学习智能体所得到的反馈进行数学抽象将其转变为一个数字称为奖励值。奖励值可以是状态的函数也可以是状态和动作的函数依具体问题而定。奖励值的存在是强化学习问题的一个基本假设也是现有强化学习与监督式学习的一个主要区别
强化学习的决策过程通常由一个马尔可夫决策过程Markov Decision ProcessMDP马尔可夫决策过程即一个后续状态只依赖当前状态和动作而不依赖于历史状态的函数描述可以用一个数组$(\mathcal{S}, \mathcal{A}, R, \mathcal{T}, \gamma)$来表示。$\mathcal{S}$和$\mathcal{A}$分别是状态空间和动作空间,$R$是奖励函数,$R(s,a)$: $\mathcal{S}\times \mathcal{A}\rightarrow \mathbb{R}$为对于当前状态$s\in\mathcal{S}$和当前动作$a\in\mathcal{A}$的奖励值。从当前状态和动作到下一个状态的状态转移概率定义为$\mathcal{T}(s^\prime|s,a)$: $\mathcal{S}\times\mathcal{A}\times\mathcal{S}\rightarrow \mathbb{R}_+$。$\gamma\in(0,1)$是奖励折扣因子(折扣因子可以乘到每个后续奖励值上,从而使无穷长序列有有限的奖励值之和)。强化学习的目标是最大化智能体的期望累计奖励值$\mathbb{E}[\sum_t \gamma^t r_t]$。
@@ -17,6 +21,7 @@ $$
\mathcal{T}(s_{t+1}|s_t) = \mathcal{T}(s_{t+1}|s_0, s_1, s_2, \dots, s_t)
$$
即当前状态转移只依赖于上一时刻状态,而不依赖于整个历史。这里的状态转移函数$\mathcal{T}$中省略了动作$a$因为马尔可夫性质是独立于决策过程的环境转移过程的属性。
即当前状态转移只依赖于上一时刻状态,而不依赖于整个历史。这里的状态转移函数$\mathcal{T}$中省略了动作$a$,马尔可夫性质是环境转移过程的属性,其独立于产生动作的决策过程
基于马尔可夫性质,可以进一步推导出在某一时刻最优策略不依赖于整个决策历史,而只依赖于当前最新状态的结论。这一结论在强化学习算法设计中有着重要意义,它简化了最优策略的求解过程。

View File

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

View File

@@ -1,6 +1,6 @@
## 小结
在这一章我们简单介绍了强化学习的基本概念包括单智能体和多智能体强化学习算法、单节点和分布式强化学习系统等给读者对强化学习问题的基本认识。当前强化学习是一个快速发展的深度学习分支许多实际问题都有可能通过强化学习算法的进一步发展得到解决。另一方面由于强化学习问题设置的特殊性如需要与环境交互进行采样等也使得相应算法对计算系统的要求更高如何更好地平衡样本采集和策略训练过程如何均衡CPUGPU等不同计算硬件的能力如何在大规模分布式系统上有效部署强化学习智能体等等,都需要对计算机系统的设计和使用有更好的理解。
在这一章,我们简单介绍了强化学习的基本概念,包括单智能体和多智能体强化学习算法、单节点和分布式强化学习系统等,给读者对强化学习问题的基本认识。当前,强化学习是一个快速发展的深度学习分支,许多实际问题都有可能通过强化学习算法的进一步发展得到解决。另一方面,由于强化学习问题设置的特殊性(如需要与环境交互进行采样等),也使得相应算法对计算系统的要求更高:如何更好地平衡样本采集和策略训练过程?如何均衡 CPUGPU 等不同计算硬件的能力?如何在大规模分布式系统上有效部署强化学习智能体?都需要对计算机系统的设计和使用有更好的理解。
## 参考文献