第二章
终极算法

阅读 ‧ 电子书库

机器学习的应用非常广泛,更为惊人的是,相同算法可完成不同的事情。在机器学习领域之外,如果你要解决两个不同的问题,就得编写两个不同的程序。这些程序可能用到相同的基础架构,如相同的编程语言或数据库系统。但是,如果你想处理信用卡申请,诸如下棋的程序则毫无用处。在机器学习领域,如果提供适当的数据来让机器学习,那么相同的算法既可以处理信用卡申请,也可以下棋。实际上,大量的机器学习应用仅仅由几个算法来负责,在接下来的几个章节中我们会谈到这些算法。

广告:个人专属 VPN,独立 IP,流量大,速度快,连接稳定,多机房切换,每月最低仅 5 美元

例如,朴素贝叶斯算法就是一个可以用短方程来表达的学习算法。只要提供患者病历的数据库,包括病人的症状、检查结果,或者他们是否有什么特殊情况,朴素贝叶斯算法就可在一秒之内做出诊断,而且往往比那些花几年在医学院学习的医生还要强,甚至它还可打败花费数千小时构建的医学专家系统。该算法还可应用于学习垃圾邮件过滤器,乍一看,这和医疗诊断毫无关系。另外一个简单的学习算法就是最近邻算法,它的用途十分广泛,从笔迹识别到控制机器人手,以及推荐你可能喜欢的书籍或者电影。决策树学习算法也同样擅长决定你的信用卡申请是否应被通过、寻找DNA中的绞接点,以及下棋时指导下一步该怎么走。

相同的学习算法不仅可以完成无穷无尽且不同的事情,而且和被它们替代的传统算法相比,它们要简单得多。多数学习算法可能只需数百行或者数千行代码。相比之下,传统程序则需几十万甚至上百万行代码,并且单个学习算法就可以导出无数个不同的程序。

如果那么少的学习算法就可以做那么多事,那么有一个逻辑上的疑问:单个学习算法可以把所有事情都做完吗?换句话说,单个算法可以学习所有能从数据中学习的东西吗?这是一个非常艰巨的任务,因为这基本上包含成年人大脑里以及人类进步所创造的一切,还有所有科学知识的总和。实际上,对所有主要的学习算法——包括最近邻算法、决策树学习算法以及贝叶斯网络(朴素贝叶斯的概括)——来说,如果你为学习算法提供足够、适当的数据,该算法可以实现任一功能(对学习任何东西来说,都与数学相关)。需要注意的是,“足够数据”也有可能无限。学习无限数据需要做出假设,如我们会看到的那样,而且不同的学习算法会有不同的假设。

如果不把这些假设嵌入算法中,而是将其连同数据一起,当作显示输入,并允许用户选择插入哪一个,甚至陈述新的假设,那么会怎样?有没有这种算法,可以接收任何数据及假设并输出隐藏其中的知识?我相信有。当然,我们得限制假设的可能性,否则如果把整个目标知识都以假设形式赋予算法,那就是在作弊。

我们可以通过限制输入的规模、要求假设弱于当前学习算法等方法,来实现这个目的。

那么疑问就会变成:这些假设要弱到何种程度,但仍能够从无限数据中获得所有相关知识?注意“相关”这个词:我们仅仅对存在于世界的知识感兴趣,对不存在的世界没有兴趣。因此发明一种通用的学习算法可归结为发现宇宙最深层的规律,所有现象都遵循该规律,然后找出计算的有效方法来将其与数据结合起来。要找到这个“计算的有效方法”,就不能将物理定律视为万物规律,如我们将看到的那样。然而,这并不意味着通用的学习算法要和专用算法一样高效。正如在计算机科学中常发生的那样,我们宁愿牺牲效率来换取通用性。这在学习既定目标知识所需数据的量上也适用:一般通用学习算法会比专用算法需要更多的数据(但如果我们有必要的数量,就没问题),而且数据越多,越有可能会这样。

那么,这就是本书的中心假设:

所有知识,无论是过去的、现在的还是未来的,都有可能通过单个通用学习算法来从数据中获得。

我将该学习算法称为“终极算法”。如果这种算法成为可能,它的发明将成为人类最伟大的科学成就之一。实际上,终极算法是我们最不愿意发明的东西,因为一旦对其放松,它会继续发明一切有可能发明的东西。我们要做的,就是为它提供足够、适当的数据,通过这些数据,它会发现相应的知识:给它视频流,它就会观看;给它图书馆,它就会阅读;给它物理实验结果,它就会发现物理定律;给它DNA晶体学数据,它就会发现DNA的结构。

这可能听起来有点八竿子打不着:一种算法怎么可能学习那么多不同的事情,而且是这么难的事情呢?但实际上,种种证据表明终极算法是存在的。下面我们来看看它们是什么样的。

来自神经科学的论证

2000年4月,麻省理工学院的神经系统科学家团队在《自然》杂志上发布了一项非同寻常的实验结果。他们对雪貂的大脑进行重新布线,改变了雪貂从眼睛到听觉皮层(大脑负责处理声音的部分)以及从耳朵到视觉皮层之间的连接。你可能觉得实验结果就是雪貂会严重致残,但并没有:听觉皮层学会看,视觉皮层学会听,而且雪貂没事。一般的哺乳动物,其视觉皮层都包含一张视网膜地图:皮层中,与视网膜附近区域相连的神经元彼此相互接近。相反,大脑被重新布线的雪貂在听觉皮层中形成了这张视网膜图。如果视觉信息重新导入躯体感觉皮层(负责感知触觉),躯体感觉皮层也会学会看。其他哺乳动物也有这样的能力。

对于天生看不见的人,视觉皮层可以负责大脑的其他功能。对于听不见的人,听觉皮层也可以这么做。盲人可以借助舌头来学会“看”,方法是将头戴式摄像机的视频图像发送至舌头上的一组电极上,高电压与高像素对应,低电压与低像素对应。本·安德伍德是盲人,小时候就自学像蝙蝠那样,用回声定位来导航。

通过咂舌头、听回声,他能够到处走动且不会撞到障碍物,会踩滑板车,甚至还能打篮球。所有这些例子都证明,大脑自始至终只使用了一种相同的学习算法,那些负责不同知觉的区域,区别也仅仅在于与其相连、输入信息的器官(如眼睛、耳朵、鼻子)。反过来,关联区(大脑的各个皮层)通过与不同的感觉区(各个感觉器官)相连,来实现其机能,而执行区则通过连接关联区来实现其机能,然后输出反馈。

通过在显微镜下观察皮层可以得出相同的结论。同样的布线模式不断重复,随处可见。皮质是一个6层的柱状物,反馈回路达到大脑一个叫丘脑的结构,以及短程序抑制连接和远程兴奋性连接反复出现的模式。虽然表现出一定数量的变异,但这看起来更像是来自同一算法(而不是不同算法)的不同参数或者设置。低级感官领域会有更为明显的差异,但正如重新布线实验表明的那样,这些都不具有决定性。小脑是比大脑更早进化的部分,负责简单的运动调节,有着非常明显且有规律的架构,由小很多的神经元构成,因此,看起来至少动作学习使用的是不同的算法。然而,如果一个人的小脑受到损伤,大脑皮层会接管它的机能。人的生物进化过程保留了小脑,但这并不意味着小脑能做大脑皮层不能做的事情,只是因为小脑更加高效。

自始至终,大脑构造中发生的运算也同样相似。大脑中的所有信息都以同样方式(通过神经元的放电模式)来表示。学习机制也相同:记忆通过加强集群放电神经元之间的连接得以形成,涉及一个叫作长时程增强的生物化学过程。不仅人脑是这样,不同的动物,其大脑运行机制都很相似。我们的大脑异常大,但似乎与其他动物一样,其构建遵循同样的原则。

