推特爆款:谷歌大脑工程师的深度强化学习劝退文
2018-04-11 15:51

推特爆款:谷歌大脑工程师的深度强化学习劝退文

本文来自:AI前线(ID:ai-front),策划编辑:Vincent,作者:Alex Irpan,译者 :马卓奇


导读:深度强化学习可以说是人工智能领域现在最热门的方向,它之所以声名大振,与 DeepMind 团队用它在 AlphaGo 和 AlphaZero 上大获成功脱不开关系。


强化学习本身是一个非常通用的人工智能范式,在直觉上让人觉得非常适合用来模拟各种决策任务。当它和深度神经网络这种只要给足Layer和神经元,可以逼近任何函数的非线性函数近似模型结合在一起,那感觉就是要上天啊!


但本文作者 Alex Irpan 想要告诉大家,深度强化学习是个大坑,别着急进坑!它的成功案例其实不算很多,但每个都太有名了,导致不了解的人对它产生了很大的错觉,高估能力而低估了难度。Alex Irpan 目前是谷歌大脑机器人团队的软件工程师,他从伯克利获得计算机科学本科学位,本科时曾在伯克利人工智能实验室(Berkeley AI Research (BAIR) Lab)参与科研,导师是深度强化学习大牛 Pieter Abbeel。


这篇文章在推特上非常火爆。知乎网友 Frankenstein 在看完英文原文后表示“读完大有如不见此文,万古如长夜之感。心里激动,一时难以自抑。这篇文章是我入坑以来看到的深度强化学习方面最好的阶段性总结,强烈建议应该作为深度强化学习的第一课,看完以后大家再慎重考虑到底要不要入坑。”


AI 前线觉得很有必要将这篇文章介绍给更多国内的小伙伴。虽然标题写着劝退文,但并非真的要完全劝退大家,而是希望大家更加冷静地看待目前深度强化学习的研究进展。


全文如下:

 

写在前面


有一次在Facebook上,我发表了这样一段话:

任何时候,如果有人问我强化学习能不能解决他们的问题,我都会告诉他们,不行。而且70%的情况下我都是对的。


深度强化学习被大量的炒作重重包围。这并不是无缘无故的!强化学习是很奇妙的一种范式,原则上,一个鲁棒且高性能的RL系统应该是可以完成一切任务的。将这种范式与深度学习的经验力量相结合明显是最佳搭配。深度RL看起来是最接近通用人工智能(Artificial general intelligence,AGI)的系统之一,而打造AGI这一梦想已经消耗了数十亿美元的资金。


不幸的是,目前深度强化学习仍然不起作用。


当然,我相信它是有用的。如果我不相信强化学习,我也不会研究它。但是研究过程中也出现了很多问题,而且大部分都很难解决。智能体agent光鲜亮丽的演示背后,是大家看不到的无数鲜血、汗水和泪水。


我已经看到过很多次人们被这个领域的研究所诱惑。他们只不过第一次尝试深度强化学习,并且刚好没遇到问题,于是就低估了深度RL的难度。如果不经历失败,他们不会知道这到底有多难。深度RL会持续不断地打击他们,直到他们学会如何设定符合现实的研究期望。


这不是任何人的错,而是一个系统性问题。如果结果是好的,自然什么都好说,但如果结果不太好,还想写出同样精彩的故事就没那么简单了。问题是,负面的结果才是研究人员最经常遇到的。在某些方面,负面案例其实比正面案例更重要。


在后面的内容中,我将解释为什么深度RL没有起到作用,什么情况下它能起到作用,以及它如何在未来变得更可靠。我并不是为了让人们停止研究深度RL才写这篇文章。我这样做是因为我相信如果大家一起找到问题所在,就更容易在这些问题上取得进展。如果大家聚在一起讨论这些问题,而不是每个人自己一次又一次地掉进同样的坑里,就能更容易取得一致的意见。


我希望看到深度RL研究有更好的发展,有更多的人进入这个领域。但我也希望人们了解他们即将要面临的到底是什么。


在本文中,“强化学习”和“深度强化学习”相互替代使用。我批判的是深度强化学习的经验主义行为,并不是批判强化学习整体。我引用的论文通常用深度神经网络作为agent。虽然经验批判主义可能适用于线性RL或tabular RL,但我不确定它们是否能推广到更小的问题。在巨大、复杂、高维的环境下,良好的函数逼近是十分必要的,RL在这种环境下的良好应用前景推动了对深度RL的炒作。这种炒作是目前需要解决的问题之一。


这篇文章的走向是从悲观到乐观,虽然文章很长,但是如果你耐心阅读,我相信你一定会有所收获。


下面首先介绍深度RL的失败案例。


深度强化学习的样本效率可能极低


深度强化学习最经典的实验基准是Atari游戏。在著名的深度Q网络(Deep Q-Networks)论文中,如果你将Q学习、大小合适的神经网络和一些优化技巧结合,就可以让网络在一些Atari游戏中达到甚至超越人类水平。


Atari游戏的运行速度是每秒60帧,你能估算出最先进的DQN想要达到人类的水平,需要多少帧吗?


这个问题的答案取决于游戏的种类,我们来看看Deepmind最近的一篇论文,Rainbow DQN (Hessel et al, 2017)。这篇论文用模型简化法研究了对于原始DQN结构的几种改进,证明了将所有的改进结合起来可以达到最好的结果。在57种Atari游戏测试中,该模型在40种游戏中超过了人类的表现。下图展示了实验结果。



Y轴是“人类标准化分数中值”,是通过训练57个DQN (每一个Atari游戏训练一个模型),并以人类表现为100%,对agent的表现进行标准化得到的。以此为基础绘制了57场游戏表现的中位数。在1800万帧时,RainbowDQN的表现超过了100%的阈值。这相当于大约83小时的游戏体验,再加上训练模型所需的时间,而大多数人玩通一个Atari游戏只需要几分钟。


