返回列表 发帖

漫长的对决

来源:知乎 不会功夫的潘达  2016-03-17


(本文原载于《南方人物周刊》2016年第8期,感谢编辑@孙凌宇。以下内容在正式刊载版本的基础上有少量改动。)

1968年,第一个围棋程序问世。今天,阿尔法几度战胜了人类的顶尖棋手。这场人机对决,漫长,而没有终点。

3月13日,首尔。当李世乭九段步入新闻发布会场之时,记者列队掌声欢迎,全场观众齐呼“李世乭”,一如两千年前的罗马公民迎接凯旋的将军。李世乭在职业生涯中曾赢得冠军无数,但受到如此祝贺是头一回。李世乭说,只是赢了一盘棋,不需要这样隆重祝贺的。不过,从他嘴角掩藏不住的笑容可以窥见,他其实比现场的观众更为喜悦。

这是一场在三尺纹枰上,“人类”与“人工智能”的巅峰对决。坐在棋盘两侧的,一方是李世乭九段,人类最优秀的围棋手之一。另一方是AlphaGo(以下称“阿尔法”),由谷歌旗下DeepMind公司开发的最强围棋程序。

围棋界在赛前一致看好李世乭横扫“阿尔法”。然而,比赛的进程却出乎所有围棋人的意料。前三局比赛,李世乭不但全部落败,甚至没有寻觅到明显的胜机。

在李世乭提前输掉系列赛之后,棋界舆论风向调转。韩国顶尖棋手金志锡九段称要受让二子才能和阿尔法一战,中国的古力九段则在解说中开始称阿尔法“老师”。此时,几乎没有人觉得在余下的两局棋中,李世乭还有机会赢一局。

在此背景下,李世乭的绝地反击才显得弥足珍贵。这一盘棋,李世乭在黑方阿尔法的大阵中撒豆成兵,这正是李世乭的成名绝技“僵尸流”。阿尔法一步步落入李世乭的圈套,却毫无察觉。就在黑棋即将合围大阵,将白棋一网打尽之时,李世乭祭出惊天一“挖”,正中黑棋的软肋。阿尔法的招法开始变得凌乱。数个回合之后,阿尔法接连犯下低级错误。李世乭此后安全运转,守住了胜利果实。数据显示,阿尔法似乎没有预见到李世乭的妙手,以至于形势急转直下。对此,李世乭说:“我的眼里只有那一手棋,没有任何其它选择,我只看到了它,我必须走那里。”


令人稍感意外的是,研究计算机围棋的工程师们,在赛前多数也并不看好阿尔法获胜。在公开的邮件往来中,他们虽然对阿尔法的成就表示了由衷的赞赏,但也怀疑阿尔法能否战胜李世乭。从计算机围棋几十年的发展历史来看,他们做出如此推断是相当客观的。

1968年,第一个围棋程序问世。此后的二十多年间,计算机围棋发展缓慢。1991年,中山大学教授陈志行退休后开始研发名为“手谈”的围棋程序。其后,“手谈”在八年间九获计算机围棋世界冠军,并接连受让15子、13子、11子战胜青年业余高手。陈志行自己也是业余围棋高手,曾多次参加全国业余围棋大赛,并取得不俗成绩。陈志行曾经设想“手谈”能够在让九子对局中战胜自己。围棋盘纵横十九道,其上均匀分布着九个黑色的圆点,称“星位”。让九子对局,就是白方让黑方先占据棋盘上的九个星位,才开始对局。部分棋手认为,能够受让九子战胜业余高手,才算是“会下围棋”。世纪之交,国际象棋的程序在与人类顶尖棋手的对抗中已经稳稳占据上风,而围棋的程序则在“会下围棋”和“不会下围棋”的边缘徘徊。有职业棋手据此推断,几十年之内都不会有围棋程序战胜人类顶尖棋手,或许永远都不会。

围棋人的自信并非无源之水。围棋和国际象棋都是两人对战的完全信息游戏,而人类棋手在棋盘上的决策过程也差异不大:首先搜寻当前局面下看上去所有可行的下一步,然后对其中每一步棋产生变化之后的局面进行评估,最后通过比较选择对自己最有利的一步棋。理论上来说,计算机程序只需要解决“搜寻”和“评估”这两个问题,就可以达到很高的水平。“深蓝”正是这样做的。“深蓝”在搜寻方面采用的算法近乎“穷举”。虽然效率不如人类,但凭借强大的计算力,“深蓝”能够比人类算得更深一层。至于评估,深蓝采用和人类相似的办法,给不同的棋子赋予相应的权重。“深蓝”之后的国际象棋程序,原理上大同小异,却已经将人类棋手远远甩在身后。