证明大脑皮层统一性的另一个证据来自所谓的基因组贫乏。人类大脑中的连接数量是基因组中字母数量的100万余倍,因此从物理角度,基因组不可能弄明白大脑构造的细节。

然而,关于大脑是终极算法这个观点的最重要论据,就是大脑负责我们能感知以及想象的一切。如果某物存在,但大脑无法对其进行学习,那么我们就不知道它的存在。我们可能只是没看见它,或者认为它是随机出现的。不管怎样,如果我们将大脑放入计算机中运行,那个算法就能掌握我们能学会的一切。因此发明终极算法的一种途径(可以说是最流行的一种)就是对人脑进行逆向解析。杰夫·霍金斯(Jeff Hawkins)在他的著作《人工智能的未来》(On Intelligence)中对此进行了尝试。雷·库兹韦尔(Ray Kurzweil)把他的希望放在奇点上——人工智能的崛起远远超过人类的多样性。这样做的同时,他还在《如何创造思维》(How to Create a Mind)一书中对此进行了尝试。虽然如此,我们会看到,这仅仅是几个可能途径中的一个。这甚至不一定是最有可能的一个,因为大脑非常复杂,而我们还处于解密大脑的初级阶段。另一方面,如果我们找不到终极算法,奇点也不会很快发生。

并不是所有的神经系统科学家都相信大脑皮层的统一性,在我们肯定这个观点之前,需要学习很多东西。关于大脑能掌握以及不能掌握的东西,这个问题也引起了业界激烈的讨论。如果有我们知道但大脑不能学习的东西,那么这个东西肯定已经通过进化被掌握了。

来自进化论的论证

生物多样性源于单一机制:自然选择。值得注意的是,计算机科学家对该机制非常熟悉:我们通过反复研究尝试许多备选方法来解决问题,选择并改进最优方案,并尽可能多地尝试这些步骤。进化论是一种算法。套用查尔斯·巴贝奇(维多利亚时期的计算机先驱人物)的观点,上帝创造的不是物种,而是创造物种的算法。达尔文在《物种起源》的总结部分提到的“无限形体,美丽至极”掩饰了最美的统一性:所有这些形体都被编码在DNA中,所有这些形体都通过改变和连接这些染色体来表现。只通过该算法的一个描述,谁会猜出它产生了你和我?如果进化论这个算法能学习我们,可以想象它还可以学习能学习到的一切,条件是我们将进化论这个算法运用到足够强的计算机上。的确,在机器学习领域,通过模仿自然选择来使程序进化是许多人正在努力做的事情。因此,进化论是另外一个有希望通往终极算法的途径。

利用足够多的数据,一种简单的算法能掌握什么?关于这个问题,最经典的例子就是进化论。输入进化论这个算法的信息是所有存在过的、活着的生物的经历以及命运(对现在的算法来说是大数据)。此外,这个进化论算法已经在地球上最强大的计算机运行了300多万年——这台强大的计算机就是地球自己。运行这个算法的真正计算机应该比地球这台“计算机”运转得更快、数据密集性更低。哪一个模型更适合终极算法:进化还是大脑?这是和机器学习有关、自然与培育之间的辩论。正如我们的存在依靠的是自然与培育的共同力量,也许真正的终极算法包含这两个方面。

来自物理学的论证

在1959年的一篇著名文章中,物理学家、诺贝尔物理学奖得主尤金·维格纳惊叹“数学在自然科学中不可思议的有效性”。由少量的观察推导出规律,是什么神奇的力量让这些规律可以运用到超出其预测范围的领域?这些规律都是基于数据得来的,而为什么这些规律比数据还要准确好几个数量级?最重要的是,为什么简洁、抽象的数学语言能够如此精确地解释我们无限复杂的世界?维格纳觉得这是一个很大的谜,觉得既幸运又无法理解。数学就是如此,而且终极算法就是其逻辑的延伸。

如果这个世界仅仅是一个不断变大、喧哗嘈杂的困惑体,那么我们有理由怀疑通用学习算法的存在。但如果我们所经历的一切,仅仅是几个简单规律的产物,那么单个算法能推导出所有一切能推导的东西,就是可以理解的。终极算法要做的就是提供一条捷径,通过实际观察,用简短的算式推导(而不是长长的算式)来得出这些规律的结果。

例如,我们虽然相信物理定律引起进化,但是不知道具体怎么进行。我们知道自己可以像达尔文那样,通过观察直接推导出自然选择规律。无数错误的推论就是由那些观察得出的,但多数人不会做出那些错误的推论,因为我们对世界有着广泛的认识,会对自己的推论形成良性影响,而且那些认识也与自然规律相符。

物理规律之美多大程度渗透到更高的领域(如生物学、社会学),这一点有待观察。但对混沌的研究提供了许多诱人的例子,这些例子和拥有相似行为的不同系统相关,而普适性理论可以解释这些例子。曼德布洛特集合(Mandelbrot Set)就是很完美的例子,能解释一个很简单的重复程序如何产生无数种类的形式。如果世界上的山峰、河流、云朵以及树木都是这些重复程序的产物(分形几何学表明它们就是),也许那些程序只是单个程序的不同参数化,而该单个程序可以从那些程序推导中得出。

在物理学中,适用于不同数量的方程,往往可以用来描述发生在不同领域的现象,例如量子力学、电磁学、流体动力学。波动方程、扩散方程、泊松方程表明:一旦我们在某个领域发现它们,也很快能在其他领域发现它们;一旦我们在某个领域懂得解开它们,也能在所有领域将它们解开。此外,所有这些方程都很简单,涉及几个和空间、时间有关的数量的相同导数。很容易想象,它们都是主方程的几个例子,而终极算法要做的,就是用不同的数据集来将它实例化。

另外的证据来自最优化。最优化是数学的分支,关注的是为函数找到输入值,使其产生最大输出值。例如,找到购买及销售股票的排序,用来最大化你的全部回报,这就是一个最优化问题。在最优化中,简单的函数往往能引出惊人的复杂方案。最优化几乎在每个领域都扮演十分重要的角色,包括科学、技术、商业,还有机器学习。每个领域在约束条件下进行最优化,该限制条件由其他领域的最优化状态来决定。我们努力在经济的限制下将幸福感最大化,这也是公司在受到当前技术水平限制下的最佳方案,反过来成为我们在生物学及物理学限制下能找到的最佳方案。反过来,生物学是进化学在物理学和化学的约束下进行优化的结果,而物理定律本身又是最优化问题的解决方法。因此,可能所有事物的存在,都是一个中心优化问题进一步的解决方案,而终极算法随着那个中心问题的叙述而产生。

不仅物理学家和数学家在寻找不同领域之间意想不到的联系,生物学家也在寻找。在《论契合:知识的统合》(Consilience)一书中,著名生物学家爱德华·威尔逊慷慨激昂地阐释了知识(从科学到人文学)的统一性。终极算法就是该统一性的完美表达:如果所有知识共同遵循一个模式,那么终极算法就存在,反之则不存在。

然而,物理学的简洁性独一无二。在物理学和工程学之外,数学的轨迹就更加混合。有时数学仅限于用起来有效,而有时它的模型又过于简单,无法使用。然而,过于简单的倾向源于人类思维的各种限制,而不是源于数学的种种限制。大脑的大多数硬件(或许该叫“湿件”)负责人体感知和活动,而为了做算术,我们就得借用因语言得到进化的那部分大脑。计算机就没有这样的限制,而且可以轻易地将大数据变成非常负责的模型。在数学的过度有效性与数据的过度有效性面前,你就会选择机器学习。生物学和社会学绝对不会像物理学一样简单,但我们发现其真理的方法可以做到那样简单。

