加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

发布时间:2019-10-12 03:30:52 所属栏目:经验 来源:机器之心编译
导读:副标题#e# 近日,BAIR 开源强化学习研究代码库 rlpyt,首次包含三大类无模型强化学习算法,并提出一种新型数据结构。 2013 年有研究者提出使用深度强化学习玩游戏,之后不久深度强化学习又被应用于模拟机器人控制,自此以后大量新算法层出不穷。其中大部分
副标题[/!--empirenews.page--]

近日,BAIR 开源强化学习研究代码库 rlpyt,首次包含三大类无模型强化学习算法,并提出一种新型数据结构。

2013 年有研究者提出使用深度强化学习玩游戏,之后不久深度强化学习又被应用于模拟机器人控制,自此以后大量新算法层出不穷。其中大部分属于无模型算法,共分为三类:深度 Q 学习(DQN)、策略梯度和 Q 值策略梯度(QPG)。由于它们依赖不同的学习机制、解决不同(但有重合)的控制问题、处理不同属性的动作集(离散或连续),因此这三类算法沿着不同的研究路线发展。目前,很少有代码库同时包含这三类算法,很多原始实现仍未公开。因此,从业者通常需要从不同的起点开始开发,潜在地为每一个感兴趣的算法或基线学习新的代码库。强化学习研究者必须花时间重新实现算法,这是一项珍贵的个人实践,但它也导致社区中的大量重复劳动,甚至成为了入门障碍。

这些算法具备很多共同的强化学习特点。近日,BAIR 发布了 rlpyt 代码库,利用三类算法之间的共性,在共享的优化基础架构上构建了这三类算法的实现。

GitHub 地址:https://github.com/astooke/rlpyt

rlpyt 库包含很多常见深度强化学习算法的模块化实现,这些实现是在深度学习库 Pytorch 中使用 Python 语言写成的。在大量已有实现中,rlpyt 对于研究者而言是更加全面的开源资源。

rlpyt 的设计初衷是为深度强化学习领域中的中小规模研究提供高吞吐量代码库。本文将简要介绍 rlpyt 的特征,及其与之前工作的关联。值得注意的是,rlpyt 基于论文《Recurrent Experience Replay in Distributed Reinforcement Learning》(R2D2)复现了 Atari 游戏领域中的近期最佳结果,不过它没有使用分布式计算基础架构来收集训练所需的数十亿游戏视频帧。本文还将介绍一个新的数据结构——namedarraytuple,它在 rlpyt 中广泛用于处理 numpy 数组集合。更多技术讨论、实现详情和使用说明,参见论文《rlpyt: A Research Code Base for Deep Reinforcement Learning in PyTorch》。

论文地址:https://arxiv.org/abs/1909.01500

rlpyt 库的重要特征和能力包括:

  • 以串行模式运行实验(对 debug 有帮助);
  • 以并行模式运行实验,具备并行采样和/或多 GPU 优化的选项;
  • 同步或异步采样-优化(异步模式通过 replay buffer 实现);
  • 在环境采样中,使用 CPU 或 GPU 进行训练和/或分批动作选择;
  • 全面支持循环智能体;
  • 在训练过程中,执行在线或离线评估,以及智能体诊断日志记录;
  • 在本地计算机上,启动对实验进行栈/队列(stacking / queueing)设置的程序;
  • 模块化:易于修改和对已有组件的重用;
  • 兼容 OpenAI Gym 环境接口。

rlpyt 库中的已实现算法包括:

  • 策略梯度:A2C、PPO
  • DQN 及其变体:Double、Dueling、Categorical、Rainbow minus Noisy Nets、Recurrent (R2D2-style)
  • QPG:DDPG、TD3、SAC

replay buffer(支持 DQN 和 QPG)包含以下可选特征:n-step returns、prioritized replay、sequence replay (for recurrence)、frame-based buffers(从多帧观测结果中仅存储独特的 Atari 游戏帧)。

加速实验的并行计算架构

采样

无模型强化学习的两个阶段——采样环境交互和训练智能体,可按照不同方式并行执行。例如,rlpyt 包括三种基本选项:串行、并行-CPU、并行 GPU。

串行采样最简单,因为整个程序在一个 Python 进程中运行,且有利于 debug。但环境通常基于 CPU 执行,且是单线程,因此并行采样器使用 worker 进程来运行环境实例,以加速整体收集率(collection rate)。CPU 采样还在 worker 进程中运行智能体的神经网络,以选择动作。GPU 采样则将所有环境观测结果分批,然后在 master 进程中选择动作,这样能够更充分地利用 GPU。这些配置详见下图。

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

环境交互采样图示。(左)串行:智能体和环境在一个 Python 进程中执行。(中)并行-CPU:智能体和环境在 CPU 上运行(并行 worker 进程)。(右)并行-GPU:环境在 CPU 上运行(并行 worker 进程),智能体在核心进程上运行,以保证分批动作选择。

此外,还有一个选项是 alternating-GPU 采样,即使用两组 worker:一组执行环境模拟,另一组等待新动作。当动作选择时间比批环境模拟时间稍短时,则可能带来加速。

优化

同步多 GPU 优化通过 PyTorch 的 DistributedDataParallel 模块实现。整个采样器-优化器栈在每个 GPU 的不同进程中被复制,模型在反向传播过程中对梯度执行规约(all-reduce),从而实现隐式地同步。在反向传播的同时,DistributedDataParallel 工具自动降低梯度,以便在大型网络上实现更好的扩展,详情见下图。(采样器可以是上文介绍的任意串行或并行配置。)

集合三大类无模型强化学习算法,BAIR开源RL代码库rlpyt

同步多进程强化学习。每个 Python 进程运行一个完整 sample-algorithm 栈副本,「同步」则通过 PyTorch 中的 DistribuedDataParallel 在反向传播过程中隐式地实现。支持 GPU(NCCL 后端)和 CPU(gloo 后端)模式。

异步采样优化

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读