然而, 围棋程序不可能采取相同的办法。一方面,围棋变化的深度和广度都远超国际象棋,这使得“深蓝”的暴力搜索算法没有可行性。另一方面,评估一个局面孰优孰劣,在围棋上也并非易事。职业围棋手判断形势的方法,由于具有很大模糊性,很难被程序模仿。于是,包括“手谈”在内,与“深蓝”同时代的围棋程序几乎都是在试图模仿人类棋手的招法。工程师们竭尽全力让程序理解“征子”、“双活”、“愚形”、“小飞”等人类初学者在一个月之内就能掌握的概念,效果却并不理想。也有开发者给程序输入开局库,使得程序在遇到常见布局时能够复制职业棋手的招数。不过,一旦对手变招,程序便无所适从。陈志行等人苦心经营十余年,也未能让“手谈”突破顶尖业余棋手的九子大关。

就在大部分同行还在努力给程序打补丁之时,2006年,法国工程师Remi Coulom取得了重大突破。他将蒙特卡洛树搜索法(以下简称“蒙特卡洛法”)应用到他的围棋程序CrazyStone中,并在当年的计算机围棋奥赛9路棋盘项目上夺魁。蒙特卡洛法的主要优势在于其独辟蹊径的局面评估方法。对于某一个特定的选择,程序用近乎随机落子的方式快速完成一盘棋,并判定胜负。重复此过程多次,比如说十万次之后,黑方在其中获胜四万局。那么程序就认为最初的那步棋胜率是40%。这种判断方式,与人类的“数目法”,即估计双方领地大小的差距,有本质不同。如果说之前的围棋程序都只是拙劣地模仿人类的围棋知识,那么采用蒙特卡洛法的程序则拥有了自己的“思维方式”。

此后两年,采用蒙特卡洛法的程序如雨后春笋般出现。2008年,程序MoGo首次在受让九子的对局中战胜职业棋手。同年,CrazyStone接连突破职业棋手的八子和七子关。2012年,由日本工程师尾岛阳儿开发的程序Zen,在仅受让四子的一局棋中,战胜久负盛名的日本棋手武宫正树九段。Zen的这一成绩意味着它达到了业余5段的水平,跻身业余好手之列。这段时间计算机围棋的快速发展,让业内人士预测,十年之内将有程序达到职业水平。

技术的进步并非总是一帆风顺。2012年之后,采用蒙特卡洛法的程序几无寸进。Zen、Crazystone等少数程序在计算机围棋赛中轮流坐庄,绝对实力却未见提升。蒙特卡洛法似乎遇到了瓶颈。幸运的是,2015年前后,深度学习技术飞速发展,工程师们也从其中找到了新的灵感。阿尔法由此横空出世。

阿尔法的开发团队由22名优秀的工程师组成。其中,来自台湾的黄士杰(Aja Huang)扮演重要角色。黄士杰是台湾的业余6段棋手,他开发的程序Erica,曾击败Zen,夺得2010年计算机围棋奥赛冠军。虽然阿尔法的开发时间并不很长,但其中的关键部分与黄士杰等人的多年的积累密不可分,可谓十年磨一剑。

阿尔法主要由走棋网络、估值网络和蒙特卡洛法三部分组成。走棋网络和估值网络均基于“深度卷积神经网络”技术。该技术的灵感与人类大脑的结构密切相关。走棋网络和估值网络就好比阿尔法的“左脑”和“右脑”,走棋网络负责选择招法,而估值网络负责评估局面,然后由蒙特卡洛法将它们连结成一个完整的大脑,最后输出招法。

