2016-03-17 14:23:29 来源: 北京日报 作者:黄铂钧
3月15日,谷歌旗下英国公司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使用的神经网络在训练时对数据量要求非常惊人,即使是十万量级的数据规模仍然不能满足要求,而是一定要通过其他手段达到百万甚至千万的量级。