从理论上讲,对计算机可以下国际象棋这种情况进行编程并不难:如果让一个国际象棋程序无限期地进行搜索运算,那么全部10的1050种棋局都能得到解决方法。坎贝尔对我说:“有一个运算程序简单易懂,又能解决国际象棋中的问题,我也许半天就能写出这个程序,若给它足够的时间运转,便能够完成比赛。”可他又哀叹道:“可这样的计算,可能需要花费人类一生的时间来完成。”
若想让计算机棋手打败世界冠军,通常要作无数次索然无味的反复试验。设计者需要思考,是否应该让程序多注意残局阶段,而在中局阶段应少耗费时间,以达到表现上的平衡?是否有更好的办法能让电脑在开局阶段就能评估出舍马换象的价值?另外,有的棋路的确暗含“将军”的机会或能变成一个陷阱,但最终却不能帮助棋手赢得比赛,对这种棋路,程序需花多长时间才能识别出其无用性并且对其忽略?
通过调整这些参数并观察调整后的变化,坎贝尔对“深蓝”进行过多次试验。但有时“深蓝”还是会犯错,会出现一些奇怪的、出人意料的走法。在这种情况下,坎贝尔只得询问老程序员:新出现的走法究竟是程序的特征——是一个预示着其技巧正在提升的顿悟时刻,还是程序中的漏洞?
我一般会说这是程序中的漏洞。在更宽泛的预测环境中,当一个模型产生了一个意料之外或难以解释的结果时,通常是由漏洞造成的。把噪声误认作信号的情况太普遍,也太容易了。漏洞甚至能让最出色的预测者前功尽弃。
在本书上一章中为你介绍过那位身家百万美元的篮球赌客鲍勃·乌尔加利斯。有一年,乌尔加利斯决定要在棒球比赛中一试身手。他设计的模拟器建议把赌注压在费城费城人队,但这次乌尔加利斯赌输了。结果证明是因为模拟器1 000个行代码中有一个字母输入错误了:费城人队的主场球场市民银行球场是一个有助于防守和本垒打的小型球场,其编码为P–H–I,但乌尔加利斯的助手却错误地把编码输成P–H–1。仅一个错误的行代码就足以“淹没”程序中所有的信号,害得乌尔加利斯将赌金压在了“噪声”上。这次失败让乌尔加利斯沮丧万分,从此彻底停用了这个棒球程序。
对坎贝尔而言,他们设计的“深蓝”程序在国际象棋方面早就比设计人员厉害百倍,这是坎贝尔面临的挑战,因为很有可能“深蓝”走了一步他们都没走过的棋,但他们却未必知道这是由于漏洞造成的。
“刚开始调试‘深蓝’时,每次它走了一步不常见的棋,我都会说,‘哦,一定出错了!’我们就会去探究,查看编码,最后弄明白问题所在。但随着时间的推移,我们越来越少这样做了。虽然当该程序继续出现奇怪棋局时,我们还是会去查看一下,但我们却发现它已经想出了一些人类很难搞懂的走法。”
在国际象棋史上,最著名的几步棋也许要数国际象棋天才波比·费希尔在1956年所谓的“世纪大赛”中走的那几步了。当时只有13岁的费希尔在对阵国际象棋大师唐纳德·波恩盖尔时,出现了两次戏剧性的弃子——一次是费希尔白白地牺牲一个棋子马,几步棋后,他又故意地让自己的棋子后失去防护,而让棋子象前进一步。这两步棋都是正确的,几步之后,费希尔的策略就使波恩盖尔损兵折将,自己的优势则越来越明显。然而,不管是当时还是现在,都很少有国际象棋大师仔细地考虑费希尔的招数。一直以来,棋手们都对“除非是置换对方的棋子后,或是可以立刻将对方一军,否则绝不能放弃自己的棋子后”这样的启示法深信不疑,之所以这样做,是因为这些方法屡试不爽,几乎从没出现过失误。
我把这个棋局输入我的笔记本电脑,通过费里茨程序运行,几秒钟之后,费里茨就识别出费希尔的招数。事实上,该程序认为这样的局面只有费希尔的招数方能奏效。在搜寻到所有可能的走法后,费里茨识别出这种情况下应该抛弃上面提到的那个启示法。
我们或许不能说计算机找到了这些走法是因为它具有“创造性”,相反的,它只是通过其强大的计算速度找到了这些走法。但是,计算机确实另有优势:下棋时,即使在走法上遇到了大难题,计算机也可以识别出特定棋局里的绝妙招数。但对于人类棋手而言,要做到这一点就需要突破传统,变得富有创造力和自信心。人们赞叹费希尔小小年纪却棋艺高超,可也许正是因为年龄小,他才能创造出这个招数:他充分地发挥自己的想象力处理每一步棋。人类的思维盲点通常是我们自己一手造成的,并且会与日俱增。计算机也有盲点,但它至少能够考虑到所有可能出现的招数,进而避免这些空想问题。
然而,“深蓝”的程序中还存在一些漏洞:数量不多,但肯定会有几个漏洞。采访接近尾声时,坎贝尔戏谑地提及1997年计算机“深蓝”和卡斯帕罗夫的对决,在第一场比赛快结束时发生了一个意外。
“‘深蓝’在比赛过程中出现了一个漏洞,这个漏洞很可能使卡斯帕罗夫对其能力做出错误判断,因为卡斯帕罗夫没想到这步棋是因为漏洞造成的。”
这个漏洞是在第一场比赛走到第44步棋时出现的,由于无法决定该走哪步棋,“深蓝”系统默认使出最后一招自动防故障装置措施,完全是随意走了一步棋。这个漏洞无足轻重,因为它是在比赛接近尾声时才出现的,而此时胜负已定。次日,坎贝尔及其团队修补了这个漏洞。坎贝尔告诉我:“1997年年初,我们曾遇到同样的问题,当时认为漏洞已经修补好了,不幸的是,我们还是漏掉了一个漏洞。”
事实上,漏洞对计算机“深蓝”来说代表很多东西,唯独不代表灾难,因为漏洞似乎可以使计算机击败卡斯帕罗夫。卡斯帕罗夫迎战“深蓝”的比赛一直为人们所津津乐道,在第二场比赛中,卡斯帕罗夫出了一些状况,他犯了一个从未犯过的错误,输掉了原本可以打成平局的比赛。究竟是什么让国际象棋大师犯了这个错误?是由于“深蓝”第一局比赛中的第44步棋吗?当时“深蓝”似乎是极为随意地走了一个棋子车,这步棋让卡斯帕罗夫感到紧张,他觉得这有悖直觉的一步棋必是一步高招,而他绝没有想到这不过是一个程序漏洞。
因为太依赖21世纪的新兴科技,我们对机器在生活中的价值仍留有艾伦·波式的盲点。但计算机让卡斯帕罗夫出错,却是由于一个设计缺陷。
计算机擅长做什么?
计算机的计算速度非常快。而且,它可以非常踏实忠心地计算——不知疲倦、不带情绪、不会中途改变分析方式。
但这并不意味着电脑做出的预测就一定很完美或者很准确。首字母缩略词“GIGO”(意为无用输入,无用输出)很好地概括了这一个问题。若给计算机输入错误的数据,或提供一套愚蠢的指令供其分析,它不可能“变废为宝”。此外,计算机也不善于完成需要创造性和想象力的任务,比如为这个世界的运转方式设计策略或提出理论。
因此,在气象预报和国际象棋等系统中,计算机对预测人员的作用最大,因为这些系统遵循的法则相对简单且容易理解,但是,为了做出准确的预测,还是必须反复计算支配系统的方程式。而在经济预测和地震预测方面,计算机的用处不大,因为我们对造成这些问题的根源所知甚少,而且这些领域的数据“噪声”又比较大。但20世纪七八十年代,这些领域对计算机主导的预测寄予厚望,当时的学者和科学家接触计算机的机会逐渐增多,但是此后并没有取得多大进步。