来自统计学的论证

根据一个统计学流派的观点,所有形式的学习都是基于一个简单的公式——如我们所知,就是贝叶斯定理。贝叶斯定理会告诉你,每当你看到新的证据后,如何更新你的想法。一种简单的贝叶斯学习算法对世界进行一系列假设,由此开始进行学习。当它看到新的数据时,与该数据匹配的假设更有可能会成立(或者不可能成立)。在观察足够的数据后,某个假设会成立,或者几个假设同时成立。例如,我在寻找一个能够准确预测股票走势的程序,该程序预测某只股票会下跌,结果该股票却上涨了,那么该程序就会失去我的信任。我审核几个备选程序之后,只选择了几个可信赖的程序,它们概括了我对股票市场的新认识。

贝叶斯定理就是将数据变成知识的机器。据贝叶斯统计学派的观点,贝叶斯定理是将数据变成知识的唯一正确方法。如果该学派的观点正确,贝叶斯定理要么就是终极算法,要么就是推动终极算法发展的动力。关于贝叶斯定理使用的方法,其他统计学派持非常保守的观点,而且会更愿意用不同方法来对数据进行学习。在计算机发明出来之前,贝叶斯定理只能应用在非常简单的问题中,说它是通用的学习算法未免有点牵强附会。然而,在大数据和大计算的辅助下,贝叶斯定理在广阔的假设空间中找到了出路,而且已经扩展到每个人们能想到的领域中。如果说存在贝叶斯算法无法学习的东西,只是现在还没发现它们。

来自计算机科学的论证

我在大四时,用了一个夏天玩俄罗斯方块游戏,这是一个涉及方块叠加的电子游戏,游戏中由正方形组成的各种形状的图案往下掉,你要将这些图案堆起来,堆得越紧密越好。如果图案堆到屏幕顶部,那么游戏就结束了。当时我完全没有意识到,这就是我接触NP完全问题[4]的开始,这是理论计算机科学最重要的一个问题。后来我才知道,俄罗斯方块完全不是简单用来消遣的游戏,掌握这个游戏(彻底掌握它),就是你这辈子做得最有用的事情。如果你一步到位,解决了俄罗斯方块问题,你就解决了科学、技术、管理中数千个最难、最有意义的问题,因为本质上这些难题就是同一个问题。这是在所有科学领域中最让人惊讶的事实。

弄明白蛋白质如何折叠成特定形状;通过DNA来重新构建一系列物种的进化史;在命题逻辑中证明定理;利用交易成本来发现市场中的套利机会;从二维视图中推出三维形状;将数据压缩到磁盘上;在政治活动中组成稳定联盟;在剪切流中模拟湍流;按照给定回报率找出最安全的投资组合、到达几个城市的捷径、微芯片上元件的最佳布局方案、生态系统中传感器的最佳布局、自旋玻璃门最低的能量状态;安排好航班、课程、工厂工作;最优化资源分配、城市交通流、社会福利,以及提高你的俄罗斯方块分数(最重要的)——这些都是NP完全问题,意思是,如果你能有效解决其中的一个问题,就能有效解决所有NP类问题,包括相互间的问题。谁会猜到,这些表面上看起来迥然不同的问题,会是同一个问题?如果它们真的是同一个问题,就可以说一种算法能学会解决所有问题(或更准确地说,所有能有效解决的例子)。

在计算机科学中,P和NP是两类最重要的问题(很遗憾,名字不是很有助于记忆)。如果我们能有效解决它,那么这个问题就属于P;如果我们能有效找到其解决方案,那么这个问题属于NP。著名的P=NP的问题就是,能有效找到的问题是否可以得到有效解决。因为NP完全问题,回答这个问题需要的只是证明某个NP完全问题可被有效解决(或者无法被有效解决)。NP在计算机科学领域并不是最难的一类问题,但可以说,它是最难的“现实”类问题:如果在宇宙灭亡之前,你无法找到问题的解决方法,那你努力解决这个问题的意义在哪里?人类擅长给出NP难题的近似解,而相反,我们感兴趣的问题(如俄罗斯方块问题)往往涉及NP问题。人工智能的其中一个定义是,人工智能包括找到NP完全问题的所有启发性解决方案。为了找到解决方案,我们常常把问题变成可满足性问题,也就是典型的NP完全问题:给定的逻辑公式是否永远都是对的,或者它是不是自相矛盾?如果我们发明一种学习算法,能够学习解决可满足性问题,那么有充分理由认为,这个算法就是终极算法。

抛开NP完全问题,计算机的存在本身就明显预示着终极算法的存在。如果你穿越回到20世纪早期,告诉人们很快会有一种机器发明出来,能够解决人类所有领域的难题——所有难题都通过同一台机器解决,那么没有人会相信你。人们会说,每台机器只能解决一个问题:缝纫机不会打字,打字机不会缝纫。1936年,艾伦·图灵想象出一个奇怪的装置,它有一条纸带和机器头,头可以在纸带上进行阅读和书写,就是现在人们知道的图灵机。每一个可以想得到的、可以用逻辑推理解决的难题,都可以通过图灵机解决。此外,一台所谓的万能图灵机可以通过阅读纸带上的具体要求来模仿所有东西,换句话说,我们能够对图灵机进行编程,用它来做所有事情。

算法是归纳的过程,而学习的过程对图灵机来说,就是演绎的过程。图灵机能通过对算法输入、输出行为进行阅读来模仿其他算法。就像存在许多与图灵机对等的计算模型,可能也存在通用学习算法的许多不同的等价公式。然而,问题的关键是必须找到第一个这样的公式,就像图灵找到通用计算机的第一个公式那样。

机器学习算法与知识工程师

当然,有很多人支持终极算法,也有很多人怀疑终极算法。当某方法可以简单解决复杂问题时,存在怀疑符合情理。对终极算法最坚定的反抗来自机器学习永恒的敌人:知识工程。根据知识工程支持者的观点,知识无法自动被学习,必须通过人类专家编入计算机,才能对它进行学习。的确,学习算法能从数据中提取一些东西,但你不能将这些东西和真知识混为一谈。对知识工程师来说,大数据不是新石油,而是骗人的新蛇油。

在人工智能出现早期,机器学习似乎是通往类人智能计算机的途径。图灵和其他人认为,机器学习是唯一看似合理的途径。但后来知识工程师进行了回击,而且20世纪70年代机器学习处于次要地位。在20世纪80年代的一段时间,似乎知识工程师要接管世界了,还有许多企业和国家对知识工程领域进行大量投资。但后来人们开始对该领域失望,而机器学习也开始崛起,一开始悄无声息,后来就突飞猛进。

尽管机器学习成功了,知识工程师们还是觉得不信服。他们相信,机器学习的局限性很快会变得明显,钟摆会摆回来,局势会扭转。马文·明斯基是麻省理工学院的教授、人工智能的先驱人物,也是该阵营的重要成员。明斯基不仅怀疑机器学习能替代知识工程,他也怀疑人工智能的所有统一思想。明斯基在其《意识社会》(The Society of Mind)一书中提到了关于智能的理论,这个理论可以被不客气地归纳为“意识就是一个接一个该死的东西”。《意识社会》包含的就是一长串分散的观点,每个观点都毫不相关。这种实现人工智能的方法根本没什么用,它只是由计算机进行的收集活动。没有机器学习,需要建立智能代理的观点将会变得无限多。如果一个机器人掌握了人类所有的技能,但就是没有学习能力,那么人类不久就会把它扔在一边。

