AlphaGo来了!(一)_互动科普

使用社交账号登录

购买价格:
付款方式:

互动科普

主页 > 科普纵览 > 工程 • 技术

AlphaGo来了!(一)

黄铂钧  发表于 2018年05月21日

2015年10月,谷歌旗下的英国公司DeepMind开发的AlphaGo程序,在一场非公开比赛中以5:0 完胜樊麾二段,成为历史上首个战胜围棋人类职业棋手的计算机程序。2016年3月,AlphaGo又出乎大多数人意料地以4:1 战胜世界冠军李世石九段。这个AlphaGo到底是何方神圣?人工智能是否就要“君临天下”?

 

弈棋程序的思考方式:蛮力搜索

现在的围棋程序,包括AlphaGo在内,都遵循一套共同的算法框架(思考模式),就是通过“一根筋”式的海量搜索来对形势做预判,有时也被称为“蛮力搜索法”。正是这套思考模式在20年前帮助深蓝击败了卡斯帕罗夫。为了真正理解AlphaGo,我们先来了解一下和“蛮力法”相关的一些基本概念。

对于一个给定的当前盘面A,使用“蛮力搜索法”的计算机程序会对盘面A之后可能出现的大量局面变化分别进行预判,然后综合对所有这些可能局面的分析结果,对盘面A进行一次评估。这也是人类在动态环境中做决策时常用的思路,也就是希望通过“看得更远”来提前发觉潜在的危险或机会。

假设棋局每一步都有2种走法,那么从当前盘面A开始,“1步以内的变化”有2种,“2步以内的变化”有2+4=6种,“3步以内的变化”有2+4+8=14种,而“所有可能的变化”就是指“无穷步以内的变化”,这个“所有可能变化的全集”可以看作是一个包含着所有可能变化状态的空间,称为一个状态空间。“蛮力法”程序对大量未来变化的综合分析过程则称为状态空间搜索。

状态空间搜索主要做3件事:首先是从“未来所有的可能变化”中选择一个子集来考虑,而怎么选这个子集涉及到一个选择策略问题。这个选中的子集中,每一个变化都会终止于某个未来盘面,程序会通过一个评估函数对每个这样的未来盘面计算一个胜率,然后根据一个汇总策略把所有这些未来盘面的胜率信息汇总起来,得到一个对当前盘面A的胜率估值。假如最初给定的盘面有某个潜在风险,一个好的选择策略应当能“看到”这个风险所对应的局面变化并把它纳入考虑,而一个好的评估函数应该能正确评估出这种风险给胜率带来的影响,最后,一个好的汇总策略应当能恰当地把这种不利因素反映到最初给定盘面的胜率估值中。

不仅包括AlphaGo在内的所有围棋程序完全符合这个框架,当年战胜人类国际象棋冠军的深蓝计算机,以及现在几乎所有其他棋类运动中最好的弈棋程序都同样遵循这套框架。也就是说,今天的AlphaGo在算法框架上和20年前的深蓝是一样的,AlphaGo也是所谓的“蛮力搜索型”程序!

201604p4_f1.jpg

图1. 包括AlphaGo在内的所有弈棋程序共同的算法框架(思考模式)

贴AlphaGo标签处是AlphaGo相对之前围棋程序改进的地方

 


关于蛮力搜索法的几个常见的理解误区

第一种理解是认为“蛮力法”就是试图穷尽所有可能性。这种说法尤其常见于人们宣传围棋比国际象棋更“难”的时候。事实上,无论是围棋还是国际象棋,其变化总数都远远超过宇宙中所有原子数量的总和,所以无法想象任何物理系统可以有这样的穷举能力。所有基于所谓“蛮力法”的下棋程序其实都只是考虑了所有可能性中的极小的一部分,固然和人类相比是考虑了“海量”的变化,但和“穷尽围棋所有变化”相比,规模小到不值一提。

另一种理解是认为,“蛮力法”就是依靠计算机无比强大的硬件计算速度,最常被提起的例子就是当年深蓝计算机拥有每秒搜索2亿次变化的“恐怖计算力”。AlphaGo虽然搜索速度比深蓝慢很多,但是依然达到每秒搜索变化10万次以上,乍看之下和人类棋手每秒不超过10次搜索的计算力相比真是天壤之别。实际上这种看法是混淆了“计算速度”和“搜索速度”这两个截然不同的概念。真论起“硬件计算能力”来,我们的大脑其实一点不逊色于今天的计算机。20年前的深蓝计算机每秒“才”可以执行100亿次实数运算,而今天即使iPhone6S手机的峰值计算速度都接近2000亿次,是深蓝的20倍。AlphaGo用来击败樊麾二段的集群计算机拥有1200CPU176GPU,根据其规模估计的计算速度至少达到每秒500万亿次,是深蓝的5万倍。但是,即使按照保守估计,人类大脑每秒也可以进行1000万亿次以上的实数运算,是AlphaGo集群计算能力的2倍,深蓝的10万倍。也就是说,如果论对硬件计算能力的要求,人脑的思考过程其实比现在绝大多数围棋程序还要“蛮力”!之所以我们感觉1秒钟才思考几个变化,无非是大脑把“力量”用在了思维中我们意识不到的地方而已。

201604p4_f2.jpg

图2. 人类的计算能力比计算机更强

 


还有一种理解认为,“蛮力法”主要是指缺乏自我学习能力的“手工硬写出来的”程序。这种看法随着近些年机器学习程序的商业推广变得越来越常见,比如有时会听到“AlphaGo相比深蓝而言可以自我学习,而不是靠暴力搜索”这样的评论。但其实“暴力搜索”和“学习能力”是两个互补的维度,一个是说对弈之中如何思考,另一个是说对弈之后如何提高,二者并不矛盾。一个围棋程序完全可以既依靠“暴力搜索”又具有“学习能力”,AlphaGo就是最好的例子。

如果真的要说计算机下棋的思路是用“蛮力”的话,可能缺少灵活多变的战略思考能力算是一个主要体现。基于蛮力搜索法的程序要对当前盘面下每一种走法所直接导致的盘面进行胜率评估,然后选取胜率最高的那个盘面所对应的走法。这样相当于把一个“如何决定走子”的问题转化成了一组“如何评估盘面胜率”的问题。毫无疑问,人类棋手有时也是这么思考的,其实这几乎是所有人类思考模式中最简单最自然的一种。但关键是,现在的围棋程序只会这一种转化问题的方式。与之不同的是,人类的思考模式是多变的,不仅会把赢棋问题转化成评估盘面胜率的问题,有时也会转化成别的问题,比如“如何杀棋”、“如何做活”、“如何借助黑棋的毛病扩张”、“如何制造劫争”等等。根据盘面情形的不同,人类会把最基本的赢棋问题转化成不同类型的子目标。一旦确立了子目标,便集中精力考虑具体战术走法来完成这个子目标,而不是赢棋这个最终目标。这样因时制宜随机应变的子目标确立过程,就是所谓的战略性思考。AlphaGo的对局棋谱公布之后,很多棋友热衷于按照人类的思考方式为AlphaGo的每一步落子赋予一个战略意图,然后讨论合理与否。但事实上,包括AlphaGo在内的围棋程序中并没有这种具有适应性的战略思考成分。“在当前局面下,我走在某点的话最终胜算几何?”计算机就是通过不停地重复问自己这个单一问题来完成对弈的。但计算机这种“一根筋”搜索的模式在几乎所有棋类对抗中都已经不弱于灵活多变的人类思维,大有“任你千般招术我只一招亢龙有悔”的味道。


(本文发表于《科学世界》2016年第4期)



全部评论

你的评论