人工智能的可行性遭遇的挑战以及奇点是从区分量变和质变开始的。这种论点承认,在大体上,诸如内存容量、处理器速度和通信带宽等能力呈指数扩张,但同时坚持软件(方法和算法)则没有这样扩张。
这是硬件与软件的挑战,也是一个重要的挑战。例如,虚拟现实先驱杰罗恩·拉尼尔刻画了我和其他所谓的控制论极权主义者的立场,我们仅仅以一些模糊的方式来理解软件。在他看来,这就好像软件\"deus ex machina\"。2但是它忽略了我所描述的具体和详细的情景,据此才能实现智能软件。人脑逆向工程是一项远比拉尼尔和其他观察员所能认识到的更为深远的事业,它将扩大我们的人工智能工具包,并将包括自我组织方法等基本的人类智慧。我在后面会着重这个话题,但是我首先要解答一些关于软件缺乏进步的基本误解。
软件的稳定性。拉尼尔认为软件的“笨拙”和“脆弱”是固有的,并且长篇累牍地描述他在使用软件时遭遇的各种挫折。他写道:“让电脑以可靠且可变的方式执行十分复杂的特定任务而没有崩溃或安全漏洞,这基本上是不可能的。”3我并不打算捍卫所有的软件,但复杂的软件并不一定是脆弱和容易灾难性崩溃的。有很多例子表明,执行关键任务的复杂软件很少出现故障或几乎不出现故障:例如,控制飞机降落增长比例的复杂软件、监测重症监护室中病人的软件、引导智能武器的软件、控制基于自动模式识别的数十亿对冲基金投资的软件,以及实现其他许多功能的软件。4我不知道有任何空难是因为自动降落软件的故障引起,但我也不能说人类就同样可靠。
软件的响应。拉尼尔抱怨道:“电脑用户界面对于用户操作的反应似乎比15年前还要慢,如按键,这是怎么了?”5我现在想请拉尼尔试试使用旧电脑。即使排除配置一个旧电脑的困难不说(这是另一个问题),我想他已经忘记了以前的电脑反应有多么迟钝、笨拙、受限。以现在的标准,让20年前的电脑做一些实际的工作,就会明显看到,无论从量上还是从质上,旧软件都不会比现在的好。
虽然总是能发现不好的设计、响应延迟,但这通常是新特性和新功能带来的。如果用户愿意他们的软件不增加新功能,凭借不断指数增长的计算速度和内存容量,软件响应延迟将很快消除。但是,市场要求不断扩大功能。20年前,没有搜索引擎或其他与万维网集成的软件(事实上都没有万维网),只有原始的语言、格式和多媒体工具等。因此,功能总是处在可行性的边缘。
几年或几十年前的软件浪漫发展史比得上数百年前人们对田园生活的看法,那时人们不会遭遇与机器工作的挫折,生活无拘无束,但是生命短暂,劳动强度大,充满贫穷、疾病和灾难频发。
软件的性价比。关于软件的性价比,每个方面的比较都很显著。看看1000页的语音识别软件的表格。1985年,你花5000美元买一个软件,它提供100个词汇,不提供连读能力,需要训练三个小时来识别你的发音,而且准确性相对较差。2000年只需50美元你就可以购买一个软件,包括10万字的词汇表,并且提供连续发音功能,只需要经过5分钟的语音训练就可以识别你的发音,精度显著提高,提供了自然语言理解能力(为了编辑需要和其他用途),还包括许多其他功能。6
软件开发效率。软件本身是如何开发的?40多年来,我一直在开发软件,所以关于这一点我有一些看法。我估计软件的开发效率倍增时间约为6年,这比处理器性价比的倍增时间长,现在处理器性价比的倍增时间大概为1年。不过,软件生产率呈指数增长。现在可用的开发工具、类库和支持系统比几十年前的有效得多。我现在的项目组中只有三四个人,只用几个月就完成了一个目标,25年前,同样的目标需要很多人工作一两年才能实现。
软件复杂度。20年前的软件程序通常包括几千至几万行代码。现在,主流程序(例如,供应渠道控制、工厂自动化、预订系统、生化模拟)都是数百万行或者更多。主要防御系统软件(如联合攻击战斗机)包含了数千万行。
用来控制软件的软件本身的复杂性迅速增加。IBM引导了自主计算的概念,即自动完成日常的信息技术支持功能。7这些系统将根据自己的行为模式进行编程,将能够实现IBM公司提出的“自我配置、自我愈合、自我优化和自我保护”的目标。支持自主计算的软件代码量将达到数千万行(每行包含了几十字节的信息),人类基因组中只有几千字节的可用信息,因此,在信息复杂度方面,软件已超过了人类基因组及其中的分子。
然而,程序中包含的信息量并不是计算复杂度最好的标准。一个软件程序可能会很长,但可能包含很多无用信息。当然,基因组也是这种情况,它看起来是非常低效的编码。很多人尝试制定复杂度的测量标准。例如,美国国家标准技术研究所8的计算机科学家亚瑟·沃森和托马斯·麦凯布提出的回路复杂性度量标准(Cyclomatic Complexity Metric)。这个度量标准用于计算程序逻辑的复杂性,并考虑到了分支结构和决策点。大量的实例研究表明,按照这种方法测量,复杂度会快速增加,哪怕没有充分的数据来跟踪倍增时间。不过,关键在于,如今在行业中使用的最复杂的软件系统比以神经形态为基础模拟大脑区域的程序,以及对单个神经元进行生化模拟的软件程序复杂度更高。我们在人类大脑中发现了并行、自我组织、分形算法,现在我们能处理的软件的复杂度已经超过了对这些建模和仿真所需要的复杂度。
加速算法。诸如信号处理、模式识别、人工智能等程序使用各种方法来解决基本的数学问题,这是因为软件算法的速度和效率已经取得了显著进步(在硬件不变的情况下),因此解决问题的性价比不仅从硬件的加速中受益,也从软件的加速中受益。不同问题上的进步各不相同,但普遍都有进步。
例如,考虑一下信号处理,这是一个普遍的计算密集型任务,就像人脑一样。佐治亚理工学院的马克·A·理查德和麻省理工学院的盖里·A·肖记录了信号处理算法效率显著提高的趋势9。例如,要找到信号的种类,往往需要解决所谓的偏微分方程。算法专家乔恩·本特利已经证明了解决这类问题的计算量在不断下降。10例如,从1945年~1985年,对于一个代表性的应用而言(为一个每面64个元素的三维网格找出一个椭圆型偏微分的解决方案),计算量减少到原来的30万分之一。这使得效率每年增长38%(不包括硬件的改善)。
另一个例子,12年间,在音变电话线上发送信息的能力以每年55%11的增长率从每s发送300bit提高到每s56000bit。这一进步一部分是由于硬件设计改进,但主要还是因为算法创新。
处理问题的关键之一是使用傅里叶变换将信号转换成频率分量,将信号表示成一组正弦波。此方法用于计算机语音识别和许多其他应用的前端。人类听觉感知也从将语音信号分解成频率分量开始。1965年,用于快速傅立叶变换的\"radix-2 Cooley-Tukey algorithm\"将1024点傅里叶变换所需的操作量减少到原来的1/200。12一个改进的\"radix-a\"算法进一步促进了这个进步,将操作量减少到原来的1/800。最近引进了“小波”变换,它能将任意信号表示成一组比正弦波更复杂的波。这些方法进一步极大地增加了效率,可以将信号分解成关键组成部分。
上面的例子并非异常现象,大部分计算密集的“核心”算法所需的操作量显著减少。这里还有一些其他的例子,比如排序、查找、自相关(和其他统计方法)、信息压缩和解压。并行算法,即将一个方法分解成多个能同时执行的方法,也取得了很大进展。正如前面所讨论的,并行处理必然运行在较低的温度下。大脑使用大量的并行算法,可以在更短的时间内完成更复杂的功能。我们需要在机器中使用这个方法,以达到最优的计算密度。
在硬件性价比的提高和软件效率的改进之间存在着固有的差别。硬件改善有着显著的一致性和可预测性。每当我们达到一个硬件速度和效率的新水平时,我们就能获得强大的工具来实现指数级进步,以便到达下一个新水平。软件的改善则是较难预测的。理查德和肖称它们为“开发阶段的虫洞”,因为我们可以经常看到,实现某个算法的改进就相当于硬件一年的进步。请注意,我们不依靠软件效率的不断改进,因为我们可以依靠硬件的不断加速。然而,算法突破带来的好处非常有助于实现计算机能力赶上人类智慧的目标,而且这些好处很可能继续累积。
智能算法的根本来源。最重要的一点,为了在机器中实现人类智能,这里已经有了一个具体的游戏计划:逆向设计出人脑中的并行、混乱、自组织、分形方法,并将这些方法用在现代计算硬件中。我们已经看到人脑及其方法呈指数级增长知识(见第4章),可以预料,未来20年内,我们将有数百个信息处理器官的详细模型及仿真,所有这些都统称为人类大脑。
理解人类智慧的运作原理有助于我们开发人工智能算法。很多这样的算法被广泛用于机器模式识别系统,系统表现出的微妙复杂的行为是设计师也想不到的。对于创造复杂的智能行为来说,自组织方法并不是一个捷径,但它是一个重要方式,通过它可以增加逻辑编程系统的复杂度而不会引起系统脆弱。
正如我前面所讨论的,人脑本身是由基因组创建的,而基因组只包含3千万到一亿字节的压缩的有用信息。那么,之间有百兆个连接的器官怎么会来源于如此小的基因组呢(我估计,仅仅是用来标识人脑的互联数据就比人脑基因组的信息多100万倍)13?答案是,基因组指定了一组进程,每一个都采用无秩序的方法(随机初始化,然后自组织)来增加信息量。据了解,该互连布线遵循的计划包含很大的随机性。当一个人来到一个新的环境,他的连接和神经递质层模式就会自我组织,以便更好地描绘这个世界,但是规定最初设计的程序并没有那么复杂。
我并不支持我们通过编程将人类智能连接起来,从而形成一个巨大且规则的专家系统。我们也不希望以人类智能为代表的一系列技能来源于一个巨大的遗传算法。拉尼尔担心,任何这样的做法将不可避免地陷入某个局部极小值(这个设计比与之类似的设计要好,但实际上并不是最优设计)。有意思的是,像理查德·道金斯一样,拉尼尔也指出,生物进化“丢失了轮子”(因为没有一个生物进化拥有它)。事实上,这种看法并不完全准确:像在蛋白质层的结构还是存在小轮子的,比如细菌鞭毛的离子发动机,它就用来在三维环境中充当传输工具。14对于形态较大的生物,如果没有道路,轮子当然不管用,这就是为什么没有用于二维平面移动的生物进化的轮子15。然而,进化确实产生了一种物种,它既能创造轮子,又能创造道路,因此它也成功地建立了很多车轮,尽管是间接的。间接的方法并没有什么错,我们一直在工程中使用间接的方法。事实上,间接是进化进行的方式(每个阶段的产品创造下一个阶段)。
大脑逆向工程没有局限于复制每个神经元。在第5章中,我们了解了如何通过实施具有与大脑等同功能的并行算法来对包含无数神经细胞的大量大脑区域建模。这种神经形态方法的可行性已经被十多个区域的模型和仿真所证明。正如我之前讨论的,这些往往能使得计算的耗费大大降低,正如劳埃德·瓦特、卡福·密德等的实验表现的那样。
拉尼尔写道:“如果存在一个复杂、无序的现象,那就是我们。”我同意他的观点,但并不认为这是一个阻碍。我自己感兴趣的领域是无序计算,这是我们做模式识别的方式,这又是人类智慧的核心。无序是模式识别进程中的一部分,它推动这一进程,我们没有理由不在机器中使用这些方法,就像在我们的大脑中使用一样。
拉尼尔写道:“进化已经演变,例如开始有了性别概念,但进化无一例外都非常缓慢。”但拉尼尔的意见只适用于生物进化,而不适用于技术发展。这正是为什么我们对生物进化感动。拉尼尔忽略了进化过程的本质:它加速了,因为每一个阶段为创建下一阶段引入了更强大的方法。生物进化的第一阶段(核糖核酸)经历了几十亿年,我们已经由这个阶段发展到如今的技术快速发展阶段。万维网出现才短短几年,速度却明显快于寒武纪大爆发时期。这些现象都是相同的进化过程的一部分,开始时缓慢,目前的速度相对快一些,而未来几十年会变成快得惊人。
拉尼尔写道:“整个人工智能事业是建立在一个聪明的错误之上。”在此之前,计算机至少在每一个层面都可以媲美人类的智慧,它始终让怀疑论者认为计算机和人相差无几。人工智能的每一个新成就都受到尚未完成的其他目标的影响。事实上,研究人工智能的人都会遇到这种挫折:一旦人工智能的目标实现,便不再认为它属于人工智能的领域,而只是一个一般的有用技术。因此人工智能经常被认为是一些尚未得到解决的问题。
但是,机器的确越来越智能,它们能完成的任务范围也在很快扩大,这些任务以前需要聪明的人类关注。正如在第5章和第6章讨论的一样,现在有数百个关于操作性的狭义人工智能的例子。
例如,在前面的内容中描述了\"Deep Fritz Draws\",电脑象棋软件不再仅仅依赖强力计算。2002年,Deep Fritz仅仅运行在8台电脑上,表现和1997年的IBM深蓝相当,深蓝使用了基于模式识别的改进算法。我们能看到很多这种例子,它们都是软件智能的进步。然而,到现在,随着整个人类智力都可以被机器赶上,机器能力总是被尽量减小。
一旦我们取得人类智能的完整模式,机器将能够将人类模式识别的灵活、微妙和机器智能天生的优势结合起来,比如速度、内存容量,最重要的是将知识和技能快速分享的能力。