明斯基是Cyc项目(Cyc project)的狂热支持者,这是人工智能历史上最臭名昭著的失败项目。Cyc项目的目标是通过将所有必要知识输入计算机中,来解决人工智能问题。20世纪80年代这个项目刚开始时,它的领导者道格·莱纳特(Doug Lenat)就信心满满地预测,10年之内该项目就会取得成功。30年后,Cyc项目不停扩大,但仍无法做常理性推理。具有讽刺意味的是,莱纳特终于支持通过挖掘网页来将Cyc填满,这并非因为Cyc可以阅读,而是因为别无他法。

即使奇迹发生,我们能够对所有必要的数据进行编程,麻烦也会不断出现。过去几年,几个研究组已经尝试构建完整的智能代理,方法就是将所有算法集中起来,用于想象、语音识别、语言理解、推理、计划、导航、操作等。没有统一的结构,这些尝试将碰到“复杂性”这个难以解决的难题:有太多的活动件、太多的交互、太多的漏洞,可怜的人类软件工程师也难以应付。知识工程师相信,人工智能的问题仅仅是工程学的问题,但是我们还没达到那个点——工程学能带领我们走完下面的路。1962年,肯尼迪发表登月演讲。那时登上月球是一个工程学问题,但1662年,它就不是了,而当今它则更加靠近人工智能所在的领域。

在工业领域中,除了在一些利基领域,没有任何迹象表明知识工程学可以永远和机器学习竞争。为什么要花费精力来让专家缓慢而痛苦地将知识编码成计算机能识别的形式,而你明明可以在一秒内将其从数据中提取出来?你会怎么对待那些专家不懂,你却可以从数据中发现的东西?而当数据不足时,知识工程学的成本倒是很少会超过其带来的益处。反过来,想象一下,如果农民要将每株玉米进行工程化,而不去播种并让它们生长,那么我们都得挨饿。

另一个对机器学习持怀疑态度的人是语言学家诺姆·乔姆斯基。乔姆斯基认为,语言必须是与生俱来的,因为孩子听到的合乎语法的句子仅仅是一些例子,不足以学习语法。然而,这种说法仅仅将学习语言的任务交给了进化,它并没有反对终极算法,只是反对“终极算法是大脑”这个观点。此外,如果存在通用语法(乔姆斯基认为存在),阐发它就是阐发终极算法的步骤之一。这种情况不成立的唯一可能就是,语言和其他认知能力没有共同点,考虑到进化的近因,这令人难以置信。

无论如何,如果我们将乔姆斯基“刺激贫乏”论形式化,我们会发现这个观点很明显是错的。1969年,霍宁证明,概率上下文无关语法(probabilistic context–free grammar)只能通过正面例子掌握,后面紧跟的是更有力的结果(上下文无关语法是语言学家研究的内容,而概率类型模拟每个规则被使用的概率)。另外,语言学习不会发生在一个真空当中,孩子需要从父母和周围环境获取各种语言学习线索。如果我们能从几年时间里学习的例子中学习语言,部分也只是因为语言结构与世界结构存在相似性。对这个共同结构,我们感兴趣,而且从霍宁和其他人那里知道,有这个共同结构就足够了。

总体来讲,乔姆斯基批评所有统计学习。他把统计学习算法不能学习的东西列了一个单子,但这个单子已经过时50年了。乔姆斯基似乎把机器学习等同于行为主义了,根据行为主义,动物的行为沦为反应与奖励之间的联合,但机器学习不是行为主义。现代学习算法能够掌握丰富的内在表象,而不仅仅是刺激物之间的两两关系。

最后,事实胜于雄辩。统计学语言算法起作用了,而手工设计的语言系统却没起作用。第一件令人大开眼界的事发生于20世纪70年代,当时五角大楼的研究机构DARPA组织了第一个大型语音识别项目。让所有人惊讶的是,一种简单的序列学习算法——乔姆斯基嘲笑的类型,轻易地打败了一个复杂的知识系统。现在像这样的学习算法几乎用于每一个语音识别器中,包括Siri(苹果公司产品上的一项智能语音控制功能)。弗雷德·贾里尼克(IBM语音研究组的领导)说过一句著名的俏皮话:“每开除一名语言学家,我的语音识别系统的错误率就降低一个百分点。”20世纪80年代,陷入知识工程学的泥潭里,计算机语言学差点走向尽头。自那以后,基于学习算法的浪潮已经席卷这个领域,在计算机语言学会议中,几乎每篇文章都会提到学习。统计分析软件以近乎人类水平的精确度来分析文章,而手编程序已经远远落在后面。机器翻译、拼写纠正、词性标注、词义消歧、问题回答、对话、概括——这些领域的所有最好的系统都利用了学习。没有学习,沃森不可能在《危险边缘》游戏中战胜人类。

对此,乔姆斯基可能会回应,工程学的成功并不能证明其科学有效性。换句话说,如果你的楼房倒塌了,而且你的发电机不工作了,那么也许就是因为你的物理学观点有问题。乔姆斯基认为,语言学应该把重点放在他定义的“理想的”说话者和听话者上,这让他忽略了诸如类似的问题:语言学习过程涉及统计学。因此,很少有实验主义者拿他的理论当回事,这并不奇怪。

另外一个可能会反对终极算法的观点来自心理学家杰瑞·福多,他认为心理是由一系列模块组成的,这些模块之间只有有限的联系。例如,当看电视时,你的“高级脑”知道,那只是光线在光滑表面的闪烁,但视觉系统仍然会看见三维形状。即使我们相信心理模块理论,这个理论也并没有暗指不同的模块会使用不同的学习算法。同种算法对诸如视觉及语言之类的信息都起作用,这个说法才足够有力。

像明斯基、乔姆斯基和福多这样的批评家曾经占据上风,但万幸,他们的影响力已经逐渐减弱。即便如此,我们仍需将他们的批评铭记于心,这样才能到达终极算法这个终点,原因有两个:第一,知识工程师和机器学习算法一样,遇到许多相同的问题,虽然他们没有成功,但学到了许多宝贵的教训;第二,学习和知识以异常微妙的形式相互交织,而我们很快就会发现这一点。遗憾的是,这两个阵营各说各话。他们讨论不同的主题:机器学习讨论概率,而知识工程学讨论逻辑。本书后面会提到如何解决这个问题。

天鹅咬了机器人

“无论你的算法有多聪明,总有它无法掌握的东西。”除了人工智能和认知科学,反对机器学习的常见观点几乎都可以用这句话概况。纳西姆·塔勒布(Nassim Taleb)在《黑天鹅》(The Black Swan)一书中强调了这个观点。有些事真的无法预料。如果你只见过白天鹅,会觉得看到黑天鹅的概率是0。2008年的金融危机就是一只“黑天鹅”。

有些事可预料,而有些事却不能预料,这个说法是正确的,而机器学习算法的首要任务就是区别可预测的事与不可预测的事。但终极算法的目标是要学习一切能认知的东西,这比塔勒布和其他人想象的要广阔得多。房地产泡沫还远远不是一只“黑天鹅”,相反,房地产泡沫是经过人们普遍预测的。大多数银行的模型没能预测它的到来,也只是因为那些模型的局限性,而不是机器学习的局限性。学习算法很擅长精确预测稀有、未曾发生的事件。甚至你也可以说,这是机器学习的主要任务。如果你没见过黑天鹅,那么它出现在你面前的概率是多少?它是已知物种的一部分,最后变成黑色的天鹅,这样的概率是多少?这仅仅是一些粗略的例子,我们会在本书看到更深刻的例子。

