PDF 物理页索引 230
文件中的第 231 页 · 印刷页码:未识别
本章要点
08 强化学习<sub>,</sub>让AlphaGo名声大噪的幕后推手
在最纯粹的形式下,强化学习不需要任何被标记的训练样本。代替它的是一个智能体,即学习程序,在一种特定环境(通常是计算机仿真环境)中执行一些动作,并偶尔从环境中获得奖励,这些间歇出现的奖励是智能体从学习中获得的唯一反馈。
强化学习的目标是:让智能体自己学习并获得能对即将到来的奖励进行更好的预测的值,前提是智能体在采取相关行动后一直在做正确的选择。正如我们将看到的,习得给定状态下特定动作的值通常需要经过许多次的试错。
尽管计算机程序可能不会对一个吻或一句热情的“你是最棒的”做出反应,但是它可以被设置为能够对与这种赞美等价的奖励做出响应,比如向机器的内存中添加正数,然后算法会告诉机器如何从自己的经验中学习。
强化学习的实践者几乎都会构建机器人和环境的模拟,然后在模拟世界而非在现实世界中执行所有的学习片段,然而,环境愈复杂和不可预测,将机器人在模拟中学到的技能转移到现实世界的尝试就愈加难以成功。迄今为止强化学习最大的成功不是在机器人领域,而是在那些能够在计算机上进行完美模拟的领域,特别是游戏领域。
PDF 物理页索引 231
文件中的第 232 页 · 印刷页码:未识别
09
学会玩游戏<sub>,</sub>智能究竟从何而来
从最早的人工智能研究开始,其爱好者就一直痴迷于创造能够在游戏中打败人类的程序。20世纪40年代末,计算机时代的两位开创者艾伦·图灵和克劳德·香农都写过下棋程序,那时甚至还没有计算机可以运行他们的代码。在接下来的几十年里,许多年轻的游戏迷受到鼓舞去学习了编程,就为了能让计算机来玩他们喜欢的游戏,无论是跳棋、国际象棋、五子棋、围棋、扑克,还是后来才出现的电子游戏。
2010年,年轻的英国科学家兼游戏爱好者戴米斯·哈萨比斯与他的两位密友在伦敦创办了一家名为DeepMind的科技公司。哈萨比斯是现代人工智能界中一个有趣的传奇人物,他是一个在6岁前就获得过国际象棋比赛冠军的神童,15岁时开始专职编写电子游戏程序,22岁时创办了自己的电子游戏公司。除了创业活动,哈萨比斯还在伦敦大学学院获得了认知神经科学博士学位,以进一步实现他构建受人脑启发的人工智能的目标。哈萨比斯和他的同事创立DeepMind是为了解决人工智能领域真正根本的问题 <sup>1</sup> 。DeepMind团队将电子游戏视为解决这些问题的绝佳场景,这也许并不令人感到意外。在哈萨比斯看来,电子游戏像是现实世界的缩影,但更纯净并且更易被约束2
PDF 物理页索引 232
文件中的第 233 页 · 印刷页码:未识别
无论你对电子游戏持何种立场,如果你更倾向于纯净且受控制,而非真实,你可能会考虑创建人工智能程序来玩20世纪七八十年代的雅达利电子游戏,这正是DeepMind团队决定要做的事。你的年龄和兴趣可能会令你记得雅达利发行过的一些经典的游戏,比如《银河小行星》(Asteroids )、《太空入侵者》(Space Invaders )、《乒乓》(Pong )和《吃豆人》(Pac-man )。这其中有你熟悉的游戏吗?这些游戏的图形界面并不复杂,由操纵杆控制的游戏对小孩子而言特别容易学,但要让一个成年人保持兴趣却很难。
比如这个名为《打砖块》(Breakout )的单人游戏,如图9-1所示,玩家使用操纵杆来回移动一个“球拍”(右下角的白色矩形),图中的白色小球可以从球拍上弹起来击中不同颜色的矩形“砖块”(带有图案的矩形),球也能从两边的灰色“墙壁”上弹回来。如果球击中了其中一个砖块,砖块就会消失,玩家因此获得点数,然后球会弹回来。白色小球击中高层的砖块要比击中低层的砖块得到的点数更多。如果球触到“地面”(屏幕底部),玩家将失去5条“生命”中的一条,如果玩家还有剩余生命,一个新球就会加入游戏。玩家的目标是利用他们的5条生命尽可能获得高分。
PDF 物理页索引 233
文件中的第 234 页 · 印刷页码:未识别
这里有一个有趣的补充说明。《打砖块》游戏是雅达利为其大获成功的《乒乓》游戏开发单人模式的成果,其设计和实现任务最初是在1975年被分配给了一名20岁的名叫史蒂夫·乔布斯(Steve Jobs)的员工,没错,就是那个后来成为苹果公司联合创始人的史蒂夫·乔布斯。由于当时的乔布斯缺乏足够的工程技能来做好《打砖块》,所以他邀请了他的好朋友——25岁的史蒂夫·沃兹尼亚克(Steve Wozniak)来帮忙,沃兹尼亚克后来成为苹果公司的联合创始人。沃兹尼亚克和乔布斯用了4个晚上的时间完成了《打砖块》的硬件设计,每天都是在沃兹尼亚克完成白天在惠普的工作后开工。《打砖块》一经发行,就像《乒乓》一样,在游戏玩家中广受欢迎。
如果你也有些怀旧,但却没有保留你老旧的雅达利2600游戏机,你仍然可以找到许多至今还提供《打砖块》和其他游戏的网站。2013年,一批加拿大人工智能研究人员发布了一个名为“街机学习环境”的软件平台,从而使得用这个平台上的49个游戏来测试机器学习系统变得简单了 <sup>3</sup> 。这也是DeepMind团队在强化学习研究工作中使用的平台。
PDF 物理页索引 234
文件中的第 235 页 · 印刷页码:未识别
深度Q学习<sub>,</sub>从更好的猜测中学习猜测
DeepMind团队将强化学习,尤其是Q学习,与DNN相结合,创建了一个能够学习玩雅达利电子游戏的系统。该小组把他们的方法称作深度Q学习(deep Q-learning)。为了解释深度Q学习如何工作,我将使用《打砖块》作为一个案例,DeepMind在他们测试的所有雅达利游戏中都使用了这一方法。这儿的内容会有些技术性,所以请做好准备(或直接跳到下一部分)。
回想一下我们是如何使用Q学习来训练机器狗罗茜的。在一个Q学习的片段中,智能体罗茜在每次迭代过程中都会执行以下操作:首先弄清楚当前的状态,在Q表中查找当前状态,根据表中对应的值选择一个动作,接着执行该动作,然后可能会得到一次奖励,最后一步是学习,即更新其Q表中的值。
DeepMind的深度Q学习与上述过程完全相同,只不过深度Q学习是用ConvNets来替代Q表。按照DeepMind的说法,我将这个网络称为深度Q网络(deep Q-network, DQN)。图9-2展示了一个类似于DeepMind用于学习《打砖块》的网络的DQN,只是这个相对更简单一些。DQN的输入是系统在某个给定时间的状态,此处被定义为当前的帧(当前屏幕的图像)加上之前的三帧(前三个时步 <sup>(28)</sup> 的屏幕图像)。这一状态定义为系统节省了少量内存,是非常有用的。给定输入状态,网络的输出是每个可能操作的估计值。可能的操作包括:向左移动球拍、向右移动球拍,以及无操作,即不移动球拍。这里的网络是一个与我在第04章中描述的几乎相同的ConvNets。在深度Q学习中,算法学习到的是网络中的各种权重值,而不是我们在罗茜示例中看到的Q表中的值。
PDF 物理页索引 235
文件中的第 236 页 · 印刷页码:未识别
DeepMind的系统在经历多个片段后学会了《打砖块》。每一片段对应游戏的一局,片段中的每次迭代对应系统执行的某个单一动作。在每次迭代中系统将其状态输入DQN,并根据DQN的输出值选择一个动作。系统并不总是选择具有最高估计值的动作,正如我之前提到的,强化学习需要在探索与坚持之间取得一个平衡。 <sup>4</sup> 系统执行其选择的动作,例如,将球拍向左移动一定距离,如果球碰巧击中其中一块砖,则可能会获得一次奖励。然后系统执行一个学习步骤,即通过反向传播更新DQN中的权重。
如何更新权重?这是监督学习和强化学习之间的核心差异。你可以回想一下前几章的内容,反向传播的工作原理是通过改变神经网络的权重以减少网络输出的误差。在监督学习中,测量这种误差非常直截了当。还记得我们在第04章中提到的目标是学习将照片分类为狗或猫的ConvNets吗?如果输入的一张训练照片中有一条狗,但输出分类为狗的置信度只有20%,那么该输出的误差将是100%-20%=80%。该网络之所以能够计算出误差,是因为它有一个由人事先提供的标签。
PDF 物理页索引 236
文件中的第 237 页 · 印刷页码:未识别
在强化学习中我们没有标签。一个来自游戏的给定的帧并不带有指示系统应采取某种动作的标签。在这种情况下,我们如何计算输出的误差呢?
答案如下。回想一下,如果你是那个学习智能体,当前状态下某个动作的值是对你在选择某一动作并持续选择高价值动作的条件下,本片段结束后你将获得多少奖励的估计,那么,越接近这一片段的结尾,估值就越准确,因为在一个片段的结尾处,你能计算出你将获得的实际奖励!其中的诀窍是假设网络在当前迭代的输出比上一次迭代的输出更接近于正确值,然后,通过反向传播学习调整网络权重,从而使得当前与先前迭代输出之间的差异最小化。理查德· 萨顿是这种方法的鼻祖之一,他把该方法称为:从猜测中学习猜测 <sup>5</sup> 。我把它修改为:从更好的猜测中学习猜测。
简而言之,强化学习不是将其输出与人类给定的标签进行匹配,而是假设后续迭代给出的值比前面迭代给出的值更好,网络学习的是使其输出在一次迭代到下一次迭代的过程中保持一致。这种学习方法被称为时序差分学习(temporal difference learning)。
PDF 物理页索引 237
文件中的第 238 页 · 印刷页码:未识别
总的来说,这是深度Q学习如何应用于《打砖块》的工作原理,这同样适用于所有其他的雅达利游戏。系统将其当前状态作为深度Q网络的输入,深度Q网络为每个可能的动作输出一个值,系统选择并执行一个动作,产生一个新的状态。然后,学习开始了:系统将其新状态输入网络,网络为每个动作输出一组新值。新值集与原值集之间的差异被认为是网络的“误差”,这个误差再经过反向传播来改变网络的权重。这些步骤在许多片段(游戏回合)中重复执行。需要说明的是,此处的深度Q网络、虚拟操纵杆和游戏本身都是运行在计算机上的软件。
这基本上就是DeepMind的研究人员所开发的算法的全部内容了,尽管他们还使用了一些技巧来对这种算法进行改进和加速 <sup>6</sup> 。起初,在还没进行多少学习之前,网络的输出非常随机,系统玩游戏的方式看起来也很随意,但逐渐地,随着网络通过学习改进了其输出的权重,系统的游戏能力得到提升,在许多情况下甚至相当出色。
价值6.5亿美元的智能体
DeepMind团队将他们的深度Q学习方法用在了街机学习环境中49款不同的雅达利游戏上。虽然DeepMind的程序员对这些游戏使用的是相同的网络架构和超参数,他们的系统在学习一款新的游戏时,仍然需要从零开始,也就是说,系统从一款游戏中学到的知识(即网络权重)无法迁移到另一款游戏上。在每一款游戏上,系统都需要经过上千个片段的训练,但该过程可通过先进的计算机硬件比较快速地完成。
PDF 物理页索引 238
文件中的第 239 页 · 印刷页码:未识别
在对每款游戏进行了一个深度Q网络的训练后,DeepMind将机器的游戏水平与一个专业游戏测试员(人类)进行了比较。在进行评估之前,人类测试员被允许针对每个游戏进行两小时的练习。这会不会像听起来那样是个有趣的工作?答案是否定的,除非你喜欢被电脑完败!DeepMind的深度Q学习程序在超过一半的游戏中表现得比人类测试员更好,而且,在那些深度Q学习表现更好的游戏的一半中,程序的表现比人类的表现好2倍以上。在那些深度Q学习比人类表现好2倍以上的游戏的一半中,程序的表现比人类的表现要好5倍以上。令人惊诧的是,在《打砖块》中,深度Q网络程序的平均得分是人类的10倍以上。
这些超人类的程序究竟学会了什么?经过调查,DeepMind发现这些程序找到了一些非常聪明的策略。例如,经过训练的“打砖块”程序找到了一个狡猾的窍门——如图9-3展示的这种策略。该程序学习到:如果白色小球能够通过击除砖块从而在砖层的边缘构建一条狭窄的隧道,那么小球将能够在“天花板”和顶层砖块之间来回反弹,快速击除顶层的高分值砖块而完全不用移动球拍。
PDF 物理页索引 239
文件中的第 240 页 · 印刷页码:未识别
DeepMind在2013年的一场国际机器学习会议 <sup>7</sup> 上首次展示了这项成果,观众看得眼花缭乱。之后不到1年,谷歌宣布以4.4亿英镑(当时约合6.5亿美元)的价格收购DeepMind,想必是看中了DeepMind取得的这些成果。的确,强化学习有时会带来丰厚的奖励。
DeepMind在手里有大量的资金,并且背后有谷歌支持的背景下,接受了一个更大的挑战,这一挑战长期以来一直被认为是人工智能领域的“顶级挑战”:创建一个学习下围棋的程序,而且要比所有人类棋手都下得更好。这便是我们熟知的AlphaGo, DeepMind的程序AlphaGo建立在人工智能与棋类游戏的悠久历史的基础上。让我们从对这段历史的简要回顾开始,这将有助于解释AlphaGo的工作原理及其如此重要的原因。