强化学习本身是一个非常通用的人工智能范式,在直觉上让人觉得非常适合用来模拟各种决策任务。当它和深度神经网络这种只要给足Layer和神经元,可以逼近任何函数的非线性函数近似模型结合在一起,那感觉就是要上天啊!
但本文作者AlexIrpan想要告诉大家,深度强化学习是个大坑,别着急进坑!它的成功案例其实不算很多,但每个都太有名了,导致不了解的人对它产生了很大的错觉,高估能力而低估了难度。AlexIrpan目前是谷歌大脑机器人团队的软件工程师,他从伯克利获得计算机科学本科学位,本科时曾在伯克利人工智能实验室(BerkeleyAIResearch(BAIR)Lab)参与科研,导师是深度强化学习大牛PieterAbbeel。
全文如下:
写在前面
有一次在Facebook上,我发表了这样一段话:
任何时候,如果有人问我强化学习能不能解决他们的问题,我都会告诉他们,不行。而且70%的情况下我都是对的。
深度强化学习被大量的炒作重重包围。这并不是无缘无故的!强化学习是很奇妙的一种范式,原则上,一个鲁棒且高性能的RL系统应该是可以完成一切任务的。将这种范式与深度学习的经验力量相结合明显是最佳搭配。深度RL看起来是最接近通用人工智能(Artificialgeneralintelligence,AGI)的系统之一,而打造AGI这一梦想已经消耗了数十亿美元的资金。
不幸的是,目前深度强化学习仍然不起作用。
当然,我相信它是有用的。如果我不相信强化学习,我也不会研究它。但是研究过程中也出现了很多问题,而且大部分都很难解决。智能体agent光鲜亮丽的演示背后,是大家看不到的无数鲜血、汗水和泪水。
我已经看到过很多次人们被这个领域的研究所诱惑。他们只不过第一次尝试深度强化学习,并且刚好没遇到问题,于是就低估了深度RL的难度。如果不经历失败,他们不会知道这到底有多难。深度RL会持续不断地打击他们,直到他们学会如何设定符合现实的研究期望。
这不是任何人的错,而是一个系统性问题。如果结果是好的,自然什么都好说,但如果结果不太好,还想写出同样精彩的故事就没那么简单了。问题是,负面的结果才是研究人员最经常遇到的。在某些方面,负面案例其实比正面案例更重要。
我希望看到深度RL研究有更好的发展,有更多的人进入这个领域。但我也希望人们了解他们即将要面临的到底是什么。
在本文中,“强化学习”和“深度强化学习”相互替代使用。我批判的是深度强化学习的经验主义行为,并不是批判强化学习整体。我引用的论文通常用深度神经网络作为agent。虽然经验批判主义可能适用于线性RL或tabularRL,但我不确定它们是否能推广到更小的问题。在巨大、复杂、高维的环境下,良好的函数逼近是十分必要的,RL在这种环境下的良好应用前景推动了对深度RL的炒作。这种炒作是目前需要解决的问题之一。
下面首先介绍深度RL的失败案例。
深度强化学习的样本效率可能极低
深度强化学习最经典的实验基准是Atari游戏。在著名的深度Q网络(DeepQ-Networks)论文中,如果你将Q学习、大小合适的神经网络和一些优化技巧结合,就可以让网络在一些Atari游戏中达到甚至超越人类水平。
Atari游戏的运行速度是每秒60帧,你能估算出最先进的DQN想要达到人类的水平,需要多少帧吗?
这个问题的答案取决于游戏的种类,我们来看看Deepmind最近的一篇论文,RainbowDQN(Hesseletal,2017)。这篇论文用模型简化法研究了对于原始DQN结构的几种改进,证明了将所有的改进结合起来可以达到最好的结果。在57种Atari游戏测试中,该模型在40种游戏中超过了人类的表现。下图展示了实验结果。
这个问题不只在Atari游戏中出现。第二常见的基准实验是MuJoCo,是设置在MuJoCo物理模拟器中的一组任务。在这些任务中,输入状态通常是一些模拟机器人每个关节的位置和速度。即使不用解决视觉问题,学习这些基准也需要10^5到10^7个步骤。对于这样一个简单的环境,这一数字可以说是很大的经验量了。
DeepMind的跑酷论文(Heessetal,2017),用64个机器训练了超过100个小时来学习policy。论文中没有说明“机器”是什么,但我认为应该是指1个CPU。
论文结果很酷。刚看到这篇论文时,我没想到深度RL竟然可以学习这些奔跑的步态。
这里有一个明显的对比:如果我们直接忽略样本效率呢?有几种情况很容易获取经验,比如游戏。但是,在这一点不成立的情况下,RL面临着一场艰苦的战斗,而且不幸的是,现实世界中的大多数情况就属于这类。
如果你只关心最终的性能,许多问题更适合用其他方法解决
在寻找任何研究问题的解决方案时,通常会在不同的目标之间进行权衡。优化的目标可以是一个真正好的解决方案,也可以是良好的研究贡献。最好的情况是获得一个好的解决方案的同时需要做出好的研究贡献,但是很难找到符合这个标准并且可行的问题。
如果纯粹为了获得好的表现,深度RL的记录可能就没那么光鲜了,因为它总是被其他方法打败。这是一个MuJoCo机器人的视频,用在线轨迹优化(onlinetrajectoryoptimization)控制。正确的动作是在近乎实时、在线,而且没有离线训练的情况下计算的。而且它运行在2012年的硬件上(Tassaetal,IROS2012)。
我认为这篇论文可以和那篇跑酷论文相提并论。那么两者之间的区别在哪里呢?
区别在于,Tassa等人利用模型预测控制,可以用真实世界模型(物理模型)来进行规划。而无模型的RL不进行这样的规划,因此难度更大。另一方面,如果对模型进行规划有所助益,那为什么要把问题复杂化,去训练一个RL策略呢?
同理,用现成的蒙特卡洛树搜索(MonteCarloTreeSearch,MCTS)就可以很容易地超越DQN在Atari游戏中的表现。下面是Guoetal,NIPS2014论文中给出的基准数字。他们把一个训练好的DQN的分数和UCTagent(UCT就是我们现在使用的标准MCTS)的分数做对比。
这并不是一个公平的对比,因为DQN没有搜索步骤,而MCTS能够用真实模型(Atari模拟器)进行搜索。然而有时候人们不在乎对比是否公平,人们只在乎它的有效性。如果你对UCT的全面评估感兴趣,可以看看原始的(ArcadeLearningEnvironment,Bellemareetal,JAIR2013)论文附录。
强化学习理论上可以用于任何事物,包括模型未知的环境。然而,这种普遍性是有代价的:算法很难利用特定信息来帮助学习,这迫使人们使用多到吓人的样本来学习本来通过硬编码就可以得到的规律。
无数经验表明,除了极少数情况,特定域的算法均比强化学习的表现更快更好。如果你只是为了深度RL而研究深度RL,这不成问题,但是每当我把RL与其他任何方法进行对比时,都会觉得十分沮丧,无一例外。我非常喜欢AlphaGo的原因之一就是因为它代表了深度RL的一次毋庸置疑的胜利,而这样的胜利并不常见。
这一点让我越来越难给外行解释为什么我研究的问题又酷又难又有趣,因为他们往往没有背景或经验来理解为什么这些问题这么难。人们所认为的深度RL能做什么,和它真正能做什么之间横亘着一个巨大的“解释鸿沟”。我现在研究的是机器人。当你提到机器人时,大多数人们想到的公司是波士顿动力(BostonDynamics)。
他们可不使用强化学习。如果你看看该公司的论文,你会发现论文的关键字是时变LQR,QP求解以及凸优化。换句话说,他们主要用的还是经典的机器人技术,而实际结果证明,只要用对了这些经典技术,它们就可以很好地发挥作用。
强化学习通常需要奖励函数
强化学习一般假定存在奖励函数。通常是直接给定的,或者是离线手动调整,然后在学习过程中不断修正。我说“通常”是因为也有例外,例如模仿学习或逆RL,但大多数RL方法把奖励函数奉为神谕。
更重要的是,想让RL做正确的事,奖励函数必须知道到底你想要什么。RL有过拟合奖励函数的倾向,会导致意想不到的结果。这就是为什么Atari游戏是一个很好的基准。不仅是因为很容易从中获得大量的样本,而且是因为每场比赛的目标都是尽可能地得分,所以永远不用担心该如何定义奖励函数,而且每个系统都用相同的奖励函数。
这也是MuJoCo任务很受欢迎的原因。因为它们在模拟器中运行,所以你清楚地知道所有的对象状态(state),这使得奖励函数的设计容易许多。
在Reacher任务中,需要控制一个连接到中心点的两段臂,任务目标是移动手臂到指定位置。下面是一个成功学习出策略的视频。
因为所有的位置都是已知的,所以奖励函数可以定义为从手臂末端到目标的距离,再加上一个小的控制损失。理论上来说,在现实世界中,如果你有足够的传感器来获取环境中精确的位置,你也可以这样做。
就其本身而言,需要奖励函数不算什么,除非……
奖励函数设计难
增加一个奖励函数并不难。困难的是如何设计一个奖励函数,让它能鼓励你想要的行为,同时仍然是可学习的。
在HalfCheetah环境中,有一个双足机器人被限制在一个垂直平面内,只能向前跑或向后跑。
任务目标是学习跑步的步态。奖励函数是HalfCheetah的速度。
这是一个计划奖励函数(shapedreward),也就是说在状态(state)离目标(goal)越来越近时,它增加奖励。另一种是稀疏奖励(sparsereward),即达到目标状态才给予奖励,而其他状态都没有奖励。计划奖励往往更容易学习,因为即使策略没有找到问题的完整解决方案,系统也会提供正反馈。
但游戏给出的奖励是只要到达关卡点就会加分,并且收集道具也会加分,而且收集道具给的分数比完成比赛得到的还多。在这样的奖励函数下,RL系统的agent即使没有完成比赛,也能拿到最高得分。因此也导致了许多意想不到的行为,例如agent会撞毁船、着火、甚至走反方向,但它获得的分数比单纯完成游戏还要高。
RL算法是一个连续统一体,他们可以或多或少地了解他们所处的环境。最常见的无模型强化学习(model-freeRL),几乎与黑盒优化相同。这些方法只有在MDP(马尔科夫决策过程)中才能求解出最优策略。agent只知道哪个给了+1奖励,哪一个没有,剩下的都需要自己学习。和黑盒优化一样,问题在于对agent来说,任何给予+1奖励的都是好的,即使+1的奖励不是因为正确的理由而得到的。
一个经典的非RL例子是应用遗传算法设计电路的时候,得到的电路中出现了一个无连接的逻辑门。
所有的灰色单元都要有正确的行为,包括左上角的,即使它没有跟任何单元连接起来。(来自“AnEvolvedCircuit,IntrinsicinSilicon,EntwinedwithPhysics”)
更多的例子可以参考Salesforce2017年的博客,它们的目标是文本总结。它们的基准模型用监督学习训练,然后用自动度量方法ROUGE对总结效果进行评估。ROUGE是不可微的,但是RL可以解决不可微的奖励,所以他们尝试直接用RL来优化ROUGE。得到了很高的ROUGE分数,但是实际效果并不是很好。下面是一个例子:
Buttonwasdeniedhis100thraceforMcLarenafteranERSpreventedhimfrommakingittothestart-line.ItcappedamiserableweekendfortheBriton.Buttonhasout-qualified.FinishedaheadofNicoRosbergatBahrain.LewisHamiltonhas.In11races..Therace.Tolead2,000laps..In...And.
所以尽管RL模型得到了最高的ROUGE评分:
他们最后还是用了另外一个模型。
还有另一个有趣的例子:Popovetal,2017的论文,也被称为“乐高积木论文”。作者用分布式DDPG来学习抓握策略,目标是抓住红色块,并把它堆在蓝色块的上面。
他们完成了这个任务,但中途遇到了一个彻底失败的案例。他们对于初始的抬升动作,根据红块的高度给出奖励,奖励函数由红块底面的z轴坐标定义。其中一种失败模式是,策略学习到的行为是把红块倒转过来,而不是捡起来。
显然这并不是研究人员预期的解决方案,但是RL才不在乎。从强化学习的角度来看,它因为翻转一个块而得到奖励,所以它就会将翻转进行到底。
解决这个问题的一种方法是给予稀疏奖励,只有机器人把这个块堆叠起来后才给予奖励。有时候这样能行得通,因为稀疏奖励是可学习的。但通常情况下却是没用的,因为缺乏正向强化反而会把所有事情复杂化。
解决这个问题的另一种方法是仔细地调整奖励函数,添加新的奖励条件,调整现有的奖励系数,直到你想学习的行为在RL算法中出现。这种方法有可能使RL研究取得胜利,但却是一次非常没有成就感的战斗,我从来没觉得从中学到过什么。
下面给出了“乐高积木”论文的奖励函数之一。
在与其他RL研究人员的交流中,我听到了一些趣闻,是由于奖励函数定义不当而造成的新奇行为。
一位朋友正在训练一个模拟机械手臂伸到桌子上方的某个点。这个点是根据桌子定义的,而桌子没有固定在任何东西上。agent学会了重重地拍桌子,使桌子翻倒,这样一来它也算移动到目标点了。而目标点正好落到了机械臂的末端。
一位研究人员在使用RL训练模拟机器手臂拿起锤子并把钉子钉进去。最初,奖励定义为钉子被钉到洞里的深度。结果,机器人没有拿起锤子,而是用自己的四肢把钉子钉进去了。于是研究人员增加了奖励项,鼓励机器人拿起锤子,然后重新训练策略。虽然他们得到了拿起锤子的策略,但是机器人只是把锤子扔在了钉子上而不是使用锤子。
诚然,这些都是“听别人说的”,但是这些行为听起来都很可信。我已经在RL的实验中失败了太多次,所以我不会再怀疑这一点。
我知道有人喜欢用回形针优化器的故事来危言耸听。他们总喜欢猜测一些特别失调的AGI来编造这样的故事。现在每天都有很多真实发生的失败案例,我们没有理由去凭空想象那样的故事。
即使奖励函数设计得很好,也很难避免局部最优解
前文给出的RL例子有时被称为“奖励作弊”。正常情况下,AI会通过正常的手段最大化奖励函数。然而,有些情况下,AI可以通过作弊的手段,直接把奖励函数调到最大值。有时一个聪明的、现成的解决方案比奖励函数设计者所预期的答案能得到更多的奖励。
奖励作弊是一个例外,更常见的情况是由于探索-利用权衡不当而导致的局部最优解。
下面是一个归一化优势函数的实现视频,在HalfCheetah环境中学习。
在局外人看来,这个机器人太蠢了。但是这是因为我们站在第三方的视角,而且我们知道用脚跑步要好得多。但是RL并不知道啊!它收到状态(state),然后做出行动(action),然后知道它得到了正向奖励,就是这样。
我猜测学习过程发生了以下几件事:
下面是另外一个失败示例,来自Reacher项目:
在这个过程中,初始随机权重倾向于输出高度正或高度负的动作输出。这使得大多数动作尽可能输出最大或最小加速度。超高速旋转非常容易:只需要每个关节输出高强度的力。一旦机器人开始行走,就很难以一种有意义的方式脱离这一策略——想要脱离这个策略,必须采取几个探索步骤来阻止混乱的旋转。这当然是可能的,但在这次试验中并没有发生。
这些都是一直以来困扰强化学习的经典的探索-利用问题。由于数据来自于当前的策略,如果当前的策略探索太多,得到的是垃圾数据,那就什么也学不到;如果利用太多,智能体也无法学到最优行为。
引用维基百科的一段话:
我将深度RL想象成一个恶魔,故意曲解你的奖励函数,然后积极寻找最懒的可行局部最优解。
当深度RL有效时,它可能过拟合环境中奇怪的模式
“深度RL广受欢迎的原因是它是机器学习中唯一允许在测试集上进行训练的研究领域”
强化学习的好处是:如果你想在一个环境中表现很好,可以随意的过拟合。缺点是,如果你想推广到其他环境中,可能表现会很差。
DQN可以解决很多雅达利(Atari)游戏,但它是通过对单一目标进行集中学习来完成这项任务的——它只在某一个游戏的表现很好。但最后学习到的模式无法推广到其他游戏,因为它没有经过这种训练。你可以通过微调训练好的DQN,让它去玩新的雅达利游戏(ProgressiveNeuralNetworks,Rusuetal,2016),但也不能保证它能够迁移,而且人们通常不期望它能迁移。
原则上在各种各样的环境下进行训练应该能使这些问题消失。在某些情况下,可以轻易得到这样的环境。例如导航,可以在环境中随机采样目标位置,并使用通用值函数来泛化(UniversalValueFunctionApproximators,Schauletal,ICML2015)。这是一项很有前途的研究,然而我不认为深度RL的泛化能力足以处理不同的任务。OpenAIUniverse试图用分布式来解决这个任务,但据我所知,目前他们也没有太多进展。
除非RL系统达到了那样的泛化能力,否则agent所学习到的策略应用范围会一直受限。举一个例子,想一想这篇论文:CanDeepRLSolveErdos-Selfridge-SpencerGamesRaghuetal,2017。我们研究了一个双玩家组合游戏,玩家的最佳发挥有封闭形式的解析解。在第一个实验中,我们固定了玩家1的行为,然后用RL训练了玩家2。这样可以将玩家1的行为视为环境的一部分。在玩家1的表现最优时训练玩家2,我们发现RL可以达到高性能。但是当我们针对非最佳玩家1部署相同的策略时,它的性能下降了,因为它不能泛化到非最佳对手的情况。
Lanctotetal,NIPS2017中给出了类似的结果。有两个agent在玩激光枪战。这两个agent采用多智能体强化学习进行训练。为了测试泛化能力,他们用5个随机种子进行训练。下面是互相训练的agent的视频。
可以看到,他们学会了朝对方走并且射击对方。然后他们从一个实验中取出玩家1,从另一个实验中取出玩家2,让他们互相对抗。如果学习到的策略可以泛化,应该能看到与之前类似的行为。
但是并没有。
这似乎是多智能体RL的主题。当agent相互训练时,会产生一种协同进化。agent变得特别擅长攻击对方,但当他们对付一个之前没有遇到过的玩家时,表现就会下降。需要指出的是,这些视频之间唯一的区别是随机种子。它们都有同样的学习算法,相同的超参数,但是发散行为完全来自于初始条件下的随机性。
即使忽略泛化问题,最终结果也可能不稳定而且难复现
几乎每一个ML算法都有超参数,它们会影响学习系统的行为。通常,超参数都是人工挑选的,或者是随机搜索得到的。
监督学习是稳定的,有固定的数据集和真实值目标。如果你稍微改变超参数,算法的表现不会改变很多。并不是所有的超参数都表现良好,但有了过去几年发现的所有经验技巧,许多超参数在训练中可以进行优化。这些优化方向是非常重要的。
目前,深度RL是不稳定的,是一项十分麻烦的研究。
当我开始在GoogleBrain工作的时候,我做的第一件事就是从标准化优势函数(NAF)论文中实现这个算法。我想大概只需要2-3个星期。我熟悉Theano(可以很好地迁移到tensorflow),有一些深度RL经验,而且NAF论文的第一作者正在GoogleBrain实习,所以我有问题可以直接请教他。
然而由于一些软件错误,复现结果花了6个星期。问题在于,为什么花了这么久才找到这些错误?
要回答这个问题,我们首先可以看看OpenAIGYM的最简单的连续控制的任务:摆任务。在这个任务中,有一个摆,固定在一个点上,重力作用在钟摆上。输入状态是三维的。动作空间是一维的,即施加扭矩的量。我们的目标是完美地平衡摆锤,让其垂直向上。
这是一个小问题,好的奖励函数让它变得更容易。奖励是用钟摆的角度来定义的。将钟摆向垂直方向摆动的动作不仅给予奖励,还增加奖励。奖励空间基本上是凹的。
下面是一个基本有效的策略的视频。虽然该策略没有直接平衡到垂直位置,但它输出了抵消重力所需的精确扭矩。
这是表现性能曲线,在我改正所有的错误之后。每一条曲线都是10次独立运行中的1次奖励曲线。相同的超参数,唯一不同的是随机种子。
较深的曲线是10个随机种子表现性能的中值,阴影区域是第25到第75个百分点。这个曲线是支持论文算法的一个很好的论据。但另一方面,第25百分点离0奖励十分接近。这意味着大约25%的实验是失败的,只是因为随机种子。
监督学习也会有变化,但变化不会这么大。如果有监督学习的代码运行结果有30%低于随机结果,我会很自信肯定是数据加载或训练过程哪里出错了。如果我的强化学习代码比不过随机结果,我不知道是有地方出错了,还是超参数不对,或者我只是运气不好。
这张照片来自《WhyisMachineLearning“Hard”(为什么机器学习这么“难”?)》。核心论点是机器学习给失败情况空间增加了更多维度,从而成倍地增加了导致失败的原因。深度RL又在此基础上增加了一个新维度:随机性。你唯一能解决随机问题的方法是通过在这个问题上投入足够的实验来抵消噪音。
当你的训练算法样本效率低下且不稳定时,它会严重降低你的研究速度。也许只需要100万步。但是当你给这个数字乘上5个随机种子,再乘上超参数调整,你需要不计其数的计算才能验证所提假设的有效性。
另外,我们从监督学习中学到的CNN设计似乎不适用于强化学习,因为强化学习的瓶颈在于信用分配或监管比特率,而不是表示能力不足。ResNet、batchnorm,或者是很深的神经网络在这里都无法发挥作用。
[监督学习]是主动想要发挥作用的。即使你搞砸了,你也会得到一些非随机的反馈。RL是必须被迫发挥作用的。如果你搞砸了什么,或者调整得不够好,你极有可能得到比随机情况更糟糕的策略。即使一切都很好,也有30%的可能得到一个很差的策略,没什么理由。
长话短说,你的失败更多是由于深度RL太难了,而不是因为“设计神经网络”的困难。
——AndrejKarpathy在HackerNews上发表的博客
随机种子的不稳定性就像是煤矿中的金丝雀。如果纯粹的随机性足以导致每次实验结果之间如此大的差异,那么可以想象代码中实际的差异该有多大。
不过我们不需要去想这个问题,因为DeepReinforcementLearningThatMatters,Hendersonetal,AAAI2018)这篇论文已经给出了结论:
我的理论是,RL对初始化和训练过程的动态非常敏感,因为数据都是在线收集的,而唯一的监督是一个标量奖励。一个在好的训练样例上得到的策略会比一个没有好的训练样例的策略能更快地引导自己。一个不能及时发现好的训练样例的策略会崩溃,什么也学不到,因为它相信它尝试的任何方向都会失败。
那么RL已经成功做到的事呢?
深度强化学习确实做了一些非常酷的事情。DQN虽然是旧新闻,但当时绝对轰动。单个模型能够直接从原始像素中学习,而不需要对每个游戏单独进行调优。而且AlphaGo和AlphaZero也是非常令人印象深刻的成就。
然而,在这些成功之外,很难找到深度RL在真实世界创造实际价值的案例。
我试图思考深度RL在现实世界的用途,却发现非常困难。我想在推荐系统中找到些东西,但那些算法仍然以协同过滤(collaborativefiltering)和上下文赌博机(contextualbandits)为主。
到最后,我能找到的最好的是两个谷歌项目:降低数据中心能耗,以及最近发布的AutoMLVision。
在我看来,或许深度RL是一个不够强大,不能广泛应用的研究课题,也可能它是可用的,只是应用了它的人没有公开。我认为前者更有可能。
如果你问我图像分类的问题,我会告诉你预训练的ImageNet模型。对于图像分类问题,我们处在一个连电视剧《硅谷》的制作团队都能开发出识别热狗的软件的世界。但在深度RL领域几乎是不可能发生同样的事情。
鉴于目前的限制,什么时候深度RL能有作用?
首先,真的很难说。想用RL解决所有事情,等同于试图用同样的方法来解决非常不同的环境下的问题。它不能一直起作用才应该是正常的。
话虽如此,我们可以从目前强化学习成功的项目列表中得出结论。这些项目中,深度RL或是学习了一些质量极优的行为,或是学习到了比以前更好的行为。
这是我目前的列表:
从这个列表中,我们可以看出使学习更容易的一般属性。下面的属性都不是学习必需的,但是满足的特性越多绝对是越好的:
OpenAI的Dota2机器人只玩了初级游戏,只在1V1对线设置中玩了影魔对影魔,使用硬编码的项目结构,并且调用了Dota2API来避免解决感知问题。SSBM机器人达到了超人的表现,但它只是在1v1比赛中,与CaptainFalcon在Battlefield上,而且不限时。
这不是在讽刺这些机器人。如果你连一个简单的问题都不知道是否能解决,为什么还要研究一个困难的问题呢?所有研究的趋势都是先演示最小的概念证明,然后再推广它。OpenAI在扩展他们的Dota2的研究工作,也在将SSBM机器人扩展到其他角色。
如果你想进一步了解如何设计一个好的奖励函数,可以搜索“合适的评分规则(properscoringrule)”。TerrenceTao的博客中介绍了一个可行的例子。
而对于可学习性,除了多次尝试看看是否有效,我没有别的建议。
如果需要定义奖励,至少应该形式丰富。在Dota2中,最后的补刀(杀死小怪时触发),以及治愈(每次攻击或杀死目标后出发)会有奖励。这些奖励信号频率很高。对于SSBM机器人,造成伤害时会给予奖励,每次成功的攻击都会给出信号。行动与结果之间的延迟越短,反馈环形成越快,强化学习就越容易找到高回报的途径。
案例研究:神经架构搜索(NeuralArchitectureSearch,NAS)
我们可以结合一些原理来分析神经架构搜索的成功。从最初ICLR2017版,在12800个样例后,深度RL能够设计先进的神经网络结构。诚然,每个样例都需要训练一个收敛的神经网络,但这仍然是非常有效的。
这些点的结合让我明白了为什么它“只”需要大约12800个训练好的网络来学习更好的网络,而在其他环境中需要数以百万计的样例。这个问题的许多方面都对RL有利。
简而言之:深度RL目前还不能即插即用。
未来发展
有一句老话——每个研究者都在学习如何讨厌他们的研究领域。尽管如此,研究人员还是会继续努力,因为他们太喜欢这些问题了。
这也是我对深度强化学习的大致感受。尽管我有保留意见,但我认为人们应该用RL去尝试不同的问题,包括那些可能行不通的问题。否则我们还有其他办法让RL变得更好吗?
局部最优已经足够好:认为人类在任何事情上都已经做到最好了是很傲慢的想法。我认为与其他任何物种相比,我们仅仅刚好到步入了文明阶段。同样,只要RL解决方案的局部最优解优于人类基准,它不必达到全局最优解。
硬件解决一切:我知道有些人认为最能影响人工智能的事情就是提升硬件。就我个人而言,我对于硬件能解决一切问题的观点持怀疑态度,但这一点肯定是很重要的。运行的速度越快,对样本效率的担心就越少,越容易对探索问题暴力解决。
添加更多的学习信号:稀疏奖励很难学习,因为得到的信息太少了。也许我们可以变换积极奖励(HindsightExperienceReplay,Andrychowiczetal,NIPS2017),定义辅助任务(UNREAL,Jaderbergetal,NIPS2016),或用自我监督学习引导构建良好的真实世界模型。
基于模型的学习提升样本效率:我是这样描述基于模型的RL的:“每个人都想做,但很多人不知道。”原则上,一个好的模型能修正许多问题。就像AlphaGo一样,一个好模型让它更容易学习出解决方案。好的模型能迁移到新的任务,基于模型的方法也能使用较少的样本。
问题在于学习一个好的模型很难。我认为低维状态模型有时有效,图像模型通常太难。但是,如果这一点变得容易了,就能产生一些有趣的事情。
Dyna(Sutton,1991)和Dyna-2(Silveretal.,ICML2008)是这个领域的经典论文。对于将基于模型学习和深度网络结合起来的研究领域,我推荐几篇Berkeley机器人实验室最近发表的几篇论文:NeuralNetworkDynamicsforModel-BasedDeepRLwithModel-FreeFine-Tuning(Nagabandietal,2017),Self-SupervisedVisualPlanningwithTemporalSkipConnections(Ebertetal,CoRL2017)。CombiningModel-BasedandModel-FreeUpdatesforTrajectory-CentricReinforcementLearning(Chebotaretal,ICML2017)。DeepSpatialAutoencodersforVisuomotorLearning(Finnetal,ICRA2016),以及GuidedPolicySearch(Levineetal,JMLR2016)。
用强化学习进行调优:第一篇AlphaGo论文就是采用监督学习,然后在其基础上用RL进行微调。这是一个很好的方法,因为它使用一个更快但不那么强大的方法来加快初始学习。该方法在其他环境下也有效,例如SequenceTutor(Jaquesetal,ICML2017)。可以将其视作以一个合理的先验条件作为RL过程的开始,而不是用一个随机的条件,或者用其他方法来解决学习先验条件的问题。
可学习的奖励函数:ML的前景在于我们可以用数据来学习比人类的设计更好的东西。如果奖励函数的设计这么难,为什么不用ML来学习更好奖励函数呢?模仿学习和逆向增强学习都显示了奖励函数可以用人为演示和人为评分来隐式定义。
逆RL和模仿学习领域的优秀论文:AlgorithmsforInverseReinforcementLearning(NgandRussell,ICML2000),ApprenticeshipLearningviaInverseReinforcementLearning(AbbeelandNg,ICML2004),以及DAgger(Ross,Gordon,andBagnell,AISTATS2011)。
最近也有一些工作将这种想法推广到深度学习:GuidedCostLearning(Finnetal,ICML2016),Time-ConstrastiveNetworks(Sermanetetal,2017),和LearningFromHumanPreferences(Christianoetal,NIPS2017)。(HumanPreferences论文尤其证明从人为评分中学习到的奖励函数比客观定义的奖励函数更适合于学习。)
对于不使用深度学习的长期研究,我推荐阅读:InverseRewardDesign(Hadfield-Menelletal,NIPS2017)和LearningRobotObjectivesfromPhysicalHumanInteraction(Bajcsyetal,CoRL2017)。
迁移学习拯救一切:迁移学习的前景在于你可以利用从以前的任务中学到的知识来加速学习新知识。我认为这绝对是未来的发展趋势,任务学习足够强大,可以解决几个不同的任务。如果根本就没有学习,也无法进行迁移学习,而且给定任务A和B,很难预测A是否可以迁移到B。
该领域推荐阅读的论文:UniversalValueFunctionApproximators(Schauletal,ICML2015),Distral(WhyeTehetal,NIPS2017),和OvercomingCatastrophicForgetting(Kirkpatricketal,PNAS2017)。之前的工作可以阅读Horde(Suttonetal,AAMAS2011)。
机器人在sim-real迁移(模拟任务和真实任务之间的迁移学习)中取得了很大的进步。推荐阅读论文:DomainRandomization(Tobinetal,IROS2017),Sim-to-RealRobotLearningwithProgressiveNets(Rusuetal,CoRL2017),和GraspGAN(Bousmalisetal,2017)。
PieterAbbeel在演讲中喜欢提到的一点是,深度RL只需要解决我们希望在现实世界中需要解决的任务。应该有一种现实世界的先验,能够让我们快速学习新任务,代价是非现实任务中较慢的学习成本,但这是非常值得的。
困难在于,这样的真实世界先验是很难设计出来的,但依然是可能的。我对元学习(metalearning)最近的工作很有兴趣,因为它提供了数据驱动的方法来生成合理的先验条件。例如,如果我想用RL设计仓库导航,我会用元学习来学习一个好的导航先验,然后根据特定仓库机器人的要求对先验进行调优。
最近这方面的研究工作可以在BAIR的博客中找到。
更难的环境反而可能更简单:我们从DeepMind跑酷论文中受启发最大的一点就是,如果通过添加几个任务变体让任务变得很难,你其实让学习变得更加容易了,因为策略不能过度拟合到任何一个设置而在其他设置下不损失性能。我们在域随机化论文中已经看到了类似的事情,甚至在ImageNet中:在ImageNet上训练的模型比在CIFAR-100上训练的模型推广性更强。正如我上面所说的,也许我们离更通用的RL只有一个“ImageNet控制”的距离。
从环境角度来说,有许多选择。OpenAIGym目前用户最多,但是ArcadeLearningEnvironment、Roboschool、DeepMindLab、DeepMindControlSuite以及ELF都是很好的环境.
我们现在走到哪一步了
从许多角度来说,我对深度RL当前的状态都感到很烦恼。然而,人们对它有着强烈的研究兴趣,可谓是前所未见。AndrewNg在他的NutsandBoltsofApplyingDeepLearning(螺母和螺栓的应用深度学习)的谈话中很好的总结了我的想法,短期很悲观,但长期的乐观也平衡了这一点。深度RL现在有点混乱,但我仍然相信它是未来。
也就是说,下一次有人再问我强化学习是否可以解决他们的问题时,我仍然会告诉他们:不,不行。但我也会告诉他们等几年后再问我,到那时,也许它就可以了。