另外一个反对机器学习的观点与以上观点相关,就是我们常听到的——“数据无法代替人类的直觉”。实际上,这句话可以反过来:人类直觉无法代替数据。直觉就是你在不知道事实的情况下依靠的东西,而因为你不常用它,所以直觉非常宝贵。但如果证据摆在你面前,为什么还要拒绝证据?统计分析在棒球界打败球探(正如迈克尔·刘易斯在《魔球:逆境中制胜的智慧》一书中明确记录的那样),在品酒时打败内行。统计分析能做很多事情,我们每天都能看到新的例子。因为大量数据的涌入,证据与直觉的界限正在迅速改变,而正如所有革命一样,要抛弃所有墨守成规的方法。如果我是Y公司X领域的专家,我就不想被某人用数据推翻。行业里有句话:“多听听顾客的话,而不是HiPPO。”(HiPPO是“领最高薪水的人说的话”的简写。)如果想成为明天的权威人士,你要依靠数据,而不是与之斗争。

好了,有人会说,机器学习能从数据中找到统计规律,但它绝不会发现更深刻的东西,如牛顿定律。可以说,它还没有找到那样深刻的定律,但我肯定它将来会找到。尽管有苹果落下的故事,但深刻的科学真理并不是那么容易就能获得。科学经历了三个时期:布拉赫时期、开普勒时期、牛顿时期。对于布拉赫时期,我们收集了很多数据,就像第谷·布拉赫日复一日、年复一年耐心记录行星的位置那样。对于开普勒时期,我们使经验规律符合数据,就像开普勒对行星运动所做的那样。对于牛顿时期,我们发现了更深刻的真理。大多数科学研究和布拉赫、开普勒所做的工作相似,这样的工作就是科学研究的内容,像牛顿偶然发现定律的例子则少见。当今,大数据所做的工作是布拉赫的数十亿倍,机器学习的工作内容是开普勒的数百万倍。如果(但愿如此)有更多像牛顿偶然发现定律这样的时刻,这样的时刻也可能发生在未来的学习算法中,或者发生在未来手足无措的科学家身上,或者至少是发生在两种可能都存在的情况下(当然,诺贝尔奖会颁发给科学家,不管他们是持重要的观点,还是只按了一下按钮。学习算法就没有那样的志向,要拿诺贝尔奖)。本书将会提到那些算法是怎样的,并推测它们会发现什么,例如,治愈癌症的方法。

终极算法是狐狸,还是刺猬

我们有必要考虑藏得更深、反对终极算法的观点,这个观点可能是所有反对观点中最严肃的一个。这个观点不是来自知识工程师或者不满意的专家,而是来自机器学习实践人员。假设我是持反对观的机器学习实践者,可能会说:“终极算法和我日常生活看到的不一样。我尝试用许多学习算法的数百种变形来解决所有给定的问题,而且对各类不同问题都会有更好的算法,那么单个算法(我们说的终极算法)怎么可能代替所有这些算法?”

这个问题的答案是:的确如此。不用尝试多种算法的数百种变形,而只用尝试单个算法的数百种变形,这不是更轻松吗?只要我们弄明白,每个算法中重要的与不重要的东西,重要部分的共同点,以及这些部分如何进行互补,那么我们真的可以从这些多种算法中合成一个终极算法。这就是我们在本书中要做的事情,或者说尽可能要做到的事情。亲爱的读者,也许你在阅读本书时,会有自己的一些观点。

终极算法会复杂到什么程度?它包含几千行代码?还是几百万行?我们现在还不知道,但机器学习有一段可喜的历史:简单的算法意外地将精心设计的算法打败了。在《人工科学》(The Sciences of the Artificia)一书的著名章节中,人工智能先驱人物、诺贝尔奖得主赫伯特·西蒙(Herbert Simon)让我们想象蚂蚁费力地穿过沙滩回家。蚂蚁的路线非常复杂,这不是因为蚂蚁本身复杂,而是因为沙滩这个环境对蚂蚁来说意味着要爬很多山丘,绕很多卵石。如果我们通过对每条可能的路线进行编程,模仿蚂蚁,那么我们注定会失败。同样,在机器学习中,复杂性存在于数据中。终极算法需要做的就是消化复杂性,因此,如果终极算法变得非常简单,那么我们也不用感到惊讶。虽然人类的手很简单(四个手指,一个大拇指),但是它却可以制作并使用无数种工具。终极算法与算法的关系,就如同手指与钢笔、剑、螺丝刀、叉子的关系。

正如以赛亚·伯林明确提出的那样,有些思想家就是狐狸——他们知道许多微小的事情;而有些思想家则是刺猬——他们知道一件大事。学习算法也是同样的情况。我希望终极算法是一只刺猬,但即使它是只狐狸,我们也没法很快抓住它。当今学习算法最大的问题,不是它们数量太多,而是尽管它们有用,却不能完成我们让它们做的所有事情。我们利用机器学习来发现深刻的真理之前,得先找到关于机器学习的深刻真理。

我们正面临什么危机

假设你被诊断患有癌症,而且传统疗法(手术、化疗、放疗)都失败了,那么接下来发生的事情就会决定你是活下去,还是走到生命尽头。第一步就是要对肿瘤进行基因排序。诸如在剑桥、马萨诸塞州的基础医学公司会为你做这些工作:把肿瘤样本邮寄给他们,然后他们会发给你一个列表,列表是已知的、和癌症相关的基因变异。这个步骤十分有必要,因为每种癌症都不一样,单种药不可能治疗所有癌症。当癌症扩散到全身时会变异,通过自然选择,最能抵抗你所服用药物的变异细胞最有可能继续会生长。对你有用的药物可能只对5%的病人有用,或者你需要结合其他药物一起服用,这些药可能你之前从未服用过。也有可能要设计一种新药,专门治疗你的癌症,或者需要一系列的药来避开癌症的适应性。这些药物可能会有副作用,而且对你来说会致命,但对其他很多人来说可能没有问题。即使了解你的病历和癌症基因,也没有哪个医生可以记录你所有的病情,以便预测最好的疗法。对机器来说,这是一个完美的任务,但当今的学习算法还无法完成这个任务。终极算法就是一个完整包:将终极算法应用于大量的患者及药物数据中,同时参考从生物医学文献中挖掘的知识,这就是我们将来治疗癌症的方法。

许多领域迫切需要通用学习算法,包括与生死有关的领域以及普通领域等。你可以想象理想的推荐系统是什么样的,它能推荐书籍、电影以及小玩意儿,它们正是你有时间慢慢细看时会挑选的东西。亚马逊的算法与这个系统则大相径庭,部分是因为亚马逊的算法没有足够的数据——它知道的主要信息仅仅是你之前从亚马逊购买的东西——但如果你气疯了,把自出生以来能想到的东西都一股脑地输给它,那么它就不知道该拿这些东西怎么办了。你如何将生活的万花筒、做过的各类选择转化成连贯的画面,用来告诉你:你是谁,你想要什么?这是当今学习算法无法理解的。但有了足够的数据,终极算法将能够大概了解你以及你最好的朋友。

未来某一天,每个房间都会有一个机器人,做饭、铺床,甚至在父母去上班时照看孩子。这一天要多久才来,取决于寻找终极算法的过程有多艰难。如果我们能做的,只是将许多不同的学习算法结合起来,每种算法只能解决人工智能的一小部分问题,那么很快我们就会撞到复杂性这堵墙。这种零碎的方法在《危险边缘》比赛中奏效了,但很少有人相信,未来的家用机器人就是沃森的子孙。这并不是说终极算法会单枪匹马破解人工智能的难题,还有许多伟大的工程要完成,沃森就是一个很好的开始。但“二八原则”也适用:终极算法会提供80%的方案,做20%的工作量,所以这是开始的最佳时机。