请注意,1800万帧其实已经很少了,考虑到之前的方法(Distributional DQN, Bellemare et al, 2017)需要7000万帧才能达到与人类相当的水平,是RainbowDQN所需时间的4倍。至于(Nature DQN,Mnih et al, 2015),它永远无法达到100%的性能,即使经过2亿帧之后。


规划谬误论认为完成某件事花费的时间通常比你想象的要长。强化学习有它自己的规划谬误——学习一个policy(策略)需要的样本通常比你以为的更多。


这个问题不只在Atari游戏中出现。第二常见的基准实验是MuJoCo,是设置在MuJoCo物理模拟器中的一组任务。在这些任务中,输入状态通常是一些模拟机器人每个关节的位置和速度。即使不用解决视觉问题,学习这些基准也需要10^5到10^7个步骤。对于这样一个简单的环境,这一数字可以说是很大的经验量了。


DeepMind的跑酷论文(Heess et al, 2017),用64个机器训练了超过100个小时来学习policy。论文中没有说明“机器”是什么,但我认为应该是指1个CPU。


视频1:https://v.qq.com/x/page/b0566s976mm.html


论文结果很酷。刚看到这篇论文时,我没想到深度RL竟然可以学习这些奔跑的步态。


不过与此同时,需要6400个CPU时的事实让人有点沮丧。并不是因为我没想到它需要这么多的时间,而是深度RL仍然比实际应用级别的样本效率低了几个数量级。


这里有一个明显的对比:如果我们直接忽略样本效率呢?有几种情况很容易获取经验,比如游戏。但是,在这一点不成立的情况下,RL面临着一场艰苦的战斗,而且不幸的是,现实世界中的大多数情况就属于这类。


如果你只关心最终的性能,许多问题更适合用其他方法解决


在寻找任何研究问题的解决方案时,通常会在不同的目标之间进行权衡。优化的目标可以是一个真正好的解决方案,也可以是良好的研究贡献。最好的情况是获得一个好的解决方案的同时需要做出好的研究贡献,但是很难找到符合这个标准并且可行的问题。


如果纯粹为了获得好的表现,深度RL的记录可能就没那么光鲜了,因为它总是被其他方法打败。这是一个MuJoCo机器人的视频,用在线轨迹优化(online trajectory optimization)控制。正确的动作是在近乎实时、在线,而且没有离线训练的情况下计算的。而且它运行在2012年的硬件上(Tassa et al, IROS 2012)


视频2:https://v.qq.com/x/page/c0566e0m0vp.html


我认为这篇论文可以和那篇跑酷论文相提并论。那么两者之间的区别在哪里呢?


区别在于,Tassa等人利用模型预测控制,可以用真实世界模型(物理模型)来进行规划。而无模型的RL不进行这样的规划,因此难度更大。另一方面,如果对模型进行规划有所助益,那为什么要把问题复杂化,去训练一个RL策略呢?


同理,用现成的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)就可以很容易地超越DQN在Atari游戏中的表现。下面是Guo et al, NIPS 2014论文中给出的基准数字。他们把一个训练好的DQN的分数和UCT agent(UCT就是我们现在使用的标准MCTS)的分数做对比。




这并不是一个公平的对比,因为DQN没有搜索步骤,而MCTS能够用真实模型(Atari模拟器)进行搜索。然而有时候人们不在乎对比是否公平,人们只在乎它的有效性。如果你对UCT的全面评估感兴趣,可以看看原始的 (Arcade Learning Environment,Bellemare et al, JAIR 2013)论文附录。


强化学习理论上可以用于任何事物,包括模型未知的环境。然而,这种普遍性是有代价的:算法很难利用特定信息来帮助学习,这迫使人们使用多到吓人的样本来学习本来通过硬编码就可以得到的规律。


无数经验表明,除了极少数情况,特定域的算法均比强化学习的表现更快更好。如果你只是为了深度RL而研究深度RL,这不成问题,但是每当我把RL与其他任何方法进行对比时,都会觉得十分沮丧,无一例外。我非常喜欢AlphaGo的原因之一就是因为它代表了深度RL的一次毋庸置疑的胜利,而这样的胜利并不常见。


这一点让我越来越难给外行解释为什么我研究的问题又酷又难又有趣,因为他们往往没有背景或经验来理解为什么这些问题这么难。人们所认为的深度RL能做什么,和它真正能做什么之间横亘着一个巨大的“解释鸿沟”。我现在研究的是机器人。当你提到机器人时,大多数人们想到的公司是波士顿动力(Boston Dynamics)


视频3:https://v.qq.com/x/page/t05665fb4lk.html


他们可不使用强化学习。如果你看看该公司的论文,你会发现论文的关键字是时变LQR,QP求解以及凸优化。换句话说,他们主要用的还是经典的机器人技术,而实际结果证明,只要用对了这些经典技术,它们就可以很好地发挥作用。


强化学习通常需要奖励函数


强化学习一般假定存在奖励函数。通常是直接给定的,或者是离线手动调整,然后在学习过程中不断修正。我说“通常”是因为也有例外,例如模仿学习或逆RL,但大多数RL方法把奖励函数奉为神谕。


更重要的是,想让RL做正确的事,奖励函数必须知道到底你想要什么。RL有过拟合奖励函数的倾向,会导致意想不到的结果。这就是为什么Atari游戏是一个很好的基准。不仅是因为很容易从中获得大量的样本,而且是因为每场比赛的目标都是尽可能地得分,所以永远不用担心该如何定义奖励函数,而且每个系统都用相同的奖励函数。


这也是MuJoCo任务很受欢迎的原因。因为它们在模拟器中运行,所以你清楚地知道所有的对象状态(state),这使得奖励函数的设计容易许多。


