NeoRL: 接近真实世界的离线强化学习基准
论文预印版 论文@arXiv 测试基准代码库 数据集下载 离线强化学习算法库 离线策略评估算法库
HalfCheetah-v3-expert-10-val-noise.npz HalfCheetah-v3-expert-100-val-noise.npz HalfCheetah-v3-expert-1000-val-noise.npz HalfCheetah-v3-expert-100-train-noise.npz HalfCheetah-v3-expert-1000-train-noise.npz HalfCheetah-v3-expert-10000-train-noise.npz HalfCheetah-v3-high-10-val-noise.npz HalfCheetah-v3-high-100-val-noise.npz HalfCheetah-v3-high-1000-val-noise.npz HalfCheetah-v3-high-100-train-noise.npz HalfCheetah-v3-high-1000-train-noise.npz HalfCheetah-v3-high-10000-train-noise.npz HalfCheetah-v3-medium-10-val-noise.npz HalfCheetah-v3-medium-100-val-noise.npz HalfCheetah-v3-medium-1000-val-noise.npz HalfCheetah-v3-medium-100-train-noise.npz HalfCheetah-v3-medium-1000-train-noise.npz HalfCheetah-v3-medium-10000-train-noise.npz HalfCheetah-v3-low-10-val-noise.npz HalfCheetah-v3-low-100-val-noise.npz HalfCheetah-v3-low-1000-val-noise.npz HalfCheetah-v3-low-100-train-noise.npz HalfCheetah-v3-low-1000-train-noise.npz HalfCheetah-v3-low-10000-train-noise.npz HalfCheetah-v3.yaml HalfCheetah-v3_reward.py
打包下载: HalfCheetah-v3.tgz
Hopper-v3-expert-10-val-noise.npz Hopper-v3-expert-100-val-noise.npz Hopper-v3-expert-1000-val-noise.npz Hopper-v3-expert-100-train-noise.npz Hopper-v3-expert-1000-train-noise.npz Hopper-v3-expert-10000-train-noise.npz Hopper-v3-high-10-val-noise.npz Hopper-v3-high-100-val-noise.npz Hopper-v3-high-1000-val-noise.npz Hopper-v3-high-100-train-noise.npz Hopper-v3-high-1000-train-noise.npz Hopper-v3-high-10000-train-noise.npz Hopper-v3-medium-10-val-noise.npz Hopper-v3-medium-100-val-noise.npz Hopper-v3-medium-1000-val-noise.npz Hopper-v3-medium-100-train-noise.npz Hopper-v3-medium-1000-train-noise.npz Hopper-v3-medium-10000-train-noise.npz Hopper-v3-low-10-val-noise.npz Hopper-v3-low-100-val-noise.npz Hopper-v3-low-1000-val-noise.npz Hopper-v3-low-100-train-noise.npz Hopper-v3-low-1000-train-noise.npz Hopper-v3-low-10000-train-noise.npz Hopper-v3.yaml Hopper-v3_reward.py
打包下载: Hopper-v3.tgz
Walker2d-v3-expert-10-val-noise.npz Walker2d-v3-expert-100-val-noise.npz Walker2d-v3-expert-1000-val-noise.npz Walker2d-v3-expert-100-train-noise.npz Walker2d-v3-expert-1000-train-noise.npz Walker2d-v3-expert-10000-train-noise.npz Walker2d-v3-high-10-val-noise.npz Walker2d-v3-high-100-val-noise.npz Walker2d-v3-high-1000-val-noise.npz Walker2d-v3-high-100-train-noise.npz Walker2d-v3-high-1000-train-noise.npz Walker2d-v3-high-10000-train-noise.npz Walker2d-v3-medium-10-val-noise.npz Walker2d-v3-medium-100-val-noise.npz Walker2d-v3-medium-1000-val-noise.npz Walker2d-v3-medium-100-train-noise.npz Walker2d-v3-medium-1000-train-noise.npz Walker2d-v3-medium-10000-train-noise.npz Walker2d-v3-low-10-val-noise.npz Walker2d-v3-low-100-val-noise.npz Walker2d-v3-low-1000-val-noise.npz Walker2d-v3-low-100-train-noise.npz Walker2d-v3-low-1000-train-noise.npz Walker2d-v3-low-10000-train-noise.npz Walker2d-v3.yaml Walker2d-v3_reward.py
打包下载: Walker2d-v3.tgz
citylearn-expert-10-val-noise.npz citylearn-expert-100-val-noise.npz citylearn-expert-1000-val-noise.npz citylearn-expert-100-train-noise.npz citylearn-expert-1000-train-noise.npz citylearn-expert-10000-train-noise.npz citylearn-high-10-val-noise.npz citylearn-high-100-val-noise.npz citylearn-high-1000-val-noise.npz citylearn-high-100-train-noise.npz citylearn-high-1000-train-noise.npz citylearn-high-10000-train-noise.npz citylearn-medium-10-val-noise.npz citylearn-medium-100-val-noise.npz citylearn-medium-1000-val-noise.npz citylearn-medium-100-train-noise.npz citylearn-medium-1000-train-noise.npz citylearn-medium-10000-train-noise.npz citylearn-low-10-val-noise.npz citylearn-low-100-val-noise.npz citylearn-low-1000-val-noise.npz citylearn-low-100-train-noise.npz citylearn-low-1000-train-noise.npz citylearn-low-10000-train-noise.npz citylearn.yaml citylearn_reward.py
打包下载: citylearn.tgz
finance-expert-10-val-noise.npz finance-expert-100-val-noise.npz finance-expert-100-train-noise.npz finance-expert-1000-train-noise.npz finance-high-10-val-noise.npz finance-high-100-val-noise.npz finance-high-100-train-noise.npz finance-high-1000-train-noise.npz finance-medium-10-val-noise.npz finance-medium-100-val-noise.npz finance-medium-100-train-noise.npz finance-medium-1000-train-noise.npz finance-low-10-val-noise.npz finance-low-100-val-noise.npz finance-low-100-train-noise.npz finance-low-1000-train-noise.npz finance.yaml finance_reward.py
打包下载: finance.tgz
ib-high-10-val.npz ib-high-100-val.npz ib-high-1000-val.npz ib-high-100-train.npz ib-high-1000-train.npz ib-high-10000-train.npz ib-medium-10-val.npz ib-medium-100-val.npz ib-medium-1000-val.npz ib-medium-100-train.npz ib-medium-1000-train.npz ib-medium-10000-train.npz ib-low-10-val.npz ib-low-100-val.npz ib-low-1000-val.npz ib-low-100-train.npz ib-low-1000-train.npz ib-low-10000-train.npz ib.yaml ib_reward.py
打包下载: ib.tgz
sp-1000-val.npz sp-10000-train.npz sp.yaml
摘要
离线强化学习的目标是在不与真实环境进行额外交互的前提下,仅从历史数据中学习一个有效的策略。根据我们离线强化学习的落地应用经验,我们注意到现有的离线强化学习测试基准环境与现实应用有显著差异,目前我们已经意识到的包括(1)使用了数据量较大且具有很强探索性质的数据集,(2)对比基线被弱化,(3)上线前缺少策略验证。在许多现实场景中,为了保证系统安全,严禁运行一个过度探索的策略去产生大量数据,使得我们只能从非常有限的保守数据中学习。通过训练得到的策略一般要超过当前实际部署于系统中策略的性能,才被认为是有效的;训练好的策略必须经过充分验证,对性能有把握后,才可能在部署到真实环境。为了体现上述性质,我们提出了接近现实的离线强化学习基准(NearReal-world Benchmark for Offline RL)—— NeoRL。NeoRL使用了更保守的数据采集方式。此外,NeoRL对齐了显示应用的情形,即经过进行离线训练和离线验证,离线选出最好的模型来部署测试。我们在NeoRL上评估了最近提出的一些最先进的离线强化学习算法。实验结果表明,和行为克隆策略以及确定性策略相比,测试的部分算法竞争力下降,这意味着这些算法在真实任务中部署时性能会比在之前的基准集上测试的结果更低。我们还发现,使用现有的离线策略评估方法,几乎选不出真正部署时最好的策略。我们希望NeoRL 能为未来的研究提供一些启示,并且引起社区对强化学习落地应用的关注。
为什么提出 NeoRL?
之前提出的基准测试集使得离线强化学习方法可以在一些公共的平台上进行测试和比较,尽管这对于离线强化学习社区是一个巨大的贡献,根据我们在真实任务,例如,推荐系统、商品促销、工业控制等任务上使用强化学习的经验表明,真实的业务需求在之前的基准集上难以被满足,包括以下几个方面:
  • 从保守和有限的数据中学习
  • 在很多真实的领域中,收集到的数据通常是保守的,并且数据量有限。更重要的是,在真实的运行系统中进行探索性的动作会损害系统的性能,为了保障系统安全和系统的效益,产生这些离线数据的工作策略通常比较保守且几乎是确定性的。因此,收集到的离线数据集的分布通常非常狭窄。需要注意的是,保守仅仅意味着探索性低以及坚持使用这个工作策略,并不要求这个工作策略的性能好坏或策略的形式。在许多现实任务中,工作策略往往可以有不同性能或形式(例如,人工设计的规则、深度学习的模型等),但大多都是比较保守的。
  • 和工作策略进行对比
  • 在现实应用中,只有当训练得到的策略在部署后比系统当前的工作策略性能更高,才被认为是有效的。至于之前的基准集,为了促进离线强化学习,许多数据集都从有较高探索性的策略中采样得到,部分数据集甚至由多个策略的混合产生。此时,使用行为克隆作为一个对比基线并不妥当,此时的行为克隆的性能往往会比确定性的工作策略更差。因此,在探索行较高的数据集上,如果把行为克隆当为工作策略的参考,离线强化学习的可用性会被高估。
  • 离线策略验证必不可少
  • 几乎在所有的现实任务中,我们会使用不同算法(或不同超参数)训练得到多个策略,但我们往往只允许验证1~2 个策略来部署测试。只有当我们认为策略的性能会超过系统当前的工作策略时,该策略才可能上线部署。而在之前的基准集上,我们注意到算法在训练完成后,就直接在真实环境中部署测试性能。离线策略验证往往被忽略了,从而也忽略了离线验证的挑战。因此,即使某个算法在基准集上的性能较好,也很难评估在真实任务上该算法的真实性能。
