fix issue (openmlsys#212) (#218)

* fix chap12 render

* add distributed rl chapter

* fix bug

* fix issue #212

Co-authored-by: Dalong <39682259+eedalong@users.noreply.github.com>
This commit is contained in:
Zihan Ding
2022-03-26 22:23:56 -04:00
committed by GitHub
parent 83e0f9896d
commit a847950d5e

View File

@@ -3,7 +3,9 @@
前面介绍了强化学习的基本知识和在系统层面的一般需求,这里我们介绍常见的单智能体强化学习系统中较为简单的一类,即单节点强化学习系统。这里,我们按照是否对模型训练和更新进行并行处理,将强化学习系统分为单节点和分布式强化学习系统。其中,单节点强化学习系统可以理解为只实例化一个类对象作为智能体,与环境交互进行采样和利用所采得的样本进行更新的过程分别视为这个类内的不同函数。除此之外的更为复杂的强化学习框架都可视为分布式强化学习系统。分布式强化学习系统的具体形式有很多,这也往往依赖于所实现的算法。从最简单的情况考虑,假设我们仍在同一个计算单元上实现算法,但是将强化学习的采样过程和更新过程实现为两个并行的进程,甚至各自实现为多个进程,以满足不同计算资源间的平衡。这时就需要进程间通信来协调采样和更新过程,这是一个最基础的分布式强化学习框架。更为复杂的情况是,整个算法的运行在多个计算设备上进行(如一个多机的计算集群),智能体的函数可能需要跨机跨进程间的通信来实现。对于多智能体系统,还需要同时对多个智能体的模型进行更新,则需要更为复杂的计算系统设计。我们将逐步介绍这些不同的系统内的实现机制。
我们先对单节点强化学习系统进行介绍。
在这里我们以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 :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算法库中使用的强化学习系统](../img/ch12/ch12-rlzoo.png)