在Reacher任务中,需要控制一个连接到中心点的两段臂,任务目标是移动手臂到指定位置。下面是一个成功学习出策略的视频。


视频4:https://v.qq.com/x/page/z0566wbrs89.html


因为所有的位置都是已知的,所以奖励函数可以定义为从手臂末端到目标的距离,再加上一个小的控制损失。理论上来说,在现实世界中,如果你有足够的传感器来获取环境中精确的位置,你也可以这样做。


就其本身而言,需要奖励函数不算什么,除非……


奖励函数设计难


增加一个奖励函数并不难。困难的是如何设计一个奖励函数,让它能鼓励你想要的行为,同时仍然是可学习的。


在HalfCheetah环境中,有一个双足机器人被限制在一个垂直平面内,只能向前跑或向后跑。


视频5:https://v.qq.com/x/page/y05669lu3sf.html


任务目标是学习跑步的步态。奖励函数是HalfCheetah的速度。


这是一个计划奖励函数(shaped reward),也就是说在状态(state)离目标(goal)越来越近时,它增加奖励。另一种是稀疏奖励(sparse reward),即达到目标状态才给予奖励,而其他状态都没有奖励。计划奖励往往更容易学习,因为即使策略没有找到问题的完整解决方案,系统也会提供正反馈。


不幸的是,计划奖励可能会影响学习,导致最终的行为与你想要的结果不匹配。一个很好的例子就是赛龙舟游戏(详情参考OpenAI博客),预定的目标是完成比赛。可以想象,在给定的时间内完成比赛,稀疏奖励函数会+1奖励,而其他情况都是0奖励。


但游戏给出的奖励是只要到达关卡点就会加分,并且收集道具也会加分,而且收集道具给的分数比完成比赛得到的还多。在这样的奖励函数下,RL系统的agent即使没有完成比赛,也能拿到最高得分。因此也导致了许多意想不到的行为,例如agent会撞毁船、着火、甚至走反方向,但它获得的分数比单纯完成游戏还要高。


视频6:https://v.qq.com/x/page/f05666di8ke.html


RL算法是一个连续统一体,他们可以或多或少地了解他们所处的环境。最常见的无模型强化学习(model-free RL),几乎与黑盒优化相同。这些方法只有在MDP(马尔科夫决策过程)中才能求解出最优策略。agent只知道哪个给了+ 1奖励,哪一个没有,剩下的都需要自己学习。和黑盒优化一样,问题在于对agent来说,任何给予+1奖励的都是好的,即使+1的奖励不是因为正确的理由而得到的。


一个经典的非RL例子是应用遗传算法设计电路的时候,得到的电路中出现了一个无连接的逻辑门。



所有的灰色单元都要有正确的行为,包括左上角的,即使它没有跟任何单元连接起来。(来自“An Evolved Circuit, Intrinsic in Silicon, Entwined with Physics”)


更多的例子可以参考Salesforce 2017年的博客,它们的目标是文本总结。它们的基准模型用监督学习训练,然后用自动度量方法ROUGE对总结效果进行评估。ROUGE是不可微的,但是RL可以解决不可微的奖励,所以他们尝试直接用RL来优化ROUGE。得到了很高的ROUGE分数,但是实际效果并不是很好。下面是一个例子:

Button was denied his 100th race for McLaren after an ERS prevented him from making it to the start-line. It capped a miserable weekend for the Briton. Button has out-qualified. Finished ahead of Nico Rosberg at Bahrain. Lewis Hamilton has. In 11 races. . The race. To lead 2,000 laps. . In. . . And.

所以尽管RL模型得到了最高的ROUGE评分:



他们最后还是用了另外一个模型。


还有另一个有趣的例子:Popov et al, 2017的论文,也被称为“乐高积木论文”。作者用分布式DDPG来学习抓握策略,目标是抓住红色块,并把它堆在蓝色块的上面。


他们完成了这个任务,但中途遇到了一个彻底失败的案例。他们对于初始的抬升动作,根据红块的高度给出奖励,奖励函数由红块底面的z轴坐标定义。其中一种失败模式是,策略学习到的行为是把红块倒转过来,而不是捡起来。


视频7:https://v.qq.com/x/page/r0566y150ya.html


显然这并不是研究人员预期的解决方案,但是RL才不在乎。从强化学习的角度来看,它因为翻转一个块而得到奖励,所以它就会将翻转进行到底。


解决这个问题的一种方法是给予稀疏奖励,只有机器人把这个块堆叠起来后才给予奖励。有时候这样能行得通,因为稀疏奖励是可学习的。但通常情况下却是没用的,因为缺乏正向强化反而会把所有事情复杂化。


解决这个问题的另一种方法是仔细地调整奖励函数,添加新的奖励条件,调整现有的奖励系数,直到你想学习的行为在RL算法中出现。这种方法有可能使RL研究取得胜利,但却是一次非常没有成就感的战斗,我从来没觉得从中学到过什么。


下面给出了“乐高积木”论文的奖励函数之一。



我不知道他们到底花了多少时间来设计这个奖励函数,但是根据术语的数量和不同系数的数量,我猜是“相当多”。


在与其他RL研究人员的交流中,我听到了一些趣闻,是由于奖励函数定义不当而造成的新奇行为。

有位同事正在教一个agent通过一个房间。如果agent离开边界,这一事件就终止了。他没有对事件的这种结束方式加任何惩罚。结果最后学到的policy是自我毁灭式的,因为消极的奖励太丰富了,而积极的奖励很难获取,在agent看来,快速死亡以0奖励结束,比长时间活动可能造成负奖励更可取。


一位朋友正在训练一个模拟机械手臂伸到桌子上方的某个点。这个点是根据桌子定义的,而桌子没有固定在任何东西上。agent学会了重重地拍桌子,使桌子翻倒,这样一来它也算移动到目标点了。而目标点正好落到了机械臂的末端。


