DeepMind到底是如何教AI玩游戏的?这篇在Medium上获得1700个赞的文章,把里面的原理讲清楚了。
谷歌的DeepMind是世界一流的AI研究团队,其研发的AlphaGo在2016年备受瞩目的人机大战中击败了韩国围棋冠军李世石(Lee Sedol),一战成名。AlphaGo背后的关键技术就是深度强化学习(Deep Reinforcement Learning)。
这篇论文讲了些什么?
这得从4年前说起。
彼时,DeepMind开发了一个AI程序,它能玩Atari公司70年代推出的一系列游戏,如Breakout(打砖块)、弹球游戏《Pong》和《太空入侵者》(Space Invaders)。正是由于这项研究,谷歌收购了DeepMind,同时它也奠定了AlphaGo的基础。
《太空入侵者》
今天我们将逐段解析原研究论文《Playing Atari with Deep Reinforcement Learning》,便于刚开始接触强化学习的读者理解。
本文作者是谁?
本文作者有两个人:我(自动驾驶汽车工程师),Qiang Lu(丹佛大学博士生兼研究员)
如果您计划自学,我们希望我们的文章能帮您节省很多时间和精力。同时我们也希望您:可以评论本文中的任何语句,指出错误,欢迎赐教!
我还要感谢Tambet,他在Intel Nervana上发表了一篇文章(https://www.intelnervana.com/demystifying-deep-reinforcement-learning/),其中涉及到了我们这篇文章中的多个强化学习理论。搭配本文学习,效果更佳!(抱歉,我在本文中频繁换用“你”、“我”和“他们”,这是我的行文习惯)
文章格式:
原论文某一段快照
翻译这段论文
对这段论文做出详细解释
注意:论文编译为紫色字体,解析为黑色字体。
好了,开始吧。
摘要
我们提出了首个可以成功利用强化学习直接从高维感官输入中学习控制策略的深度学习模型。该模型是一种用 Q-learning的变体算法训练的卷积神经网络,其输入是原始像素,输出是预估未来奖励(rewards)的价值函数。我们将该方法应用到Arcade模拟器中的7款Atari(雅达利)2600游戏上,没有对架构或算法做任何调整。最终,在6款游戏中,我们的方法完胜之前的所有方法,并且在其中3款游戏中战胜了一名人类游戏专家。
我们的目的是利用深度学习让机器人学习如何玩Atari游戏。
这里所说的机器人实际上指的是卷积神经网络。它和真正的端对端深度学习差不多,因为卷积网络获取输入的方式和人类游戏玩家相同——直接观察屏幕上的图像,每移动一下就会奖励或改变分数,而网络作出决策时需要的就是这些信息。
那卷积神经网络输出的是什么?
理论上,我们想让网络选择其认为之后能得到最多奖励的动作。但是我们并没有这样做,而是让它给18个可能的游戏手柄动作分配“分值”。简单来说,就是“分值V对应动作A”,即神经网络预估如果执行动作A,未来就会得到分值V。因此这个神经网络本质上是一个价值函数,它将屏幕状态和奖励变化作为输入,输出每种可能动作所对应的分值。这样,你就可以选择分值最高的动作,或者根据编程全面玩家(overall player)的方式选择任何动作。
1 引言
从视觉和语音这样的高维感官输入中直接学习如何控制代理(操作的对象,agent)是强化学习(RL)的一项长期挑战。在相关领域中,大多数成功的RL应用都依赖于人工生成特征以及线性价值函数或策略表示(policy representations)的。显然,此类系统的性能很大程度上依赖于特征表示的质量。
如何让神经网络理解屏幕上游戏中的图像?一种方法是直接将图像输入到神经网络中,不对其作任何处理;另一种方法是,将屏幕上的图像总结为数字形式的信息,输入到神经网络。本论文将第一种方法称为“高维感官输入”,将第二种方法称为“人工生成的特征表示”。
深度学习的最新进展使得从原始感官数据中提取高级特征成为可能,得益于此,计算机视觉[11,22,22]和语音识别[6,7]研究也实现了很多突破。这些研究使用了卷积网络、多层感知器(multilayer perceptrons)、受限玻尔兹曼机(RBM,restricted Boltzmann machines)和循环神经网络等一系列神经网络架构,而且监督学习和无监督学习都有用到。说到这,我们就自然而然想到了这样一个问题:类似的技术能否用来解决强化学习中的感官数据问题?
阅读摘要后,就可以轻松理解本段。
然而,从深度学习的角度来看,强化学习会遇到以下几个挑战:
首先,目前大多数成功的深度学习应用都要求具备大量的手动标注的训练数据;而且,强化学习算法还必须能成功学习大量稀疏、嘈杂且延迟的标量奖励信号(scalar reward signal)。动作和对应的奖励之间的延迟可达数千个时间步长。与监督学习中输入与结果之间的直接关联(direct association)相比,这样的延迟尤显严重。
另一个问题是,大部分深度学习算法都假定数据样本是独立的,而强化学习中通常都是关联度很高的序列样本。
此外在RL中,随着算法学习的新行为,数据分布会发生改变;而深度学习则假设潜在分布是固定的。
在强化学习中,深度学习(DL)方法不像在监督/无监督学习中那么好用。大多数DL应用要求有大量的带有准确样本和标签的训练数据集。但在无监督学习中,目标成本函数仍然很好用。
但是在RL中,你会遇到这样的问题:
奖励可能会延迟很多时间步长(例如在国际象棋中,要走很多步才能吃掉对方的皇后,其他每一步都不能像最后一步那样即时得到反馈奖励,而有些步数可能比最后一步还要重要)。
奖励机制可能很混杂——例如,某一动作对应的分数有时是随机分配的,预测起来很难!
在DL中,我们常常假设输入样本之间没有关联性。例如,在图像识别网络中,训练数据往往包含大量的随机组织的无关联图像。但是在学习如何玩游戏时,动作策略的制定不仅取决于画面的当前状态,而且还要考虑先前的状态和动作。所以,我们不能轻易地假设样本之间互不关联。
为什么训练数据样本要互不关联呢?假设你有5个动物图像样本,你想让网络学习将它们归为“猫”和“不是猫”这两个类别。如果其中一张图像中有猫,这会影响另一张图像归为“猫”类别的概率吗?并不会。但是在视频游戏中,上一帧画面必然与下一帧相关。如果激光束摧毁飞船需要10帧画面,我敢肯定你从第9帧就可以预测到第10帧的结果。在进行学习时,你不应将间隔只有几毫秒的两帧互不相关,因为这两帧明显都携带与对方相关的重要信息。它们都是相同“事实”(激光束射击你的飞船)的组成部分。
而且训练数据本身会随着神经网络学习新策略而发生变化,这就使得网络更难用训练数据。
什么意思呢?比如,你是一个国际象棋新手。你第一次玩国际象棋时使用的是一些初级的策略,比如向前移动棋子,一逮住机会就吃掉对方的兵。当你继续学习这些行为并为吃掉对方的兵感到高兴时,这些走法就相当于你当前的训练集。但是,当有一天你尝试使用一种不同的策略(比如牺牲一个象来救自己的皇后,并吃掉对方的车)时,你会突然发现这个新策略太了不起了,于是便将这个新策略添加到你的训练集中。如果你只是一直练习使用刚开始学习时的初级策略,那么你就永远学不到这个新策略。
不稳定数据分布就是这样形成的,而这种变化通常不会发生在监督/无监督学习中。
面对这些挑战,如何训练神经网络?
这篇论文论证了卷积神经网络可以克服这些挑战,在复杂的RL环境中从原始视频数据学习成功的控制策略。我们用Q-learning 的变种算法训练神经网络,并利用随机梯度下降法更新权重。为了缓解关联数据与不稳定分布带来的问题,我们使用了一种经验回放机制(experience replay mechanism),这个机制可以随机采样之前的转换,因此可以通过大量的历史行为平缓训练数据分布。
在本文中,我们阐述了如何解决上述问题,直接使用原始视频/图像数据。
这里需要说明一个机制——“经验回放机制”,它可以解决“数据关联”以及“不稳定数据分配”(具体解释请参看前文)的问题。
我们记录了所有经验——好比在围棋中,每个经验就像是[当前棋位,移动棋子,获得奖励,新的棋位] ,这些都储存在记忆中。训练时,我们选取随机分布且互不关联的经验集。在每个经验集(batch)中,不同的经验也可能与不同的策略相关联,因为先前所有的经验和策略现在都混为了一体!这不仅会使训练数据样本变得更加随机和关联性更弱,还会使神经网络的训练数据分布更加稳定,因为每个新的经验集已经包含了大量的随机策略经验。
我们将此方法应用到通过ALE(街机游戏模拟器,Arcade Learning Envi-ronment)实现的一系列Atari 2600游戏中。Atari 2600是一个极富挑战的RL测试平台,拥有高分辨率(210×160 RGB,60Hz)视频输入的代理(agent),以及各种有趣的游戏任务,专为人类玩家设计,具有较高的难度。我们的目标是在不提供任何游戏信息、人工设计的视觉特征,以及关于模拟器内部状态的信息的情况下,创建一个神经网络代理,使其能学习玩尽可能多的游戏;它也能学习视频输入、游戏奖励和终端信号,并像人类玩家一样学习一系列可能的动作。此外,该神经网络的架构和用于训练的所有超参数在所有游戏中都保持不变。
截至目前(2013年),这个神经网络已经在7款游戏中的6款上完胜此前所有的RL算法,并且在3款游戏中超越了人类游戏专家的水平。图1展示了用于训练的5款游戏的截屏。
本段大部分内容很容易理解,重点是所有游戏中的神经网络架构和超参数(学习率等)完全相同。我们并没有在《太空入侵者》中使用较大的神经网络,在《乒乓球游戏》(ping-pong)中也使用较小的网络。在每个新游戏中,我们都从零开始训练神经网络,而且神经网络的架构都是相同的。这很了不起,不是吗?
2 背景
在我们选取的任务中,代理通过一系列的动作、观察和奖励与环境(在本研究中为Atari模拟器)进行交互。在每一个时间步长中,代理从一组合理的游戏动作中选一个动作A = {1, ... , K},再将这个动作传到模拟器,改变模拟器内部状态和游戏得分。通常情况下,ε是随机的。代理无法观察到模拟器的内部状态,但它可以从模拟器中观察到
表示当前画面的原始像素的一个向量。另外,代理还会收到表示游戏得分变化的奖励。
注意,通常游戏得分可能取决于先前一系列的动作和观察; 某一动作的反馈可能经过数千个时间步长才能收到。
前几句很容易理解。“ε是随机的”的意思是说环境不一定都是可以预测的(游戏中哪有不变的真理?什么事都有可能随时发生)。
这里重复强调了神经网络不会获得任何关于游戏内部状态的信息。比如,我们不会让神经网络学习“这个位置会有一个怪兽朝你射击并向某一方向移动,你的飞船会在这里出现并移动到那里”等,我们只是输入图像,让卷积神经网络自己确定怪兽在哪儿,玩家在哪儿,谁在朝哪儿射击等等。这就是所谓的像训练人类一样训练神经网络。
由于代理仅观察当前画面中的图像,所以无法全面观察到任务。而且,在感知上,许多仿真器状态在感官上都是混叠的,也就是说,不可能仅根据当前画面就完全了解当前的情况。 因此,我们还要考虑动作、观察序列
并学习基于这些序列的游戏策略。假设模拟器中的所有序列都在有限的时间步长上终止。 这种形式化表达会生成一个庞大却有限的马尔可夫决策过程(Markov Decision Process,MDP),其中每个序列都是一个不同的状态。因此,我们可以将完整的序列作为t时刻的状态表示,在马尔科夫决策过程中使用标准的强化学习方法。
感知混叠:指的是两种不同的状态或位置在感知上被视为相同。比如,在一栋建筑中,如果只借助视觉信息,几乎不可能确定某一位置,因为所有走廊可能看起来都相同。感知混叠就是这样一个问题。
在Atari游戏中,每毫秒的游戏状态不会发生多大变化,人类也无法在毫秒内做出决策。因此当输入每秒60帧的视频时,我们将每帧看作一个单独的状态,训练数据中的大部分状态看起来几乎都一样!因此,我们选择隔几帧(比如至少4到5帧)观察一下“状态”。我们将之称为连续帧序列,并将一个序列作为一个状态。此外,当人类玩家移动游戏手柄时,数毫秒内游戏手柄通常都保持不动,这会包含到状态中。
每一帧都会持续执行相同的动作。每个序列(包括数帧和各帧之间相同的动作)都是一个单独的状态,而且这个状态仍然适用于马尔可夫决策过程(MDP)。
如果你研究过RL,你就会知道MDP是什么以及它们的作用有哪些!MDP是RL中的核心假设。
代理的目标是通过以最大化未来奖励的方式选择动作,与模拟器进行交互。我们做出标准假设:惩罚(惩罚因子γ)每个时间步长的未来奖励,并将时间t的惩罚后的未来奖励定义为:
其中T是游戏终止的时间步长。我们将最优动作值函数
定义为通过遵循任何策略可实现的最大预期奖励,在观察到某序列s后采取某种行动a后,
其中π是将序列映射到动作(或动作分布)上的策略。
要想理解这部分内容,你首先要有一些强化学习和Q-Learning算法的背景知识。你应该理解贝尔曼方程(Bellman equation)的作用、什么是惩罚后的未来奖励等。我在这里会给出一个非常简单的Q-Learning算法说明。
上文中我们提到了“价值函数”,不记得的话再重新阅读一下摘要。
现在假设你有一个这样的表格,表格的行代表所有可能的游戏状态,列代表所有可能的游戏手柄动作。每个单元格代表如果你执行某一动作而且在之后的游戏中发挥了最佳水平的话所能获得的最大未来总奖励。这意味着你现在有一张“作弊纸条”,它会告诉你在任何状态中执行某一动作会产生什么结果!这些单元的分值被称为Q-star值(Q*(s,a)):对于状态s,如果执行动作a,表格就会给出最大未来分值Q*(s,a)。
在最后一行中,π代表“策略”。策略是指在某一状态中选择执行哪种动作的决策方法。
最优动作值函数遵循一个名为贝尔曼方程的重要函数。 这是基于以下直觉:如果下一个时间步长的序列的最优值
对所有可能的动作都是已知的,则最优策略是选择最大化
预期值的动作
(1)
假设你处在状态S1,你从表格(第3段有解释)中获知了所有可能动作的Q*值,然后选择了A1,因为A1的Q*值最高。你得到一个奖励R1,游戏进入到另一个不同的状态S2。在S2中,(例如)选择表中的A2,就会获得最大未来奖励。
现在,初始Q*值——Q*(S1,A1)就是你从此状态起发挥最佳游戏水平所能得到的最大分值,这意味着Q*(S1, A1)应该等于奖励R1与下一状态的最大未来奖励Q*(S2,A2)之和!我们的目的是减小下一状态的影响,因此我们将Q*(S2,A2)乘以γ(0到1之间),这就是所谓的惩罚(discount)Q*(S2,A2)。
因此 Q*(S1,A1) = R1 + [γx Q*(S2,A2)]
许多强化学习算法背后的基本思想都是通过将贝尔曼方程作为迭代更新来估计动作值函数的
这种价值迭代算法可以收敛为最优动作值函数,即,
。实际上,这种方法是完全不切实际的,因为每个序列的动作值函数都是分别估计的,没有任何通用性。相反,我们常使用函数逼近器来估计动作值函数
强化学习中经常使用的都是线性函数近似器,但是有时也会使用非线性函数近似器,如神经网络。我们将权重为θ的神经网络函数近似器称为Q网络。我们可以通过最小化在每次迭代i改变的一系列损失函数来训练Q网络,
(2)
其中
是迭代i的目标,是序列s和动作a的概率分布,我们将之称为行为分布。当优化损失函数时,前一迭代的参数保持不变。
注意,目标取决于网络权重; 这与用于监督学习的目标形成对比,这些目标在学习开始之前就保持不变。
对关于权重的损失函数进行差分,我们可以得到以下梯度
(3)
我承认读了我的解释后你也许仍会发现这部分很难理解。在这里多花些时间。
再捋一遍之前的方程。
我们假设“已知”任何状态以及任何未来动作的价值函数,并能借助函数选出当前状态的最优动作(通过对所有可能的Q值进行迭代,我们可以真正地预测未来)。但实际上,这样的Q函数根本不存在!我们能做的最多是使用另一函数来“近似”Q函数,并通过重复测试该近似函数来一点一点对它进行更新。这个近似函数可以是简单的线性多项式,也可以是非线性函数。因此我们选择一个神经网络作为我们的“近似Q函数”。现在你应该明白我们为什么要研读这篇论文了吧。DeepMind先使用神经网络近似Q函数,然后再借助该网络预测最优动作,从而让计算机学习玩ATARI游戏。学习一定时间后,计算机会更好地理解奖励的运作机制,而且还会自行调整神经网络(通过调整权重),这样网络就会越来越远接近“真实的”Q函数!当达到足够好的近似程度时,我们发现该网络的预测能力竟然能超越人类。
通常我们选择通过随机梯度下降法来优化损失函数(这样计算起来更快捷),而不是计算上述梯度的完整期望值。如果在每个时间步长后更新权重,分别用行为分布ρ和模拟器 ε 中 的单个样本替换期望,我们就会得到熟悉的Q-Learning算法[26]。
注意,该算法是无模型的:它直接使用来自仿真器 ε 的样本来解决强化学习任务,但并未特别构建 ε 的模型。该算法也是离策略性的:它学习极大值策略,同时遵循能够确保充分探索状态空间的行为分布。在实践中,行为分布通常是通过 ε 极大值(ε-greedy)策略来选择的,该策略遵循以概率为 1- ε 的极值策略,并选择概率为 ε 的随机动作。
现在先不管上面的一团数学推导(对我来说也很难!)。已知Q-learning算法是一种“无模型 ”算法。“无模型”的强化学习指的是代理不需要特别学习游戏的规则或物理学。在基于模型的强化学习中,常常需要根据用来计算下一状态的“转换矩阵”(给定某一当前状态和动作)以及用于计算奖励的“奖励函数”(给定某一当前状态和动作),来定义这些规则和物理学(physics)。
在本研究中,这两个元素因太过复杂而难以计算。仔细想想,我们并不需要它们!在这个“无模型”的方法中,我们只需要通过测试和试验来学习Q值函数,因为我们假设优秀的Q值函数本来就会遵循游戏的规则和物理学。
我们所用的方法是混合的。这样方法的差异颇为微妙,因为既有策略性的也有离策略性的。
假设处于状态s,需要从几个动作中选择一个动作。我们已知一个Q值函数的近似函数,我们计算了其中每个动作的近似Q值。当选择动作时,我们有两种选择方法。其中的“greedy”方法是选择Q值最大的动作,这是一种“极大值”策略,始终根据对游戏的现有理解来选择当前最有利的动作。但是开始时你并不知道Q值函数的近似函数,即使有一个好的策略,你仍然会想让AI检查其他可能的策略并预测各策略的结果。
这就是为什么“极大值”策略并不一定有效的原因。当进行学习时,你不会只想一直尝试你认为会有效的方法,你还会想尝试其他可能有效的方法,而且这样做还可以获得经验。
这就是策略性(极大值)和离策略性(非极大值)之间的差异。
为什么说我们使用的方法是混合的呢?因为我们会根据网络学到了多少,来换着使用方法。我们依据代理会选择哪个最优动作来改变概率。
这是怎么做到的?我们将概率设为(1-e)来选择最优动作,其中e为代表选择随机性的变量。因此,e=1代表选择是完全随机的,而e=0则表示始终选择最优动作。
首先,当网络刚开始学习时,我们将e值设定为非常接近1 ,因为我们想让AI系统探索尽可能多的策略。随着时间的推移,AI系统学会越来越多的策略,我们再将e值缩小到趋近于0,这样该AI系统就会停留在某一策略上。
3.相关工作
最著名的增强学习案例也许就是TD-gammon,这是一个完全通过强化学习和自我游戏学习的西洋双陆棋游戏程序,它的游戏水平超越了人类[24]。TD-gammon使用的是一种类似于Q-learning的无模型强化学习算法,它用带有一个隐藏层的多层感知器来近似价值函数。
Qiang:西洋双陆棋游戏是最受科学家喜爱的游戏,他们常常用这个游戏来测试他们的人工智能系统和机器学习算法。参考[24]使用的是一种无模型算法,这种算法的游戏水平超越了人类。无模型意味着算法的输入(屏幕上的图像)和输出(发现的最佳游戏策略)之间没有明显的等式关系。
Q-learning中的“Q”代表“质量(quality)”。当我们在某一状态中执行某一动作时,我们会使用Q函数来表示惩罚后的最大未来奖励。从这个状态起,之后的状态都始终执行最优策略(游戏策略)。
参考[24]中的方法的不同之处在于:他们用多层感知器(multi-layer perceptron ,MLP)来近似Q值函数。在他们用的MLP中,输入层和输出层之间包含有一个隐含层。
早期研究人员在TD-gammon的基础上进行了很多研究,包括将相同的方法应用于国际象棋、围棋和跳棋,但是都没有取得多大的成果。这使得人们广泛认为TD-gammon方法只在西洋双陆棋上有效;也许是因为骰子投掷的随机性有助于神经网络探索状态空间,而且还能使价值功能特别平滑[19]。
Qiang:类似的方法无法成功地应用于其他游戏,这使得人们不信任TD-gammon方法,他们将该方法在西洋双陆棋上的成功归因于骰子投掷随机性。
此外,试验结果表明,无模型强化学习算法(如Q-learning算法)与非线性函数的近似函数[25],或者与离策略学习[1]结合可能会导致Q神经网络出现发散。因此,强化学习的大多数研究都集中在收敛性更好的线性函数近似函数上 [25]。
回顾前面几段,我们可以看出哪种函数可以用来近似理论上完美的Q值函数。显然,线性函数比非线性函数适合。
拿神经网络来说,线性函数可以使神经网络更易于收敛(神经网络调整权重的方式变得更加准确,而不是变得更加随机)。
最近,人们开始重新将目光投向深度学习与强化学习的结合上。他们利用深层神经网络估计环境 ε,用受限玻尔兹曼机器估计价值函数[21]或策略[9]。此外,Q-learning算法的发散问题也已经借助梯度时序差分学习法(gradient temporal-difference methods)得到部分解决。当使用非线性函数的近似函数来评价固定策略时;或者借助Q-learning算法的受限变体来通过线性函数近似函数学习控制策略时[15],试验证明这些方法都是收敛的[14]。但是,这些方法还未扩展到非线性控制函数。
Qiang:最近,研究人员又开始研究深度学习和强化学习的结合。他们使用深度学习算法估计环境、价值函数和策略。同时,又用梯度时序差分学习法部分解决了发散问题。但是正如论文所述,这些方法只能适用于非线性函数的近似函数,不能直接应用于非线性函数。
先前研究中与我们的方法最相似的是神经拟合Q学习(NFQ)[20]。NFQ使用RPROP算法来更新Q网络中的参数,优化等式2——
中的损失函数序列。
但是,它使用的是批量更新,每次迭代的计算成本与数据集的大小成比例;而我们使用的是随机梯度更新,每次迭代的固定成本较低,并且更新可扩展到大数据集中。NFQ也已成功应用于使用纯视觉输入的简单控制任务中[12]。在此类任务中,首先使用深度自编码器学习任务的低维表示,然后将NFQ应用于该表示[12]。而我们的方法是,从视觉输入端开始直接以端到端方式应用于强化学习。因此,它可以学习到与辨别动作值直接相关的特征。研究人员之前曾将 Q-learning算法与经验回放和简单的神经网络相结合[13],但是网络先学习的是低维状态,而不是原始的视觉输入。
Qiang:NFQ与本论文中的方法最为类似。NFQ的主要原理是使用RPROP(弹性反向传播算法)更新Q网络的参数,优化等式2中的损失函数序列。而它的弊端则在于:由于NFQ使用的是批量更新,所以其计算成本与数据集大小成比例。本论文使用的是随机梯度更新法,这种方法在计算上更加高效。NFQ只能应用于简单的任务,不能应用于视觉输入,而本论文的算法可以进行端对端的学习。另一篇关于Q-learning算法的论文也使用的是低维状态,而不是原始的视觉输入;本论文克服了这个缺点。
[3]提出将Atari 2600模拟器作为强化学习平台,论文作者通过线性函数的近似函数以及通用视觉特征应用了标准强化学习算法。然后,使用更多的特征来改进结果,并用tug-of-war 散列法(hashing)来将特征随机映射到低维空间中[2]。 HyperNEAT进化架构[8]也被应用于Atari平台,用来(分别针对每款不同的游戏)形成一个表示游戏策略的神经网络。 当用模拟器的重置机制来与确定性序列做反复对抗训练时,我们发现这些策略可以利用几款Atari游戏中的设计缺陷。
Qiang:本段提出了Atari 2600模拟器的几种应用。在第一篇论文中,Atari 2600模拟器作为强化学习平台,作者借助线性函数的近似函数以及通用视觉特征应用了标准强化学习算法;使用更多特征并将特征映射到低维空间中,以改进结果;然后再利用HyperNEAT进化架构分别为每款游戏形成一个神经网络。这个神经网络可表示游戏策略,并且经过训练后还可以利用某些游戏中的某些设计缺陷。但是如该论文所述,此算法无需调整网络架构,就可以学习7款Atari 2600游戏的策略。
4 深度强化学习
计算机视觉和语音识别领域最近取得的一些突破,靠的就是可以在大型训练集上高效地训练深度神经网络。 其中最成功的方法是通过使用基于随机梯度下降的轻量级更新,直接用原始输入进行训练。向深度神经网络输入足够多的数据,这样常常可以学习到比人工生成的特征更好的表征[11]。
这些成功案例为我们的强化学习方法提供了启发。我们的目标是将强化学习算法与深度神经网络对接起来,这里所说的神经网络可以直接学习RGB图像,并通过使用随机梯度更新来有效地处理训练数据。
很容易理解吧?
Tesauro的TD-Gammon架构为这种方法提供了一个起点。该架构利用算法与环境的直接交互(或通过自玩,西洋双陆棋)产生的策略性经验样本,对价值函数估计网络的参数进行更新。由于该算法在20年前能超越了水平最高的人类西洋双陆棋玩家,所以我们想知道,二十年的硬件改进以及现代深度神经网络架构和可扩展RL算法是否能让强化学习实现重大进展。
TD Gammon是一种策略性方法,它直接使用经验(s1, a1, r1, s2)训练网络(无经验回放机制等)。
不同于TD-Gammon和类似的在线方法,我们使用了一种叫做“经验回放”的方法[13]:将代理在每个时间步长上的经验储存在数据集中,将许多episode汇集成回放记忆。在算法进行内部循环时,我们将Q-learning算法更新或小批量更新应用于经验样本e〜D,这些样本是从存储样本池中随机抽取的。 执行经验回放后,代理根据 ε 在完成经验回放后,代理会根据最大值策略选择并执行某一项动作。 由于用任意长度的历史表征作为神经网络的输入较难实现,所以我们的Q函数使用的是函数φ生成的固定长度的历史表征。 算法1给出了完整的算法,我们将之称为深度Q-learning算法。
本段阐述的是对TD Gammon作出的某些改进。第一个改进是经验回放,上文有说明。函数φ的作用是预处理图像等,因此我们将游戏的状态储存为最终预处理后的形式(下一部分会作进一步解释)
相比标准的在线Q-learning算法,这种方法具有以下几个优点[23]。
首先,每一时间步长上的经验都可用于多个权重更新,这样可以提高数据效率。
其次,由于样本之间存在很强的相关性,直接学习连续样本效率很低;随机化样本会破坏这些相关性,减少更新的方差。
第三,当学习策略时,当前的参数确定用于训练参数的下一数据样本。例如,如果最大化动作是向左移动,训练样本将由左侧的样本主导;如果最大化动作切换到右边,训练数据分布也会切换到右边。很容易看出,这样可能会产生不必要的反馈循环,并且参数也可能会被困在局部最小值,甚至发生严重的发散[25]。通过使用经验回放,在先前状态下的行为分布就会得到变得均匀,这样学习过程就会变得平缓化,并参数也不会出现振荡或发散。
请注意,当借助经验回放机制学习时,一定要学习离策略算法(因为我们当前的参数与用于生成样本的参数不同),这启发了我们选择Q-learning算法。
使用经验回放法有几个实际的优势(本段在下一页继续)。
第一,和常规的深度学习一样,每个数据样本都可重新使用多次,用以更新权重。在进行训练时,同一经验我们也可以使用多次,这是对数据的高效利用。
第二个和第三个优势非常相关。因为每个状态都与其之后的下一状态密切相关(玩视频游戏时也是一样),用连续状态训练权重会导致程序只遵循一种游戏玩法。根据Q函数预测一个动作,执行这个动作,然后更新权重,这样下次你就很可能会向左移动。如果打破这个模式,从先前的经验中随机抽取样本,就可以避免这些不必要的反馈循环。
在实际当中,我们的算法仅在回放记忆(replay memory)中存储最后N个经验元组(tuples),并且在执行更新时均匀地从D中随机采样。 这种方法在某些方面有一定局限,因为存储缓冲器(memory buffer)并不区分重要的转移(transitions);而且由于存储容量N有限,存储缓冲器总是用最新的转移重写记忆。同样,均匀采样使得回放记忆中的所有转移具有相等的重要性。 更复杂的抽样策略可能会强调可以提供最多信息的转换,类似于优先扫除(Prioritized Sweeping) [17]。
从经验回放中收取简单样本固然是种好方法,但是有时你会想让代理学习游戏中的某一重要的转换。这就是该论文当前方法的一个局限。相关建议是:在使用经验回放时,选择概率更大的重要转移,或者采取其他类似操作。
(下文的所有内容都是基于前文中阐述的理论,很大一部分内容都是技术细节)
4.1预处理和模型体系结构
直接使用原始的Atari框架(128色调色板的210×160像素图像)可能在计算上要求很高,所以我们应用了一个基本的预处理步骤来减少输入维数。进行预处理时,首先将原始帧的RGB表示转换成灰度(gray-scale),并将其下采样(down-sampling)成110×84图像。通过从图像上裁剪一个可以大致捕获到游戏区域的的84×84画面,获得最终的输入表征。 然后进行最后的裁剪,因为我们使用的是[11]的2D卷积GPU实现,需要方形的输入图像。在该论文的实验中,算法1的函数φ将该预处理过程应用于历史记忆的最后4帧,并将它们叠加(stack)以生成Q函数的输入。
本段大部分内容很容易理解。状态S经过预处理后包含4个不同的帧,然后通过预处理将它们转换为灰度,调整尺寸并裁剪为84x84的方形图像。我的观点是,由于游戏每秒运行24多帧,人类的反应速度根本无法保证能在每一帧中都执行一个动作,因此合理的方法是在相同的状态中一次考虑4个连续的帧。
用神经网络参数化Q函数的方法有好几种。 由于Q函数可以将历史动作对映射到其Q值的标量估计上,所以先前的一些的方法将历史和动作作为神经网络的输入[20,12]。 这类架构的主要缺点是需要单独进行一次前向传递(forward pass)来计算每个动作的Q值,这样会导致成本与动作数呈正比。 在我们使用的架构中,其中每个可能的动作都对应一个单独的输出单元,神经网络的输入只有状态表征。 输出则对应于输入状态的单个动作的预测Q值。 这类架构的主要优点是只需进行一遍前进传递,就可以计算某一给定状态下所有可能动作的Q值。
在构建网络架构时,你可以将S1和A1作为Q函数的输入,分别输出它们的Q值。但是这意味着在每一步中,该网络都必须全部运行一遍18种可能的游戏手柄操作,并比较这18种操作对应的输出。但是,我们可以只将S1作为输入,并使每个输出对应于某一给定游戏手柄操纵的Q值。用这种方法比较Q值要方便多!
下文描述七个Atari游戏所使用的架构。 神经网络的输入是由φ产生的84×84×4图像。 第一个隐层用16个步长(stride)为4的8×8过滤器与输入图像进行卷积, Rectifier激活函数的非线性为[10,18]。 第二个隐层用32个步长为2的4×4滤波器进行卷积,应用同样的Rectifier激活函数非线性。最后一个隐层为完全连接层,由256个Rectifier激活函数单元组成。输出层是一个线性的完全连接层,每个有效的动作对应一个输出。在我们研究的游戏中,有效动作的数量在4到18之间变化。我们把用该方法训练的卷积网络称为深度Q网络(DQN)。
5 试验
截至目前,我们用7款流行的ATARI游戏进行了试验——Beam Rider、Breakout、Enduro、Pong、Q*bert、Seaquest和Space Invader。在这7款游戏中,我们使用相同的网络架构、学习算法和超参数设置,以证明我们的方法还是能够在不获取特定游戏信息的条件下成功应用于多种游戏中。当在真实且未改动的游戏中对代理进行评估时,我们在训练期间只对游戏的奖励机制作出了一个改变。由于各游戏的得分范围大不相同,我们将所有正奖励都设定为1,将所有负奖励设定为-1,无变化情况设为0奖励。这样的奖励设置可以限制误差范围,便于在多种游戏中使用同一学习率。同时,该奖励机制还会影响代理的表现,因为它无法区分不同大小的奖励。
前一半内容很容易理解。后一半讲的是该试验的要点:奖励作为代理的输入,而本试验改变了奖励的性质。因此,只要是正奖励就输入+1,负奖励则输入-1,无变化则输入0。这当然与真实有效的工作原理不同——奖励始终在变化,完成某些些任务获得的奖励要比完成其他任务获得的奖励高。尽管如此,在某些游戏中代理的表现还是超越了人类玩家!
在这些试验中,我们使用的是minibatch size = 32的RMSProp算法。训练中的行为策略为:ϵ-greedy的ϵ在前100万帧从1 线性下降到0.1,然后保持在0.1不变。我们共训练了100万帧,并使用了最近100万帧的回放记忆。
我们在第2部分中解释了e-greedy以及经验回放。本段讲的是它们的实现细节。
在按照前文中的方法玩Atari游戏时,我们还使用了一种简单的跳帧(frame-skipping)方法[3]。更确切地说,代理在每kth帧而不是在每一帧观察并选择动作,在跳过的帧中则重复它的最后一个动作。由于模拟器向前运行一步需要的计算量少于代理选择一个动作的计算量,这种方法可以使代理在不大幅增加运行时间的情况下将游戏次数增加约k倍。除了《太空入侵者》(Space Invader),我们在其他游戏中都将k设为4,如果在这款游戏中将k设为4,就会看不见激光,因为跳过的帧与激光闪烁的时长相重叠。将k设定为3就可以看到激光,k值的改变就是不同游戏间的唯一超参数差异。
本段讲的是作者每个状态使用4帧而不使用1帧的原因。
5.1 训练和稳定性
在监督学习中,通过使用训练集和验证集评估模型,我们可以轻易地追踪模型在训练期间的性能。但是在强化学习中,在训练期间准确评估代理的性能可能会十分困难。如[3]s所述,我们的评估指标是在若干游戏中代理在某一episode或游戏中得到的总奖励的平均值。而且我们在训练中周期性地计算该指标。总奖励均值指标(average total reward metric)往往很嘈杂(noisy),因为权重的小小改变可能会导致策略访问的状态的分布发生很大的变化。图2中最左侧的两个线图显示了总奖励均值在游戏Seapuest和Breakout的训练期间是如何变化的。这两个总奖励均值线图确实很嘈杂,给人的印象是学习算法的运行不稳定。
右侧的两个线图则较为稳定,指标是指策略的预估动作分值函数Q,该函数的作用是预测在任何给定状态下代理遵循其策略所能获得的惩罚后的奖励。我们在训练开始前运行某一随机策略,收集固定数量的状态,并追踪这些状态的最大预测Q值的均值。从图2最右侧的两个线图可以看出,预测平均Q值的增加趋势要比代理获得的总奖励的均值平缓得多,其余5个游戏的平均Q值的增长曲线也很平缓。除了预测Q值在训练期间有较为平缓的增长,我们在试验中未发现任何发散问题。这表明,除了缺乏理论上的收敛保证,我们的方法能够使用强化学习信合和随机梯度下滑以稳定的方式训练大型神经网络。
本段讲的是在训练期间使用的评估指标。在监督学习中,我们可以通过验证准确性(validation accuracy)来评估模型性能,但是在强化学习中并没有可用来作比较的验证集。那么有什么其他方法可用于检查模型是否在朝着某一目标训练或者权重是否只是在乱变化?本论文的目标是构建一个能在游戏中获得高分的AI代理,何不使用总得分作为我们的评估指标呢?我们可以让模型玩多款游戏,收集平均总得分。
但是在实际中,这种指标的评估效果并不好,因为它会十分嘈杂。还有什么其他指标呢?我们在本实验中的另一目标是找出一种可以确保获得最高得分的“策略”(如前文所述,这是一种离策略学习)。任何特定时刻的Q值代表AI代理预期的未来总奖励。如果AI代理找到了一种好策略,那么该策略的Q值就更高,对吗?现在让我们研究一下Q值本身是否能作为评估指标。实验结果表明,Q值似乎比平均总奖励更为稳定。但是这种方法并没有合理的理论解释,它只是碰巧可行而已。(实际上深度学习中这种情况很常见。某些方法是可行的,而其他某些方法虽然理论上可行但实际不可行。例如Dropout,这种方法虽然看起来天马行空但是却十分有效)
5.2 可视化价值函数
图3给出了游戏Seaquest中学到的价值函数的可视化形式。从图中可以看出,当屏幕左侧出现敌人后预测值出现跳跃(点A)。然后代理想敌人发射鱼雷,当鱼雷快要集中敌人时预测值达到最高点(点B)。最后当敌人消失后预测值差不多恢复到原始值(点C)。图3表明我们的方法能够在较为复杂一系列的事件中学习价值函数的变化方式。
本段很简单,描述了价值函数在游戏中不同动作中的变化方式。
5.3 主要评估
我们将我们的结果与强化学习文献[3,4]中提出的方法(该方法效果最好)进行了比较。该方法被称为“Sarsa”,Sarsa算法借助为Atari任务人工设计的多个特征集来学习线性策略,我们在[3]中给出了表现最佳的特征集的得分。Contingency法的基本思路和Sarsa法相同,但是该方法可以通过学习代理控制范围内的屏幕区域的表征,来增强特征集[4]。
注意,这两种方法都通过背景差分法(background subtraction)吸纳了大量关于计算机视觉问题的知识,并将128种颜色中的每种颜色都作为一个单独的通道。由于许多Atari游戏中每种类型的目标所用的颜色通常都各不相同,将每种颜色作为一个单独的通道,这种做法类似于生成一个单独的二元映射(binary map),对每种目标类型进行编码。相比之下,我们的代理只接收原始RGB屏幕截图输入,并且必须学习自行检测目标。
本段将本论文的结果与本领域先前研究的结果进行了对比。“Sarsa”指的是[s1,a1,r,s2,a2],这是一种策略学习算法(与我们的离策略学习形成对比)。这两种方法间的差异不是很容易理解,可以参考以下资料:
https://studywolf.wordpress.com/2013/07/01/reinforcement-learning-sarsa-vs-q-learning/
https://stackoverflow.com/a/41420616
本段的其他部分很容易理解。
除了给出学习代理(learned agents)的得分,我们还给出了人类专业游戏玩家的得分,以及一种均匀地随机选择动作的策略。人类玩家的表现将表示为玩了两小时游戏后得到的奖励中值。
注意,我们给出的人类玩家的得分要比Bellemare等人论文[3]中给出的得分高得多。至于学习方法,我们遵循的是Bellemare等人的论文[3,5]中使用的评估策略,并且我们还通过将 ε 设定为0.05运行 ε 极大值( ε -greedy)策略来获得固定步数的平均得分。表1的前5行给出了所有游戏的各游戏平均得分。在这7款游戏中,我们的方法(DQN法)虽然没有吸纳任何关于输入的先验知识,结果还是大幅超越了其他学习方法.
看看他们的方法到底有多好!
原文发布时间为:
本文作者:
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号