终极算法对技术的影不仅限于人工智能。通用的学习算法是打击复杂性怪兽的有力武器。当今人类建立起来的很复杂的系统将来会变得简单。计算机会在我们更少的辅助下做更多的事情。它们不会不断重复同一些错误,而会像人一样,从实践中学习经验。有时,就像传说中的管家,我们还没说想要什么,计算机就已经先猜出来了。如果计算机能让我们变聪明,那么运行终极算法的计算机会让我们感觉自己就是天才。技术进步的步伐会明显加快,不仅仅在计算机科学,在许多不同的领域也会这样。这就反过来推动经济发展,降低贫困率。终极算法会辅助汇总和传播知识,这样一个机构的情报会比其各个分机构的情报总数还要多,而不会更少。日常工作将自动化完成,并由更有意思的工作来代替。每项工作都会比当今完成得更好,无论这个工作是由更熟练的人、计算机,或者通过二者的结合来完成。股市崩盘的概率会越来越低,规模也会越来越小。传感器会在地球上形成密集的网格,人类掌握的模型会持续接收终极算法输出的信息,这样我们就不会盲目飞行了,地球的情况会变得越来越好。你的一个模型会代表你和世界进行谈判,和其他人及实体模型玩复杂的游戏。因为有了这些,我们会更长寿、更幸福,也更多产。

因为反对观点的潜在影响太大,我们应该努力发明终极算法,哪怕成功的概率很低。即使这个过程会很久,但找到一种通用学习算法却有很多能即刻感受到的好处。其中一个就是我们能通过统一观点更好地了解机器学习。有太多的商业决策是在不了解统计学的情况下做出来的,而统计学对商业决策起着支撑作用。事情本该不是这样的。为了使用一项技术,不必掌握其内部工作原理,但我们得有关于它的一个好的概念模型。我们有必要知道如何找到收音机上的一个电台,或者懂得如何调音量。当下,那些不是机器学习专家的人,对学习算法会用来做什么,没有什么概念模型。我们使用谷歌、脸书时驱动的算法,或者最新的分析套件,有点像一辆带有有色窗户的黑色豪华轿车,在某个夜晚神秘地出现在我们的家门口:我们该上车吗?这辆车会带我们去哪里?现在是时候坐在司机的座位上了。明白不同的算法所做的假设会帮助我们选择合适的算法用于工作中,而不是从偶然出现的算法中随机挑一个用,然后忍受它好几年,最后痛苦地领悟从一开始我们就该知道的东西。通过了解学习算法优化的内容,我们可以肯定它们优化的是我们关注的东西,而不是装在盒子里的东西。也许最重要的是,一旦我们知道特殊的学习算法得出的结论,就会知道用这些信息来做什么——该相信什么,该如何回报发明者,以及下次该如何取得更好的结果。有了通用学习算法(我们在本书中将其作为概念模型),我们就能在没有认知负载的情况下,把所有这些事情做完。机器学习本质上是简单的,我们只需削掉数学及行话这些外皮,然后把最里面的“俄罗斯套娃”展示出来。

这些好处都可应用于我们的私人生活和工作中。我们在现代世界留下自己的印记,数据记录了我们的每一个印记,但我们应该如何充分利用这些数据呢?每个互动都有两个方面:这个互动为你完成了什么;对于刚和你交互的系统,它教会了这个系统什么。懂得这些是在21世纪过上幸福生活的第一步。教授学习算法,这些算法就会为你服务,但首先你得了解它们。我工作的哪些部分可以交给学习算法来完成,哪些不可以?最重要的是,我该如何利用机器学习把工作做得更好?计算机是你的工具,而不是对手。有了机器学习的辅助,经理会变成超级经理,科学家会变成超级科学家,工程师会变成超级工程师。未来属于那些深深懂得如何将自己的独特专长与算法的擅长结合起来的人。

也许终极算法就像一个潘多拉盒子,最好不要打开。计算机会奴役甚至消灭我们吗?机器学习会变成独裁者或者邪恶公司的侍女吗?知道机器学习的发展方向有助于帮助我们了解该担心什么、不该担心什么、应该怎么处理问题。《终结者》中,超级人工智能变得有情感,并通过机器人军队征服了人类。这个场景不会和我们将在本书中谈到的学习算方法一起发生。因为计算机会学习,并不意味着它们可以魔法般地实现自己的愿望。学习算法学着完成我们为它们设定的目标,它们不会改变这些目标。我们要担心的是,它们服务我们的方法可能会对我们有害,而不是有益。因为它们知道的东西不多,改善的方法就是教它们更好的方法。

很多时候,我们得考虑,如果终极算法落入坏人手中,它会做些什么。第一道防线就是确保好人第一个拿到它,或者如果它不明白谁是好人,就要保证它是开源的。第二道防线就是要意识到,无论学习算法有多好用,也只是在获得数据时好用。控制了数据的人也就控制了学习算法。你对数字化生活的反应,不应该是退回到木屋中——树林里也装满了传感器,而应努力拿到对你来说重要的数据。能有推荐系统为你找到想要的东西,并把东西带给你,这样很好,没有这些系统你会感到失落。它们带给你的应该是你想要的东西,而不是其他人想让你拥有的。控制好数据,控制好算法掌握的模型的所有权,这就是21世纪战争的内容,这些战争可能会发生在政府、企业、工会以及个人之间。为了共同利益,你也有道德义务来分享数据。只依靠机器学习不能治愈癌症,依靠癌症病人却可以做到这一点,方法就是为了将来的病人,分享自己的信息。

新的万有理论

当今的科学已经被彻底四分五裂,就像巴别塔中的亚社会都说着自己的俚语,只能看到相邻的几个亚社会。终极算法会给出所有学科的统一思想,并有潜力提出一套新的万有理论。乍一看,这个说法可能会有点奇怪。机器学习所做的,就是从数据中引出理论。终极算法本身如何能发展为一套理论?难道弦理论是万有理论,而终极算法和万有理论没有任何相似点?

为了回答这些问题,我们得首先明白什么是科学理论,什么不是。理论是关于世界是什么的一系列约束条件,而不是对世界的完整描述。为了获得对世界的完整描述,你必须将理论和数据结合起来。例如,想想牛顿第二定律。定律说明力等于质量与加速度的乘积,或者写成F=ma。定律并没有说明是哪个东西的质量或者加速度,或者作用力是什么。定律只要求,如果某物体的质量是m,加速度是a,那么作用在它之上的所有力的总和就肯定是ma。虽然该定律排除了宇宙的某些自由度,但没有排除所有。所有其他物理理论也都如此,包括相对论、量子力学以及弦理论,这些理论其实都是对牛顿定律的完善。

理论的强大之处在于它简化了我们对世界的描述。有了牛顿定律,我们首先只需知道某个时间点所有物体的质量、状态、速度,其次就是所有时段的状态及速度。凭借过去、未来宇宙历史中可区分时刻的数量这样一个因素,牛顿定律概括了我们对世界的描述。太了不起了!当然,牛顿定律也仅仅是接近准确的物理定律,因此让我们用弦理论来替代它,同时忽略弦理论是否永远证实有效的问题。我们能做得更好吗?可以,有以下两个原因。