一位研究人员在使用RL训练模拟机器手臂拿起锤子并把钉子钉进去。最初,奖励定义为钉子被钉到洞里的深度。结果,机器人没有拿起锤子,而是用自己的四肢把钉子钉进去了。于是研究人员增加了奖励项,鼓励机器人拿起锤子,然后重新训练策略。虽然他们得到了拿起锤子的策略,但是机器人只是把锤子扔在了钉子上而不是使用锤子。

诚然,这些都是“听别人说的”,但是这些行为听起来都很可信。我已经在RL的实验中失败了太多次,所以我不会再怀疑这一点。


我知道有人喜欢用回形针优化器的故事来危言耸听。他们总喜欢猜测一些特别失调的AGI来编造这样的故事。现在每天都有很多真实发生的失败案例,我们没有理由去凭空想象那样的故事。


即使奖励函数设计得很好,也很难避免局部最优解


前文给出的RL例子有时被称为“奖励作弊”。正常情况下,AI会通过正常的手段最大化奖励函数。然而,有些情况下,AI可以通过作弊的手段,直接把奖励函数调到最大值。有时一个聪明的、现成的解决方案比奖励函数设计者所预期的答案能得到更多的奖励。


奖励作弊是一个例外,更常见的情况是由于探索-利用权衡不当而导致的局部最优解。


下面是一个归一化优势函数的实现视频,在HalfCheetah环境中学习。


视频8:https://v.qq.com/x/page/g05663mtu9m.html


在局外人看来,这个机器人太蠢了。但是这是因为我们站在第三方的视角,而且我们知道用脚跑步要好得多。但是RL并不知道啊!它收到状态(state),然后做出行动(action),然后知道它得到了正向奖励,就是这样。


我猜测学习过程发生了以下几件事:

  • 在随机探索阶段,策略发现向前倒比静止站着要好。

  • 于是策略记住了这个动作,然后持续向前倒。

  • 向前倒之后,策略了解到,如果一次性施加很大的力,它会做一个后空翻,并且得到奖励。

  • 于是它试了一下后空翻,很自信这是一个好主意,然后策略牢牢记住了要多做后空翻。

  • 当策略连续后空翻时,哪种方法对策略来说更简单呢?学习纠正自己然后按“标准方法”跑还是学会躺着跑呢?我想应该是第二种更简单吧。

下面是另外一个失败示例,来自Reacher项目:


视频9:https://v.qq.com/x/page/c0567xfoplp.html


在这个过程中,初始随机权重倾向于输出高度正或高度负的动作输出。这使得大多数动作尽可能输出最大或最小加速度。超高速旋转非常容易:只需要每个关节输出高强度的力。一旦机器人开始行走,就很难以一种有意义的方式脱离这一策略——想要脱离这个策略,必须采取几个探索步骤来阻止混乱的旋转。这当然是可能的,但在这次试验中并没有发生。


这些都是一直以来困扰强化学习的经典的探索-利用问题。由于数据来自于当前的策略,如果当前的策略探索太多,得到的是垃圾数据,那就什么也学不到;如果利用太多,智能体也无法学到最优行为。


有几个不错的想法可以解决这个问题——内在动机、好奇心驱动探索、基于计数的探索等等。这些方法中有许多是在80年代或更早的时候提出的,其中有几个在深度学习模型中重新得到应用。然而,据我所知,没有一个方法能在所有环境中持续奏效,他们总是有时有用,有时没用。如果有一个到处都能奏效的探索技巧,那就太好了,但我认为这种万能技术在很长一段时间内都不能实现。不是因为人们没有尝试,而是因为探索-利用困境真的太难了。


引用维基百科的一段话:

“最初二战中盟军的科学家认为,这个问题太棘手了,应该丢给德国,让德国科学家也浪费自己的时间。”(参考: Q-Learning for Bandit Problems, Duff 1995)

我将深度RL想象成一个恶魔,故意曲解你的奖励函数,然后积极寻找最懒的可行局部最优解。


当深度RL有效时,它可能过拟合环境中奇怪的模式


“深度RL广受欢迎的原因是它是机器学习中唯一允许在测试集上进行训练的研究领域”


强化学习的好处是:如果你想在一个环境中表现很好,可以随意的过拟合。缺点是,如果你想推广到其他环境中,可能表现会很差。


DQN可以解决很多雅达利(Atari)游戏,但它是通过对单一目标进行集中学习来完成这项任务的——它只在某一个游戏的表现很好。但最后学习到的模式无法推广到其他游戏,因为它没有经过这种训练。你可以通过微调训练好的DQN,让它去玩新的雅达利游戏(Progressive Neural Networks,Rusu et al, 2016),但也不能保证它能够迁移,而且人们通常不期望它能迁移。


原则上在各种各样的环境下进行训练应该能使这些问题消失。在某些情况下,可以轻易得到这样的环境。例如导航,可以在环境中随机采样目标位置,并使用通用值函数来泛化(Universal Value Function Approximators, Schaul et al, ICML 2015)。这是一项很有前途的研究,然而我不认为深度RL的泛化能力足以处理不同的任务。OpenAI Universe 试图用分布式来解决这个任务,但据我所知,目前他们也没有太多进展。


除非RL系统达到了那样的泛化能力,否则agent所学习到的策略应用范围会一直受限。举一个例子, 想一想这篇论文:Can Deep RL Solve Erdos-Selfridge-Spencer Games? Raghu et al, 2017。我们研究了一个双玩家组合游戏,玩家的最佳发挥有封闭形式的解析解。在第一个实验中,我们固定了玩家1的行为,然后用RL训练了玩家2。这样可以将玩家1的行为视为环境的一部分。在玩家1的表现最优时训练玩家2,我们发现RL可以达到高性能。但是当我们针对非最佳玩家1部署相同的策略时,它的性能下降了,因为它不能泛化到非最佳对手的情况。


