前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenAI发布DQN实现,提出5点做强化学习模型的最佳方法

OpenAI发布DQN实现,提出5点做强化学习模型的最佳方法

作者头像
量子位
发布2018-03-30 10:46:11
9010
发布2018-03-30 10:46:11
举报
文章被收录于专栏:量子位量子位
李林 编译整理 量子位 报道 | QbitAI 出品

今天,马斯克和YC总裁Altman等创办的人工智能非营利组织OpenAI,发布了DQN及其三个变体的TensorFlow实现,以及根据复现过程总结的强化学习模型最佳实现方法。

以下是OpenAI博客文章的主要内容,量子位编译:

我们宣布开源OpenAI Baselines,这是我们内部对发表论文的复现,结果能与论文所公布的相媲美。今天要发布的,包括DQN和它的三个变体。接下来的几个月里,我们将继续发布这些算法。

复现强化学习的结果并非易事:模型的性能有很多噪声、算法的活动件可能包含微小的bug、很多论文也没有写明复现所需的所有技巧。要正确地实现一个强化学习模型,往往需要修复很多不起眼的bug。

我们计划发布一些效果良好的实现,并写明完成这些实现的过程,借此来确保明显的RL进步,不是与现有算法的错误版本或未经微调的版本进行比较得来的。

最佳方法

与随机基准相比

下图中的agent,正在游戏H.E.R.O.中进行随机行动,如果你在训练早期看见这样的行为,很可能相信agent正在学习。所以,你总是应该验证自己的agent是否比随机行动更强。

警惕不严重的bug

我们看了十个流行的强化学习算法复现的样本,其中六个有社区成员发现提交,并获得作者确认的微小bug。

这些bug有的非常轻微,有的是忽略了梯度,有的甚至会虚报得分。

从agent的角度看世界

和大多数深度学习方法一样,我们在训练DQN时,也会将环境图像转换为灰度,以降低计算量。这有时候会带来bug。我们在Seaquest上运行DQN算法时,发现自己的实现表现不佳。当我们检查环境时,发现这是因为处理成灰度的图像上根本看不见鱼,如下图所示。

游戏Seaquest的三个图像。左图显示原始图像,中间显示已经转换为灰度的版本,鱼不见了,右侧显示经调整让鱼可见的的灰度版本。

当将屏幕图像转换为灰度图像时,我们错误地调整了绿色值的系数,导致鱼的消失。在注意到这个bug之后,我们调整了颜色值,就又可以看见鱼了。

为了将来能调试这样的问题,我们的强化学习工具包gym现在有播放功能,让研究者轻松地看到与AI agent相同的观察结果。

修复bug,然后调整超参数

bug修完,就该开始调整超参数了。我们最终发现,为控制探索率的超参数epsilon设定退火程序对性能有很大的影响。我们的最终实现方法在前100万步中将epsilon降至0.1,然后在接下来的2400万步中降至0.01。如果我们的实现有bug,就可能会为了应对没有诊断出的错误,而提出不同的超参数。

仔细检查你对论文的解读

在Nature上发表的DQN论文中,作者写道:

We also found it helpful to clip the error term from the update […] to be between -1 and 1.

这句话有两种解释:一是裁剪目标,二是在计算梯度时裁剪乘法项。前者似乎更自然,但是一个DQN实现显示,它会导致次优性能。所以说,后者才是正确的,有一个简单的数学解释:胡伯损失。你可以通过检查梯度是否符合预期,来发现这些错误,用TensorFlow的compute_gradients命令就能轻松完成。

文章中提到的大多数错误都是通过多次遍历代码,并思考每行可能出错的情况发现的。每个bug在事后看起来都是显而易见的,但是即使是经验丰富的研究人员,也会低估检查多少遍代码中,才能找到实现中的所有错误。

Deep Q-Learning

我们的实现基于Python 3和TensorFlow。今天发布的实现包括DQN和它的三个变体:

DQN:强化学习算法,将Q-Learning与深层神经网络结合起来,使强化学习适用于复杂,高维度的环境,如视频游戏或机器人。

Double Q Learning:修正了传统DQN算法有时会高估与特定行为相关价值的趋势。

Prioritized Replay:通过在真正的奖励与预期奖励明显不同时学习重播记录,来扩展DQN的经历重播功能,让agent在做出不正确假设时进行调整。

决斗DQN(Dueling DQN):将神经网络分为两个,一个学习提供每个时间步长值的估计,另一个计算每个动作的潜在优势,两个组合为一个action-advantage Q function。

GitHub地址: https://github.com/openai/baselines

基准

我们提供一个iPython笔记本,显示了我们的DQN实现在Atari游戏上的性能。上图是各种算法的性能比较。

IPython笔记: https://github.com/openai/baselines-results/blob/master/dqn_results.ipynb

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最佳方法
    • 与随机基准相比
      • 警惕不严重的bug
        • 从agent的角度看世界
          • 修复bug,然后调整超参数
            • 仔细检查你对论文的解读
            • Deep Q-Learning
            • 基准
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档