核心强化学习行为套件。一个强化学习实验的集合。
项目描述
强化学习行为套件(bsuite
)
简介
bsuite
是一系列精心设计的实验,旨在研究强化学习(RL)代理的核心能力,具有两个主要目标。
- 收集清晰、信息丰富且可扩展的问题,这些问题捕捉了设计高效和通用学习算法中的关键问题。
- 通过代理在这些共享基准上的表现来研究代理的行为。
此库自动化了任何代理在这些基准上的评估和分析。它旨在促进对RL核心问题的可重复和可访问的研究,并最终设计出更优越的学习算法。
未来,我们希望纳入来自研究社区的更多优秀实验,并承诺由知名研究人员组成的委员会定期审查这些实验。
欲了解更多全面概述,请参阅附带的论文。
技术概述
bsuite
是一个实验集合,定义在experiments
子目录中。每个子目录对应一个实验,并包含
- 定义RL环境的文件,可能可配置以提供不同难度的级别或不同的随机种子(例如)。
- 该环境的参数序列,定义在实验的
sweep.py
文件中找到的SETTINGS
变量中。 - 定义在提供的Jupyter笔记本中使用的图形的
analysis.py
文件。
bsuite
通过在通过包含日志记录功能的load_and_record*
函数加载环境时记录每个环境的结果来工作。这意味着任何实验都将自动输出用于笔记本分析的格式正确的数据,而不会对代理或算法的结构有任何限制。
我们将所有结果和分析汇总到一个预先制作的jupyter笔记本中bit.ly/bsuite-colab。
入门指南
如果您是bsuite
的新用户,您可以从我们的colab教程开始。这个Jupyter笔记本托管在免费云服务器上,所以您可以直接开始编码,而无需在您的机器上安装任何东西。之后,您可以根据以下说明在本地机器上运行bsuite
。
安装
我们已经测试了在Python 3.6和3.7上运行bsuite
。为了安装依赖项
-
可选:我们建议使用Python虚拟环境来管理您的依赖项,以免破坏您的系统安装
python3 -m venv bsuite source bsuite/bin/activate pip install --upgrade pip setuptools
-
从PyPI直接安装
bsuite
pip install bsuite
-
可选:为了安装
baselines
示例的依赖项(不包括OpenAI和Dopamine示例),请运行pip install bsuite[baselines]
环境
每个环境及其相应实验的完整描述可以在analysis/results.ipynb
Jupyter笔记本中找到。
这些环境都具有较小的观察空间,允许在CPU上使用小网络实现合理性能。
加载环境
环境由一个bsuite_id
字符串指定,例如"deep_sea/7"
。这个字符串表示实验以及要使用的环境设置(索引),如技术概述部分中所述。
有关每个环境及其相应实验设置的完整描述,请参阅论文。
import bsuite
env = bsuite.load_from_id('catch/0')
运行所有实验所需的bsuite_id
序列可以通过程序访问
from bsuite import sweep
sweep.SWEEP
此模块还包含每个实验的bsuite_id
,通过与实验名称对应的大写常量进行,例如
sweep.DEEP_SEA
sweep.DISCOUNTING_CHAIN
此外,可以通过以下方式加载具有相同标签的bsuite_id
序列
from bsuite import sweep
sweep.TAGS
变量根据其底层标签将
bsuite
环境分组,因此可以使用以下方式加载所有basic
任务或scale
任务
sweep.TAGS['basic']
sweep.TAGS['scale']
包含日志记录功能的加载环境
我们包括两种自动日志记录的实现,可以通过以下方式访问
bsuite.load_and_record_to_csv
。为每个bsuite_id
输出一个CSV文件,因此适合在多台机器上运行一组bsuite实验。该实现位于logging/csv_logging.py
bsuite.load_and_record_to_sqlite
。输出一个单独的文件,当通过单个工作站上的多个进程运行一组bsuite实验时最适合。该实现位于logging/sqlite_logging.py
我们还在logging/terminal_logging.py
中包含一个终端记录器,通过bsuite.load_and_record_to_terminal
公开。
如果您需要将结果保存到不同的存储系统中,编写自己的日志机制很容易。参见CSV实现,这是最简单的参考。
与环境交互
我们的环境实现了在 dm_env
中定义的Python接口。
更具体地说,所有我们的环境都接受一个离散的、基于0的整数动作(或者等价地,一个形状为 ()
的标量NumPy数组)。
要确定特定环境的动作数量,请使用
num_actions = env.action_spec().num_values
每个环境都以NumPy数组的形式返回观察结果。
在bsuite中,我们对每个环境都公开了一个 bsuite_num_episodes
属性。这允许用户运行bsuite分析所需的精确的回合数,这可能因实验中使用的不同环境而异。
以下是一个假设具有 step()
方法的代理的示例运行循环。
for _ in range(env.bsuite_num_episodes):
timestep = env.reset()
while not timestep.last():
action = agent.step(timestep)
timestep = env.step(action)
agent.step(timestep)
以 'OpenAI Gym' 格式使用 bsuite
要使用具有 OpenAI Gym 接口的代码库与 bsuite
一起使用,请使用 utils/gym_wrapper.py
中的 GymFromDMEnv
类。
import bsuite
from bsuite.utils import gym_wrapper
env = bsuite.load_and_record_to_csv('catch/0', results_dir='/path/to/results')
gym_env = gym_wrapper.GymFromDMEnv(env)
请注意,bsuite
默认不包含Gym,因此您可能需要单独安装它。
基线代理
我们在 baselines/
子目录中包括了几个常见代理的实现,以及一个最小运行循环。
有关如何安装安装时所需的依赖项的说明,请参阅 安装 部分。这些依赖项默认不安装,因为 bsuite
不要求用户使用任何特定的机器学习库。
运行整个实验套件
baselines
文件夹中的每个代理都包含一个 run
脚本,它作为示例,可以通过传递 --bsuite_id=SWEEP
标志对单个环境或整个实验套件进行运行;这将启动一个进程池,在主机机器允许的情况下并行运行尽可能多的实验。在一台12核机器上,对于大多数代理,这将在一夜之间完成。或者,您可以使用 run_on_gcp.sh
在 Google Compute Platform 上运行,以下将概述其步骤。
在 Google Cloud Platform 上运行实验
run_on_gcp.sh
按以下顺序执行
- 创建具有指定规格的实例(默认为64核CPU优化)。
- 使用
git clone
复制bsuite
并安装它以及其他依赖项。 - 在指定的环境中运行指定的代理(目前限于
/baselines
)。 - 将生成的SQLite文件从远程实例复制到本地机器的
/tmp/bsuite.db
。 - 关闭创建的实例。
为了运行脚本,您首先需要创建一个计费账户。然后按照以下说明在此处设置和初始化 Cloud SDK。在完成 gcloud init
后,您就可以在 Google Cloud 上运行 bsuite
了。
为此,使 run_on_gcp.sh
可执行,然后运行它
chmod +x run_on_gcp.sh
./run_on_gcp.sh
实例创建后,将打印实例名称。然后您可以通过选择 Compute Engine -> Instances
并点击 SSH
来连接到实例。请注意,这不是必需的,因为一旦准备好,结果将复制到您的本地机器。但是,如果您想对代理和环境进行本地修改,则 ssh
可能会方便一些。在这种情况下,在 ssh
后执行以下操作
~/bsuite_env/bin/activate
激活虚拟环境。然后您可以通过以下方式运行代理
python ~/bsuite/bsuite/baselines/dqn/run.py --bsuite_id=SWEEP
例如。
分析
bsuite
包含一个预制的分析 Jupyter Notebook,包含在 analysis/results.ipynb
中。此笔记本加载和处理日志数据,并为每个实验生成得分和图表。我们建议与 Colaboratory 一起使用此笔记本。
您可以在这里找到 bsuite
报告的示例。
bsuite
报告
您可以使用 bsuite
生成一个自动化的 1 页附录,该附录总结了您 RL 算法的关键功能。此附录与大多数主要 ML 会议格式兼容。例如输出运行:
pdflatex bsuite/reports/neurips_2019/neurips_2019.tex
更多 bsuite 报告的示例可以在 reports/
子目录中找到。
引用
如果您在您的作品中使用了 bsuite
,请引用附带的 论文
@inproceedings{osband2020bsuite,
title={Behaviour Suite for Reinforcement Learning},
author={Osband, Ian and
Doron, Yotam and
Hessel, Matteo and
Aslanides, John and
Sezener, Eren and
Saraiva, Andre and
McKinney, Katrina and
Lattimore, Tor and
{Sz}epesv{\'a}ri, Csaba and
Singh, Satinder and
Van Roy, Benjamin and
Sutton, Richard and
Silver, David and
van Hasselt, Hado},
booktitle={International Conference on Learning Representations},
year={2020},
url={https://openreview.net/forum?id=rygf-kSYwH}
}
项目详情
bsuite-0.3.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a4f4c72f5e5ecdcf9b6851a3da45a25e93d96eaf18908885b6d3d1a76448d7d |
|
MD5 | 87a2b171e453744bd1f093ab5fd06a3f |
|
BLAKE2b-256 | 4f82c92dde4712b6196a31e41facbf41186d5e9e9b17d7e17a326f151fe3c336 |