强化学习框架RLlib教程001:Ray和RLlib介绍

摘要:
倒数第二层表明RLlib是对特定的强化学习任务进行的抽象。RLlib之于Ray就如同MLlib之于Spark。接下来,我们将介绍RLlib中的三个关键概念:Policies,Samples,andTrainers.返回目录Policies策略是RLlib中的核心概念。通常,RLlib从rolloutworker中收集大小为rollout_fragment_length的批,并将一个或多个批连接到大小为train_batch_size的批中,该批是SGD的输入。RLlib使用Rayactor将训练从单个核扩展到集群中的数千个核。返回目录ApplicationSupport除了Python中定义的环境之外,RLlib还支持离线数据集上的批处理训练,并为外部应用程序提供了各种集成策略。
目录

  什么是Ray

  什么是RLlib

  简单的代码风格

  Policies

  Sample Batches

  Training

  Application Support

  Customization

  参考资料


什么是Ray

强化学习框架RLlib教程001:Ray和RLlib介绍第1张

Ray是一个用于构建和运行分布式应用程序的快速而简单的框架。

Ray通过以下方式完成这一任务:

1.为构建和运行分布式应用程序提供简单的单元。

2.允许终端用户并行化单个机器代码,几乎不需要更改代码。

3.在Ray Core之上包含一个大型的应用程序、库和工具生态系统,以支持复杂的应用程序。

Ray Core为应用程序构建提供了简单的单元。

在Ray Core之上有几个库用于解决机器学习中的问题:

Tune: Scalable Hyperparameter Tuning

RLlib: Scalable Reinforcement Learning

RaySGD: Distributed Training Wrappers

Ray Serve: Scalable and Programmable Serving

Ray还拥有许多其他社区贡献的函数库:

Pandas on Ray

Distributed Scikit-learn / Joblib

Distributed multiprocessing.Pool

返回目录

什么是RLlib

RLlib是一个用于强化学习的开源库,它为各种应用程序提供了高可伸缩性(Scalable Reinforcement Learning)和统一API。RLlib本身支持TensorFlow、TensorFlow Eager和PyTorch,但它的大多数内部内容是框架无关的。

强化学习框架RLlib教程001:Ray和RLlib介绍第2张

从上图可以看出,最底层的分布式计算任务是由Ray引擎支撑的。倒数第二层表明RLlib是对特定的强化学习任务进行的抽象。第二层表示面向开发者,我们可以自定义算法。最顶层是RLlib对一些应用的支持,比如:可以让智能体在离线的数据、Gym或者Unit3d的环境中进行交互等等。

RLlib之于Ray就如同MLlib之于Spark。

返回目录

简单的代码风格

from ray importtune
from ray.rllib.agents.ppo importPPOTrainer
tune.run(PPOTrainer, config={"env": "CartPole-v0"})  #"log_level": "INFO" for verbose,
                                                     #"framework": "tfe" for tf-eager,
                                                     #"framework": "torch" for PyTorch

上面三行代码就可以训练一个玩平衡杆游戏的智能体。

接下来,我们将介绍RLlib中的三个关键概念:Policies, Samples, and Trainers.

返回目录

Policies

策略是RLlib中的核心概念。简而言之,policies是定义agent 如何在环境中工作的Python类。Rollout workers查询策略以确定agent 的动作。在gym中,只有一个agent 和policy。在vector envs中,策略推理是针对多个代理的,在多代理中,可能有多个策略,每个策略控制一个或多个代理:

强化学习框架RLlib教程001:Ray和RLlib介绍第3张

返回目录

Sample Batches

无论是在单个进程中运行还是在大型集群中运行,RLlib中的所有数据交换都是以批样的形式进行的。采样批次编码一个轨迹的一个或多个片段。通常,RLlib从rollout worker中收集大小为rollout_fragment_length的批,并将一个或多个批连接到大小为train_batch_size的批中,该批是SGD的输入。

一个典型的样例批处理如下所示。由于所有的值都保存在数组中,这允许有效的编码和传输的网络:

{ 'action_logp': np.ndarray((200,), dtype=float32, min=-0.701, max=-0.685, mean=-0.694),

'actions': np.ndarray((200,), dtype=int64, min=0.0, max=1.0, mean=0.495),

'dones': np.ndarray((200,), dtype=bool, min=0.0, max=1.0, mean=0.055),

'infos': np.ndarray((200,), dtype=object, head={}),

'new_obs': np.ndarray((200, 4), dtype=float32, min=-2.46, max=2.259, mean=0.018),

'obs': np.ndarray((200, 4), dtype=float32, min=-2.46, max=2.259, mean=0.016),

'rewards': np.ndarray((200,), dtype=float32, min=1.0, max=1.0, mean=1.0),

't': np.ndarray((200,), dtype=int64, min=0.0, max=34.0, mean=9.14)}