Lanctot et al, NIPS 2017中给出了类似的结果。有两个agent在玩激光枪战。这两个agent采用多智能体强化学习进行训练。为了测试泛化能力,他们用5个随机种子进行训练。下面是互相训练的agent的视频。


视频10:https://v.qq.com/x/page/v0566atdjan.html


可以看到,他们学会了朝对方走并且射击对方。然后他们从一个实验中取出玩家1,从另一个实验中取出玩家2,让他们互相对抗。如果学习到的策略可以泛化,应该能看到与之前类似的行为。


但是并没有。


视频11:https://v.qq.com/x/page/k0566kwyemx.html


这似乎是多智能体RL的主题。当agent相互训练时,会产生一种协同进化。agent变得特别擅长攻击对方,但当他们对付一个之前没有遇到过的玩家时,表现就会下降。需要指出的是,这些视频之间唯一的区别是随机种子。它们都有同样的学习算法,相同的超参数,但是发散行为完全来自于初始条件下的随机性。


话虽如此,竞争性自我游戏环境产生了一些很好的结果,似乎跟这一点互相矛盾。OpenAI有一篇文章介绍了他们在该领域的工作。自我竞争也是AlphaGo和AlphaZero算法的重要组成部分。我认为,如果agent以同样的速度学习,他们可以不断地挑战对方,加快彼此的学习,但是如果其中一个学得更快,它会过度利用较弱的选手,导致过拟合。当你将环境从对称的自我竞争放松到一般的多智能体时,更难确保学习能以同样的速度进行。


即使忽略泛化问题,最终结果也可能不稳定而且难复现


几乎每一个ML算法都有超参数,它们会影响学习系统的行为。通常,超参数都是人工挑选的,或者是随机搜索得到的。


监督学习是稳定的,有固定的数据集和真实值目标。如果你稍微改变超参数,算法的表现不会改变很多。并不是所有的超参数都表现良好,但有了过去几年发现的所有经验技巧,许多超参数在训练中可以进行优化。这些优化方向是非常重要的。


目前,深度RL是不稳定的,是一项十分麻烦的研究。


当我开始在Google Brain工作的时候,我做的第一件事就是从标准化优势函数(NAF)论文中实现这个算法。我想大概只需要2-3个星期。我熟悉Theano(可以很好地迁移到tensorflow),有一些深度RL经验,而且NAF论文的第一作者正在Google Brain实习,所以我有问题可以直接请教他。


然而由于一些软件错误,复现结果花了6个星期。问题在于,为什么花了这么久才找到这些错误?


要回答这个问题,我们首先可以看看OpenAI GYM的最简单的连续控制的任务:摆任务。在这个任务中,有一个摆,固定在一个点上,重力作用在钟摆上。输入状态是三维的。动作空间是一维的,即施加扭矩的量。我们的目标是完美地平衡摆锤,让其垂直向上。


这是一个小问题,好的奖励函数让它变得更容易。奖励是用钟摆的角度来定义的。将钟摆向垂直方向摆动的动作不仅给予奖励,还增加奖励。奖励空间基本上是凹的。


下面是一个基本有效的策略的视频。虽然该策略没有直接平衡到垂直位置,但它输出了抵消重力所需的精确扭矩。


视频12:https://v.qq.com/x/page/f05672h888w.html


这是表现性能曲线,在我改正所有的错误之后。每一条曲线都是10次独立运行中的1次奖励曲线。相同的超参数,唯一不同的是随机种子。



10次实验中有7次运行成功,3次失败,30%的失败率。下面是其他已发表工作中的曲线图, Variational Information Maximizing Exploration,Houthooft et al, NIPS 2016。环境是HalfCheetah。我们将奖励函数修改的更稀疏了一些,但这些细节并不太重要。Y轴是每一段的奖励,X轴是时间间隔,使用的算法是TRPO。



较深的曲线是10个随机种子表现性能的中值,阴影区域是第25到第75个百分点。这个曲线是支持论文算法的一个很好的论据。但另一方面,第25百分点离0奖励十分接近。这意味着大约25%的实验是失败的,只是因为随机种子。


监督学习也会有变化,但变化不会这么大。如果有监督学习的代码运行结果有30%低于随机结果,我会很自信肯定是数据加载或训练过程哪里出错了。如果我的强化学习代码比不过随机结果,我不知道是有地方出错了,还是超参数不对,或者我只是运气不好。



这张照片来自《Why is Machine Learning “Hard”?(为什么机器学习这么“难”?)》。核心论点是机器学习给失败情况空间增加了更多维度,从而成倍地增加了导致失败的原因。深度RL又在此基础上增加了一个新维度:随机性。你唯一能解决随机问题的方法是通过在这个问题上投入足够的实验来抵消噪音。

                                                         

当你的训练算法样本效率低下且不稳定时,它会严重降低你的研究速度。也许只需要100万步。但是当你给这个数字乘上5个随机种子,再乘上超参数调整,你需要不计其数的计算才能验证所提假设的有效性。


或许这些能让你觉得好受些:我研究手头的工作已经好一段时间了,我花了6个星期的时间,让一个从头开始的策略梯度在一系列RL问题上获得了50%的成功率。我有一个GPU集群供我使用,还有一些每天一起吃午饭的朋友可以一起交流,他们在该领域已经工作了几年了。


另外,我们从监督学习中学到的CNN设计似乎不适用于强化学习,因为强化学习的瓶颈在于信用分配或监管比特率,而不是表示能力不足。ResNet、batchnorm,或者是很深的神经网络在这里都无法发挥作用。


