深度思维
在本章最开始提到的深度思维公司的故事完美地代表了深度学习的兴起,这家公司由人工智能研究人员兼电脑游戏爱好者德米斯·哈萨比斯(Demis Hassabis)和他的校友,企业家穆斯塔法·苏莱曼(Mustafa Suleyman)于2010年创立,公司还有哈萨比斯在伦敦大学学院工作时认识的计算神经科学家谢恩·莱格(Shane Legg)加盟。
正如我们所知的,谷歌在2014年收购了深度思维公司,我还记得在媒体上看到这则新闻时,惊讶于深度思维是一家人工智能公司。显然,在收购的时候人工智能成为新的热点,这不足为奇,我惊讶的是在英国竟然有一家我没有听说过的人工智能公司,价值4亿英镑,这真的让我困惑不已。和别人一样,我立马访问了深度思维的网站,但坦白地说,这并没有为我解惑。公司的技术、产品和服务都没有任何详细的说明。然而,它倒是提供了一个有趣的话题:深度思维公司公开宣称其任务是解决智能问题。我已经提到过,人工智能在过去60年里命运多舛,这让我对任何雄心勃勃预测人工智能进步的消息保持警惕:你可以想象,看到一家刚刚被科技巨头收购的小公司竟然发表如此大胆的声明,让我多么吃惊。
不过网站上没有提供更多细节,我当时也没能找到更了解它的人。人工智能界的同行大多对这个声明持怀疑态度,可能也带有一点职业嫉妒的色彩。直到2014年末,我碰巧遇见了一位同事南多·德·雷弗斯塔(Nando de Freitas),才打听到更多关于深度思维的消息。南多是深度学习领域世界级先驱之一,当时他是牛津大学的教授,是我的同事(后来他离开学校,去了深度思维工作)。他正好和学生们参加一个研讨会,腋下夹着一堆科学论文。显然他在为某件事情兴奋着,他告诉我:“伦敦有人训练出了一个程序,可以从头开始玩雅达利游戏。”
我不得不说,这有什么好兴奋的?可以玩电子游戏的程序又不是什么新鲜事。这种程度的挑战我们可能会布置给本科生作为毕业项目——我就是这么轻蔑地告诉南多的。他很耐心地给我详细解释,我们确实已经进入了人工智能的新时代。
南多提到的雅达利游戏系统基于早期的雅达利2600系列游戏机,那是1980年前后的产品,是最早获得成功的视频电子游戏平台之一:它支持210×160像素网格的大分辨率视频,支持128位颜色。用户通过一个带单独按钮的操作杆进行操作,游戏机使用插卡式游戏卡带,深度思维用的游戏卡带一共有49个游戏。他们对人工智能的描述如下[73] :
我们的目标是构建一个单一的神经网络游戏智能体,它能够学习玩尽可能多的游戏。神经网络没有提供任何特定游戏的信息或者额外加入的视觉要素,也不了解游戏机的内部状态。它只能从显示屏所反馈的东西进行学习(即游戏分数),以及弄清楚到底该怎么操作游戏——就像人类玩家一样。
为了理解深度思维成就的意义,了解他们的程序到底做了什么以及没做什么,这一点非常重要。或许最重要的一点是,程序对自己正在玩的游戏一无所知。如果我们试图用第三章中提到的基于知识的人工智能来构建一个雅达利游戏程序,首先会考虑从雅达利游戏机中提取的专家系统知识,并尝试使用规则或其他一些表示知识的方案对其进行编码(如果你想试试的话,祝你好运)。但是深度思维的程序根本没有任何关于游戏的知识,程序得到的唯一信息是出现在游戏机屏幕上的图像(以210×160彩色像素网格的形式)和游戏的当前分数。仅仅如此,这个程序压根没有其他的信息可以参考。这里要特别提出来讲一下,程序没有得到诸如“对象A在位置(x, y)上”之类的信息——任何类似的信息都需要程序从原始的视频数据中自己提取。
程序运行的结果简直令人惊讶[74] ,程序通过强化学习自学玩游戏:反复玩同一个游戏,在每个游戏中进行实验并获得反馈,并学习哪些行为会得到奖励,而哪些不会。雅达利游戏程序学会了游戏卡带中的29个游戏,表现出高于人类玩家平均水准的能力。在某些游戏里面,它甚至达到了超人的水准。
有一种特别的游戏吸引了很多人的注意。这款名为“打砖块”的游戏是20世纪70年代最早出现的电子游戏之一:由玩家控制“球板”,将“球”弹到由彩色“砖块”组成的墙上。每当球碰到砖块的时候,砖块就会被摧毁,玩家的目的是摧毁整面砖墙。图18显示了程序在学习玩打砖块的早期阶段(在它玩了大约100次游戏之后),在这个阶段,它经常漏球。
深度思维的雅达利游戏程序在学习打砖块的初期漏接了球,球在这里用一个竖直的小矩形表示,水平的平板状矩形表示玩家的接球板。
但是经过几百轮的训练以后,程序就成了这个游戏的专家:它再也没有漏接过一个球。然后发生了一件不同寻常的事情:程序了解到,最有效率得高分的方式是在砖墙的一侧“钻”一个洞,让球打进去,这样球就会在砖墙和顶部屏障之间快速反弹,迅速消灭砖块,而玩家可以不用额外操作什么(见图19)。深度思维公司的工程师并没有预料到这种行为:它是由程序自主学习的。这个游戏的视频很容易在网上找到:我在自己的讲座中用过十几次。每次我给观众播放这段视频时,都能听见惊讶的抽气声,因为观众明白程序在游戏中学到了什么。
最终,程序学会了怎么迅速取得高分,即让球在砖墙一侧“钻”一个洞,这样球就会在砖墙上快速反弹。没有人教程序这么做,这种行为让程序开发者都大吃一惊。
我得反复强调一点:深度思维的程序员并没有编写一个程序来玩雅达利游戏:这并不难。他们所做的是写一个程序,让它学习如何比人类更会玩全部49个雅达利游戏中的29个。程序接收到的唯一输入就是屏上显示的东西,以及分数。
此前已经提到过,雅达利游戏程序使用的是强化学习的方式,通过神经网络来实现,它使用的神经网络具有三个隐藏层。神经网络的输入经过预处理,将图像从原始的210×160像素的彩色格式缩减为84×84像素,并用灰度代替了彩色。程序从可用的输入中提取出样本,由每四幅游戏屏幕图像拼合组成,而不是单独的每一幅图像。神经网络使用经典的深度学习技术(随机梯度下降)进行训练。
这个程序当然不会是完美的,在某些游戏中,它的表现相当糟糕,研究一下为什么会出现这种情况也挺有意思。在程序玩得特别糟糕的游戏中,有一款叫作“蒙特祖玛的复仇”,它的难点在于奖励非常稀少:玩家在获得奖励之前必须执行一系列复杂的任务(这一点与打砖块这种游戏不同,在打砖块游戏中奖励反馈或多或少都是即时的)。通俗地说,如果奖励反馈在相关行动执行后很长时间才出现,就会给强化学习带来困难:这就是前文我们讨论过的信用分配问题,即你可能不清楚是哪些行为导致了奖励的发生。
如果雅达利游戏程序是深度思维团队唯一完成的东西,那也足够让他们在人工智能的历史上留下令人尊重、浓墨重彩的一笔,但是,该团队随后又取得了一系列惊人的成就。
其中最著名的是AlphaGo,在撰写本书的时候,它可能仍然是迄今为止最著名的人工智能系统。AlphaGo的功能是玩一种源自中国的古老棋类游戏:围棋。
围棋是人工智能挑战一个引人关注的目标。一方面,围棋的规则非常简单,比国际象棋简单得多。另一方面,在2015年,围棋程序的水准远远低于人类专业棋手。那么,为什么围棋对人工智能而言这么难?答案很简单,因为围棋的计算量太庞大了。围棋棋盘是19×19的格子,总共有361个位置可以落子。而国际象棋棋盘的格子是8×8,只有64个位置可以放置棋子。正如我们在第二章中所提到的,围棋的分支因子(即棋手在游戏中每一步的平均移动可能性)约为250,而国际象棋的分支因子约为35。换言之,在棋盘大小和分支因子方面,围棋的数据量比国际象棋庞大得多。另外,一盘围棋对弈可以持续很长时间,一场比赛中走150步是很常见的。
对人类而言,围棋是公认最难的棋类,因为计算规模太大:思考一个如此大小的棋盘已经达到甚至超过人类玩家所能管理的极限。这导致围棋中指定明确的战术非常困难。对于机器而言,这也是问题所在。棋盘规模和分支因子让简单粗暴的搜索方式毫无用武之地——我们得考虑别的方法。
AlphaGo使用了两个神经网络:价值网络只负责评估给定的棋盘位置的优劣程度,而策略网络则根据当前棋盘的状况评估下一步棋该放在何处[75] 。策略网络包含13层,首先使用监督式学习进行训练,训练的数据则是人类的专业棋手下棋的棋谱。然后进行自我对战的强化学习。最后,这两个网络被嵌入一个复杂的蒙特卡罗树这一搜索技术中。
在这套系统公布之前,深度思维邀请了欧洲围棋冠军樊麾与AlphaGo比赛:最终AlphaGo以5∶0获胜。这是围棋程序第一次在全场比赛中战胜人类专业棋手。不久之后,深度思维宣布AlphaGo将于2016年3月在韩国首尔与世界围棋冠军李世石进行五场比赛。
人工智能界因此兴奋不已,相关研究人员——包括我自己——也很期待看到比赛结果(当时我们猜测AlphaGo大概会取得一到两场胜利,但李世石会决定性地赢得整场比赛)。谁也没有料到围绕这场比赛爆发出空前的宣传热浪,这项赛事成为全世界的头条新闻,比赛的故事甚至都被拍成了电影[76] 。
这场比赛中,AlphaGo以4∶1的成绩击败了李世石:李世石输掉了前三局,在第四局中扳回一城,但输掉了第五局。大家都说,李世石一开场就输了。他很惊讶——本来他以为会轻松取得胜利。而且不止一个人开玩笑说,AlphaGo故意输掉第四局,多少给李世石留点面子。
在比赛的很多节点上,人类评论员指出AlphaGo的举动奇怪。很明显,这种落子“不是人类会做的选择”。当然,当试图分析AlphaGo如何下棋的时候,我们是从一个非常人性化的角度来分析的,我们本能地寻找下围棋时人类的动机和策略——我们将AlphaGo人性化了。试图用这种方式理解AlphaGo是没有意义的:它只是一个程序,它的存在只为了一个目的——赢得围棋比赛。我们想把动机、推理和策略归因于程序,但无法做到,AlphaGo的卓越能力是通过其神经网络的权重来体现的。这些神经网络不过是一串很长的数字列表,我们无法提取或合理化它们所包含的专业知识。AlphaGo也无法告诉我们它如此落子的原因,而这正是深度学习需要解决的关键问题之一。
AlphaGo被吹捧为深度学习和大数据型人工智能的胜利,从事实来看,它倒也实至名归。不过撇开表象深入挖掘,你会发现AlphaGo中最能体现智慧的工程都源自经典的人工智能搜索。我们在第二章提到的于20世纪50年代开发了跳棋学习程序的亚瑟·塞缪尔,他在理解AlphaGo使用的搜索技术时不会有任何困难:从他的跳棋程序,到现代最引人注目的人工智能系统,都遵循着同一条发展路径。
两个里程碑式的成就,对大多数人而言应该已经足够了。
但是,仅仅18个月后,深度思维再次出现在头条新闻中。这次是一个比AlphaGo更厉害的人工智能,被称为AlphaGo Zero。它的非凡之处在于它是从零开始学习下围棋的,没有学习任何人类棋手的棋谱。在没有人工数据干预的情况下,它达到了超越人类棋手的水平,而这一切,只是通过它自己和自己下围棋来实现的[77] 。公平地说,它必须自己下过很多次才能达到超人的水准,但不管怎么说,这都是一个惊人的成就。它的后续版本名叫AlphaZero,进一步推广到玩包括国际象棋的其他棋类游戏。在结束9个小时的自我学习以后,AlphaZero能够在和鳕鱼系统[12] 对战中连续击败对方,最少也能保持平局——鳕鱼系统是世界领先的国际象棋程序之一。来自国际象棋编程领域的退役专家纷纷表示他们极其惊讶。AlphaZero自己和自己下了9个小时国际象棋,就能够自学成为世界级的国际象棋手?这种想法简直令人难以置信。而真正令人兴奋的是这种方法的普适性:AlphaGo尽管在围棋方面表现优秀,但它只能下围棋,还必须事先学习许多人类专业棋手的棋谱。而AlphaZero似乎可以自学成才,并且适用于多种不同类型的棋类游戏。
当然,我们得谨慎地下结论,不能过度解读。首先,尽管AlphaZero体现了令人印象深刻的通用性(它在棋类游戏专业的通用性方面超过了此前任何一个人工智能系统),但它本身并不代表迈向通用人工智能的重大进步。它甚至没有我们人类所普遍拥有的智能,在下棋方面它很专业,但它不能跟人交流,不能讲笑话,也不会煎鸡蛋、骑自行车或者系鞋带。它的卓越能力其实有着相当的局限性。当然,棋类游戏是相当抽象的——它们与现实世界相去甚远,正如罗德尼·布鲁克斯很快将要提醒我们的那样。
但是,尽管还有许多问题和麻烦,我相信一个简单的事实:深度思维的工作,从他们的雅达利游戏机到AlphaZero,代表了人工智能领域一系列非凡的突破性成就。在实现这一切的过程中,他们成功地让数以百万计的人们美梦成真。
本书评论