初看书名,我还以为它是一本讲授算法的教科书。收到书后,兴奋地读了起来,这本科普读物让我不忍释卷。这本书语言通俗易懂,全书几乎没有什么令人费解的专业术语,也没有一个数学公式,它通过我们身边的一个个活生生的例子(有些离我们还比较远),娓娓道来,把“算法”这样一个艰深的领域粗线条地介绍给读者。我相信,即使非计算机专业的读者也可从中获益,一千个人眼中有一千个哈姆雷特,大家感受肯定彼此不同,“揽物之情,得无异乎?”。下面说说我的感受吧。

如果让我介绍算法,我通常会从欧几里德算法讲起(早在公元前300年左右,欧几里德记载的一种求最大公约数的算法,又称辗转相除法),然后我会讲厨师做菜的菜谱,或者我们做一件事的流程(甚至是系鞋带这种最简单的事情)都属于算法,这样可以让人有一种感性认识吧——可能是我受TAOCP(The Art of Computer Programming)影响较深的缘故吧。

本书直接从华尔街对算法的应用开始讲起——投机赚钱(呵呵,算法要有“用”才行),然后讲到博弈,讲到深蓝,讲到推荐,讲到艺术创作,讲到医生,讲到未来,大开大合,非常引人入胜。

严格地讲,算法领先于计算机很多年。这是因为我们做事的流程、平时做数学题、与人交谈、玩游戏、购物、旅游……都是算法的体现。人们发明计算机,最初是为了“补充延长”人的脑力的,正如普通机器是为了把人从体力劳动中解放出来一样。人不能简单告诉计算机“做什么”,而必须告诉计算机“怎么做”。那么就涉及到了一个数学和哲学问题——什么叫“计算”。我对这个问题有一些爱好,但是研究不深。早在100多年前希尔伯特就试图建立所谓公理系统,在这个系统中,只有一些简单的公理,然后利用数理逻辑的推导关系,滚雪球式地推出其他“正确的命题”。我认为,这是一个伟大的理想——我们不需要理解命题的语义,仅仅通过符号的演算,就可以证明命题。这对人类似乎比较抽象,因为我们认识事物都是从具体到抽象,比如我们发现1+2=2+1……最终有了加法交换律a+b=b+a。但是对于机器,它甚至都不需要理解加号的含义,就能证明这个命题(如果需要的话)。所以我说,希尔伯特提出的这个系统具有非常高的意义,是机器证明的基础。数理逻辑领域也是在这个基础上的,它只关心推导过程,而不管命题具体是什么含义。希尔伯特当时乐观地认为数学领域正确的命题一定能在公理系统上通过有限步推导证明出来。可是后来哥德尔发现了任何一个这样的公理系统都有既不能证实,又不能证伪的命题存在。尽管如此,“计算”这一个概念还是可以被很好地定义的,图灵的伟大贡献之一就是它定义了什么叫做“计算”。它的图灵机模型,就是“计算机”的抽象。图灵定义的计算非常简单,就是写下0,写下1,修改写下的内容等几种非常简单的操作,但是可以完成非常复杂的事情。于是——一切交给机器吧。计算机执行这些简单操作的速度比我们人类快得多,并且这些简单操作可以完成“可计算”的任何事情!那么,不可计算的怎么办?图灵发现了“停机问题”,超越了“图灵机”计算模型的极限,那么我们现在的计算机有很多“不能做的事”,这些都是“不可计算”的,这是用现有计算机无法解决的问题,而不是NPC(NP完全问题)、NP-hard问题。因为后者还是能完成的(可计算的),只是可能需要很长的时间——复杂度很高,而前者普通计算机根本无能为力——或许量子计算机之类的非图灵机模型的计算机可以搞定吧。