[监督学习]是主动想要发挥作用的。即使你搞砸了,你也会得到一些非随机的反馈。RL是必须被迫发挥作用的。如果你搞砸了什么,或者调整得不够好,你极有可能得到比随机情况更糟糕的策略。即使一切都很好,也有30%的可能得到一个很差的策略,没什么理由。


长话短说,你的失败更多是由于深度RL太难了,而不是因为“设计神经网络”的困难。


——Andrej Karpathy在Hacker News上发表的博客

随机种子的不稳定性就像是煤矿中的金丝雀。如果纯粹的随机性足以导致每次实验结果之间如此大的差异,那么可以想象代码中实际的差异该有多大。


不过我们不需要去想这个问题,因为 Deep Reinforcement Learning That Matters, Henderson et al, AAAI 2018)这篇论文已经给出了结论:


  • 给奖励函数乘以一个常数可以导致表现性能出现巨大的偏差。

  • 5个随机种子可能不足以证明结果的显著性,因为通过仔细的选择,你可以得到不重叠的置信区间。

  • 相同算法的不同实现对同一任务有不同的表现,即使是使用相同的超参数。


我的理论是,RL对初始化和训练过程的动态非常敏感,因为数据都是在线收集的,而唯一的监督是一个标量奖励。一个在好的训练样例上得到的策略会比一个没有好的训练样例的策略能更快地引导自己。一个不能及时发现好的训练样例的策略会崩溃,什么也学不到,因为它相信它尝试的任何方向都会失败。


那么RL已经成功做到的事呢?


深度强化学习确实做了一些非常酷的事情。DQN虽然是旧新闻,但当时绝对轰动。单个模型能够直接从原始像素中学习,而不需要对每个游戏单独进行调优。而且AlphaGo和AlphaZero也是非常令人印象深刻的成就。


然而,在这些成功之外,很难找到深度RL在真实世界创造实际价值的案例。


我试图思考深度RL在现实世界的用途,却发现非常困难。我想在推荐系统中找到些东西,但那些算法仍然以协同过滤(collaborative filtering)和上下文赌博机(contextual bandits)为主。


到最后,我能找到的最好的是两个谷歌项目: 降低数据中心能耗,以及最近发布的 AutoML Vision。


我知道奥迪正在做一些深度RL相关的项目,他们在NIPS上展示了自动驾驶的RC汽车,声称使用了深度RL。我知道有一些很棒的工作,优化大型Tensorflow图的设备放置(Mirhoseini et al, ICML 2017);Salesforce的文本摘要模型。融资公司肯定在用RL做实验,但目前还没有确切的证据。Facebook已经在聊天机器人中用深度RL完成了一些很棒的工作。每个互联网公司应该都想过在广告服务模型中加入RL,但是出于商业保密,我们并不知情。


在我看来,或许深度RL是一个不够强大,不能广泛应用的研究课题,也可能它是可用的,只是应用了它的人没有公开。我认为前者更有可能。


如果你问我图像分类的问题,我会告诉你预训练的 ImageNet模型。对于图像分类问题,我们处在一个连电视剧《硅谷》的制作团队都能开发出识别热狗的软件的世界。但在深度RL领域几乎是不可能发生同样的事情。


鉴于目前的限制,什么时候深度RL能有作用?


首先,真的很难说。想用RL解决所有事情,等同于试图用同样的方法来解决非常不同的环境下的问题。它不能一直起作用才应该是正常的。


话虽如此,我们可以从目前强化学习成功的项目列表中得出结论。这些项目中,深度RL或是学习了一些质量极优的行为,或是学习到了比以前更好的行为。


这是我目前的列表:


  • 在前面的章节中提到的项目:DQN,AlphaGo,AlphaZero,跑酷机器人,减少能耗中心使用,以及利用神经架构搜索技术(Neural Architecture Search)的AutoML。


  • OpenAI的Dota2 1v1影魔( Shadow Fiend)机器人,在一个简单的对战设置中打败了顶级职业选手。


  • 任天堂明星大乱斗(Super Smash Brothers Melee)机器人,在1v1的Falcon ditto游戏中打败了职业选手。(Firoiu et al, 2017)


  • 机器学习最近在玩法不限注德州扑克中击败了职业玩家。Libratus(Brown et al, IJCAI 201) 和 DeepStack(Moravčík et al, 2017)都做到了这一点。有些人认为这是用深度RL完成的。但这两篇论文都不是,他们用的是虚拟遗憾最小化(counterfactual regret minimization)和迭代求解子博弈的方法。


从这个列表中,我们可以看出使学习更容易的一般属性。下面的属性都不是学习必需的,但是满足的特性越多绝对是越好的:


  • 很容易产生近乎无限量的经验。为什么这一点有用应该是很清楚的。拥有的数据越多,学习问题就越容易。这适用于Atari游戏,围棋、象棋、将棋,以及跑酷机器人的模拟环境。它似乎也适用于能耗中心的项目,因为在以前的工作中(Gao, 2014),结果表明神经网络预测能源效率的准确度很高。这正是你训练RL系统想要的模拟模型。


  • 问题可以简化成更简单的形式。 我在深度RL看到的常见错误是想法太大。强化学习可以做任何事情!这并不意味着你必须同时完成每件事。


OpenAI的Dota2机器人只玩了初级游戏,只在1V1对线设置中玩了影魔对影魔,使用硬编码的项目结构,并且调用了Dota2 API 来避免解决感知问题。SSBM机器人达到了超人的表现,但它只是在1v1比赛中,与Captain Falcon在Battlefield上,而且不限时。


