d3rlpy简介
d3rlpy是一个开源的离线深度强化学习库,旨在为研究人员和实践者提供一个易于使用的工具来进行离线强化学习实验。该库由Takuma Seno开发,最初作为他在庆应义塾大学的博士项目的一部分。
d3rlpy的核心目标是提供一个实用、高效且易于使用的框架,使用户能够快速实现和测试各种离线强化学习算法。它支持最先进的离线RL算法,并提供了直观的API,使得即使不熟悉深度学习库的用户也能轻松上手。
主要特点
🚀 最实用的强化学习库
-
离线RL支持: d3rlpy支持最先进的离线RL算法。当在线交互在训练期间不可行时(如机器人、医疗等领域),离线RL非常强大。
-
在线RL支持: d3rlpy还支持传统的最先进的在线训练算法,无需任何妥协。这意味着您可以仅使用d3rlpy就能解决各种RL问题。
🔰 用户友好的API
-
无需深度学习库知识: d3rlpy通过直观的API提供了许多最先进的算法。即使不知道如何使用深度学习库,您也可以成为一名RL工程师。
-
详尽的文档: d3rlpy有完整的文档,并附有教程和原始论文的复现脚本。
🚀 超越最先进水平
- 分布式Q函数: d3rlpy是第一个在所有算法中支持分布式Q函数的库。分布式Q函数被认为是实现最先进性能的非常强大的方法。
安装
d3rlpy支持Linux、macOS和Windows。
PyPI安装(推荐)
pip install d3rlpy
Anaconda安装
conda install conda-forge/noarch::d3rlpy
Docker安装
docker run -it --gpus all --name d3rlpy takuseno/d3rlpy:latest bash
快速开始
以下是使用d3rlpy进行离线训练的简单示例:
import d3rlpy
# 准备数据集
dataset, env = d3rlpy.datasets.get_dataset("hopper-medium-v0")
# 准备算法
sac = d3rlpy.algos.SACConfig().create(device="cuda:0")
# 离线训练
sac.fit(dataset, n_steps=1000000)
# 在线训练
sac.fit_online(env, n_steps=1000000)
# 准备控制
actions = sac.predict(x)
支持的算法
d3rlpy支持多种离线和在线强化学习算法,包括但不限于:
- Behavior Cloning (监督学习)
- Neural Fitted Q Iteration (NFQ)
- Deep Q-Network (DQN)
- Double DQN
- Deep Deterministic Policy Gradients (DDPG)
- Twin Delayed Deep Deterministic Policy Gradients (TD3)
- Soft Actor-Critic (SAC)
- Batch Constrained Q-learning (BCQ)
- Bootstrapping Error Accumulation Reduction (BEAR)
- Conservative Q-Learning (CQL)
- Advantage Weighted Actor-Critic (AWAC)
- Critic Reguralized Regression (CRR)
- Policy in Latent Action Space (PLAS)
- TD3+BC
- Implicit Q-Learning (IQL)
- Calibrated Q-Learning (Cal-QL)
- ReBRAC
- Decision Transformer
这些算法涵盖了离散控制和连续控制的各种应用场景,使d3rlpy成为一个全面的强化学习工具箱。
支持的Q函数
d3rlpy支持以下Q函数:
- 标准Q函数
- 分位数回归
- 隐式分位数网络
这些不同的Q函数实现使得d3rlpy能够适应各种强化学习任务的需求。
基准测试结果
为确保实现质量,d3rlpy进行了基准测试。基准测试脚本可在reproductions目录中找到。基准测试结果可在d3rlpy-benchmarks仓库中查看。
这些基准测试不仅验证了d3rlpy的性能,还为用户提供了不同算法在各种环境中的表现参考。
实例展示
MuJoCo环境
以下是在MuJoCo环境中使用d3rlpy的示例:
import d3rlpy
# 准备数据集
dataset, env = d3rlpy.datasets.get_d4rl('hopper-medium-v0')
# 准备算法
cql = d3rlpy.algos.CQLConfig().create(device='cuda:0')
# 训练
cql.fit(
dataset,
n_steps=100000,
evaluators={"environment": d3rlpy.metrics.EnvironmentEvaluator(env)},
)
Atari 2600
d3rlpy也支持经典的Atari 2600游戏环境:
import d3rlpy
# 准备数据集(1%数据集)
dataset, env = d3rlpy.datasets.get_atari_transitions(
'breakout',
fraction=0.01,
num_stack=4,
)
# 准备算法
cql = d3rlpy.algos.DiscreteCQLConfig(
observation_scaler=d3rlpy.preprocessing.PixelObservationScaler(),
reward_scaler=d3rlpy.preprocessing.ClipRewardScaler(-1.0, 1.0),
).create(device='cuda:0')
# 开始训练
cql.fit(
dataset,
n_steps=1000000,
evaluators={"environment": d3rlpy.metrics.EnvironmentEvaluator(env, epsilon=0.001)},
)
在线训练
除了离线训练,d3rlpy还支持在线训练:
import d3rlpy
import gym
# 准备环境
env = gym.make('Hopper-v3')
eval_env = gym.make('Hopper-v3')
# 准备算法
sac = d3rlpy.algos.SACConfig().create(device='cuda:0')
# 准备回放缓冲区
buffer = d3rlpy.dataset.create_fifo_replay_buffer(limit=1000000, env=env)
# 开始训练
sac.fit_online(env, buffer, n_steps=1000000, eval_env=eval_env)
教程
d3rlpy提供了丰富的教程资源,帮助用户快速上手:
- 离线RL教程: 在Google Colab中打开
- 在线RL教程: 在Google Colab中打开
更多教程文档可在d3rlpy官方文档中找到。
社区与贡献
d3rlpy欢迎任何形式的贡献!如果您有兴趣为项目做出贡献,请查看贡献指南。
对于技术支持和问题报告,请使用GitHub Issues。
使用d3rlpy的项目
这些项目展示了d3rlpy在实际应用中的versatility和实用性。
引用
如果您在研究中使用了d3rlpy,请考虑引用以下论文:
@article{d3rlpy,
author = {Takuma Seno and Michita Imai},
title = {d3rlpy: An Offline Deep Reinforcement Learning Library},
journal = {Journal of Machine Learning Research},
year = {2022},
volume = {23},
number = {315},
pages = {1--20},
url = {http://jmlr.org/papers/v23/22-0017.html}
}
总结
d3rlpy作为一个强大的离线深度强化学习库,为研究人员和实践者提供了一个灵活、高效的工具来进行离线RL实验。它支持多种先进算法,提供用户友好的API,并具有详尽的文档和教程。无论您是RL新手还是经验丰富的研究人员,d3rlpy都能为您的项目提供valuable支持。随着强化学习在各个领域的应用不断扩大,d3rlpy将继续发挥重要作用,推动这一激动人心的研究领域的发展。