AlphaGO凭什么战胜李世石

16.03.2016  08:51

原标题: AlphaGO凭什么战胜李世石

  原标题:AlphaGO凭什么战胜李世石

AlphaGO和李世石的第一局对局棋谱。(李世石执黑)

新闻背景

  昨天,谷歌旗下英国公司DeepMind 开发的AlphaGO 计算机程序,在与世界顶尖天才棋手李世石的五番棋对决中,以4:1取得完胜。此时此刻,想必每一个关注这个事件的人心里都有一个疑问,AlphaGO 到底是何方神圣?竟强到让围棋一代天骄李世石九段败下阵来?

  ■ 任你千般招数,我只亢龙有悔

  现在很多正在研究AlphaGO与李世石这几盘对局的棋友,热衷于按照人类的思考方式为AlphaGO的每一步落子赋予一个战略意图,然后讨论合理与否。但事实上,AlphaGO和人类下棋思路很不一样。人类下棋时的思路是多变的,根据盘面情形的不同,人类会把最基本的赢棋问题转化成不同类型的子目标,时而考虑如何杀棋,如何做活,时而又考虑如何借助打击对手扩张地盘,如何制造劫争。有时我们还会猜测对手在盘算什么,自己又如何“将计就计”来应对等等。一旦确立了这些子目标,人类棋手便集中精力考虑具体战术走法来完成这个子目标,而不是赢棋这个最终目标。

  但是AlphaGO与人类思维最大的不同,就是没有这种具有适应性的战略思考成分。事实上,今天AlphaGO 的“思考模式”,和20年前战胜国际象棋世界冠军卡斯帕罗夫的“深蓝”是一样的。对于一个给定的当前盘面A,AlphaGO和深蓝这样的计算机,会对盘面A之后可能出现的大量局面变化所导致的不同结果分别进行预判,然后综合所有这些可能性的胜率分析结果,对最初给定的盘面A进行一次评估。

  “在当前局面下,我走在x点的话最终胜算几何”,计算机就是通过不停地重复问自己这个单一问题来完成对弈的,大有点“任你千般招数,我只一招亢龙有悔”的味道。

  ■ 需要融入人类围棋知识经验

  既然AlphaGO和20年前的深蓝思路一样,为什么它能拥有以前计算机程序不曾达到的棋力呢?

  一种观点认为,“围棋复杂度远比国际象棋高,因此AlphaGO的成功关键是避免了像深蓝那样穷举所有可能性”。这其实是对搜索型程序的误解,所谓“蛮力搜索”从来都不是“穷举所有可能”。事实上,无论是围棋还是国际象棋,其变化总数都远远超过宇宙中所有原子数量的总和,根本不可能有物理系统有这样的“穷举能力”。从深蓝到AlphaGO,这些搜索型程序其实都只是考虑了盘面所有可能性中极小的一部分,和“穷尽所有变化”相比规模小到不值一提。

  更具体说,深蓝时代的国际象棋程序,得益于拥有一个强大的评估函数。当时人类国际象棋大师所拥有的知识已经足够精确,使得对盘面胜率的评估可以被直接手工编写。围棋这边,AlphaGO之前的一流围棋程序,大多借助围棋专业知识来手工编写搜索策略。这样的程序目前已经达到业余五段水平,但这些“传统围棋程序”中用到的围棋知识仍然只是“入门级”的。一般而言,围棋高手的知识并不像国际象棋中那样精确,从而使得手工将围棋知识经验写入搜索算法的编程方式面临很大挑战,这一直是阻碍传统围棋程序棋力进一步提高的主要瓶颈。这次横空出世的AlphaGO,主要就是突破了这个“知识融入”瓶颈。

  ■ 可以自我训练和改进的程序

  AlphaGO的“围棋知识升级”是由同一项技术带来的——人工神经网络。这项技术的主要优点是不需要手工编写,而是通过程序自我改进的方式,来表达比较“模糊”的领域知识和经验。

  由一条条指令组成的传统“过程式”程序,固然对我们人类而言直观明了,但当程序输出有偏差时通常不能自我修正,而是需要人根据具体情况对程序进行分析之后,才能找到应该改动哪里,如何改动。但 “神经网络程序”在面对输出误差时,却有一套既简单又通用的自动修正方法。这样,每完成一次计算,神经网络程序就可以通过比对输出误差来对自己进行一次微调,当观察了大量误差数据之后,这些微调累加起来就有可能趋近一个误差很小的神经网络程序。

  具体到AlphaGO,开发团队建立一个包含上千万个实战盘面的数据集,每个盘面对应一个实战中的落子位置和最终胜负结果,然后根据这个数据集来“训练”人工神经网络预测落子位置和盘面胜率。面对数据集中的一个盘面,最开始的神经网络可能只是随机无意义地做出的判断,但通过和数据集中的“正确答案”之间的误差进行比对,神经网络可以逐渐修正自己的判断输出,使得这样观察了上千万个误差数据之后的神经网络,可以做出大概正确的落子预测和胜率预测。

  事实结果证明,这样通过海量数据迭代训练出来的神经网络模块,可以比传统的手工编写知识的方式表达更多的围棋领域知识和经验,因此配备了神经网络的蒙特卡洛搜索程序(也就是AlphaGO),棋力才呈现出飞跃式提升。

  ■ 训练AlphaGO更像“驯动物

  但要注意到,这种人工神经网络在学习方式上和我们人类是截然不同的。人类从了解围棋规则,到理解前人总结的一般概念和要领 (如棋理、手筋、定式),到练习局部攻杀 (俗称做死活题),再到通过实战把所学的各种“局部”知识融成一体,再到对已有对局复盘打谱,找出对棋局结果影响大的“关键手”,分析研究背后反映出的因果关系和逻辑规律,其间还要和其他棋手讨论交换心得,甚至可能在某些时候从围棋之外的生活经验得到启发借鉴,然后又以非常微妙的方式运用于围棋之中。所有以上步骤又再经过反复循环之后,一个人类围棋高手才逐渐诞生。

  与之不同的是,我们看到上面描述的训练人工神经网络的方式,和马戏团训练动物更类似,相当于就是做对了给个吃的,做错了打一鞭子,然后大量重复。拿AlphaGO来说,它“学棋”没人类那么多手段,相当于就是自己坐在那里默默看高手对局,数量多到世界上最勤奋的人几十辈子也看不完,其间每一局每一步都通过比对自己与高手的差异,一点点校正自己的行为,以图尽量模仿。这个校正过程本质上可以看作是在同样浩瀚无穷的原始“参数空间”中的一个“蛮力搜索”过程。

  人类和AlphaGO学习方式的不同,一个最大的后果就是AlphaGO这样的神经网络学习,必须要极其海量的数据堆砌才有可能体现出效果。在AlphaGO的训练过程中就发生了一个小插曲:一开始,他们使用来自16万盘棋中的数据来训练AlphaGO,但效果却不佳。为此开发团队不得不通过AlphaGO自弈的方式,重新产生了3000万盘棋做训练数据。这带给我们一个重要的信息就是,AlphaGO使用的神经网络在训练时对数据量要求非常惊人,即使是十万量级的数据规模仍然不能满足要求,而是一定要通过其他手段达到百万甚至千万的量级。

   延伸阅读

  AlphaGO战胜李世石

  并不代表人工智能已接近人类

  AlphaGO战胜李世石这一事件,确实给很多人观念上的巨大冲击。有些人认为,围棋是检验人类智能的标准,围棋下得好的人大都思维敏捷聪明绝顶,所以计算机在围棋棋盘上战胜人类,预示着人工智能超越人类智能脚步的临近。

  但笔者认为,这种理解恐怕带有一定“恐慌情绪”——速算能力同样是一个人智力超群的标志,但最聪明的人也算不过兜里的智能手机,可没见谁担心自己的手机比自己智商高。况且对于和围棋情况类似的国际象棋,机器早已超越人类多年(人类国际象棋棋手下棋时同样需要综合棋感、推理、计算、定式知识等思考手段)。

  这些事实都一再证明,通常用于检验人类智能的标准,未必是检验“智能”程度的一般原则,尤其不适用于检验机器智能。从专业角度看,通用性才是智能的一般标准,一个物理系统的“智能”体现为它在各种不同环境中都能更好完成既定目标的“全才”能力。

  那么机器要怎样才能“证明自己的智商”呢?既然客观事实已经证明用于人类的智能标准对机器不再有效,我们就应该放弃固有的思维惯性,回归到智能的原始定义去检验机器智能。AlphaGO战胜了人类高手,这说明AlphaGO围棋下的好,但并不能立即说明AlphaGO智力超群。围棋上你下不过AlphaGO,0:1。可是随便再找一万个任务来你都比AlphaGO强,总比分10000:1。

  事实上,现在学术界已经有人开始挑战“通用人工智能”,可以说这也是人工智能领域的“初心所在”。比如这次做出AlphaGO的DeepMind公司也致力于此。他们做了一个程序可以同时在几百种视频游戏中都超出人类平均水平,是可喜的进展。但这也不过是几百比零而已,我们一个人可以解决的问题何止万千,按“通用性”标准来看,此时此刻的机器智能程度远远不及人类万分之一。

  综上所述,现在像“动物”一样学习,“一根筋”式思考的AlphaGO程序,之所以可以战胜李世石这样的顶级棋手,不是因为它此时已经像人类一样思考和学习,更不是因为它已经达到了“超人”的智力水平。当然,围棋被称为人工智能研究的果蝇,AlphaGO带来的事实结果和其中所用技术,肯定会为人工智能学术界带来很多启发,毫无疑问是伟大的里程碑。但这距离公众担心的机器智能威胁人类智能的局面,还尚且遥远。

  (本文作者在微软亚洲研究院任副研究员期间曾从事围棋AI相关研究,对于此次AlphaGO事件的进一步深入介绍,作者在3月底即将出版的《NEWTON科学世界》杂志4月号有专文刊载。)