这不是在讽刺这些机器人。如果你连一个简单的问题都不知道是否能解决,为什么还要研究一个困难的问题呢?所有研究的趋势都是先演示最小的概念证明,然后再推广它。OpenAI在扩展他们的Dota2的研究工作,也在将SSBM机器人扩展到其他角色。


  • 有一个方法可以将自我博弈引入学习过程。这是AlphaGo,AlphaZero,Dota2影魔机器人,以及SSBM Falcon机器人的一个组成部分。自我博弈,指的是比赛有竞争性,两个玩家都可以由同一个agent控制。到目前为止,这种设置似乎是最稳定且表现良好的。


  • 有一种简单的方式来定义一个可学习的、不可竞争的奖励。 两个玩家的游戏设置这样的奖励:赢的+ 1,输的-1。最初的神经架构搜索论文( Zoph et al, ICLR 2017)使用了这个方法验证训练模型的精度。任何时候你引入计划奖励,你都会引入学习出优化错误目标的非最佳策略的可能。


如果你想进一步了解如何设计一个好的奖励函数,可以搜索“合适的评分规则(proper scoring rule)”。Terrence Tao的博客中介绍了一个可行的例子。


而对于可学习性,除了多次尝试看看是否有效,我没有别的建议。


如果需要定义奖励,至少应该形式丰富。在Dota2中,最后的补刀(杀死小怪时触发),以及治愈(每次攻击或杀死目标后出发)会有奖励。这些奖励信号频率很高。对于SSBM机器人,造成伤害时会给予奖励,每次成功的攻击都会给出信号。行动与结果之间的延迟越短,反馈环形成越快,强化学习就越容易找到高回报的途径。


案例研究:神经架构搜索(Neural Architecture Search,NAS)


我们可以结合一些原理来分析神经架构搜索的成功。从最初ICLR 2017版,在12800个样例后,深度RL能够设计先进的神经网络结构。诚然,每个样例都需要训练一个收敛的神经网络,但这仍然是非常有效的。


如上所述,奖励是验证准确性。这是一个非常丰富的奖励信号——即使一个神经网络设计的结果只将精度从70%增加到到71%,RL仍然会考虑这一点。此外,有证据表明,深度学习的超参数接近线性无关。(这是基于经验得出的结论,见 Hyperparameter Optimization: A Spectral Approach (Hazan et al, 2017))NAS不完全是调整超参数,但我认为神经网络设计决策与调整超参数类似。这对学习来说是个好消息,因为决策和性能之间的相关性很强。最后,奖励不仅很丰富,它也体现了我们训练模型时关心的是什么。


这些点的结合让我明白了为什么它“只”需要大约12800个训练好的网络来学习更好的网络,而在其他环境中需要数以百万计的样例。这个问题的许多方面都对RL有利。


简而言之:深度RL目前还不能即插即用。


未来发展


有一句老话——每个研究者都在学习如何讨厌他们的研究领域。尽管如此,研究人员还是会继续努力,因为他们太喜欢这些问题了。


这也是我对深度强化学习的大致感受。尽管我有保留意见,但我认为人们应该用RL去尝试不同的问题,包括那些可能行不通的问题。否则我们还有其他办法让RL变得更好吗?


我觉得深度RL的有效性只是时间问题。当深度RL足够鲁棒,能更广泛的使用时,它能做到非常有趣的事情。问题在于它该如何走到那一步。


下面我介绍了一些我认为的未来发展趋势。未来依然基于进一步的研究,因此我提供了这些研究领域相关论文的引用。


局部最优已经足够好: 认为人类在任何事情上都已经做到最好了是很傲慢的想法。我认为与其他任何物种相比,我们仅仅刚好到步入了文明阶段。同样,只要RL解决方案的局部最优解优于人类基准,它不必达到全局最优解。


硬件解决一切: 我知道有些人认为最能影响人工智能的事情就是提升硬件。就我个人而言,我对于硬件能解决一切问题的观点持怀疑态度,但这一点肯定是很重要的。运行的速度越快,对样本效率的担心就越少,越容易对探索问题暴力解决。


添加更多的学习信号: 稀疏奖励很难学习,因为得到的信息太少了。也许我们可以变换积极奖励(Hindsight Experience Replay, Andrychowicz et al, NIPS 2017),定义辅助任务(UNREAL, Jaderberg et al, NIPS 2016),或用自我监督学习引导构建良好的真实世界模型。


基于模型的学习提升样本效率: 我是这样描述基于模型的RL的:“每个人都想做,但很多人不知道。”原则上,一个好的模型能修正许多问题。就像AlphaGo一样,一个好模型让它更容易学习出解决方案。好的模型能迁移到新的任务,基于模型的方法也能使用较少的样本。


问题在于学习一个好的模型很难。我认为低维状态模型有时有效,图像模型通常太难。但是,如果这一点变得容易了,就能产生一些有趣的事情。


Dyna (Sutton, 1991)和Dyna-2 (Silver et al., ICML 2008) 是这个领域的经典论文。对于将基于模型学习和深度网络结合起来的研究领域,我推荐几篇Berkeley机器人实验室最近发表的几篇论文: Neural Network Dynamics for Model-Based Deep RL with Model-Free Fine-Tuning (Nagabandi et al, 2017),Self-Supervised Visual Planning with Temporal Skip Connections(Ebert et al,CoRL 2017)。Combining Model-Based and Model-Free Updates for Trajectory-Centric Reinforcement Learning (Chebotar et al, ICML 2017)。 Deep Spatial Autoencoders for Visuomotor Learning (Finn et al, ICRA 2016),以及Guided Policy Search (Levine et al, JMLR 2016)。


用强化学习进行调优:第一篇AlphaGo论文就是采用监督学习,然后在其基础上用RL进行微调。这是一个很好的方法,因为它使用一个更快但不那么强大的方法来加快初始学习。该方法在其他环境下也有效,例如Sequence Tutor(Jaques et al, ICML 2017)。可以将其视作以一个合理的先验条件作为RL过程的开始,而不是用一个随机的条件,或者用其他方法来解决学习先验条件的问题。


