李世石人机大战资料图
导语:美国《纽约客》杂志(The New Yorker)近日发表的文章揭秘谷歌旗下DeepMind最新公布的人工智能AlphaZero。这个AI程序起源于在2016年名声大噪的围棋AI AlphaGo,而AlphaZero被应用于更多棋类游戏中,取得了令人可喜的成就。
以下为文章全文:
几周前,谷歌AI子公司DeepMind内的一群研究人员在国际权威学术期刊《科学》(Science)上发表了一篇论文,其中描述了一种游戏领域的人工智能(AI)。尽管他们的通用AI系统适用于许多双人游戏,但是研究人员却进行了调整,使其专门针对围棋、国际象棋以及将棋(日本象棋)。这种AI程序事先并不了解任何一种棋类游戏的规则。一开始,它只是随意下子。之后,它通过和自己对弈掌握了游戏规则。九个小时内,AlphaZero在大量特殊谷歌硬件集群中自我对弈4400万局。之后两个小时,它的表现已经超过人类棋手。四个小时之后,它就打败了全球最出色的象棋引擎。
这一名为AlphaZero的程序起源于AlphaGo。AlphaGo曾经在2016年3月打败了全球最出色的围棋棋手李世石。李世石的失利让大家感到震惊不已。去年早些时候在Netflix上播出的一部纪录片《AlphaGo》中,影片制作人员跟踪了开发这款AI的团队及其人类陪练,他们将所有精力都奉献给了AlphaGo的研发。在观看纪录片的时候,我们见证了这部分人所经历的一种新的悲伤阶段。一开始,他们认为自己不会输给一台机器:“我想人类的直觉非常高级,AI无法超越我们。”李世石在与AlphaGo对弈前的一天这样说道。可是,当AlphaGo开始赢得胜利之后,恐慌感油然而生。在某一个心生酸楚感的瞬间,李世石因首局失利承受着巨大的压力,他突然起身离开桌子,不顾比赛时间限制,走到外面去抽了一根烟。他俯瞰着首尔的屋顶。(在互联网上,有五千多万人在关注着这场比赛。)与此同时,AI并不知晓他的对手跑到何处了,而是继续下子,这一步就连评论员也称赞是“创造性、令人惊讶的棋路”。最终,李世石以1:4的比分输掉了比赛。在接受事实之前,他倍感受挫。“我要为我的无能而道歉。”他在新闻发布会上这样说道。最后,李世石以及其他围棋界的成员开始欣赏这台机器。“我想,这给围棋带来了一种新的范式。”他说。欧洲围棋冠军樊麾也对此表示赞同,并且表示:“也许它能向人类展示出更多我们从未发现过的东西。或许这也是一种美。”
对于AlphaGo的开发者来说,这确实是一场胜利,但他们依然觉得不够满意,因为AlphaGo的学习依然非常依赖于人类围棋棋手的经验。该AI程序会通过模仿世界一流棋手的棋路来掌握自己该如何落子。它还会使用手工编码的启发法,避免在思考接下来的棋路时出现严重错误。对于开发AlphaGo的研究人员来说,这些认知就像是一根拐杖。他们决意开发一种白板式的新版AI,让其完全通过自学来开发自己的棋路。
2017年10月发表的一篇论文中详细介绍了AlphaGo Zero。之所以要取这个名字,那是因为除了围棋规则之外,这款AI程序对其他事情一无所知。这种新的范式没有引起众多关注。但从某种角度来说,这是一项更加卓越的成就,尽管它与围棋并没有太大联系。事实上,在不到两个月时间里,DeepMind就发表了第三篇论文的预印本,表示AlphaGo Zero背后的算法可以应用到任何一种双人零和完美游戏中(即没有任何隐藏元素的游戏,例如扑克牌中牌面朝下的卡片)。DeepMind将名字中的“Go”去掉了,并将新的系统命名为AlphaZero。本质上来说,它是一个强大的算法。你可以给它输入人类能想到的最为复杂的规则,让它去完成一个被人类研究得最为透彻的游戏。当天内的迟些时候,它就会成为有史以来最出色的玩家。也许更加惊人的是,这种系统的迭代是迄今为止最简单的一种。
传统的象棋引擎就像是一个大杂烩,包含了数十年来人们反复试验得到的经验和教训。全球最出色的引擎Stockfish是开源的。它的优化是基于一种达尔文式的选择:有人提出了一个想法,之后便会进行上万局游戏来验证这个想法是否有效。优胜劣汰。因此,这并非是十分简明的范式,程序员也许都很难理解。程序员对Stockfish进行的最佳调整都是源于国际象棋本身,而不是计算机科学,他们关心的是如何评定棋盘上的某一种情况:骑士值2.1分还是2.2分?如果这是第三横线,对手却有一个相反颜色的主教呢?为了说明这一点,DeepMind的研究主管大卫·西尔弗(David Silver)曾经在Stockfish上列出了对应的解决方案。结果需要五十多步,每一步移动都需要大量编程运算,而每一步运算也都包含了来之不易的国际象棋奥秘:反移动启发式(Counter Move Heuristic)、已知残局的数据库、叠兵(Doubled Pawns)、陷阱(Trapped Pieces)、半开放线(Semi Open Files)等的评估模块,还要搜索可能移动棋子的策略,例如“迭代加深”(iterative deepening)等。
相比之下,AlphaZero只有两个部分:一个神经网络以及一个被称作为Monte Carlo Tree Search(MCTS)的算法。(出于对于游戏的认可,数学家将这种基于随机数的方法称作是蒙特卡洛树。)MCTS背后的理念就是指像国际象棋这类的游戏实际上是一棵拥有诸多可能性的树,如果我将车移到d8位置,你可以抓住它或是选择按兵不动,而此时我可以移动兵或移动主教或保护我的王后……问题在于,这棵树会以惊人的速度长大。没有一种计算力能够足以彻底进行搜索。专业的人类棋手之所以是专家,原因在于他们的大脑能够自动识别出这棵树的基本部分并能聚焦注意力。而计算机如果要想参与游戏的话,它们也需要这样做。
此时,神经网络就开始派上用场了。AlphaZero神经网络会接收游戏最后几步的棋盘布局,这就是信息输入。而作为信息输出,它需要评估当前的棋手有多大几率能取得胜利并且预测在当下走什么样的棋路能够以最大可能获得胜利。MCTS算法利用这些预测来决定在这棵树中的关注要点。举个例子,如果神经网络猜测“骑士吃掉主教”是最佳棋路,那么MCTS就会投入更多时间用于探究这一步的后果。但如果它认为可行的棋路会有一些冒险,那么有些时候它就会选择自己认为较为安全的棋路。
最初,指导搜索的神经网络显得略微笨拙:它会随机进行预测。这样一来,MCTS就不能很好地聚焦重要部分。但是AlphaZero的天赋就在于它进行学习的方式。它需要两个部分进行工作,但会让其相互训练。即便一个愚蠢的神经网络非常不善于预测可行棋路,它依然能够起到一定作用:比如说,有些时候,MCTS依然可以获悉哪一个位置能够促使其获得胜利。这种认知能够被用于改进神经网络。当一局结束时,你就会知道结果,你可以看到神经网络对每个位置的预测(比如说有80%的可能,易位是最好的策略),然后与实际情况进行比对(比如说这一比例更接近60.5%),之后你就可以调整突触连接来“校正”神经网络,直到它能够选择赢得胜利的棋路。从本质上来说,所有MCTS搜索中的“精华”都被提取出来,用于优化改进神经网络。
无疑,神经网络的一点点优化,都能减少搜索被误导的几率——这可以优化搜索,进而提取出更好的信息来训练网络。在这样的反馈回路中,神经网络就能提升至已知能力的稳定期。
当有关AlphaGo Zero和AlphaZero的论文刚发布时,一小群爱好者开始在博客文章与YouTube视频中描述这些系统,并开发他们自己的模拟版本。这项工作的大部分为解释性的——它源于业余爱好者学习和分享的冲动,正是这份热情率先引起了网络轰动。但是也有一小部分努力涉及到大规模地复制这项工作。毕竟,DeepMind论文仅仅描述了世界上最伟大的围棋和象棋游戏,他们并不包含任何源代码,而且公司也没有把项目本身提供给玩家。项目成功后,工程师们随即离开了这一领域。
吉安-卡洛·帕斯库托(Gian-Carlo Pascutto)是Mozilla公司的一名计算机程序员,拥有开发竞技游戏引擎的丰富经验,先是国际象棋接着是围棋。他一直在跟进最新研究。随着蒙特卡洛树搜索和神经网络的结合成为围棋AI的最先进技术,帕斯库托开发了全球最成功的开源围棋引擎——先是Leela,然后是LeelaZero——其反应了DeepMind取得的成就。但问题在于,DeepMind可以访问谷歌的大量云数据,但帕斯库托不能。为了训练公司的围棋引擎,DeepMind使用了五千个谷歌的“张量处理器”(TPU)——专门为神经网络计算而设计的芯片——训练了13天。若要在他的桌面系统上完成同样的工作,帕斯库托需要连续运行系统一千七百多年。
为弥补计算能力的不足,帕斯库托决定分发自己的工作。LeelaZero是一个联合系统:任何想要参与的人都可以下载最新版本,贡献他自己的计算能力,然后上传他生成的数据,以便稍稍改进系统。分布式的LeelaZero社区得以让他们的系统与自己对抗了上千万个游戏——比AlphaGo Zero还多一点点。如今,LeelaZero是现存最强大的Go引擎之一。
不久之后,这个想法被扩展到国际象棋领域。去年12月份,当AlphaZero的预印本出版时,加里·林斯科特(Gary Linscott)称:“它好比一颗投向社区的炸弹。”计算机科学家林斯科特曾经研究过Stockfish,他利用现有的LeelaZero代码库,结合AlphaZero论文中的新理念,开发了Leela Chess Zero(Lc0)。(对于Stockfish,他开发了一个测试框架,以便将引擎的新理念分发给一群志愿者,从而进行快速的审查;分发神经网络的训练是十分自然而然的下一个步骤。)起初,还有一些缺陷需要梳理,并且DeepMind团队在他们的论文中遗留的细节存在一些有根据的猜测。但几个月之内,神经网络就开始改进。国际象棋世界已然沉迷于AlphaZero:chess.com上的帖子大肆庆祝这个引擎;评论员和象棋大师们仔细研究了DeepMind团队在他们论文中发布的AlphaZero游戏,并宣布“这才是象棋应有的玩法”,引擎下起象棋来“好似超级人类”。很快,Lc0吸引了数百名志愿者。随着他们不断贡献自己的计算能力并改进源代码,引擎越来越优异。今天,一名核心贡献者怀疑,再有几个月这个引擎或将超越Stockfish。不久之后,它可能会超越AlphaZero本身。
当我们通过电话交谈时,林科斯特十分惊讶于自己的项目进程。曾经,一个才华横溢的博士生需要数年时间才能完成类似的项目,但如今一个感兴趣的业余爱好者几个月内就可以完成类似的项目。神经网络的软件库允许人们使用几十行代码复制全球一流的设计;在志愿者中间分配计算的已有工具,以及英伟达等芯片制造商为数百万普通计算机用户提供了廉价但功能强大的图像处理芯片(GPU)。该芯片非常适合于训练神经网络。像MCTS这样的算法非常简单,花一两个下午便可以实施。你甚至都不需要成为你所开发之引擎的游戏专家。当帕斯库托开发LeelaZero时,他差不多已有20年时间没玩过围棋。
DeepMind研究负责人大卫·西佛尔(David Silver)指出公司最近在游戏领域的核心工作中的一个看似矛盾的问题:程序越是简单——从AlphaGo到AlphaGo Zero再到AlphaZero——它们的表现越优秀。“也许我们追求的原则之一,”在2017年12月的一次演讲中他提到,“是通过少做,通过减少算法中的复杂性,它可以使我们的算法变得更加通用。”从他们的围棋引擎中移除围棋知识,引擎可以成为更好的围棋引擎——并且同时,这个引擎也可以下将棋和国际象棋。
从未有人料想到事情会这样发展。1953年,协助创建了现代计算机的阿兰·图灵(Alan Turing)写了一篇题为《数字计算机在游戏中之应用》的小论文。在这篇论文中,图灵基于“对我下棋时的思维过程的一个内省分析”开发了一个国际象棋程序。程序很简单,但是在这一情况下,简单并非好事:正如图灵他自己并非天才国际象棋玩家,程序本身也缺乏足够的游戏深度,下棋的技巧性也不足。即便如此,图灵猜测“一个人无法开发出下棋水平超越他自身的程序”的这个想法着实是“未经思考的”。虽然说“没有动物可以吞下比它们自己更重的动物”这话听上去很有道理,但实际上很多动物都可以吞下比自己重的动物。同样地,图灵认为,一个糟糕的国际象棋选手当然可以开发出下棋水平优越的程序。一个引人入胜的办法就是让程序自学。
AlphaZero的成功似乎证实了这一点。AlphaZero结构简单,但却可以学习其正在对阵之游戏的深层功能。在AlphaGo Zero论文的一个章节中,DeepMind团队描述了在经过一定数量的训练周期之后,他们的AI可以发现大师级玩家所熟知的策略,但在接下来几个训练周期之后又舍弃这些策略。看到人类最好的想法在通向更美好未来的道路上被无情抛弃,无疑这是怪异且有点令人感到不安的;物理机器不断超越我们着实碰触到了人类的痛处。前国际象棋冠军加里·卡斯帕罗夫(Garry Kasparov)曾在1997年输给了IBM开发的超级电脑深蓝。在最近的一篇《科学》论文中,卡斯帕罗夫认为AlphaZero并没有按照可以反映据推测是系统性“程序员偏好和偏见”的方式来下棋;相反,即便它对下一步棋的可能位置的搜索要远少于传统引擎,它以一种开发、激进的方式来下棋,并且似乎从战略而非策略的角度进行思考,就好比一个具有不可思议的想象力的人类。“因为AlphaZero可以自己编程,”卡斯帕罗夫写道,“我会说它的风格更接近真相。”
当然,像人类一样下棋,与像人类一样看待国际象棋或像人类学习,完全是两回事。有句老话说棋类游戏好比AI界的果蝇:好比果蝇之于生物学家,诸如围棋和国际象棋这样的棋类游戏对于计算机科学家而言是研究智力机制的途径。这是一个令人回味的类比。但是,曾经只是下棋的任务,一旦有朝一日变成在游戏树中每秒搜索成千上万个节点的任务时,我们训练的则是一种完全不同的智力。按这样的玩法,国际象棋恐怕远不止是我们所想象的推土机:最终,这个活动不再是我们人类的特长。为了学习,AlphaZero需要对阵数百万次,远多于人类一生中对阵次数——但是,一旦AlphaZero完成学习,它可以像天才一般下棋。通过深度搜索树,它依赖比人类快得多地思考,然后使用神经网络将其发现变为类似于直觉的东西。当然,程序也让我们对智力有了新的认识。但是它的成功也印证了世界上最优秀的人类玩家通过另一种过程——一个除了对阵之外,基于阅读、交谈和感受的过程——所见的多少。以及最令人惊讶的是,在这种如今看起来为机器准备的游戏中,我们人类的表现也也会很好。(堆堆 木尔)