在多代理模式下,每个策略下的sample batches会被分别收集。

返回目录

Training


每个策略都定义
了一个learn_on_batch()方法,该方法根据输入的样例批处理改进策略。对于TF和Torch策略,这是使用一个损失函数来实现的,该函数以样本批张量作为输入,并输出一个标量损失。下面是一些损失函数的例子

Simplepolicy gradient loss

SimpleQ-function loss

Importance-weightedAPPO surrogate loss

RLlibTrainer类协调分布式工作流(启动rollouts worker和策略优化)。它们利用Ray并行迭代器来实现所需的计算模式。下面的图显示了同步采样,这是这些模式中最简单的:

强化学习框架RLlib教程001:Ray和RLlib介绍第4张

图中可以看出:

Trainer将数据广播给所有Workers,由他们与环境交互产生数据,经过抽样的方式返回Trainer进行训练。

RLlib使用Ray actor将训练从单个核扩展到集群中的数千个核。可以通过更改num_workers参数来配置用于培训的并行性。

返回目录

Application Support

除了Python中定义的环境之外,RLlib还支持离线数据集上的批处理训练,并为外部应用程序提供了各种集成策略。比如Unit3D的环境

返回目录

Customization

RLlib几乎提供了自定义训练过程中所有方面的方法,包括环境(environment)、神经网络模型(neural network model)、行动分布(action distribution)和策略定义(policy definitions):

强化学习框架RLlib教程001:Ray和RLlib介绍第5张

返回目录

参考资料

https://docs.ray.io/en/latest/rllib.html

返回目录

免责声明:文章转载自《强化学习框架RLlib教程001:Ray和RLlib介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇配置 Linux 内核,并利用 iptables 作端口映射关于学习的时间定律-21小时、1000小时、5000小时、10000小时下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

word2vec改进之Hierarchical Softmax

首先Hierarchical Softmax是word2vec的一种改进方式,因为传统的word2vec需要巨大的计算量,所以该方法主要有两个改进点: 1. 对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。 比如输入的是三个4维词向量:(1,2,3,4),(9,6,11,8),(5,...

机器学习--用朴素贝叶斯分类法辨别男女声音

和前面介绍到的kNN,决策树一样,贝叶斯分类法也是机器学习中常用的分类方法。贝叶斯分类法主要以概率论中贝叶斯定理为分类依据,具有很广泛的应用。本文通过一个完整的例子,来介绍如何用朴素贝叶斯分类法实现分类。主要内容有下:     1、条件概率与贝叶斯定理介绍     2、数据集选择及处理     3、朴素贝叶斯分类器实现     4、测试分类效果     5...

深入浅出计算机组成原理学习笔记:第三十一讲

一、引子 上一讲,我带你一起看了三维图形在计算机里的渲染过程。这个渲染过程,分成了顶点处理、图元处理、栅格化、片段处理,以及最后的像素操作。这一连串的过程, 也被称之为图形流水线或者渲染管线。 因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台。通过3dFx的Voodoo或者NVidia的TNT这样的图形加速卡,CPU就不需要再去处理一个个像素点...

热点 | 四月最佳Github项目库与最有趣Reddit热点讨论

来源:Analytics Vidhya 编译:磐石 【磐创AI导读】:Github是全球最大的开源代码社区,Reddit是最受大家欢迎的热点讨论交流平台。接下来磐创AI将为大家带来四月份Github最佳项目库介绍与Reddit热点评论一览。 目录 介绍 Github月度最佳项目库 Reddit热点讨论 介绍 对于数据科学和机器学习,GitHub和Reddi...

机器学习之类别不平衡问题 (3) —— 采样方法

机器学习之类别不平衡问题 (1) —— 各种评估指标 机器学习之类别不平衡问题 (2) —— ROC和PR曲线 机器学习之类别不平衡问题 (3) —— 采样方法 完整代码 前两篇主要谈类别不平衡问题的评估方法,重心放在各类评估指标以及ROC和PR曲线上,只有在明确了这些后,我们才能据此选择具体的处理类别不平衡问题的方法。本篇介绍的采样方法是其中比较常用...

python机器学习sklearn 岭回归(Ridge、RidgeCV)

  1、介绍     Ridge 回归通过对系数的大小施加惩罚来解决 普通最小二乘法 的一些问题。 岭系数最小化的是带罚项的残差平方和,          其中,α≥0α≥0 是控制系数收缩量的复杂性参数: αα 的值越大,收缩量越大,这样系数对共线性的鲁棒性也更强。        2、参数         alpha:{float,array-like}...