可学习的奖励函数:ML的前景在于我们可以用数据来学习比人类的设计更好的东西。如果奖励函数的设计这么难,为什么不用ML来学习更好奖励函数呢?模仿学习和逆向增强学习都显示了奖励函数可以用人为演示和人为评分来隐式定义。


逆RL和模仿学习领域的优秀论文:Algorithms for Inverse Reinforcement Learning (Ng and Russell, ICML 2000), Apprenticeship Learning via Inverse Reinforcement Learning (Abbeel and Ng, ICML 2004), 以及DAgger (Ross, Gordon, and Bagnell, AISTATS 2011)


最近也有一些工作将这种想法推广到深度学习:Guided Cost Learning (Finn et al, ICML 2016), Time-Constrastive Networks (Sermanet et al, 2017), 和 Learning From Human Preferences (Christiano et al, NIPS 2017)(Human Preferences论文尤其证明从人为评分中学习到的奖励函数比客观定义的奖励函数更适合于学习。)


对于不使用深度学习的长期研究,我推荐阅读:Inverse Reward Design (Hadfield-Menell et al, NIPS 2017) 和 Learning Robot Objectives from Physical Human Interaction (Bajcsy et al, CoRL 2017)。


迁移学习拯救一切: 迁移学习的前景在于你可以利用从以前的任务中学到的知识来加速学习新知识。我认为这绝对是未来的发展趋势,任务学习足够强大,可以解决几个不同的任务。如果根本就没有学习,也无法进行迁移学习,而且给定任务A和B,很难预测A是否可以迁移到B。


该领域推荐阅读的论文:Universal Value Function Approximators (Schaul et al, ICML 2015), Distral (Whye Teh et al, NIPS 2017), 和 Overcoming Catastrophic Forgetting (Kirkpatrick et al, PNAS 2017)。之前的工作可以阅读Horde (Sutton et al, AAMAS 2011)。


机器人在sim-real迁移(模拟任务和真实任务之间的迁移学习)中取得了很大的进步。推荐阅读论文:Domain Randomization (Tobin et al, IROS 2017), Sim-to-Real Robot Learning with Progressive Nets (Rusu et al, CoRL 2017), 和GraspGAN (Bousmalis et al, 2017)


好的先验条件可以减少学习时间: 这一点和之前的几点之间有紧密联系。有一种观点认为,迁移学习是利用过去的经验为其他任务学习建立一个良好的先验。RL算法的设计适用于任何马尔可夫决策过程。如果我们承认,我们的解决方案只在很小一部分环境中表现较好,我们应该能够以一种有效的方式利用共享结构来解决这些环境中的问题。


Pieter Abbeel在演讲中喜欢提到的一点是,深度RL只需要解决我们希望在现实世界中需要解决的任务。应该有一种现实世界的先验,能够让我们快速学习新任务,代价是非现实任务中较慢的学习成本,但这是非常值得的。


困难在于,这样的真实世界先验是很难设计出来的,但依然是可能的。我对元学习(meta learning)最近的工作很有兴趣,因为它提供了数据驱动的方法来生成合理的先验条件。例如,如果我想用RL设计仓库导航,我会用元学习来学习一个好的导航先验,然后根据特定仓库机器人的要求对先验进行调优。


最近这方面的研究工作可以在BAIR的博客中找到。


更难的环境反而可能更简单:我们从DeepMind跑酷论文中受启发最大的一点就是,如果通过添加几个任务变体让任务变得很难,你其实让学习变得更加容易了,因为策略不能过度拟合到任何一个设置而在其他设置下不损失性能。我们在域随机化论文中已经看到了类似的事情,甚至在ImageNet中:在ImageNet上训练的模型比在CIFAR-100上训练的模型推广性更强。正如我上面所说的,也许我们离更通用的RL只有一个“ImageNet控制”的距离。


从环境角度来说,有许多选择。OpenAI Gym目前用户最多,但是Arcade Learning Environment、Roboschool、DeepMind Lab、DeepMind Control Suite以及ELF都是很好的环境.


最后,虽然从研究的角度来看深度RL并不令人满意,但是它的经验问题对于实际用途可能并没有影响。假设一个融资公司使用深度RL。他们用美国股票市场过去的数据训练了一个交易agent,使用3个随机种子。在现场的A / B测试,一个收入减少了2%,一个相同,另一个收入多出2%。在这个假设中,复现性不影响结果,你只要部署收入多出2%的模型的就好。交易agent可能只在美国的表现性能好,没关系,如果在全球市场推广效果不佳,不要部署在那里就好。取得非凡的成就和别人能复制的成功之间还有较大的差距,可能前一点更值得重点关注。


我们现在走到哪一步了


从许多角度来说,我对深度RL当前的状态都感到很烦恼。然而,人们对它有着强烈的研究兴趣,可谓是前所未见。Andrew Ng在他的 Nuts and Bolts of Applying Deep Learning(螺母和螺栓的应用深度学习)的谈话中很好的总结了我的想法,短期很悲观,但长期的乐观也平衡了这一点。深度RL现在有点混乱,但我仍然相信它是未来。


也就是说,下一次有人再问我强化学习是否可以解决他们的问题时,我仍然会告诉他们:不,不行。但我也会告诉他们等几年后再问我,到那时,也许它就可以了。


查看英文原文:Deep Reinforcement Learning Doesn't Work Yet,更多干货内容,可移步AI前线公众号(ID:ai-front)了解。本文属原创,原创链接:http://t.cn/RE3ib8Y,如需转载请先获得授权。

本内容为作者独立观点,不代表虎嗅立场。未经允许不得转载,授权事宜请联系hezuo@huxiu.com
如对本稿件有异议或投诉,请联系tougao@huxiu.com
正在改变与想要改变世界的人,都在 虎嗅APP
赞赏
关闭赞赏 开启赞赏

支持一下   修改

确定