我们开源了 OpenAI 基准(https://github.com/openai/baselines),努力再现与已发表论文成绩相当的强化学习算法。接下来几个月,我们将发布算法;今天发布的是 DQN 和它的三个变体。
重现强化学习结果非常复杂:性能非常嘈杂,算法有很多活动部分,因此会有微妙漏洞,而且很多论文都没有报告所有必要的技巧。通过发布正确的实现(Know-good)(以及创造这些的最佳实践),我们希望确保强化学习的显著优势与现有算法的错误或未调试版本的比较结果绝对无关。
强化学习算法的正确实现正面临着挑战;好结果通常只来自对貌似不重要的漏洞的修复。本文包含一些修改强化学习算法实现的最佳实践方法以及 DQN 发布的一些细节内容。
查看代码:https://github.com/openai/baselines
最佳实践
与随机基准比较:在下面的视频中,在游戏 H.E.R.O 中,智能体的行动是随机的;如果在训练早期看到这个,很容易以为智能体正在学习。因此,你要始终证实你的智能体的表现胜过随机智能体。
警惕不可破解(non-breaking )的漏洞:当研究了一个包含 10 个流行强化学习算法再实现的样本之后,我们注意到其中 6 个含有微妙的漏洞,由社区成员发现并经作者确认。这些漏洞包括忽略了一些样本梯度或错误实现因果卷积的轻微漏洞,也有严重漏洞,比如报告的得分比真实结果更高。
像你的智能体一样看世界:与大多数深度学习方法一样,对于 DQN,我们倾向于将环境的图像转换为灰度,以减少训练过程中所需的计算量。这又会带来这方面的问题:在 Seaquest 运行 DQN 算法时,我们注意到我们的部署表现很差。检查环境时,我们找到了原因——就像这张图片显示的,后处理过的(post-processed)图像不包含鱼。
把屏幕图像转化为灰度时,我们错误地校准了绿色值系数,导致了鱼的消失。注意到这个错误后,我们调整了颜色值,算法又能看到鱼了。
为了未来调试这样的问题,Gym 现在包含了一个 play 功能,研究人员就能像智能体一样,很容易看到相同的观察结果。
修复漏洞,然后是超参:修复漏洞后,开始调校超参。最终我们发现:为控制探索率(exploration rate)的超参 epsilon 设定退火程序显著影响了性能,最后我们将这个超参在头一百万步后降低到 0.1,接下来的 2400 万步后减低到 0.01。如果实践中有漏洞,我们可能会想出不同的超参设定来解决我们还没诊断出来的问题。