利用深度强化学习算法实现人类水平的控制
Martin Riedmiller1, Andreas K. Fidjeland1, Georg Ostrovski1, Stig Petersen1, Charles Beattie1, Amir Sadik1, Ioannis Antonoglou1,
Helen King1, Dharshan Kumaran1, Daan Wierstra1, Shane Legg1 & Demis Hassabi
强化学习理论根植于心理学和神经科学,它可以很好的解释一个代理如何在一个环境中优化自己的控制。为了在真实复杂的物理世界中成功的使用强化学习算法,一个代理必须面对困难的任务:利用高维的传感器输入数据,达到很好的表达,并且泛化之前的经验到新的未见环境中。显然的,人类和其他动物通过协调的组合强化学习以及层次化的感知处理系统来很好的处理这个问题。前者已经被大量的神经数据证明了,揭示了在多巴胺能的神经元激发的相位信号和短时差分强化学习算法。现在强化学习算法已经在一些领域取得了成功,然而它之前在那些手动提取有用特征的领域、或者一些低维可以直接观察到的领域受到了应用限制。这里我们使用最近先进的手段训练深度神经网络类得到一个,名字叫深度Q值网络的算法,它可以使用端到端的强化学习算法从高维的传感器输入中成功的直接学习到成功的策略。我们在很有挑战的游戏Atari2600中测试了这个代理。我们证明了,使用同一种算法和网络,同一种超参数,在49种游戏集合中,仅仅使用像素点和游戏分数作为输入,超过以往的任何一种算法达到和专业游戏玩家的水平。这个工作在高维数据输入和动作输出之间建立了桥梁,使得人工智能代理可以有擅长一些列的挑战性的工作。
我们致力于利用单一的算法解决某个领域的多类有挑战性的工作,也就是通用的人工智能。为了达到这个目标,我们发明了一个叫做深度Q网络(DQN),它是结合了强化学习和深度神经网络。明显的,最近利用多层的神经元构建的更加抽象的数据表达,使得人工神经网络可以直接从传感器输入数据中获得物体的分类。我们使用一个非常成功的网络架构,卷积神经网络,它使用多层的卷积滤波器模仿感受野的作用——它们的灵感来自于Hubel和Wiesel在视觉回路的原始前馈处理,因此他可以挖掘图像中局部的空间相关的信息,建立对于视角和比例缩放自然转换非常鲁棒。
在我们的任务中,代理通过一些列的观察、动作和回馈来进行交互。我们代理的目标是选择一个能够使未来的积分最高的的动作。更加普遍的,我们使用一个卷积神经网络来达到最佳动作值函数。
这个公式在每步t时,当观察到状态s,采取状态a,使得利用折中的 的和最大化,通过利用策略 。
强化学习不稳定甚至会发散,当一个非线性近似器比如一个用于表达Q函数的神经网络。这个不稳定有几种原因:可观测序列的相关性,Q值的小的更新会很大范围的更改策略进而更改数据的分布、以及Q值和目标值之间的相关性 。
我们使用心得Q学习的变形来处理这中不稳定,它有两个重要的想法。第一,我们使用生物学启发而来的一种机制叫做经验延迟,它会把数据随机化,因此这样会删除观测数据之间的相关性并且平滑数据数据分布。第二点,我们使用一个迭代更新算法调整Q函数向目标值的方向,而且是周期性的更新,从而可以降低和目标之间的相关性。
然而,也存在其他的使神经网络稳定的算法,比如一个适应性的Q迭代,这些方法都涉及重复训练神经网络数百次。因此,这些算法不如我们算法,它们对于非常大神经网络会非常低效率。我们利用深度卷积神经网络来估计一个Q函数,在图1 中,在其中 是在第i步的权重,我们设置了一个数据集合 ,其中 为每个时间步骤t的机器人经验。在学习过程中,然后我们在经验 的采样点上应用Q-学习更新,然后从采样库中随机的取出采样点。Q学习中在i步的迭代使用下列的损失函数:
这里的 是折中因子决定机器人的视野, 是Q网络在第i步的参数, 用来计算第i步的目标。 每C步利用 进行更新,然后在两次更新过程中保持不变。
为了评价DQN机器人,我们在Atari2600 平台上测试了它,这个平台提供了很多不同的任务(n=49),这些任务非常难并且是针对人类玩家的。我们使用相同的网络架构、超参数和学习过程来证明我们的方法可以非常鲁棒的成功在很多游戏中学习到操作策略,并且学习过程仅仅基于传感器的输入依赖很少的先验知识(它们仅仅是视觉图像输入,以及每个游戏可采取的动作个数)。显然的,我们的方法可以使用强化学习和SGD算法以一种稳定的方式训练大规模的网络。通过两个学习索引的暂时演进。(机器人每个片段平均分数和平均估计Q值;观看图2和增补的细节讨论)我们在49个游戏上和能够得到的强化学习论文展示的最好的表现。除了学习到的机器人,我们也报告了一个专业玩家在在控制的情况下的分数以及随机选择动作的策略所得的分数。(扩展数据Table2 和Fig3,其中人类表现为100% 随机表现为0% 在y轴方向)我们的DQN方法展示了在43个游戏中不借助其他方法获得先验知识时所获得的最好的表现的算法。更进一步,我们的DQN机器人展示了一个可以和专业玩家相比较的水准,在49个游戏中在超过半数的游戏中可以达到人类的分数的75%(可以看图3 增补讨论在扩展的数据表2)。在额外的仿真中,我们证明了独立DNQ机器人核心模块的重要性,通过禁止他们工作来说明他们的对于表现的必要性。这些模块包括:延迟记忆,分离的目标Q网络和深度卷积神经网络。
我们接下来在SpaceInvaders游戏中利用机器人的成功表现来证明DQN网络学习到了良好的表达,通过使用一个叫做“t-SNE”为视觉开发的技术达到这种效果。正如所期望的,t-SNE算法趋向于把相似的states布置在临近的points的地方。有趣的是,我们发现了一个例子,在这个例子中t-SNE算法产生了相似的内部东西,这些东西是依据理想的期望而产生的表现状态,这些状态内部相似但是人类外部感觉他们去不相似。这里我们认为,神经网络可以从高维的传感器数据中学习到支持适应性动作的表现。我们也展示了通过DQN学习到的表现,这种表现是学习到的策略是从数据中产生的,而不是学习数据本身,在仿真过程中,我们也把输入展示成神经网络经历过人和机器人玩之后的状态,并记录最后个隐层的状态,然后利用t-SNE算法展示出来。扩展数据图2提供了一种说明,这种说明证实了DQN网络的变现如何准确的预测状态和Q值。
最有价值的事是,在游戏中DQN网络需要在它自己的环境中变化非常大,从-scrolling shooters (River Raid) 到(Boxing) 以及三维的游戏car-racinggames (Enduro).
事实上,在一个特定的游戏中,DQN网络可以发掘一个相对长期的策略(比如,在Breakout游戏中:机器人学习到一种优化的策略,也就是首先在靠近墙的边上挖一个通道,然后允许球从通道中穿越过去进入砖块的后面,从而能够破坏大量的砖块,看增补视频2说明DQN在课程学习过程中的进步)。然而,一些需要更多暂时的扩展计划的策略仍然存在巨大挑战对于所有的机器人包括DQN网络。
在本文中,我们账目了一个单一架构的算法能够完成成功的学习到控制策略来操作某个范围内大量不同游戏,并且这种学习需要很少的先验知识,在学习过程中只接受像素作为输入,并且使用相同的算法,网络和架构以及超参数在每个游戏中,以及人类游戏者也需要的先验知识。为了和之前的工作作对比,我们的方法包含了“端到端”的强化学习算法,它使用了回报函数在facilitate value函数估计的环境中,利用卷积神经网络指向的突出特征方向改进自己的表现。这个思路在神经生物科学中可以找到证据,也就是在视觉回路中,回报信号在感知学习中可能会影响表现的特征。特别的,强化学习和深度学习架构的成功结合结合在很大程度上以来我们的延迟算法,它包含可以存储和显示表现最近经历的变换。汇聚性的证据表明了海马区可能支持生理上的事实,即一个在人类大脑中存在的过程,即在离线阶段(比如,散步休息的时候)大脑中存在一个时间压缩的回放,它可以提供一个推断的策略,通过这个策略值函数可以有效的升级,通过利用基本中枢再激活。
在将来,开发潜在的应用,把延迟经历的内容偏置到显著的事件,这和在强化学习中一个叫做“按优先级清除”概念相关。这种现象可以根据经验把海马区延迟的数据特征化。
Takentogether,我们的的工作说明了一种力量,即利用一个生物启发的机制创建一个机器人,该机器人可以学习控制不同的挑战性的工作。
方法
过程 直接把Atari2600的图像作为输入,它是一个拥有128颜色调色板的210*160个像素,依据计算和存储的能力这个规模的图像可以进行计算。我们首先使用一个基本的预处理过程来降低输入图像的维度以及处理Atari 2600模拟器的人工因素。首先,我们为了编码一个单针图像,我们在要编码的图像和上一幅图像的每个像素颜色值中取最大值。这对于消除闪烁是非常必须的,当某些物体仅仅在当前的图像中出现,而其他物体仅仅出现在之前的图像中时候这个闪烁会出现,一个人为因素,即由于Atari2600显示精灵数量的限制,可以一次性显示。第二点,我们从RGB图像中提取了Y通道,即亮度通道,然后把它缩小为84*84大小。在算法1中描述的函数 应用在当前的m个图像中,然后把它们顺序送入到Q函数中,这里的m=4,当然也可以选择3,或者5。
代码获取代码可以在网站https://sites.google.com/a/deepmind.com/dqn获得,但是可以用作非商业用途。
模型架构用途这里有几种方法来利用神经网络调试Q函数。因为Q把历史-动作数据对来估计Q值的数量,历史-动作作为神经网络的输入已经有一些方法。这些方法的最主要的缺点是:使用一个分离的前馈经历来计算每个动作的Q值,导致一个代价,即scales和动作的数量线性相关。而我们使用一个架构,在这个架构中对应每个可能的动作都有一个单独的输入单元,并且神经网络的输入是一个状态表现。输出是对应输入状态的对应个体Q值的预测。这种架构的主要优点是有能力在给定状态下仅仅通过网络的一次前馈计算出每种可能的动作的Q直。
这个架构的原理图在图1中有显示。神经网络的输入是通过函数 预处理产生的84*84*4的图像。第一个隐含层把输入图像卷积了了32个8*8的滤波器with stride 4 然后通过一个非线性修正函数。第二个隐含层卷积了64个8*8的滤波器利用 stride 2,然后同样的利用非线性修正函数。然后第三层的卷积层利用64个3*3 with stride 1然后跟随一个非线性修正函数。最后一个隐含层是一个权利连接的网络包含512个修正单元。最后一层是一个全连接网络单个输出对应一个有效的动作。对于每个不同游戏我们的输出有4到18个不等。
训练细节我们在Atari2600上进行了49种游戏,这些游戏可以在其他的方法中得到对比。不同的游戏利用不同的训练方法:对比:相同的网络架构学习算法和超参数设置。展示了我们的方法对于不同的游戏是具有足够的鲁棒性的,并且仅仅依靠少量的先验知识。
然而我们在不更改的游戏中评价我们的机器人,只是在训练过程中更改回报的结构。因为不同的游戏中分数的范围变化很大,所以我们对于正的回报给予1,负的回报给予-1,对于不变的给予0。使用这种方式,可以限制误差的倒数范围,同时可以更容易的使用相同的学习速率对于不同的学习任务。与此同时,由于机器人不会再不同的强度上有不同的回报,会导致机器人的表现不同。对于生命计数器的游戏,Atari2600仿真器也会发送生命数字在游戏过程中,这个用来在训练过程中停止单次训练。
在这些经历中,我们使用了RMSProp算法,其中的minibatches算法的大小是32。训练过程中的行为策略是 的其中的 退火的线性从1.0到0.1在最初的一百万幅图像上,然后固定在0.1上。我们总共训练了50百万幅图像,(也就是,大约一共38天的游戏经历)并且在当前的1百万幅图像中使用记忆网络。
遵循之前的玩Atari2600游戏的算法,我们也使用了简单的 frame-skipping 技术。更确切的说,机器人每经历k幅图像才采取一个动作,而不是每幅图像都采取动作,在忽略的图像播放过程中,其动作会一直持续。因为在运行仿真器的过程中,前馈一步所需要的计算比机器人选取一个动作所需的计算量要少很多。这项技术允许机器人在不显著增加运行时间的情况下粗略的计算k次游戏。我们使用k=4对于所有的游戏。
所有的超参数和优化参数的选取都是根据以下游戏的反馈信息而调整的:Pong ,breakout,seaquest,space invaders 和 beam rider。我们没有绘制高层计算代价的系统性搜索表格。然后,所有的参数在玩其他游戏过程中会固定下来。所有的超参数的描述和值都在扩展表1中提供了。
我们实验性的设置,相当于进行了如下少量的先验知识:输入的数据包含了:视觉图像(用于输入卷积神经网络),游戏的分数(没有修改),采取的动作,尽管没有对应(没有细化哪个是向上的按键)以及生命计数器
评价步骤。训练好的机器人玩30次的游戏,每次5分钟,每次玩游戏是不同的随机初始化。(没有优化,扩展数据表1)并且 。这个过程主要是为了最小化评价过程中的过度拟合的可能。随机的机器人以一个基本的。。。并且以10hz的频率随机的选择动作,这个10hz是每隔6幅图像一个动作的,在内部的图像中维持其动作。10hz这个频率是人类玩家以最快的时间选择“开火”按键的时间,以这个频率设置随机机器人动作可以避免欺骗性的基本分数,以手动玩游戏时候。我们也会以60hz的速度评价机器人随机选择的动作。这样有一个最小的影响:会改变六种游戏的以5%的正常表现,并且在所有的游戏中DQN网络以很小的差距和人类的专业玩家。
专业的游戏测试人员使用和机器人相同的模拟器,并且在控制规则下操作。人类的玩家不允许中途暂停、保存或者重新载入游戏。在原始的Atri2600中,模拟器以60hz的频率进行工作,声音输出是禁止的:像这样,人类游戏者和机器人对输入进行评价。人类的评价是一个回报的平均。即由每个游戏最长5分钟的片段,大约20个片段的平均,每个游戏大约玩两个小时。
算法 我们考虑机器人在一个模拟器组成的环境中和环境进行交互,也就是Atari模拟器,观察当前的状态然后采取一些列的动作,然后获得回报。在每个步骤中,机器人从动作集合 中选择一个合法的动作 。然后,这个动作被输入到模拟器中,模拟器会改变内部的状态和分数。事实上,环境的状态是随机的。模拟器内部的状态机器人是观察不到的;反之,机器人只能通过观察模拟器的输出图像来了解模拟器的状态,它是模拟器当前状态在屏幕上的像素值。此外,机器人获得一个回报,这个回报体现在屏幕的分数上。注意:通常意义上,分数是依赖于之前的一些列的动作的回报;一个动作的反馈会在几千步之后才能获得。
因为机器人仅仅观察当前的屏幕,任务被部分的观察到并且模拟器的状态感觉被别名化了(也就是,从当前的屏幕状态 出发完全地理解当前模拟器的状态是不可能的)因此,动作和观察的序列被输入到算法,然后算法根据这些输入序列学习到策略。在模拟器中,序列假定在一个确定的数量的时间步骤结束。这种形式使得结果得到很大的提升,但是确定的MDP过程中序列是离散的状态。结果,我们可以将标准的强化学习过程应用到MDPs算法中,通过简单的将complete sequence 当做t时间的状态表现。
机器人的目的是通过选择一个能够使未来回报最大的动作而和模拟器进行交互。我们做一个假定:未来回报被一个 折中,(它在整个过程中都是0.99),然后定义t时刻的未来折中回报 ,这里的T是游戏结束时的时间。我们把 定义为通过任意的策略获得的最大回报时的action-value,他观察了一些序列s之后,然后采取一些动作a, = 这里的 是一个动作映射的策略(或者某个动作下的分布)
最优的动作-值函数遵循一个重要的恒等式,也就是贝尔曼等式。它基于一下的直觉:如果序列 的最优动作-值函数的下一阶段的所有的可能采取的动作 都是已知的。然后最优的策略就是选择一个动作 ,使得期望的值 最大:
很多强化学习算法背后的思想都是利用贝尔曼函数作为一个迭代公式,来评价动作-值函数, 这个算法收敛到最优的动作-值函数, 。在实际中,这个基本的方法是行不通的,因为动作-值函数对每个序列的评价都是独立的额,没有泛化。取而代之,使用一个近似的函数来评价动作-值函数, 在强化学习社区中通常选择一个线性的近似函数,有时也使用一个非线性的近似函数,比如神经网络。我们在神经网络函数中设置了一个权值 作为一个Q值网络。这个Q值网络可以通过在第i次的迭代来降低贝尔曼函数的平方差,这里的优化目标 被一个近似的目标函数 ,这里的 是上一次迭代的值。这个改变使得每次都会改变的代价函数 在第i迭代后都会改变,