你好,游客 登录
背景:
阅读新闻

OpenAI 新论文疑似“作弊”,谁才是最优强化学习算法?

[日期:2017-07-29] 来源:新智元  作者: [字体: ]

【新智元导读】OpenAI 日前提出了一类强化学习替代方法,号称能与最先进的方法相媲美乃至更好。但是,昨天却有用户在 Github 表示“他们有点儿作弊了”,称结果无法复现。这究竟是怎么回事?

OpenAI 日前发布了一类新的强化学习算法——近端策略优化(Proximal Policy Optimization,PPO),称这类算法的实现和调参更加简单,并且性能与当前最佳方法相当乃至更好。PPO 也是如今 OpenAI 默认使用的强化学习算法。

昨天,一位用户在 Github 上提出质疑,表示根据他的使用经验,PPO 并没有 OpenAI 说的那么好。 

“OpenAI 日前提出了一种号称比强化学习速度更快、需要较少超参数调整的替代方案。到目前为止,我的经验并不支持这些说法。”Github 用户 peastman 留言说:“在我的大部分测试中,它比 A3C 慢,而不是更快。并且,它和 A3C 有相同的超参数,还添加了几个新的参数。”

当然,peastman 也表示,也许他的情况是个例,其他人或许能成功复现 OpenAI 的论文。

peastman 表示,OpenAI PPO 论文的作者“有点作弊了”(kind of cheat)。“他们并没有把 PPO 与 A3C 进行比较。相反,作者比较的是他们称为‘A2C’的单线程版本,并且仅仅基于性能如何随着训练步骤数量增多而提升。作者没有考虑性能与时钟时间的关系。这隐去了一个非常重要的问题:PPO 无法并行运行,因为它在一个线程上执行所有优化,所有其他线程都处于空闲状态。”

“此外,PPO 每一组 rollout 都运行几个优化周期,因此每步的 CPU 时间要高得多。作者在论文中的比较再次产生了很大的误导。他们说,PPO 在 100 万次训练步骤后,比‘A2C’性能更好,但并没有提到 A3C 可以在相同的时钟时间内完成 400 万次的训练步骤。”

“每次迭代,都必须先生成所有的 rollout,然后在多个 epoch 中重复在优化器里运行所有这些。而且,你需要先把这些都完成了,才能开始生成下一组 rollout。”

让 peastman 如此纠结的 PPO 究竟是什么呢?

OpenAI 论文:近端策略优化算法 PPO

摘要

我们为强化学习提出了一类新的策略梯度法,可以通过与环境的交互在样本数据(sampling data)中进行转换,使用随机梯度下降优化替代目标函数(surrogate objective function)。标准的策略梯度法是在每一个数据样本上执行一次梯度更新,而我们提出的新目标函数可以在多个训练步骤(epoch)中实现小批量(minibatch)的更新。这种新方法称为近端策略优化(proximal policy optimization,PPO)。PPO 拥有置信域策略优化(TRPO)的一些好处,但更加容易实现,也更通用(general),并且根据我们的经验有更好的样本复杂度。我们在一组基准任务上测试了 PPO,包括模拟机器人运动和玩 Atari 游戏,这些基准测试表示 PPO 要比其他在线策略梯度法更好。考虑到总体的复杂度、操作简便性和 wall-time,PPO 是一种更好的选择。

上图显示了 PPO(浅蓝色线条) 与 Vanilla PG (Adaptive)、TRPO、A2C + Trust Region、CEM 和 A2C 的对比。

论文地址:https://arxiv.org/pdf/1707.06347.pdf

OpenAI 官方博文:PPO 在实现简单性、样本复杂度和调参难度之间取得了平衡

单独看论文摘要可能无法获知 PPO 的全貌。下面是 OpenAI 介绍 PPO 的博文。

PPO 让我们在复杂环境中训练 AI 策略。例如上面视频中显示的 Roboschool。其中,智能体的目标是通过学习走路、跑步和转弯等动作,最终抵达粉红色的圆点。在这个过程中,智能体会不断遭到小的撞击,必须学会倒下后自己站起来。

策略梯度法(Policy gradient method)是近来使用深度神经网络进行控制获得种种突破的基础。但是,通过策略梯度法取得很好的结果十分困难,因为它对步长大小(stepsize)的选择十分敏感。如果迭代步长太小,那么进展会很慢,如果迭代步长过大,那么信号将遭到噪声的强烈干扰,性能急剧降低。此外,策略梯度法样本效率非常低,需要几百万(乃至几十亿)时间步骤(timestep)学习一个简单的任务。

研究人员尝试使用 TRPO 和 ACER 等方法来减少这些缺陷,TRPO 和 ACER 等方法能够约束或优化一次策略更新(policy update)大小。这些方法也都有其各自的 trade-off,比如 ACER 要比 PPO 复杂,需要额外添加代码来修正离策略(off-policy)和重构缓冲器,TRPO 虽然对连续控制任务非常有用,但对于那些在策略和价值函数或辅助损失函数(auxiliary losses)间共享参数的算法兼容度很低,而后者恰好对于解决 Atari 等视觉输入很重要的领域的问题时很重要。

PPO

通过监督学习,我们可以轻松地实现成本函数,并在成本函数上运行梯度下降,只需相对少量调参就能得到很好的结果。让强化学习成功的路径并不明显,因为算法通常具有很多难以调试的活动模块,需要大量精力调整才能获得良好的效果。PPO 算法很好地在实现简单性、样本复杂度和调参难度之间取得了平衡,PPO 尝试在每一迭代步计算一个更新,将成本函数最小化,同时在计算梯度时确保与先前策略有相对较小的偏差。

PPO 使用了一种新的目标函数,这种目标函数很少在其他算法中出现:

这种目标函数实现了一种与随机梯度下降相匹配的置信域(Trust Region)更新,通过移除了 KL 惩罚,不需要更新,从而简化了算法。在测试中,PPO 在连续控制任务中取得了最好的性能,在 Atari 上取得了几乎能够与 ACER 相媲美的性能。

可控制的复杂机器人

用 PPO 训练的智能体发展出了灵活的移动策略,可以在朝目标地点移动时临时转向和倾斜。

OpenAI 的研究员介绍,他们用 PPO 训练出的策略的基础上创造了交互式智能体,用键盘在 Roboschool 环境中为机器人设置新的目标地点。哪怕输入序列与训练时的序列不同,智能体也成功实现了泛化。

他们还使用 PPO 教复杂的仿真机器人走动,比如上面视频中显示的波士顿动力 Atlas 机器人。这种模型有 30 个独立关节。还有研究人员用 PPO 训练机器人跨越障碍,取得了魔性的跑酷效果。

所以,OpenAI PPO 论文结果是否真如他们说的那样好,感兴趣的同学可以尝试复现。OpenAI 还发布了 PPO 和 TRPO 的可扩展并行实现工具。

或许,你能解答 Github 用户 peastman 的困惑。

  • OpenAI 介绍 PPO 的博客:https://blog.openai.com/openai-baselines-ppo/

  • PPO 论文:https://arxiv.org/pdf/1707.06347.pdf

  • Github 讨论:https://github.com/deepchem/deepchem/pull/697#issuecomment-318508838

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款