第一,实际上,我们没有足够的数据来完全确定世界,甚至忽略不确定性原则,准确知道世界上所有粒子某个时间点的状态和速度,也远远做不到。因为物理定律是混沌的,不确定性随时会混杂进来,而且在短时间内能确定的东西太少。为了准确描述这个世界,每隔一段时间,我们就需要一批新数据。实际上,物理定律只告诉我们局部会发生的事情。这一点大大削减了它们的力量。

第二,虽然我们在某个时间点拥有关于世界的完整知识,物理定律还是不能让我们确定这个世界的过去和未来。这是因为,确定世界的过去和未来所需的全部计算量,对于能想象得出的计算机来说,超出了它们的能力范围。实际上,为了完善魔法宇宙,我们需要另外一个一模一样的宇宙。这也是为什么弦理论多数情况下在物理学之外就变得无关紧要了。我们在生物学、心理学、社会学或者政治学中的理论,并不是由物理定律推理得来的,这些理论得从零开始构建。我们假定,当这些理论应用到细胞、大脑、社会中时,它们就是物理定律对此所做预测的近似理论,但我们无法知道。

不像特定领域的理论只在该领域中才有权威,终极算法在所有领域中都有权威。在X领域中,终极算法不如X领域的主流理论有权威,却在所有领域中比该主流理论有权威——当我们考虑到整个世界时——终极算法普遍比所有其他理论有权威得多。终极算法是所有理论的起源。为了获得X理论,我们要给终极算法添加的就是推导X理论所需要的最少量的数据(在物理学中,需要添加的仅仅是大约几百个重要实验的结果)。结果就是,在同样的情况下,终极算法很有可能成为万有理论的最佳出发点。请史蒂芬·霍金原谅,和弦理论相比,终极算法最后会告诉我们更多关于上帝思考的东西。

有些人可能会说,寻找通用学习算法就是一种追求虚荣心的表现。其实梦想并不是追求虚荣心,在魔法石以及永动机并肩作战下,也许终极算法在众多伟大的幻想中会代替虚荣心的位置。寻找终极算法更像测定海上的经度,人们一开始认为这太困难,于是放弃了,直到一个孤独的天才解决了这个问题。寻找终极算法更有可能就是一代一代人的任务,就像天主教堂是由一块块石头砌成的一样。找到终极算法的唯一方法就是,早早动身踏上旅途。

未达标准的终极算法候选项

那么,如果终极算法存在,它是什么?看起来很明显的一种候选项就是记忆:只要记住你见过的所有东西,过一段时间,你就好像见过世上的一切东西,所以也就无所不知了。这里的问题是,正如赫拉克利特说的那样,你无法两次踏入同一条河流。世上的东西比你能看到的多得多。无论你观察过多少朵雪花,下一朵还是会不一样。即使宇宙大爆炸时你在场,但从那以后无论在哪里,对于未来你可能看到的事物,你现在看到的也只是一小部分。如果你目睹一万年前地球上的生命,也不会对你未来将看到的东西有什么影响。在某城市长大的人搬到另外一个城市,他不会陷入瘫痪,但只会记忆的机器人就会陷入瘫痪。此外,知识不仅是事实清单,知识的范围很广,而且还有结构。“人固有一死”比70亿条死亡声明要简洁得多。记忆无法像终极算法那样让我们做到这些。

终极算法的另外一个候选项就是微处理器。计算机里的微处理器可以看作单一算法,其任务是执行其他算法,就像通用的图灵机那样。而且微处理器可以运行一切可以想得到的算法,这由它的内存和速度上限决定。实际上,对一台微处理器来说,一种算法也只是另外一种数据。这里的问题是,如果微处理器单独工作,那么它什么也不会干,它只会待在那儿,一整天什么也干不了。它运行的算法从哪里来?如果这些算法由人类程序员来编码,那么就不会涉及任何学习行为。即便如此,人们还是会有一种感觉,认为微处理器是终极算法的完美模拟。微处理器不是运行一切特殊算法最好的硬件,最好的硬件应该是特定用途集成电路,专为那种算法而精确设计。我们却把微处理器几乎用于所有应用中,因为即使它效率较低,但却非常灵活。如果我们得为每个新的应用构建一个特定用途集成电路,那么信息革命也绝不会发生。同样,终极算法也不是学习一切特定知识最好的算法,最好的算法应该是已经编码了大多数知识的算法(或者说所有知识,这样数据就变得多余)。问题却在于从数据中得出知识,因为这样做更简单,成本也更低,所以学习算法越通用越好。

一个更加极端的候选项就是普通的“或非门”:这是一个逻辑开关,只有输入的是两个0时,才会输出1。本书前面提到,计算机是由晶体管组成的逻辑门构成的,所有的运算都可以简化为“且”“或”“非”逻辑门的结合。“或非门”只是一个“或”门后面接着一个“非”门:对于分离(“或”)的否定,就像“只要我不挨饿或生病,我就开心”这句话的意思一样。“且”“或”“非”都可以通过“或非门”得以执行,所以“或非门”可以做所有事情,而实际上这也是一些微型处理器使用的东西。那么为什么或非门不是终极算法?当然“或非门”的简洁无与伦比,但遗憾的是,“或非门”不是终极算法,就像乐高砖不是万能玩具一样。对于玩具来说,“或非门”当然可以是一种万能建筑材料,但一堆乐高砖不会自发地将自己组装成玩具。这个道理同样适用于其他简单的运算格式,如Petri网(Petri Net是对离散并行系统的数学表示)或细胞自动机。

这里将谈到更为复杂的候选项。那些所有可以回应搜索的良好的数据引擎,或者统计软件包里的简单算法怎么样,可以代替终极算法吗?它们还不足够吗?这个数据引擎和简单算法是更大的乐高砖,但也仅仅是砖。数据引擎无法发现新东西,只能告诉你它知道的东西。即使数据库中所有的人都终究会死,它也不会将人会死的概率推广到其他人身上(数据工程师看到这一点会大吃一惊)。很多数据只是和验证假设有关,但总得有人先提出假设。统计软件包可以做线性回归以及进行其他简单的程序,但是做这些对它们能学的东西来说,限制很低,无论你提供给它们多少数据。虽然更好的软件包会跳过统计学和机器学习的灰色地带,但它们还是无法发现许多种知识。

好了,是时候坦白了:终极算法就是等式U(X)=0。这个等式不仅适合做T恤图案,还适合做邮票图案。啊?U(X)=0表达的是某未知数X(可能很复杂)的某函数U(可能很复杂)等于0。每个等式都可以简化为这种形式,例如,F=ma等于Fma=0,那么如果你把Fma当作F的一个函数U,则U(F)=0。一般情况,X可以是所有输入的数据,U可以是所有算法,所以可以肯定的是,终极算法和这个函数同样通用,那么这个函数就一定是终极算法了。当然,我只是开玩笑,这个函数不是终极算法,但它指出了机器学习中的真正危机:想到一个非常通用的学习算法,里面却没有足够的东西可以拿来用。

那么为了可以拿来用,一种学习算法至少要有多少内容呢?物理定律够了吗?毕竟,世界上的一切都遵守物理定律(我们相信是这样的),而且这些定律引出进化论,而通过进化论,又引出与大脑相关的学科。那么也许终极算法就隐藏在物理定律中,如果是的话,我们就要把它找出来。把数据输入到物理定律中,不会有新的定律产生。我们可以这样思考:也许某个领域的主理论就是物理定律,只不过是将该物理定律编成对该领域研究来说更方便的形式。如果是这样,我们就需要一种算法,可以找到连接该领域数据与该领域理论的捷径,而不知道物理定律能否在其中起作用。另外一个问题就是,如果物理定律不一样,终极算法还是有可能在许多例子中找到它们。数学家喜欢说,上帝可以违反物理定律,但他永远不能违抗逻辑规律。也许的确如此,但逻辑规律是用来演绎的。除了归纳,我们需要的是对等的东西。