之所以谈这么多,是因为我觉得《算法帝国》触及了这个本质的问题。比如说IBM深蓝战胜卡斯帕罗夫吧,其实这种博弈就是计算机内部枚举所有情况,无论卡斯帕罗夫怎么走,深蓝都计算出来了,然后它自己再枚举该步棋的所有情况,再枚举卡斯帕罗夫走的所有情况……尽管枚举量巨大,但是枚举的东西总是有限的,国际象棋如此,围棋如此……所以用计算机枚举它,它在一开始,就能掌握问题的全部——包括最终结果。可以说,深蓝的胜利没什么神奇的——如果抛开计算复杂度、计算量不说的话。于是我们可以说国际象棋游戏是“可计算的”。那么扑克牌游戏呢?因为信息不完全,有人可能虚张声势,有人沉默不语,人有各种表情,人有各种行为,人的行为可能不像他自身认为的那么“理性”,所以机器在扑克游戏上战胜人就没那么容易。传统博弈论的“理性”假设不成立的前提下,预测人的行为变得困难。所以,问题的本质从“扑克牌游戏可计算么?”变为“人的行为可计算么?”,不光扑克牌,推荐领域也是如此——我们必须预测人的行为,给它推荐东西,还有创作领域——艺术创作向来被人们看作是机器不可替代的,因为它需要“灵感”,而灵感通常是不好解释的,可遇不可求。

现在看来,计算机已经解决了很多问题。它可以在扑克牌游戏中战胜一些人、把推荐做得很准确、创作出优美的乐章、预测出未来流行趋势……但是这些仍然没有完全回答这些是否“可计算”的问题。这是因为,人的行为过于复杂,不好模拟,不好预测。据我所知,在心理学领域(甚至生物学领域)都有所谓的决定论,就是我们所谓的“自由意志”实际上是受到环境、自然等因素完全决定的,倘若如此,这些真的都是可以计算的,只是算法相当复杂罢了。

比如,艺术创作吧,书中提及,人也是根据前人的创作学习,进而形成自己的风格的,那么机器也可以,它也可以从大量前人的作品中学习,并最终会自己创作。一种观点认为,创作“可计算”。其实我觉得还有另外一种可能,是我们解决了创作行为中“可计算的”部分,而这部分占了创作行为的主要部分。也就是说我们解决了一个“特殊”问题,这部分是“可计算的”,总体问题还是“不可计算”的。现在人们已经承认,“可计算”与“不可计算”的鸿沟是存在的,但是对于哪些问题是完全“不可计算”的还是有争议的……

我们可能暂时无法解释如何完全计算人类的行为,但是就目前来讲已经计算得很好了,或许这就是问题的全部,或许不是。即使未来我们知道人类行为是“不可计算”的,我们也不用悲观,我们采取大量的近似,在特殊条件下,这些可计算,而且可以被很好地解决,就像我们现在这样……

这就是我对本书的理解,它主要描述了两类算法,一类是简单的“计算”,就像华尔街“投机”,国际象棋博弈等单纯靠机械枚举能解决的问题的算法,一类是更“高级”的扑克牌游戏、创作、推荐、预测等复杂算法。后者至关重要,不仅发展前景广阔,而且还有很多未解决的问题……甚至后者的一般性问题根本“不可计算”。

于是感到了图灵测试的伟大,这是图灵提出来的一种完美的测试,其背后的思想令我叹服。他提出,如果我们通过某终端聊天而无法知道跟我们聊天的是一个人还是一台机器(机器人),那么这个运行机器的算法就通过了图灵测试。这里所谓的“无法知道”是说仅仅根据聊天内容无法判断它是人还是机器,你不能去分析“打字”速度,不能判断有没有人的呼吸声,不能听人的声音和机器模拟的声音,也就是说我们只从文字上聊天,比如我们通过qq,msn,skype这种软件(虽然当时没有),和对方聊天(抛开打字速度、视频、音频等不考虑),如果我们和对方聊得很顺畅,没有产生任何怀疑,而最终发现对方是个机器人,那么这个机器人的算法就通过了图灵测试。

图灵测试是AI(人工智能)的终极目标,目前离我们还很远,未来让我们拭目以待。