总的说来,完整的离线强化学习部署流程包括离线训练,离线验证,以及最后的在线部署测试三个阶段。 为了弥补这一现实差距,NeoRL 基准数据集具有以下特点:
  • 所有任务都提供了保守和有限的数据集
  • 在线策略选择和离线策略选择评估的基准结果
  • 和工作策略的比较结果
  • 一些离线评估的经验
任务
IB
工业基准(IB)是一种强化学习基准环境,旨在模拟各种工业控制任务(如风力或燃气轮机、化学反应器)中呈现的特性。它包括现实工业环境中经常遇到的问题,如高维连续状态和动作空间、延迟奖励、复杂的噪声模式以及多个反应目标的高随机性。我们还扩展了原始的工业基准环境,将系统状态的两个维度添加到观测空间中,以计算每一步的即时奖励。由于工业基准环境本身是一个高维度、高随机性的环境,所以在这个环境上采样数据时,并没有给动作添加显式噪声。
FinRL
FinRL环境提供了一种建立股票交易模拟器的方法,可以复制真实的股票市场,并提供回测支持,其实施考虑了交易手续费、市场流动性和投资者风险规避等因素。在FinRL环境下,每个交易日可以对股票池中的股票进行一次交易。奖励函数是当天结束时与前一天总资产价值的差额。随着时间的推移,环境存在自我演化。
CityLearn
CityLearn(CL)环境是一个类似OpenAIGym的环境,它通过控制不同类型建筑的储能来重塑电力需求的聚集曲线。高电力需求提高了电价和配电网的总体成本。扁平化、平滑化和缩小电力需求曲线有助于降低发电、输电和配电的运营和资本成本。优化的目标是协调用电方(即建筑物)对生活热水和冷水储存的控制,以重塑电力需求的总体曲线。
促销推荐
促销推荐环境模仿了某个真实的促销平台,该平台的运营人员每天会给每个用户发不同的折扣券。折扣券的数量和数值会影响用户的行为。更高的折扣通常会促销,但通常也会增加成本。平台的目标是最大化自己的总收入。该环境的部分组件来自一个真实世界的促销项目。该环境的历史数据中,历史动作由真实运营人员产生。
MuJoCo
MuJoCo连续控制任务是在线强化学习算法的标准测试平台。我们从中选择了Halfcheetah-v3、Walker2d-v3和Hopper-v3三种常用于之前离线基准集的环境构建了离线强化学习任务。
如何使用 NeoRL
  • 安装
  • git clone https://github.com/polixir/neorl.git
    cd neorl
    pip install -e .
    安装后,CityLearn、FinRL、IB、SP四个数据集将可以直接调用。如果想要使用MuJoCo,请获取 许可 并按照说明安装后,运行:
    pip install -e .[mujoco]
    当前,我们的MuJoCo环境支持"HalfCheetah-v3"、"Walker2d-v3"和"Hopper-v3"。
  • 加载数据集
  • import neorl
    env = neorl.make("citylearn")
    data = env.get_dataset()
    更多信息可以在 NeoRL 仓库 上找到。