机器学习的五大学派

当然,我们不必从零开始寻找终极算法,而有几十年的机器学习研究可以利用。地球上最聪明的那些人已经把他们的毕生贡献给发明学习算法,而有些人甚至声明,他们手上已经有通用的学习算法。我们会站在这些巨人的肩膀上,但对这样的声明持保守态度。这样的声明会引起相关问题:出现的一种和终极算法相似的算法,只是改变了参数,除了数据还有最小量输入信息,可以像人类一样很好地看懂视频和文本,并在生物学、人类学以及其他学科中有重大发现,如果是这样,我们怎么知道已经找到了终极算法?很明显,如果按照这个标准,即使终极算法真的已经存在,它也没法证明自己就是终极算法。

关键是,终极算法不需要在遇到每个新问题时,都从零开始。这个标准对所有算法来说都太高了,而且它也不像人类所做的那样。例如,语言无法存在于真空中;如果没有该学科的相关知识,我们就无法理解一门学科。因此,当学习阅读时,终极算法可以依靠之前所学的东西来看、听,以及控制一个机器人。同样的道理,科学家不会只是盲目地将模型和数据进行配对,他们会利用自己在该领域的知识来解决这个问题。因此,当在生物学领域有所发现时,终极算法会首先阅读它需要的生物学知识,依靠的是之前就学会的阅读技巧。终极算法不只是被动地消耗知识,它可以和周围的环境进行互动,然后积极寻找它想要的数据,就像机器人科学家“亚当”一样,或者像所有探索世界的孩子一样。

我们寻找终极算法的过程是复杂且活跃的,因为在机器学习领域存在不同思想的学派,主要学派包括符号学派、联结学派、进化学派、贝叶斯学派、类推学派。每个学派都有其核心理念以及其关注的特定问题。在综合几个学派理念的基础上,每个学派都已经找到该问题的解决方法,而且有体现本学派的主算法。

对于符号学派来说,所有的信息都可以简化为操作符号,就像数学家那样,为了解方程,会用其他表达式来代替本来的表达式。符号学者明白你不能从零开始学习:除了数据,你还需要一些原始的知识。他们已经弄明白,如何把先前存在的知识并入学习中,如何结合动态的知识来解决新问题。他们的主算法是逆向演绎,逆向演绎致力于弄明白,为了使演绎进展顺利,哪些知识被省略了,然后弄明白是什么让主算法变得越来越综合。

对于联结学派来说,学习就是大脑所做的事情,因此我们要做的就是对大脑进行逆向演绎。大脑通过调整神经元之间连接的强度来进行学习,关键问题是找到哪些连接导致了误差,以及如何纠正这些误差。联结学派的主算法是反向传播学习算法,该算法将系统的输出与想要的结果相比较,然后连续一层一层地改变神经元之间的连接,目的是为了使输出的东西接近想要的东西。

进化学派认为,所有形式的学习都源于自然选择。如果自然选择造就我们,那么它就可以造就一切,我们要做的,就是在计算机上对它进行模仿。进化主义解决的关键问题是学习结构:不只是像反向传播那样调整参数,它还创造大脑,用来对参数进行微调。进化学派的主算法是基因编程,和自然使有机体交配和进化那样,基因编程也对计算机程序进行配对和提升。

贝叶斯学派最关注的问题是不确定性。所有掌握的知识都有不确定性,而且学习知识的过程也是一种不确定的推理形式。那么问题就变成,在不破坏信息的情况下,如何处理嘈杂、不完整甚至自相矛盾的信息。解决的办法就是运用概率推理,而主算法就是贝叶斯定理及其衍生定理。贝叶斯定理告诉我们,如何将新的证据并入我们的信仰中,而概率推理算法尽可能有效地做到这一点。

对于类推学派来说,学习的关键就是要在不同场景中认识到相似性,然后由此推导出其他相似性。如果两个病人有相似的症状,那么也许他们患有相同的疾病。问题的关键是,如何判断两个事物的相似程度。类推学派的主算法是支持向量机,主算法找出要记忆的经历,以及弄明白如何将这些经历结合起来,用来做新的预测。

每个学派对其中心问题的解决方法都是一个辉煌、来之不易的进步,但真正的终极算法应该把5个学派的5个问题都解决,而不是只解决一个。例如,为了治愈癌症,我们要了解细胞的代谢网络:哪些基因调节哪些别的基因,由此产生的蛋白质控制哪些化学反应,以及将新微粒加入混合物中将会对网络产生什么影响。从零开始努力学习这些东西显得有点愚蠢,因为这种做法忽略了过去几十年生物学家苦心积累的知识。符号学派懂得如何将这些知识与来自DNA测序仪、基因表达芯片等的数据结合起来,并得出结果。只有知识或数据,你得不出这些结果,可是我们通过逆向演绎得到的知识都是纯定性的。我们要了解的不仅是谁和谁交互,还有可以交互的程度,以及反向传播如何做到这些。即便如此,如果没有某个基础结构,逆向演绎和反向传播将会迷失在太空中。有了这个基础结构,它们找到的交互和参数才能构成整体。基因编程可以找到这个基础结构。这时,有了新陈代谢的完整知识,以及给定病人的相关数据,我们就可以为他找到治疗方法。但实际上,我们拥有的知识总是非常不完整的,甚至在有些地方会出错。即使如此,我们还是要继续进行,这也就是概率推理的目标。在情形最困难的例子中,病人的癌症看起来与之前的癌症病例有很大不同,而我们掌握的知识对此也束手无策。基于相似性的算法会扭转大局,方法就是从看似有很大差别的情形中找到相似点,把重点放在相似点上,然后忽略其他不同点。

本书将综合出一个拥有所有这些功能的终极算法:

我们对终极算法的追寻之旅将让我们了解这5个学派。学派与学派相遇、谈判、冲突的地方,也是这个旅程最艰难的部分。每个学派都有自己不同的观点,我们必须将这些观点集中起来。机器学习算法和所有科学家一样,类似盲人和大象:有个盲人摸到象鼻,就以为那是蛇;另一个盲人靠着象腿,以为那是树;还有一个盲人摸到象牙,以为那是公牛。我们的目标是,摸清楚每个部位,而不是过早下结论。一旦摸到所有部位,我们就努力拼出整个大象的形象。将所有信息集中起来变成解决方案的方法,并不是很容易找到,有些人甚至说不可能找到,但这就是我们要做的事情。

阅读 ‧ 电子书库

图2–1

我们要找到的算法还不是终极算法,原因我们在下文会提到,但这已经是所有人能达到的、最接近终极算法的水平了。我们会一直积聚财富,让大富豪们嫉妒。即便如此,本书仅仅是终极算法传奇的第一部分。第二部分的主角就是你——亲爱的读者。你的使命(如果你愿意接受)就是完成寻找终极算法之旅,然后把战利品拿回来。在第一部分我将是你卑微的导游,从这里出发,走向已知的尽头。你可能抗议说自己懂的不够多,或者算法不是你的长处。不要害怕!计算机科学还年轻,而且不像物理学或生物学那样,要发起一场革命,你并不需要博士学位(可以去问问比尔·盖茨、谢尔盖·布林、拉里·佩奇、马克·扎克伯克)。洞察力和坚持才是最重要的东西。

你准备好了吗?我们的旅程由拜访符号学派开始,这个学派的历史最漫长。

[4] NP完全问题(non–determinstic polynomial completeness),即多项式复杂程度的非确定性问题。——编者注