Merge pull request #82 from openmlsys/fix_rl

fix rl references
This commit is contained in:
Zihan Ding
2022-03-14 15:19:51 -04:00
committed by GitHub
3 changed files with 6 additions and 4 deletions

View File

@@ -17,4 +17,4 @@ distributed_node_rl
marl
marl_sys
summary
```
```

View File

@@ -12,13 +12,15 @@
由上述介绍和定义可以发现多智能体强化学习是一个比单智能体强化学习更加复杂的问题。而实际上多个智能体的存在对于每个智能体的决策而言绝对不是简单的把每个单智能体决策累加的难度实际情况要比单智能体决策问题复杂很多。多智能体系统的研究实际上是门古老的学科它与博弈论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`
: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个策略中循环却无法得到正确的纳什均衡策略。
我们在上面这个例子中采用的学习方法其实是多智能体强化学习中最基础的一种叫自学习Selfplay。我们可以看到自学习在特定的任务设置下可能无法收敛到我们想要的最终目标。正是由于多智能体学习过程中有类似循环结构的出现我们需要更复杂的训练方法和专门针对多智能体的学习方式来达到我们想要的目标。一般来讲多智能体强化学习是比单智能体强化学习更复杂的一类对于自学习的方法而言单智能体强化学习的过程可以看做一个多智能体强化学习的子任务。从前面这一小游戏的角度来理解当玩家1策略固定时玩家1加游戏环境构成玩家2的实际学习环境由于这个环境是固定的玩家2可以通过单智能体强化学习来达到自身奖励值最大化这时再固定玩家2的策略玩家1又可以进行单智能体强化学习......这样单智能体强化学习是多智能体任务的子任务。其他算法如虚构自学习Fictitious Self-play需要在每个单智能体强化学习的步骤中对对手历史策略的平均策略求得最优应对策略而对手的训练也是如此进行循环能够在上面剪刀-石头-布一类的游戏中保证收敛到纳什均衡策略。

View File

@@ -3,7 +3,7 @@
前面介绍了强化学习的基本知识和在系统层面的一般需求,这里我们介绍常见的单智能体强化学习系统中较为简单的一类,即单节点强化学习系统。这里,我们按照是否对模型训练和更新进行并行处理,将强化学习系统分为单节点和分布式强化学习系统。其中,单节点强化学习系统可以理解为只实例化一个类对象作为智能体,与环境交互进行采样和利用所采得的样本进行更新的过程分别视为这个类内的不同函数。除此之外的更为复杂的强化学习框架都可视为分布式强化学习系统。分布式强化学习系统的具体形式有很多,这也往往依赖于所实现的算法。从最简单的情况考虑,假设我们仍在同一个计算单元上实现算法,但是将强化学习的采样过程和更新过程实现为两个并行的进程,甚至各自实现为多个进程,以满足不同计算资源间的平衡。这时就需要进程间通信来协调采样和更新过程,这是一个最基础的分布式强化学习框架。更为复杂的情况是,整个算法的运行在多个计算设备上进行(如一个多机的计算集群),智能体的函数可能需要跨机跨进程间的通信来实现。对于多智能体系统,还需要同时对多个智能体的模型进行更新,则需要更为复杂的计算系统设计。我们将逐步介绍这些不同的系统内的实现机制。
我们先对单节点强化学习系统进行介绍。
在这里我们以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中一个单节点的强化学习智能体将这个智能体与环境实例交互并采集数据进行模型更新我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。
在这里我们以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强化学习和离线强化学习两类按照某个特定判据。这个判据是用于更新的模型和用于采样的模型是否为同一个如果是则称在线强化学习算法否则为离线强化学习算法。因而离线强化学习通常允许与环境交互的策略采集的样本被存储于一个较大的缓存内从而允许在许久之后再从这个缓存中抽取样本对模型进行更新。而对于在线强化学习这个“缓存”有时其实也是存在的只不过它所存储的是非常近期内采集的数据从而被更新模型和用于采样的模型可以近似认为是同一个。从而这里我们简单表示RLzoo的强化学习系统统一包括这个经验回放缓存模块。有了以上策略和价值网络、经验回放缓存、适配器、学习器我们就得到了RLzoo中一个单节点的强化学习智能体将这个智能体与环境实例交互并采集数据进行模型更新我们就得到了一个完整的单节点强化学习系统。这里的环境实例化我们允许多个环境并行采样。
![RLzoo算法库中使用的强化学习系统](../img/ch12/ch12-rlzoo.png)