走棋网络通过学习职业(或业余高手)棋谱(“监督学习”)和大量自我对局(“强化学习”)训练而成。经过训练,走棋网络对于一个特定的局面,能够快速给盘面上所有可能的选择给出评分。走棋网络的判断赋予了阿尔法如同人类棋手一样的特殊“棋感”,即对特殊棋形做瞬时判断的直觉。对于人类棋手,通常需要多年的训练才能建立这样的“棋感”。这种棋感,曾被认为是人工智能难以模仿的。无论是手谈还是Zen,它们在类似功能的实现上,基本只是对工程师输入知识的直接反馈。一旦遇到知识库里不存在的棋形,它们就可能一脸茫然。阿尔法则不同。“深度卷积神经网络”让阿尔法能够在输入知识的基础上举一反三。不仅如此,阿尔法还通过自我对局进一步提升判断的准确度,这使得阿尔法拥有了超越人类“棋感”的潜力。

“棋感”足以让阿尔法成为一名业余好手,但离职业棋手还很远。仅凭直觉做出的选择仍然包含着大量的错误。与人类棋手一样,阿尔法也需要判断形势。人类的形势判断算法大致是估计对局双方地盘大小的差值。阿尔法的估值网络则计算特定局面下双方的获胜概率。与走棋网络类似,阿尔法同样进行大量(三千万局)自我对局获得样本。对于一局棋中的某个局面,如果最终是黑方获胜,那么阿尔法就对相似局面下黑棋优势的判断更有信心。经过大样本的训练,阿尔法也拥有了不俗的判断力。另外,阿尔法也有名为“快速走子”的技术辅助判断。“快速走子”,顾名思义就是以比走棋网络更快的速度落子。虽然这样走出的招法质量稍逊,但速度比走棋网络快一千倍。更重要的是,通过“快速走子”代替传统蒙特卡洛法中的随机落子,使得阿尔法对胜率的估计更为准确。将“快速走子”与估值网络结合,阿尔法能够相当准确地判断绝大多数局面的胜率。这种形势判断的方法不同于人类棋手的思路。从阿尔法与李世乭对战的结果看,阿尔法的判断在大多数时候甚至强于李世乭,令职业棋手们高山仰止。

尽管深度学习技术帮助阿尔法完成了飞跃,蒙特卡洛法仍然是阿尔法不可或缺的一部分。蒙特卡洛法把走棋网络的选择和估值网络的形势判断结合在一起,通过逻辑判断输出最优的招法。阿尔法的三个组成部分,分工明确,配合默契,完整地实现了类似于人类棋手的思考过程,且拥有超越人类思考能力的潜力。

阿尔法的进步速度,远远超出业内人士的想象,甚至可能也超出了阿尔法开发团队的期望。2015年10月,阿尔法击败樊麾之时,开发者估计阿尔法世界排名约为250名左右。2016年1月末,在新闻发布会上,阿尔法团队声称对抗李世乭“有五成把握”。距开赛前三周时,黄士杰在网络上发帖称,“有百分之百的信心,这场五番棋大战会非常精彩”。开赛前,从开发团队内部传出消息,称李世乭的胜机“是零”。

前三局棋,阿尔法几乎没有给李世乭什么机会。若不是李世乭在逆境下的灵光一现,人类或许就要认为阿尔法是无懈可击的了。所幸李世乭九段奋力一击,暴露了阿尔法的问题所在。

阿尔法在第四局中的低级错误,大致是在面对带有劫争的复杂变化时误判,因而在开劫之前耗尽劫材。前一代以蒙特卡洛法为主算法的程序多数出现过相同问题。在赛前,就有业内人士怀疑阿尔法是否已经解决了此问题,从结果来看似乎并没有。这是一个有十年历史的“阿喀琉斯之踵”,不一定能够在短期内得到解决。然而,无论如何,能够战胜李世乭,证明阿尔法,和计算机围棋的前方是一条康庄大道。

采用类似技术的其它围棋程序也已取得不俗成绩。由田渊栋博士开发,Facebook旗下的程序Darkforest,短短几个月就达到了业余4段的水平。新一代的Zen在结合了深度卷积神经网络之后,也提升到了强业余5段的水平。几年之内,拥有职业水平的围棋软件就将飞入寻常百姓家。

阿尔法的胜利是几代工程师智慧的结晶,是人工智能技术进步的里程碑;而李世乭的“神之一手”是李世乭登峰造极棋力的浓缩,是四千年围棋艺术的冰山一角。这一场挑战赛,没有输家。古老的围棋和新兴的人工智能都有还很长的路要走,希望它们在未来能够擦出更耀眼的火花。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

返回列表