跳到内容

openai/基线

状态:维护(预计错误修复和小更新)

生成状态

基线

OpenAI Baselines是一组高质量的强化学习算法实现。

这些算法将使研究社区更容易复制、提炼和识别新想法,并将创建良好的基线,以在基础上构建研究。我们的DQN实现及其变体与已发表论文中的分数大致相当。我们希望它们将被用作添加新想法的基础,并用作将新方法与现有方法进行比较的工具。

前提条件

基线需要带有开发头的python3(>=3.5)。您还需要CMake、OpenMPI和zlib系统包。可按如下方式安装

Ubuntu公司

更新源&&sudo apt-get安装cmake libopenmpi-dev python3-dev zlib1g-dev

Mac OS X

在Mac上安装系统软件包需要自制软件。安装Homebrew后,运行以下操作:

brew安装cmake openmpi

虚拟环境

从一般的python包健全性角度来看,使用虚拟环境(virtualenvs)确保来自不同项目的包不会相互干扰是一个好主意。您可以通过安装virtualenv(它本身就是一个pip包)

pip安装virtualenv

Virtualenv本质上是包含python可执行文件和所有python包副本的文件夹。要使用python3创建名为venv的virtualenv,可以运行

virtualenv/path/to/venv--python=python3

要激活虚拟机:

./path/to/venv/bin/activate

可以找到关于virtualenvs和选项的更深入的教程在这里

Tensorflow版本

主分支支持从版本1.4到1.14的Tensorflow。对于Tensorflow 2.0支持,请使用tf2分支。

安装

  • 克隆回购并将其cd到其中:

    git克隆https://github.com/openai/baselines.git光盘基线
  • 如果您尚未安装TensorFlow,请安装您最喜欢的TensorFlow。在大多数情况下,您可以使用

    pip安装tensorflow-gpu==1.14#如果您有兼容CUDA的gpu和合适的驱动程序

    pip安装张量流==1.14

    安装Tensorflow 1.14,这是主分支支持的最新版本的Tensorlow。请参阅TensorFlow安装指南了解更多详细信息。

  • 安装基线包

    pip安装-e.

MuJoCo公司

一些基线示例使用MuJoCo公司(多关节接触动力学)物理模拟器,它是专有的,需要二进制文件和许可证(临时30天许可证可从网址:www.mujoco.org). 可以找到有关设置MuJoCo的说明在这里

测试安装

可以使用pytest runner运行基线中的所有单元测试:

pip安装pytestpytest测试

培训模型

基线回购中的大多数算法使用如下:

python-m基线.run--alg=<算法的名称>--环境价值=<环境id>[其他参数]

示例1。带有MuJoCo Humanoid的PPO

例如,训练一个使用PPO2控制MuJoCo仿人机器人的全连接网络,时间步长为20M

python-m baselines.run--alg=ppo2--env=Humanoid-v2--network=mlp--num_timesteps=2e7

注意,对于mujoco环境,默认情况下是完全连接的网络,因此我们可以省略--网络=mlp可以通过命令行控制网络和学习算法的超参数,例如:

python-m baselines.run--alg=ppo2--env=Humanoid-v2--network=mlp--num_timesteps=2e7--ent_cef=0.1--num_hidden=32--num_alayers=3--value_network=copy

将熵系数设置为0.1,构建三层全连通网络,每层32个隐藏单元,并创建单独的网络进行值函数估计(这样其参数就不会与策略网络共享,但结构相同)

请参阅中的文档字符串普通/型号.py用于描述每种模型的网络参数,以及的docstringbaselines/ppo2/ppo2.py/learn()用于描述ppo2超参数。

示例2。Atari上的DQN

在这一点上,Atari的DQN是基准测试的经典。要在Atari Pong上运行DQN的基线实现:

python-m baselines.run--alg=deepq--env=PongNoFrameskip-v4--num_timesteps=1e6

保存、加载和可视化模型

保存和加载模型

算法序列化API还没有完全统一;然而,有一种简单的方法来保存/恢复训练过的模型。--存储路径(_P)--加载路径(_P)命令行选项在训练之前从给定路径加载张量流状态,并在训练之后分别保存。让我们假设你想在Atari Pong上训练ppo2,保存模型,然后想象它学到了什么。

python-m baselines.run--alg=ppo2--env=PongNoFrameskip-v4--num_timesteps=2e7--保存路径=~/型号/pong_20M_ppo2

这应该达到每集平均奖励20左右。要加载和可视化模型,我们将执行以下操作-加载模型,对其进行0步训练,然后可视化:

python-m baselines.run--alg=ppo2--env=PongNoFrameskip-v4--num_timesteps=0--加载路径=~/型号/pong_20M_ppo2--播放

注意:Mujoco环境需要规范化才能正常工作,所以我们用VecNormalize包装器包装它们。目前,为了确保模型通过归一化保存(以便训练后的模型可以恢复并运行,而无需进一步训练),归一化系数被保存为张量流变量。这可能会在一定程度上降低性能,因此如果您需要使用Mujoco执行高吞吐量步骤,并且不需要保存/恢复模型,那么使用numpy规范化可能是有意义的。为此,请在中设置“use_tf=False”基线/run.py.

记录并可视化学习曲线和其他培训指标

默认情况下,所有摘要数据(包括进度、标准输出)都保存到临时文件夹中的一个唯一目录中,该目录由对Python的调用指定临时文件.gettempdir().可以使用更改目录--日志路径(_P)命令行选项。

python-m baselines.run--alg=ppo2--env=PongNoFrameskip-v4--num_timesteps=2e7--保存路径=~/模型/pong_20M_ppo2--日志路径=~/原木/Pong/

注意:请注意,记录器将覆盖现有目录中同名的文件,因此建议为文件夹名称指定唯一的时间戳,以防止覆盖日志。

更改临时目录的另一种方法是使用$OPENAI_LOGDIR(美元)环境变量。

有关如何加载和显示培训数据的示例,请参见在这里.

子程序包

基准

可以获得Mujoco(1M时间步长)和Atari(10M时间步幅)的基准测试结果给Mujoco这里是Atari分别是。请注意,这些结果可能不在最新版本的代码中,在基准测试页面上指定了用于获得结果的特定提交哈希。

要在出版物中引用此存储库:

@其他{基线,author={达里瓦尔、普拉福拉和黑塞、克里斯托弗和克里莫夫、奥列格和尼科尔、亚历克斯和普拉佩特、马提亚斯和拉德福德、亚历克和舒尔曼、约翰和西多尔、西门和吴、于怀和柴可夫、彼得},title={OpenAI基线},年份={2017年},publisher={GitHub},日志={GitHub存储库},howpublished={\url{https://github.com/openai/baselines}},}