转载

OpenAI 基线:DQN

我们正在开源 OpenAI Baselines,这是我们的内部努力,旨在重现性能与已发布结果相当的强化学习算法。我们将在未来几个月发布算法;今天的发布包括 DQN 及其三个变体。


强化学习的结果很难重现:性能非常嘈杂,算法有很多移动部分,允许细微的错误,许多论文没有报告所有必需的技巧。通过发布已知的良好实现(以及创建它们的最佳实践),我们希望确保明显的 RL 进步永远不会是由于与现有算法的错误或未调整版本进行比较。

这篇文章包含一些我们用于正确的 RL 算法实现的最佳实践,以及我们第一个版本的详细信息:  DQN 及其三个变体,由 DeepMind 开发的算法。

最佳实践

与随机基线进行比较: 在下面的视频中,代理人在游戏 HERO 中采取随机行动如果您在训练的早期阶段看到这种行为,您很容易欺骗自己相信代理人正在学习。因此,您应该始终验证您的代理是否优于随机代理。

图片2 1

警惕非破坏性错误:当我们查看十个流行的强化学习算法重新实现的样本时,我们注意到其中六个具有由社区成员发现并由作者确认的细微错误。这些错误的范围从 忽略某些示例的梯度 或错误地实施 因果卷积的 轻微错误到报告 分数高于真实结果的严重错误

像代理人一样看世界: 与大多数深度学习方法一样,对于 DQN,我们倾向于将环境图像转换为灰度图像,以减少训练期间所需的计算量。这可能会产生自己的错误:当我们在 Seaquest 上运行我们的 DQN 算法时,我们注意到我们的实现表现不佳。当我们检查环境时,我们发现这是因为我们的后处理图像没有鱼,如图所示。

鱼图片 1

将屏幕图像转换为灰度时,我们错误地校准了绿色值的系数,导致鱼消失。在我们注意到这个错误后,我们调整了颜色值,我们的算法能够再次看到鱼。

为了在未来调试此类问题,Gym 现在包含一个 播放 功能,让研究人员可以轻松地看到与 AI 代理相同的观察结果。

Fix bugs, then hyperparameters:调试后,我们开始校准我们的超参数。我们最终发现,为控制探索率的超参数 epsilon 设置退火时间表会对性能产生巨大影响。我们的最终实施在前一百万步中将 epsilon 降低到 0.1,然后在接下来的 2400 万步中降低到 0.01。如果我们的实现包含错误,那么我们很可能会想出不同的超参数设置来尝试处理我们尚未诊断出的故障。

仔细检查您对论文的解释:在 DQN  Nature 论文中,作者写道:“我们还发现将更新中的错误项剪裁到 -1 和 1 之间很有帮助。”。有两种方法可以解释这个陈述——剪掉目标,或者在计算梯度时剪掉乘法项。前者看起来更自然,但它会导致梯度在具有高误差的转换中为零,从而导致性能欠佳,如在一个 DQN 实现中所发现的那样。后者是正确的,并且有一个简单的数学解释——Huber  Loss您可以通过检查梯度是否按预期显示来发现此类错误——这可以在 TensorFlow 中使用compute_gradients轻松完成 。

这篇文章中的大多数错误都是通过多次检查代码并思考每一行可能出现的问题来发现的。事后看来,每个错误似乎都很明显,但即使是经验丰富的研究人员也往往低估了要找到实现中的所有错误所需的代码遍历次数。

深度Q学习

  • DQN:一种强化学习算法,将 Q-Learning 与深度神经网络相结合,让强化学习适用于复杂的高维环境,如视频游戏或机器人。
  • 双 Q 学习:纠正了标准 DQN 算法有时会高估与特定动作相关的值的倾向。
  • 优先重放:通过学习重放真实奖励与预期奖励显着不同的记忆来扩展 DQN 的经验重放功能,让代理根据不正确的假设进行自我调整。
  • Dueling DQN:将神经网络一分为二——一个学习在每个时间步提供价值的估计,另一个计算每个动作的潜在优势,两者结合起来形成一个动作优势 Q 函数。

要开始,请运行以下命令:

pip install baselines
# Train model and save the results to cartpole_model.pkl
python -m baselines.deepq.experiments.train_cartpole
# Load the model saved in cartpole_model.pkl and visualize the learned policy
python -m baselines.deepq.experiments.enjoy_cartpole
无效的

我们还提供了训练有素的代理,您可以通过运行以下命令获得:

python -m baselines.deepq.experiments.atari.download_model --blob model-atari-prior-duel-breakout-1 --model-dir /tmp/models
python -m baselines.deepq.experiments.atari.enjoy --model-dir /tmp/models/model-atari-prior-duel-breakout-1 --env Breakout --dueling
无效的

基准

代理看到的帧(百万)

我们提供了一个 iPython 笔记本, 展示了我们的 DQN 实现在 Atari 游戏上的性能。您可以比较我们各种算法的性能,例如 Dueling Double Q learning with Prioritized Replay(黄色)、Double Q learning with Prioritized Replay(蓝色)、Dueling Double Q learning(绿色)和 Double Q learning(红色)。


人工智能是一门经验科学,进行更多实验的能力与进步直接相关。有了 Baselines,研究人员可以花更少的时间来实施已有的算法,而将更多的时间花在设计新算法上。