OpenAI研究 Procgen 基准测试
我们发布了 Procgen Benchmark,这是 16 个简单易用的 程序生成 环境,可直接衡量强化学习代理学习通用技能的速度。
入门
无论您是人类还是 AI,使用环境都很容易:
$ pip install procgen # install
$ python -m procgen.interactive --env-name starpilot # human
$ python <<EOF # random AI agent
import gym
env = gym.make('procgen:procgen-coinrun-v0')
obs = env.reset()
while True:
obs, rew, done, info = env.step(env.action_space.sample())
env.render()
if done:
break
EOF
我们发现,所有 Procgen 环境都需要在 500-1000 个不同级别上进行训练,然后才能泛化到新级别,这表明标准 RL 基准测试在每个环境中都需要更多的多样性。Procgen Benchmark 已经成为 OpenAI RL 团队使用的标准研究平台,我们希望它能加速社区创造更好的 RL 算法。
环境多样性是关键
在 几种 环境中,已经观察到代理可以过度适应非常大的训练集。这一证据提出了过度拟合普遍存在经典基准测试的可能性,例如 Arcade Learning Environment,它长期以来一直是强化学习 (RL) 的黄金标准。虽然 ALE 中不同游戏之间的多样性是基准测试的最大优势之一,但对泛化的低重视是一个重大缺陷。在每场比赛中都必须问这个问题:代理人是否在稳健地学习相关技能,或者他们是否大致记住了特定的轨迹?
CoinRun 旨在通过使用程序生成来构建不同的训练级别和测试级别集来准确解决这个问题。虽然 CoinRun 帮助我们更好地量化了 RL 中的泛化,但它仍然只是一个单一的环境。CoinRun 很可能不能完全代表 RL 智能体必须面对的许多挑战。我们想要两全其美:一个由许多不同环境组成的基准,每个环境都从根本上需要泛化。为了满足这一需求,我们创建了 Procgen Benchmark。CoinRun 现在作为 Procgen Benchmark 的首创环境,为更大的整体贡献其多样性。
之前的工作,包括 Obstacle Tower Challenge 和 General Video Game AI framework,也鼓励使用程序生成来更好地评估 RL 中的泛化。我们以类似的精神设计环境,两个 Procgen 环境直接从 基于 GVGAI 的工作中汲取灵感。其他环境,如 Dota 和星际争霸,也提供了很多每个环境的复杂性,但这些环境很难快速迭代(而且一次使用多个这样的环境更难)。通过 Procgen Benchmark,我们努力实现以下所有目标:实验便利性、环境内的高度多样性以及环境之间的高度多样性。
Procgen 基准测试
Procgen Benchmark 由 16 个独特的环境组成,旨在衡量强化学习中的样本效率和泛化能力。该基准非常适合评估泛化,因为可以在每个环境中生成不同的训练和测试集。该基准也非常适合评估样本效率,因为所有环境都对 RL 代理提出了多种多样且引人注目的挑战。环境的内在多样性要求智能体学习稳健的策略;过度拟合状态空间中的狭窄区域是不够的。换句话说,当代理人面临不断变化的水平时,概括能力成为成功不可或缺的组成部分。
设计原则
我们设计的所有 Procgen 环境都满足以下标准:
- 高度多样性:环境生成逻辑被赋予最大的自由度,受制于基本的设计约束。由此产生的水平分布的多样性给代理人带来了有意义的泛化挑战。
- 快速评估:校准环境难度,以便基线代理在训练 200M 时间步后取得显着进步。此外,环境经过优化,可在单个 CPU 内核上每秒执行数千步,从而实现快速实验管道。
- 可调难度:所有环境都支持两种经过良好校准的难度设置:简单和困难。虽然我们使用困难难度设置报告结果,但我们为那些计算能力有限的人提供简单难度设置。简单的环境需要大约八分之一的资源来训练。
- 强调视觉识别和运动控制:为了与先例保持一致,环境模仿了许多 Atari 和 Gym Retro 游戏的风格。表现良好主要取决于识别观察空间中的关键资产并制定适当的低水平运动反应。
评估泛化
我们开始意识到在进行 Retro Contest时 RL 泛化有多么困难,因为智能体不断地无法从训练集中的有限数据中进行泛化。后来,我们的 CoinRun 实验更清晰地描绘了我们的智能体难以概括的画面。我们现在扩展了这些结果,使用 Procgen Benchmark 中的所有 16 个环境对 RL 泛化进行了迄今为止最彻底的研究。
我们首先测量了训练集的大小如何影响泛化。在每个环境中,我们生成了大小从 100 到 100,000 级别不等的训练集。我们使用 Proximal Policy Optimization在这些级别上为 200M 时间步训练代理,并且我们测量了看不见的测试级别的性能。
得分超过 100k 级别,对数刻度
我们发现代理在几乎所有环境中都强烈地过度适应小型训练集。在某些情况下,代理需要访问多达 10,000 个级别才能缩小泛化差距。我们还看到在许多环境中出现了一种奇特的趋势:超过某个阈值后,训练性能会随着训练集的增长而提高!这与监督学习中发现的趋势背道而驰,在监督学习中,训练性能通常会随着训练集的大小而降低。我们认为,这种培训绩效的提高来自于由不同级别提供的隐性课程。如果代理学会 在训练集中跨级别进行泛化,则更大的训练集可以提高训练性能. 我们之前在 CoinRun 中注意到了这种效果,并且发现它也经常出现在许多 Procgen 环境中。
具有确定性水平的消融
得分超过 200M 时间步长
在测试时,我们去除了水平序列中的确定性,而不是随机选择水平序列。我们发现,在大多数游戏中,智能体在前几个训练级别上变得有能力,给人一种有意义的进步的错觉。然而,测试性能表明代理实际上几乎没有了解底层级别分布。我们认为训练和测试性能之间的巨大差距值得强调。它揭示了在遵循固定级别序列的环境中进行训练的一个关键隐藏缺陷。这些结果表明在训练和评估 RL 代理时使用不同的环境分布是多么重要。