加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

荟萃三大类无模子强化进修算法,BAIR开源RL代码库rlpyt

发布时间:2019-10-08 23:48:38 所属栏目:建站 来源:机器之心编译
导读:克日,BAIR 开源强化进修研究代码库 rlpyt,初次包括三大类无模子强化进修算法,并提出一种新型数据布局。 2013 年有研究者提出行使深度强化进修玩游戏,之后不久深度强化进修又被应用于模仿呆板人节制,自此往后大量新算法层出不穷。个中大部门属于无模子

在今朝已经先容的设置中,采样器和优化器都是在统一个 Python 历程中次序运行的。而在某些案例中,异步运行优化和采样可以实现更好的硬件操作率,由于这使得优化和采样持续运行。BAIR 在复现 R2D2 时就是这样,基于真实呆板人进修也是这样的模式。

在异步模式下,运行实习和采样的是两个单独的 Python 历程,之后 replay buffer 基于共享内存将二者毗连起来。采样的运行进程不受滋扰,由于数据批次行使了双缓冲。而另一个 Python 历程在写锁模式下将分批数据复制到主缓冲区,详见下图。优化器和采样器可以独立并行,它们行使差异数目的 GPU,以实现最好的整体操作率和速率。

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

异步采样/优化模式。两个单独的 Python 历程通过共享内存的 replay buffer 来运行优化和采样(读写锁模式下)。内存复制器历程将分批数据写入 replay buffer,使得采样器可以立刻处理赏罚分批数据。

哪种设置最好?

对付建设或修改智能体、模子、算法和情形而言,串行模式最易于 debug。当串行措施流通运行时,试探更伟大的基本架构就很轻松了,如并行采样、多 GPU 优化和异步采样,由于它们大抵上是基于沟通的接口构建的。最优设置取决于详细的进修题目、可用的计较机硬件和运行尝试的数目。rlpyt 中包括的并行模式仅限于单节点,尽量其组件可作为漫衍式框架的结构块。

机能案例说明:R2D2

BAIR 展示了在 Atari 规模中复现 R2D2 功效的进修曲线,在早年只有行使漫衍式计较才会呈现这样的进修曲线。该基准包罗行使约 100 亿样本(400 亿帧)基于 replay buffer 实习获得的轮回智能体。R2D1(非漫衍式 R2D2)行使 rlpyt 中多个更先辈的基本架构组件来实现它,纵然用 alternating-GPU 采样器的多 GPU 异步采样模式。下图展示了复现进程中的进修曲线,个中多个高出了之前的算法。我们必要留意,这些功效并未在全部游戏上美满复现,譬喻 Gravitar 游戏在较量低的得分处就已进入平台期。详情拜见相干论文。

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

在 rlpyt 中行使一台计较机复现 R2D2 的进修曲线。

R2D2 的最初漫衍式实现行使了 256 块 CPU 举办采样,一块 GPU 执行实习,每秒运行 66,000 步。而 rlpyt 仅行使了一个包括 24 块 CPU(2x Intel Xeon Gold 6126)和 3 块 Titan-Xp GPU 的事变站,以每秒 16000 的步数完成实现。对付无法行使漫衍式基本架构的环境而言,这已经足够执行尝试了。将来研究的一种也许是:操作多 GPU 优化增进 replay ratio,从而加速进修速率。下图展示了沟通进修曲线在 3 种差异怀抱指标下的泛起,这 3 种怀抱指标别离是:情形步数(即 1 步=4 帧)、模子更新和时刻。它在不到 138 个小时的时刻内走完了 80 亿步,完成了 100 万次模子更新。

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

rlpyt 行使 24 块 CPU 和 3 块 Titan-Xp GPU 在异步采样模式下执行 R2D1 实现,其进修曲线在横坐标差异(情形步数、模子更新和时刻)时的泛起如上图所示。

新型数据布局:namedarraytuple

rlpyt 提出了新的方针种别 namedarraytuples,可使 numpy 数组或 torch 张量的组织越发轻易。namedarraytuple 本质上是一个 namedtuple,将索引或切片(sliced)数组读/写出此刻布局中。

试着写入一个(也许嵌套的)数组字典,这些数组具备一些配合的维度:

  1. for k, v in src.items():if isinstance(dest[k], dict):..recurse..dest[k][slice_or_indexes] = v  

将上述代码替代成下列代码:

  1. dest[slice_or_indexes] = src 

重要的是,不管 dest 和 src 是差异的 numpy 数组照旧随机布局的数组荟萃,语法都是沟通的(dest 和 src 的布局必需匹配,可能 src 是可应用于全部字段的单个值)。rlpyt 普及行使该数据布局:行使沟通的矩阵主维组织实习数据的差异元素,使其易于与祈望时刻维度或批量维度交互。另外,namedarraytuples 自然支持具备多模态举措或视察功效的情形。当神经收集的差异层行使差异模式时,这很是有效,由于它应承中间基本架构代码保持稳固。

相干研究

深度强化进修新手可以先阅读其他资源,相识强化进修算法,如 OpenAI Spinning Up。

OpenAI Spinning Up 代码地点:https://github.com/openai/spinningup

文档地点:https://spinningup.openai.com/en/latest/

(编辑:河北网)

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

热点阅读