首页 » 终极算法:机器学习和人工智能如何重塑世界 » 终极算法:机器学习和人工智能如何重塑世界全文在线阅读

《终极算法:机器学习和人工智能如何重塑世界》第六章 贝叶斯学派:在贝叶斯教堂里

关灯直达底部

夜幕降临,大教堂的影子也渐渐变大。光线从教堂的彩色玻璃窗倾泻而出,在大街上及远处的建筑上投射出复杂的公式。当你走近时,会听到人们在里面唱圣歌的声音。唱的好像是拉丁语,又好像和数学有关,但你耳朵里的巴别鱼把它翻译成英文:“转动曲柄!转动曲柄!”正当你迈进去时,圣歌渐渐转化成声声满意的“啊”以及“后面,后面”的呢喃。你穿过人群。圣坛上矗立着一块巨大的石碑,上面刻着10英尺宽字母拼写成的公式:

P (A∣B) = P (A) P (B∣A) / P (B)

当你不解地盯着这个公式看的时候,谷歌眼镜起作用了,它闪了一下,说:“贝叶斯定理。”这时人群开始唱:“再多些数据!再多些数据!”大量的祭品正被无情地推向祭坛。突然,你意识到自己是祭品中的一个,但已经太晚了。当曲柄转到你上方时,你喊着:“不!我不想变成数据点!放开我啊!”

你醒来时浑身冷汗。放在你大腿上的,是一本名为《终极算法》的书。甩掉噩梦之后,你接着从中断的地方往下读。

统治世界的定理

通往最优学习的路径始于一个公式,这一点许多人都听说过:贝叶斯定理。但在这里,我们会以全新的眼光来看待这个公式,而且会意识到,它的力量要比你根据其日常用途猜测的要大得多。本质上,贝叶斯定理不仅仅是一个简单的规则,当你收到新的论据时,它用来改变你对某个假设的信任度:如果论据和假设一致,假设成立的概率上升,反之则下降。例如,如果你查出艾滋病病毒呈阳性,你感染艾滋病的可能性上升。当你获得许多条论据,例如,多重测试的结果时,事情就会变得更有意思。为了将所有论据结合起来,又免遭组合爆炸之苦,我们就得把猜想简化。当我们同时考虑多个假设,例如,一个病人所有不同、可能的诊断时,事情也会变得更有意思。在合理时期内,根据病人的症状来计算每种疾病发生的可能性需要很大的智慧。一旦知道如何来完成所有这些事情,我们就做好了学习贝叶斯方法的准备。对于贝叶斯学派来说,学习“仅仅是”贝叶斯定理的另外一个运用,将所有模型当作假设,将数据作为论据:随着你看到的数据越来越多,有些模型会变得越来越有可能性,而有些则相反,直到理想的模型渐渐突出,成为最终的胜者。贝叶斯学派已经发明出非常灵活的模型。下面我们就开始来了解它们。

托马斯·贝叶斯是一位18世纪的英国牧师,当时他并没有发觉自己会成为新宗教的中心。你可能很想问怎么会这样,但注意到这也发生在耶稣身上后,就不会这样问了:我们知道,基督教是由圣·保罗开创的,虽然耶稣把自己看作犹太教的顶峰。同样,我们知道贝叶斯主义是由皮埃尔–西蒙·拉普拉斯创造的,他是比贝叶斯晚生50年的法国人。贝叶斯是第一个描述用新方法来考虑概率的牧师,但把那些想法变成定理,并以贝叶斯的名字来命名的人,却是拉普拉斯。

拉普拉斯是史上最伟大的数学家之一,关于他,人们知道最多的可能就是他对于牛顿学说决定论的憧憬:

在任何给定的一瞬间,如果有某位智者能够洞悉所有支配自然界的力和组成自然界的物体的相互位置,并且这位智者的智慧足以对这些数据进行分析,他就能用一个相同的公式来概括宇宙中最大的天体和最小的原子的运动。对这样的智者来说,没有什么是不确定的,未来同过去一样都历历在目。

这看起来有点讽刺的意味,因为拉普拉斯也是概率论的创始人之一,而他认为概率论仅仅是种可简化为计算的常识。他对于概率的探索本质上是对于休谟问题的专注。例如,我们怎么知道明天太阳会升起?太阳每天都会升起,今天也是,但没有什么能够保证它会继续升起。拉普拉斯的回答有两个部分。第一部分是我们当今所谓的“无差别原则”,或者“理由不充分原则”。有一天我们醒来,比如这时正是时间的起点,对于拉普拉斯来说则是大概5000年前,经历一个美妙的下午之后,我们看到太阳下山了。它还会出现吗?我们还没有看到过日出,所以也就没有特殊理由认为它会或者不会再升起。因此我们应该考虑两种情形出现的可能性相等,认为太阳还会再升起的可能性是一半。但是,拉普拉斯接着推断,如果过去能指导未来的一切,因为太阳每天都会升起,这应该会让我们更加坚信太阳会继续升起。5000年过后,明天的太阳还会升起的概率应该接近1,但不完全是,因为我们不能完全肯定。由这个思维实验,拉普拉斯导出他所谓的“接续法则”,该法则用于估算太阳升起n次后会再次升起的概率,表示为(n+1)/(n+2)。当n=0时,这个概率为1/2;随着n增加,概率也会增加,当n接近无穷大时,概率接近1。

这个法则由一个更为通用的原则推导得出。假设你半夜在一个陌生的星球上醒来。虽然你能看到的只是繁星闪烁的天空,你有理由相信太阳会在某个时间点升起,因为多数星球会自传并绕着自己的太阳转。所以你估计相应的概率应该会大于1/2(比如说2/3)。我们将其称为太阳会升起来的“先验概率”,因为这发生在看到任何证据之前。“先验概率”的基础并不是数过去这个星球上太阳升起的次数,因为过去你没有看到;它反映的是对于将要发生的事情,你优先相信的东西,这建立在你掌握的宇宙常识之上。但现在星星开始渐渐暗淡,所以你对于太阳会升起的信心越来越强,这建立于你在地球上生存的经历之上。你的这种信心源自“后验概率”,因为这个概率是在看到一些证据后得出的。天空开始渐渐变亮,后验概率又变得更大了。最终,太阳银色的大圆盘出现在地平线上方,而且可能正如《鲁拜集》的开篇部分描写的那样,套中了“苏丹的塔尖”。除非你产生幻觉,现在太阳是否会升起还不确定。

问题的关键是,随着你看到的证据越来越多,后验概率应该如何演变,答案就在贝叶斯定理里面。我们可以根据因果关系来考虑这个问题。日出使星星渐渐褪去光芒,天空变亮,但后者更能证明黎明的到来,比如因为星星也有可能在深夜时分,因为雾气笼罩而渐渐褪去光芒。所以看到天空变亮和看到星星褪去光芒相比,前者更能预示太阳升起的可能性。在数学符号中,我们说P(日出|天空渐渐发亮),即天空渐渐发亮时日出的条件概率,比P(日出|星星渐渐褪去光芒),即星星褪去光芒时日出的条件概率要大。根据贝叶斯定理,给定某原因时出现某结果的可能性越大,那么出现该结果是该原因引起的概率也会越大:如果P(天空渐渐发亮|日出)比P(星星渐渐褪去光芒|日出)要大,也许是因为有些星球距离太阳足够远,那些星星在日出之后仍会发光,那么P(日出|天空渐渐发亮)也比P(日出|星星渐渐褪去光芒)要大。

然而,情况并非完全如此。如果我们观察一个即使没有该原因也会发生的结果,那么能肯定的是,该原因的证据力不足。贝叶斯通过以下句子概况了这一点:P(原因|结果)随着P(结果),即结果的先验概率(也就是在原因不明的情况下结果出现的概率)的下降而下降。最终,其他条件不变,一个原因是前验的可能性越大,它该成为后验的可能性就越大。综上所述,贝叶斯定理认为:

P(原因|结果)=P(原因)×P(结果|原因)/ P(结果)

用A代替原因,用B代替结果,然后为了简洁,把乘法符号删掉,你就会得到大教堂上那个用10英尺宽的字母书写的公式。

这仅仅是定理的一个表述,当然还不能作为证据。但让人惊讶的是,证据十分简单。我们可以用医学诊断中的一个例子来阐明,也就是贝叶斯推理的“杀手级应用”之一。假设你是一位医生,上个月已经为100名病人进行诊断。其中的14名病人患流感,20名发烧,11名既感冒也发烧。因此感冒的人群中有发烧的病人的条件概率为11/14。设立条件缩小了我们正在考虑的集合,在这个例子中,所有病人的范围就缩小为患有流感的病人。在所有病人的集合中,发烧的概率是20/100;而在感冒病人的集合中,发烧的概率则是11/14。病人既发烧又感冒的概率,是患感冒病人的概率乘以发烧病人的概率:

P(感冒,发烧)=P(感冒)× P(发烧|感冒)=14/100 ×11/14=11/100

但我们可以倒过来计算:

P(感冒、发烧)=P(发烧)×P(感冒|发烧)

因此,因为它们都等于P(感冒、发烧),

P(发烧)×P(感冒|发烧)= P(感冒)×P(发烧|感冒)

两边都除以P(发烧),你会得到

P(感冒|发烧)= P(感冒)×P(发烧|感冒)/ P(发烧)

就是这样!这就是贝叶斯定理,感冒是原因,发烧是结果。

事实证明,人类并不是很擅长贝叶斯推理,至少涉及文字推理的时候是这样的。问题在于我们倾向于忽略原因的先验概率。如果你的艾滋病病毒检测呈阳性,而检测的假阳性只有1%,你会觉得恐慌吗?乍一看,这时你患有艾滋病的概率是99%。呀!可是让我们冷静一下,一步一步用贝叶斯定理来推导这个概率:

P(HIV|阳性)=P(HIV)×P(阳性|HIV)

P(HIV)是HIV在普通人群中的感染流行率,在美国这个概率约为0.3%。P(阳性)是化验结果显示你是否患有艾滋的概率,我们假设这个概率是1%。那么P(HIV|阳性)=0.003×0.99/0.01=0.297。这和0.99有很大的差别!因为HIV在普通人群中较为少见。化验结果为阳性,这样你感染艾滋病的概率会增加两个数量级,但这些概率还是低于50%。如果你的化验结果为HIV阳性,接下来的准确做法是保持冷静,然后做另外更加确切的检查。检查结果很有可能是你没事。

贝叶斯定理之所以有用,是因为通常给定原因后,我们就会知道结果,但我们想知道的是已知结果,如何找出原因。例如,我们知道感冒病人发烧的概率,但真正想知道的是,发烧病人患感冒的概率是多少。贝叶斯定理让我们由原因推出结果,又由结果知道原因,但其重要性远非如此。对于贝叶斯定理的信仰者来说,这个伪装起来的公式其实是机器学习中的F=ma等式,很多结论和应用都是在这个等式的基础上得出的。而且无论终极算法是什么,它肯定“仅仅”是贝叶斯定理的一个算法应用。我之所以给“仅仅”加了双引号,是因为对于几乎所有简单的问题来说,在计算机上面应用贝叶斯定理非常困难,接下来,我们就会知道原因。

贝叶斯定理作为统计学和机器学习的基础,受到计算难题和巨大争论的困扰。你想知道原因也情有可原:这不就是我们之前在感冒的例子中看到的那样,贝叶斯定理是由条件概率概念得出的直接结果吗?的确,公式本身没有什么问题。争议在于相信贝叶斯定理的人怎么知道推导该定理的各个概率,以及那些概率的含义是什么。对于多数统计学家来说,估算概率的唯一有效方法就是计算相应事件发生的频率。例如,感冒的概率是0.2,因为被观察的100名病人中,有20名发烧了。这是“频率论”对于概率的解释,统计学中占据主导地位的学派就是由此来命名的。但请注意,在日出的例子以及拉普拉斯的无差别原则中,我们会做点不一样的事:千方百计找到方法算出概率。到底有什么正当的理由,能够假设太阳升起的概率是1/2、2/3,或者别的呢?贝叶斯学派的回答是:概率并非频率,而是一种主观程度上的信任。因此,用概率来做什么由你决定,而贝叶斯推理让你做的事就是:通过新证据来修正你之前相信的东西,得到后来相信的东西(也被人们称为“转动贝叶斯手柄”)。贝叶斯学派对此观点的忠实近乎虔诚,足以经得住200年的攻击和计算。计算机已经强大到足以做贝叶斯推理,且在大数据的辅助下,它们开始占据上风。

所有模型都是错的,但有些却有用

实际上,医生不会仅凭发烧就断定病人感冒了,他会考虑所有的症状,包括病人是否咳嗽、喉咙痛、流鼻涕、头疼、发冷等。所以我们真正要算的是P(感冒|咳嗽、喉咙痛、流鼻涕、头疼、发冷……)。通过贝叶斯定理,我们知道这和P(咳嗽、喉咙痛、流鼻涕、头疼、发冷……|感冒)成正比。但现在,我们遇到一个问题:我们该如何估算这个概率?如果每个症状就是一个布尔变量(你要么有这个症状,要么没有),医生要考虑n个症状,那么病人就可能有2n种症状的组合。假设我们有20种症状以及1万个病人的信息数据库,那么我们现在看到的仅仅是近100万种可能组合中的一小部分。更糟的是,为了准确估算某个特定组合出现的概率,我们对该组合的观察次数应至少为几十次,这意味着数据库需包含几千万个病人的信息。再另外增加10种症状,我们需要病人的数量就会超过地球上的人口数。如果有100种症状,即使我们能魔法般地得到数据,那么世上所有的硬盘也没有足够的空间来存储所有的概率。而且如果病人来到医院,病人症状的组合我们从未遇到过,那么我们就不知该如何对其进行诊断。这时我们就与宿敌再次交锋:组合爆炸问题。

因此,我们就照着生活中常发生的那样做:妥协。我们做简化的假设来减少概率的数量,这些概率的数量由我们估算而来,且我们可以掌控。一个很简单且受人追捧的假设就是,在给定原因的情况下,所有的结果都相互独立。例如,假如我们知道你感冒了,发烧并不会改变你也咳嗽的可能性。从数学的角度讲,也就是说,P(发烧、咳嗽|感冒)仅相当于P(发烧|感冒)×P(咳嗽|感冒)。你瞧:这些概率中的每一个都可以通过少量次数的观察得到。其实,在前文,我们就这样得到过病人发烧的概率,且咳嗽和其他症状的概率的算法也并无二致。那么我们需要观察的次数就不会随着症状数的增多而呈指数增长了,实际上,观察次数不会再增长。

请注意:我们只是说你在感冒的前提下,发烧和咳嗽是相互独立的,但并不是所有情况都如此。很明显,如果我们不知道你有没有感冒,那么发烧和咳嗽则有很大关系,因为如果你已经发烧了,那你很有可能会咳嗽。P(发烧、咳嗽)不等于P(发烧)×P(咳嗽)。我们现在说的是,如果我们知道你感冒了,那么知道你是否发烧,并不会让我们更容易知道你是否会咳嗽。同样,如果你不知道太阳要升起来了,而且你看到星星渐暗了,那么你就更加肯定天空会变亮,但如果你知道太阳即将升起,那么看到星星渐暗就没有什么影响了。

请再次注意:多亏贝叶斯定理,我们才掌握这个窍门。如果我们想直接估算P(感冒|发烧、咳嗽等),假如不利用定理先将其转化成P(发烧、咳嗽等|感冒),那么我们就还需要指数数量的概率,每个组合的症状以及感冒或非感冒都有一个概率。

如果学习算法利用贝叶斯定理,且给定原因时,假定结果相互独立,那么该学习算法被称为“朴素贝叶斯分类器”。因为这是一个很朴素的猜想。实际上,发烧会增加咳嗽的可能性,即使你知道自己感冒了,因为(举个例子)发烧会让你得重感冒的可能性增大。但机器学习就是会做错误猜想的技术,而它又能侥幸逃脱。正如统计学家乔治·博克斯说的一句很有名的话那样:“所有的模型都是错的,但有些却有用。”虽然一个模型过于简化,但你有足够的数据用来估算那就比没有数据的完美模型要好。令人诧异的是,有些模型错误百出,同时又很有用。经济学家弥尔顿·弗里德曼甚至在一篇很有影响力的文章中提出,最有说服力的理论往往受到最大程度的简化,只要这些理论所做的预测是准确的,因为它们用最简洁的方法解释最复杂的问题。这对于我来说就像极远处的一座桥,但它阐明:与爱因斯坦的名言相悖,至少可以这么说,科学往往通过尽可能简化事物来取得进步。

没有人能肯定是谁发明了朴素贝叶斯算法。在1973年的一本模式识别教科书中,它被提到过,当时并未注明出处,但它真正流行起来是在20世纪90年代,那时研究人员惊喜地发现,它很多时候比许多更为复杂的学习算法还要准确。那时我还是一名研究生,而当我终于决定把朴素贝叶斯法纳入我的实验时,我震惊地发现自己很幸运,除了那个我运用到论文中的算法,它比所有我用来与之对比的算法都要有用,否则我可能也不会在这里了。

朴素贝叶斯法如今应用得很广泛。例如,它是许多垃圾邮件过滤器的基础。而这一切开始于大卫·赫克曼(一位卓越的贝叶斯研究员,同时也是一名医生),想到将垃圾邮件当作疾病,疾病的症状就相当于邮件中的文字:“伟哥”是一种症状,“免费”也是,但你最好朋友的姓可能会暗示这是一封合法邮件。那么我们就可以利用朴素贝叶斯法来将邮件分为垃圾邮件和非垃圾邮件了,只要垃圾邮件制造者通过随机选词来生成邮件。当然,这是一个荒谬的假设:只有当句子没有句法和内容时,它才正确。但那个夏天,迈赫兰·沙哈和一位斯坦福大学的毕业生在微软研究院实习时,曾对该假设进行过尝试,且效果很好。当比尔·盖茨问赫克曼怎会如此时,他指出为了识别垃圾邮件,你不必理解信息的细节,只要通过邮件包含的词语来获得邮件的主旨就可以了。

一个基本的搜索引擎也会利用与朴素贝叶斯法极相似的算法来决定显示哪些页面来回应你的搜索。主要的区别在于:它会预测相关或非相关,而不是垃圾邮件或非垃圾邮件。运用朴素贝叶斯法来解决预测问题的例子几乎数不胜数。彼得·诺尔维格(谷歌的研究主任)一度告诉我,这是谷歌应用最为广泛的算法,谷歌的机器学习在每个角落都利用了该算法的功能。为什么朴素贝叶斯法会在谷歌员工中流行起来?这个问题不难回答。除了惊人的准确度,它的测量能力也很强。学习朴素贝叶斯分类器的原理,也仅相当于数出每个属性与每个类别出现的次数,花的时间不比从硬盘读取数据的时间长。

可以半开玩笑地说,你甚至可以比谷歌员工更大范围地利用朴素贝叶斯法:对整个宇宙进行模拟。的确,如果你相信全能的上帝,那么你可以将宇宙模拟成一个巨大的朴素贝叶斯法分布点,这里发生的每件事都是在上帝的意愿下独立发生的。当然,值得注意的是,我们不知道上帝在想什么,但在第八章我们会分析,如何在即使不知道例子类别的情况下,掌握朴素贝叶斯模型。

起初看起来可能不是这样,但朴素贝叶斯法与感知器算法密切相关。感知器增加权值,而朴素贝叶斯法则增加概率,但如果你选中一种算法,后者会转化成前者。两者都可以概括成“如果……那么……”的简单规则,这样每个先例都会多多少少体现在结果中,而不是在结果中“全有或全无”。这仅仅是暗指主算法的学习算法中关联较为深入的例子。你也许并没有有意识地去了解贝叶斯定理(那么,你现在意识到了),但在某种程度上,你大脑中数百亿神经元中的每一个都是贝叶斯定理的微小实例。

在看新闻时,朴素贝叶斯法是学习算法可以利用的良好概念模型:它可以捕获输入与输出之间两两相关的关系,这对于理解将学习算法引用到新事件中很有必要。但是机器学习也不仅仅和两两相关关系有关,当然,正如大脑不仅仅包含一个神经元一样。当我们寻找更为复杂的模型时,真正的行动才刚刚开始。

从《尤金·奥涅金》到Siri

1913年第一次世界大战前夕,俄国数学家安德烈·马尔可夫发表了一篇文章,将所有事情的概率运用到诗歌当中。诗中,他模仿俄国文学的经典:普希金的《尤金·奥涅金》,运用了当今我们所说的“马尔可夫链”。他没有假定每个字母都是随机产生的,与剩下的毫无关联,而是最低限度引入了顺序结构:他让每个字母出现的概率由在它之前、与它紧接的字母来决定。他表示,举个例子,元音和辅音常常会交替出现,所以如果你看到一个辅音,那么下一个字母(忽略发音和空格)很有可能就是元音,但如果字母之间互相独立,出现元音的可能性就不会那么大。这可能看起来微不足道,但在计算机发明出来之前的年代,这需要花费数小时来数文字,而马尔可夫的观点在当时则很新颖。如果元音i是一个布尔型变量,《尤金·奥涅金》的第i个字母是元音,则该变量为真,如果它是一个辅音则为假,那么我们用图6–1这样的连锁图来表示马尔可夫模型,两个节点之间的箭头表示相应变量之间的直接依赖关系:

图6–1

马尔可夫假设(假设错误但有用)文中每个位置的概率都是一样的。因此我们只需估算三个概率:P(元音1=真),P(元音i+1=真|元音i=真),且P(元音i+1=真|元音i=假[因为概率相加等于1,由此我们可以马上得出P(元音1=假)等]。与朴素贝叶斯法一样,我们可以随心所欲拥有许多变量,而不用估算可能会抵达上限的概率的数量,但现在变量之间实际上会相互依赖。

如果我们测量的不仅仅是元音对辅音的概率,还有字母顺序遵循字母表顺序的概率,利用与《尤金·奥涅金》一样的统计数据,我们可以很愉快地生成新的文本:选择第一个字母,然后在第一个字母的基础上选择第二个字母,以此类推。当然结果是一堆没有意义的数据,但如果我们让每个字母都依照之前的几个字母而不止一个字母,这个过程就开始听起来更像一个酒鬼的疯话,虽然从整体上看没有意义,但从局部上看却很连贯。虽然这还不足以通过图灵测试,但像这样的模型是机器翻译系统的关键组成部分,比如谷歌翻译可以让你看到整版的英文页面(或者几乎整版),不管原页面的语言是什么。

源于谷歌的页面排名,本身就是一条马尔可夫链。拉里·佩奇认为,含有许多链接的页面,可能会比只含几个的要重要,而且来自重要页面的链接本身也更有价值。这样就形成了一种无限倒退,但我们可以利用马尔可夫链来掌控这种倒退。想象一下,一个页面搜索用户通过随机点击链接来从这个页面跳到另外一个页面:这时马尔可夫链的状态就不是文字而是页面了,这样问题就变得更为复杂,但数学原理是一样的。那么每个页面的得分就是搜索用户花在该页面上的时间,或者等于他徘徊很久后停留在该页面上的概率。

马尔可夫链无处不在,而且是人们研究最多的数学话题,但它仍是受到很大限制的概率模型。我们可以用图6–2中的模型来进一步探讨这个问题。

图6–2

与之前一样,这些状态组成一条马尔可夫链,但我们看不到它们,得从观察中将它们推导出来。人们称其为隐藏的马尔可夫模型,或者简称为HMM(有点误导人,因为被隐藏的是状态,而不是模型)。HMM和Siri一样,处于语音识别系统的中心。在语音识别过程中,隐藏的状态是书面形式的单词,而观察值则是对Siri说的声音,而目标则是从声音中推断出单词。模型有两个组成部分:给定当前单词的情况下,下一个单词出现的概率和在马尔可夫链中的一样;在单词被说出来的情况下,听到各种声音的概率(到底如何进行推导,这是一个有趣的问题,下面我们会来讨论这个问题)。

除了Siri,你每次用手机来通话时都会用到一个HMM。这是因为你的词语在空气中以位流的形式发送,而数位在发送过程中会受到损坏。这个HMM接着会从接收到的数位中(观察值)找到预期的那个(隐藏状态),这是HMM应该能做得到的,只要受损的数位不是很多。

HMM还是计算生物学家最为喜爱的工具。一个蛋白质分子是一个氨基酸序列,而DNA则是一个碱基序列。举个例子,如果我们想预测一个蛋白质分子怎样才能形成三维形状,我们可以把氨基酸当作观察值,把每个点的褶皱类型当作隐藏状态。同样,我们可以用一个HMM来确定DNA中基因开始转录的地点,还可以确定其他许多属性。

如果状态和观察值都是连续而非离散变量,那么HMM就变成人们熟知的卡尔曼滤波器。经济学家利用卡尔曼滤波器来从数量的时间序列中消除冗余,比如GDP(国内生产总值)、通货膨胀、失业率。“真正的”GDP值属于隐藏的状态;在每一个时间点上,真值应该与观察值相似,同时也与之前的真值相似,因为经济很少会突然跳跃式增长。卡尔曼滤波器会交替使用这两者,同时会生成流畅的曲线,仍与观察值一致。当导弹巡航到目的地时,就是卡尔曼滤波器使它保持在轨道上。没有卡尔曼滤波器,人类就无法登上月球。

所有东西都有关联,但不是直接关联

HMM有助于模拟所有种类的序列,但它们远远不如符号学派的“如果……那么……”规则灵活,在这个规则当中,任何事都可以以前提的形式出现,而在任意下游规则中,一条规则的结果可以反过来当作前提。然而,如果我们允许如此随意的结构在实践中存在,那么需要掌握的概率数量将会呈爆发式增长。很长一段时间,没有人知道该如何打破这个循环,而研究者们只能求助于特别方案,比如将置信度估算与规则挂钩,并以某种方式将它们联合起来。如果A以0.8的置信度暗指B,而B以0.7的置信度暗指C,那么也许A暗指C的置信度则为0.8×0.7。

这些方案的问题在于,它们可能会严重出错。我可以根据两个合情合理的规则——如果灭火喷水系统打开了,那么玻璃就会湿;如果玻璃湿了,那么下雨了——推导出一条荒谬的规则:如果灭火喷水系统打开了,那么下雨了。一个潜藏得更深的问题是,有了置信度评级规则,我们容易重复计算证据。假设你在读《纽约时报》,讲的是外星人已经登陆地球。这一天不是4月1日,可能这是一个玩笑。但是现在你在《华尔街日报》《今日美国》《华盛顿邮报》看到一样的标题。你开始感到慌张,就像奥森·威尔斯声名狼藉的广播剧《世界大战》的听众一样,没有意识到这只是戏剧化的描写。但是,如果你查看细节,会发现这四家报社都从美联社那里得到这个新闻标题,你又返回去怀疑这是一个玩笑,而这次开玩笑的是一位美联社的记者。规则系统无法解决这个问题,朴素贝叶斯法也一样。如果它标出诸如“由《纽约时报》报道”的字样,预示新闻事件是真实的,那么它能做的也只是加上“由美联社报道”的字样,这样只会让事情变得更糟糕。

20世纪80年代终于有了突破。朱迪亚·珀尔(加州大学洛杉矶分校的一名计算机科学教授)发明了一种新的表示方法:贝叶斯网络。珀尔是世界上最为卓著的计算机科学家之一,他的方法在机器学习、人工智能,以及其他许多领域迅速传播。2012年,他获得图灵奖,这是计算机科学领域的诺贝尔奖。

珀尔意识到,拥有一个随机变量之间复杂的依赖关系网络也没什么,只要每个变量仅仅直接依赖于其他几个变量。我们可以如之前看到的马尔可夫链和HMM那样,用一幅图来表示这些依赖关系,除了现在该图可以是任意结构(只要箭头不会形成闭环)。珀尔最喜欢的例子之一就是防盗报警器。当窃贼企图闯入时,你房子的报警器应该会响起来,但它也可能会因为地震而响起(在洛杉矶,珀尔居住的地方,地震和盗窃案发生的频率一样)。如果你此时工作到很晚,而你的邻居鲍勃打电话给跟说他听到你家的报警器响了,而你的邻居克莱尔却没打给你,你应该报警吗?图6–3表明了这种依赖关系。

图6–3

如果图中有一个箭头从一个节点指到另外一个节点,我们说第一个节点是第二个节点的父节点。那么“报警器”的父节点就是“盗窃案”和“地震”,而“报警器”是“鲍勃打来电话”和“克莱尔打来电话”的唯一父节点。贝叶斯网络就是像这样的依赖关系图,附带一张包含每个变量的表格,给出变量父节点的每个值的组合概率。对于“盗窃案”和“地震”,我们只需每个一个概率,因为它们没有父节点。对于“报警器”我们需要四个概率:如果盗窃案和地震都不发生,报警器响起的概率;如果盗窃案发生,地震未发生,报警器响起的概率等。对于“鲍勃打来电话”,我们需要两个概率(考虑报警器和未考虑报警器),克莱尔的情况也一样。

以下是问题的关键点:鲍勃依据“盗窃案”和“地震”来打电话,但只能通过“报警器”来获取信息。考虑到“报警器”时,鲍勃的电话才会条件地独立于“盗窃案”和“地震”之外,克莱尔的情况也一样。如果报警器未响起,你的邻居睡得很香,而窃贼也没有惊扰别人。同样,考虑到“报警器”,鲍勃和克莱尔相互独立。没有这个独立结构,你需要掌握32个25概率,每个概率对应5个变量的可能状态(或者31个概率,如果你讲究细节,因为最后一个可能是隐含概率)。有了条件独立性,你需要的只是1+1+4+2+2=10,可以少算68%的概率。这仅仅是小例子的情况,如果有数百或者数千个变量,省力的程度可能达到100%。

据生物学家巴里·康芒纳的观点,生态学的第一定律就是所有生命都与其他生命相互关联。这个说法可能正确,但也会使人们无法理解这个世界,如果不是多亏条件独立性:每个生命都相互关联,但只是间接关联。为了对我产生影响,1英里之外发生的事情,即使通过光传播,也得先影响我周围的环境。可以打趣说,空间是所有事情没有都发生在你身上的原因。换句话说,空间结构是条件独立性的一个实例。

在盗窃案的例子中,32个概率的完整表格不会明确表示出来,但通过较小表格和图形结构的集中,它会被隐含地表示出来。为了获得P(盗窃案、地震、报警器、鲍勃打来电话、克莱尔打来电话),我要做的就是把以下概率相乘:P(盗窃案)、P(地震)、P(报警器∣盗窃案、地震)、P(鲍勃打来电话∣报警器)、P(克莱尔打来电话∣报警器)。在任意贝叶斯网络中也是同样的道理:为了获得完整状态的概率,只需将单个变量表格中相应行上的概率相乘。因此,只要条件独立性有效,转换到更加简洁的表示方法不会导致信息丢失。这样我们就可以很容易算出极端非寻常状态的概率,包括之前未观察到的状态。贝叶斯网络揭穿这样一个常识性错误:机器学习无法预测鲜有的时间,或者纳西姆·塔勒布口中的“黑天鹅”。

回想一下,我们可以看到朴素贝叶斯法、马尔可夫链、HMM都是贝叶斯网络的特殊例子。朴素贝叶斯法的结构如图6–4所示。

图6–4

马尔可夫链隐含这样的猜想:考虑到现在,未来会有条件地独立于过去。此外,HMM假设每个观察值只依赖于对应的状态。贝叶斯网络对贝叶斯学派来说,就像逻辑与符号学者的关系:一种通用语,可以让我们很好地对各式各样的情形进行编码,然后设计出与这些情形相一致的算法。

我们可以把贝叶斯网络想成“生成模型”,即从概率的角度,形成世界状态的方法:首先要决定盗窃案或地震是否会发生,然后在此基础上决定报警器是否会响起,再次在此基础上决定鲍勃和克莱尔是否会打电话。贝叶斯网络讲述这样的故事:A发生了,接着它导致B的发生;同时,C也发生了,而B和C共同引起D的发生。为了计算特定事件的概率,我们只需将与之相关事件的概率相乘即可。

贝叶斯网络最激动人心的应用之一,就是模拟基因在活细胞中如何相互管制。人们已经花费数十亿美元来找到单个基因和特殊疾病的两两相关关系,但产出却低得让人失望。回想一下,这并不奇怪:细胞的活动是基因与环境复杂的相互作用的结果,而单个基因的预测能力有限。但有了贝叶斯网络,我们可以揭开这些相互关系,只要我们有必要的数据,而随着DNA微阵列技术的普及,我们越来越有希望能做到。

开辟机器学习在垃圾邮件的应用之后,大卫·赫克曼开始转向将贝叶斯应用于抵抗艾滋病的斗争中。艾滋病病毒是很强的对手,因为它可以迅速变异,这样所有疫苗或者药物长时间抑制艾滋病病毒就变得困难。赫克曼注意到,这是一个和猫捉老鼠一样的游戏,垃圾邮件过滤器和垃圾邮件玩耍。他决定将自己学习的一个经验付诸实践:攻击最弱的链接。在垃圾邮件的例子中,弱链接包括为了收到客户的款项而必须使用的网址。在艾滋病的例子中,它们就是病毒蛋白质的微小区域,不伤害病毒就无法改变这些区域。如果他可以对免疫系统进行训练,使其识别这些区域,然后攻击表现这些区域的细胞,他可能只有一种艾滋病疫苗。赫克曼和同事利用贝叶斯网络来帮助识别易受伤区域,并研发出一个疫苗交付机制,用来教免疫系统只攻击那些区域。这些交付机制在老鼠身上起作用了,而且现在人们已经在准备临床试验。

这样的事情经常发生:即使我们将所有条件独立性都考虑进来,贝叶斯网络中的一些节点仍有太多的父节点。有些网络布满箭头,这样当我们打印这些网络图时,纸面会变成黑色(物理学家马克·纽曼称之为“荒谬图”)。医生需要同时诊断病人可能患的病,而不止一种,而且每种疾病是许多不同症状的根源。除了感冒,发烧可能由任意数量的条件引起,但是考虑到条件的每个可能的组合,尝试预测其概率几无希望。其实还有一线希望,不需要这样的表格:为每个状态的起因详细说明每个节点的条件概率,我们可以对较简单的分布进行学习。最受青睐的选择是逻辑OR运算(Logical OR operation)的一个概率版本:任何原因都可以独自引起发烧,但每个原因都会有一个特定、无法引起发烧的概率,即使通常情况下该原因引起发烧的理由充分。赫克曼和其他人已经对贝叶斯网络进行学习,通过这种方法来诊断数百种传染病。谷歌在其AdSense系统中利用这种类型的庞大贝叶斯网络,用于自动选择广告放入网页中。该网络将100万的满足变量相互关联起来,同时还通过3亿个箭头与1200万的词语和词组相关联,这些词语和词组都是从1000亿个文本片段和搜索词条中掌握的。

说点轻松的,微软的Xbox Live游戏用贝叶斯网络来对选手进行排名,并对技术水平相似的选手进行配对。这款游戏的结果就是可以知道对手技术水平的一个概率函数,而且利用贝叶斯定理,我们可以从选手的游戏结果推断选手的技术水平。

推理问题

遗憾的是,推理问题是一个巨大的障碍。仅仅因为贝叶斯让我们简洁地表达概率分布,这并不意味着我们也可以利用它进行有效推理。假设你想计算P(盗窃案∣鲍勃打电话,而克莱尔没有)。利用贝叶斯定理,你知道这仅仅是P(盗窃案)P(鲍勃打电话,而克莱尔没有∣盗窃案)/P(鲍勃打电话,而克莱尔没有),或者相当于P(盗窃案,鲍勃打电话,而克莱尔没有)/P(鲍勃打电话,而克莱尔没有)。如果有包含所有状态的概率的完整表格,你可以获得这两个概率,方法就是把表格中对应行的值加起来。例如,P(鲍勃打电话,而克莱尔没有)是在所有包含鲍勃打电话,而克莱尔没有的概率的行中,把这些概率值加起来,但是贝叶斯网络不会给你完整的表格。你总可以通过单个表格来构建这样的表格,但这需要很多时间和空间。我们真正需要的是计算P(盗窃案∣鲍勃打电话,而克莱尔没有),而不用建立完整的表格。简单地说,那就是贝叶斯网络中的推理问题。

在许多例子中,我们可以做到这一点,并避免指数性暴增。假设夜深人静时你正带领排成纵队的一个排,穿过敌人的领地,而你想确认所有士兵仍在跟着你。你可以停下,自己数人数,但那样做会浪费太多时间。一个更聪明的办法就是只问排在你后面的第一个兵:“你后面有几个兵?”每个士兵都会问自己后面的士兵同一个问题,知道最后一个士兵回答“一个也没有。”倒数第二个士兵现在可以说“一个”,以此类推,直到回到第一个士兵,每个士兵都会在后面士兵所报数的基础上加一。现在你知道有多少兵还跟着你,你甚至都不用停下来。

Siri用同样的想法来计算你刚才说的概率,通过它从麦克风中听到的声音来进行“报警”。把“Call the police”(报警)想成一排单词,正以纵队形式在页面上行走,“police”想知道它的概率,但要做到这一点,它需要知道“the”的概率;“the”回过头要知道“call”的概率。所以“call”计算它的概率,然后将其传递给“the”,“the”重复步骤并将概率传递给“police”。现在“police”知道它的概率了,这个概率受到句子中每个词语的适当影响,但我们绝不必建立8个概率的完整表格(第一个单词是否为“call”,第二个是否为“the”,第三个是否为“police”)。实际上,Siri考虑在每个位置中出现的所有单词,而不仅仅是第一个单词是否为“call”等,但算法是一样的。也许Siri认为,在声音的基础上,第一个单词不是“call”就是“tell”,第二个不是“the”就是“her”,第三个不是“police”就是“please”。个别地,也许最有可能的单词是“call”、“the”和“please”。但那样会变成一句没有意义的话“Call the please”,所以要考虑其他单词,Siri得出结论,认为句子就是“Call the police”。它会打电话,幸运的是警察及时赶到你家并抓住小偷。

如果图是一棵树而不是一条链,那么同样的想法还会奏效。如果你领导的是整支军队而不仅仅是一个排,你可以问每个连长,他们身后有多少士兵,然后把他们的回答相加。反过来,每个连长会问他的每个排长,以此类推。但如果图形形成环状,你就会遇到麻烦。如果有一个联络官员,他同时是两个排的成员,他会数两次数。实际上,他身后的每个人都会数两次。这就是“外星人登陆”情形中发生的问题,举个例子,如果你想计算恐慌的概率,如图6–5所示。

图6–5

有一个办法就是将“《纽约时报》报道该新闻”与“《华尔街日报》报道该新闻”结合起来,变成一个拥有4个值的单个特大变量:如果它们都报道了,那就是“是是”;如果《纽约时报》报道外星人登陆,而《华尔街日报》没有,那就是“是否”;等等。这样图形就会变成一条含三个变量的链子,一切顺利。然而,每次你加入新来源时,特大变量的值的数量会翻倍。如果你有50而不是2个新来源,特大变量会有250个值。所以这种方法只能帮你帮到这里,而更有效的方法还未被人发现。

这个问题比表面看起来的还要糟糕,因为贝叶斯网络实际上有“隐形的”箭头伴随着看得见的箭头。“盗窃案”和“地震”是相互独立的先验条件,但报警器响起会使两者纠缠在一起:报警器让你怀疑有盗窃,但如果现在听广播说有地震,你会假定那是让报警器响起的原因。地震已经“通过解释消除”报警器响起的疑虑,这样盗窃就不太可能会发生,因此两者又相互依赖了。在贝叶斯网络中,所有变量的根源都以这种方式相互独立,而这反过来引入进一步的依赖关系,这就使得最后的图往往比最初的图要更加密集。

推理的关键问题是你能否使填好的图“看起来像一棵树”,而不让树干变得太密。如果枝干上的特大变量包含过多的可能值,这棵树会不受限制地生长,直到它覆盖整个星球,像《小王子》中的猴面包树一样。在生命之树中,每个物种都是一个分枝,但每个枝干内部是一个图,每个生物都有一对父母,各有一对祖父母、外祖父母,以及若干个后代等。枝干的“厚度”是物种数量的大小。当枝干过于茂密时,我们的唯一选择就是求助于近似推理。

有一个方法,珀尔在关于贝叶斯网络的书中,将其当作练习,也就是假装图形没有闭环,并来来回回传播概率,直到这些概率集中于一点。这被人们称为“环路信念传播”(loopy belief propagation),因为它在含有闭环的图形中能起作用,也因为这是一个疯狂的想法。让人惊讶的是,在许多例子中,它能很好地起作用。例如,这对于无线通信来说,是最先进的方法,随机变量在信息中被当作数位,以灵活的办法被编码起来。环路信念传播也可以收敛变成错误的答案,或者永远处于振荡状态。还有另一个办法,它起源于物理学,但被引入机器学习,还被迈克尔·乔丹和其他人大大扩充过:就是利用易于处理的分配来对难以处理的分配进行粗略估计,然后优化前者的参数,使其尽可能地与后者接近。

然而,最受人青睐的选择就是借酒浇愁,喝得酩酊大醉,然后整夜都在跌跌撞撞。该选择的技术术语为“马尔可夫链蒙特卡洛理论”(Markov chain Monte Carlo,MCMC):有“蒙特卡洛”这个部分,是因为这个方法涉及机遇,比如到同名的赌场去,有“马尔可夫链”部分,是因为它涉及采取一系列措施,每个措施只能依赖于前一个措施。MCMC中的思想就是随便走走,就像众所周知的醉汉那样,以这样的方式从网络的这个状态跳到另一个状态。这样长期下来,每个状态受访的次数就与它的概率成正比。比如,接下来我们可以估算盗窃案的概率为我们访问某个状态的时间段,在这个状态中有一起盗窃案。一条“守规矩的”马尔可夫链会收敛到稳定分布中,所以过一会儿它总会给出大致一样的答案。例如,当你洗一副扑克牌时,过一会儿,所有牌的顺序都会近似,无论最初的顺序是什么。所以你知道如果有n种可能的顺序,每种顺序的概率就是1/n。MCMC的秘诀就在于设计一条马尔可夫链,收敛于我们贝叶斯网络的分布中。有一个简单的选择,就是重复循环通过所有变量,考虑其附近的状态,根据其条件概率对每个变量进行取样。人们在谈论MCMC时,往往把它当作一种模拟,但它其实不是:马尔可夫链不会模仿任何真实的程序,我们将其创造出来,目的是为了从贝叶斯网络中有效生成样本,因为贝叶斯网络本身就不是序变模式。

MCMC的起源可以追溯到曼哈顿计划,那时物理学家们需要估算中子与原子相撞的概率,并引发连锁反应。但近10年来,这引发了一场革命,常常使人们认为MCMC是有史以来最重要的算法之一。MCMC不仅有助于计算概率,也有助于求任何函数的积分。没有它,科学家们只能受限于那些用分析方法来求积分的函数,或者受限于那些良性的低维积分,这些积分可以近似看作一系列梯形。有了MCMC,科学家们就可以自由构建复杂的模型,直到计算机会挑起重担。贝叶斯学派,举个例子,可能要感激MCMC,因为MCMC和其他东西比,更能为他们的方法提高人气。

不好的一面在于,MCMC的收敛速度往往慢得让人难以忍受,或者在未完成收敛时欺骗你已经完成收敛。真正的概率分配通常非常悬殊,微小概率的大片“荒地”会突然插入“珠穆朗玛峰”。接下来,马尔可夫链会收敛到最近的顶峰,然后停留在那里,得出偏差很大的概率估算值。这就像醉鬼跟随酒的香气来到最近的酒馆,然后整夜待在那里,而不是我们想让他做的那样,到城市里游荡。另一方面,如果我们不用马尔可夫链而是只生成独立的样本,和较简单的蒙特卡落法一样,没有任何味道指引我们,而且甚至可能都找不到那个第一家酒馆。这就像往城市的地图上射飞镖,希望飞镖能恰好落在酒馆上。

贝叶斯网络中的推理不仅限于计算概率,它也包括为证据找到最可信的解释方法,最能解释症状的疾病或者最能解释Siri听到的声音的词语。这和只是在每步挑最合适的词语不一样,因为在考虑声音的情况下,单个出现可能性大的词语,一起出现时可能性就不那么大了,在“Call the please”的例子中就是如此。可是,相同种类的算法也可以对这个任务起效(实际上,多数语音识别器会用到它们)。最重要的是,推理包括做最佳决定,引导这些决定的,不仅仅是不同结果的概率,还有相应的成本(或者使用这些技术术语的实用工具)。忽略你老板的邮件,安排你明天该做的事情,这比看到垃圾邮件付出的代价还要大,所以很多时候最好允许邮件通过,即使有时候它很有可能是垃圾邮件。

无人驾驶车辆和其他机器人是实践中概率推理的最好例子。随着车转悠起来,它同时会构建行驶领域的地图,越来越肯定地找到它在地图上的方位。根据最近的一项调查,伦敦的出租车司机大脑靠后的海马区域比常人要大,这是一个涉及记忆和地图形成的大脑区域,因为他们要掌握城市的布局。也许他们利用的是相似的概率推理算法,这和人类的情况就不一样,饮酒似乎并不能帮上什么忙。

掌握贝叶斯学派的方法

既然我们(多多少少)知道了如何解决推理难题,就可以从数据中掌握贝叶斯网络了,因为对于贝叶斯学派来说,学习只是另一种形式的概率推理。你需要做的只是运用贝叶斯定理,把假设当作可能的原因,把数据当作观察到的效果:

P(假设∣数据)=P(假设)×P(数据∣假设)/P(数据)

假设可以和整个贝叶斯网络一样复杂,或者和硬币正面朝上的概率一样简单。在后一个例子中,数据仅仅是一系列抛硬币行为的结果。例如,如果我们抛100次硬币,有70次正面朝上,频率论者会估算正面朝上的概率为0.7。根据所谓的“极大似然法”(maximum likelihood principle),这是有道理的:在所有正面朝上的可能概率中,0.7是在抛100次,有70次正面朝上的情况下最有可能的概率。假设成立的可能性是P(数据∣假设),而该法则称,我们应该选择那个能将该概率最大化的假设。即便如此,贝叶斯学派做事更加仔细。他们指出,我们从来无法肯定哪个假设是真的,所以我们不只是挑一个假设,比如硬币正面朝上的概率是0.7;相反,应该计算每个可能假设的后验概率,然后在做预测时容纳所有假设。所有假设的概率之和必须等于1,那么如果某个假设的概率增大,另一个则变小。实际上,对于贝叶斯学派来说,没有所谓的真相。你有一个优先于假设的分布,在见到数据后,它变成了后验分布,这是贝叶斯定理给出的说法,也就是贝叶斯定理的全部。

这与传统科学运作的方式相背离。这就像在说:“实际上,哥白尼和托勒密都不对;让我们只预测星球未来的轨迹,假定地球绕着太阳转,反过来也成立,然后对结果取平均值。”

当然,这是一个加权平均值,假设作为其后验概率的权值,那么能更好地解释数据的假设会更有价值。另外,就像玩笑说的那样,加入贝叶斯学派意味着绝不用说你对某事很肯定。

不用说,携带不止一个而是大量的假设是一种巨大的痛苦。在掌握贝叶斯网络的例子中,我们做预测的方法应该是对所有可能的贝叶斯网络取平均值,包括所有可能的图形结构,以及每个结构的所有可能的参数值。在某些情况下,我们可以以封闭形式对参数取平均值,但因为各种结构,进行得不顺利。举个例子,我们可以将马尔可夫链蒙特卡洛理论运用到网络的空间中,随着马尔可夫链的发展,从这个可能的网络跳到另外一个网络。将该复杂性与计算成本和贝叶斯有争议的概念(真的没有所谓的客观事实)结合起来,就不难知道为什么20世纪频率论一直主导科学界。

然而贝叶斯法还是有可取之处的,其中有一些主要原因。可取之处在于,很多时候,几乎所有的假设都会以微小的后验概率作为结尾,而我们可以安然地忽略它们。实际上,只考虑单个最可能的假设通常是一种非常好的近似方法。假设我们对于抛硬币问题的先验分布是:正面朝上的所有概率均相等。看到连续抛硬币的结果,这个效果是将分布越来越多地集中到与数据最为一致的假设上。例如,如果h包含正面朝上的可能概率,且一枚硬币正面朝上的概率为0.7,我们会看到图6–6。

每次抛完硬币的后验概率变成抛下一次硬币的先验概率,抛了一次又一次,我们越来越肯定h=0.7。如果我们只认准这一单个最可能假设(在这个例子中,h=0.7),这样贝叶斯法和频率论法就变得很相似,但有一个关键的不同点:贝叶斯学派考虑先验的P(假设),而不仅仅是可能性P(数据∣假设)[数据先验P(数据)可以忽略,因为它对于所有假设来说都一样,所以不会影响获胜者的选择]。如果我们愿意假定所有的假设都和先验概率均等,那么贝叶斯法现在就简化为极大似然法。因此贝叶斯学派可以对频率论者说:“看,你做的仅是我们所做部分工作的特例,但至少我们能够使自己的假设清楚明白。”而如果假设与先验概率不均等,那么极大似然法的隐含假设(假设和先验概率均等)会给出错误的答案。

图6–6

这就像一场理论性的讨论,却得出惊人的实践性结果。如果我们只看了一次抛硬币,而结果是正面朝上,极大似然理论会说正面朝上的概率是1。这可能非常不准确,而当硬币反面朝上时,会让我们措手不及。一旦我们看过很多抛硬币行为,估算起来就更可靠,但在许多问题中,我们无法看到足够多次数的“抛硬币”,无论数据有多大。假定单词“supercalifragilisticexpialidocio us”在我们的训练数据中从未在垃圾邮件中出现过,而是出现在一封讨论《欢乐满人间》的邮件中。接下来,包含极大似然概率估算功能的朴素贝叶斯垃圾邮件过滤器会决定包含该词的邮件不是垃圾邮件,尽管邮件中的其他词喊着:“垃圾邮件!垃圾邮件!”相反,贝叶斯学派会赋予这个词较低但非0的概率,让其出现在垃圾邮件中,同时允许其他词语将其覆盖。

如果我们努力掌握贝叶斯网络的结构和它的参数,问题只会变得更糟糕。我们可以通过爬山法来做到这一点,由空的网络(没有箭头)开始,添加最能提高可能性的箭头,以此类推,直到箭头不再起改善作用。遗憾的是,这很快就会引起大范围过拟合,网络会将零概率分配给未在数据中出现的所有状态。贝叶斯学派可以做更有意思的事情。他们可以利用先验分布来编码专家对该问题的观点——他们对休谟问题的回答。例如,我们可以为医学诊断设计一个原始贝叶斯网络,方法就是采访医生,询问他们哪些症状可能会对应哪些疾病,并添加相应的箭头。这就是“先验网络”,而先验分布可以通过添加或移除箭头的数量来惩罚替代网络。医生也不是完全可靠的,所以我们让数据来覆盖它们:如果通过添加数据来提高可能性比惩罚重要,我们会做这件事。

当然,频率论者正意识到这个问题,而且他们的回答,举个例子,是通过某因素来增加可能性,该因素会惩罚更多的复杂网络。但这时候频率论和贝叶斯学派就无法区别了,而你把计分函数称作“惩罚似然”还是“后验概率”就是喜好的问题了。

尽管频率论者和贝叶斯学派在一些问题上存在分歧,对于概率的含义也存在哲学上的差异。认为概率包含主观性让许多科学家感到略有不安,但如果没有这一点,很多用途就被禁止了。如果你是频率论者,那么只能对那些发生次数超过一次的事件的概率进行估算。所以像“希拉里·克林顿在下一轮总统竞选中打败杰布·布什的概率是多少”这样的问题则无法回答,因为没有哪场竞选的目的是让他们互相竞争。但对于贝叶斯学者来说,概率是包含主观程度的信任,所以他可以自由地做有根据的猜测,而且推理演算会使他所有的猜想都一致。

贝叶斯法不仅仅适用于学习贝叶斯网络,还适用于其特殊情况(相反,尽管它们的名字如此,贝叶斯网络并非一定就是贝叶斯学派的:频率论者也可以掌握它们,正如我们刚看到的那样)。我们可以将先验分布置于任意级别的假设中(规则组、神经网络、程序)然后在给定数据的条件下,利用假设的可能性来对其进行更新。贝叶斯学派的观点就是,选择什么表示方法由你决定,但得利用贝叶斯定理来掌握它。20世纪90年代,他们声势浩大地接管了神经信息处理系统国际会议(NIPS),即联结学派研究的主会场。其中的罪魁祸首(可以这么说)包括大卫·麦凯、雷德福·尼尔、迈克尔·乔丹。麦凯是英国人,是加州理工学院约翰·霍普菲尔德的学生,后来成为英国能源部的首席科学顾问,他表明了如何通过贝叶斯法来学习多层感知器。尼尔向联结学派介绍MCMC,而乔丹则向他们介绍变分推理。最终,他们指出在限制范围内,你可以在多层感知器中“集中”神经元,剩下一种未提到它们的贝叶斯模型。不久以后,在向NIPS提交的论文中,“神经的”一词很好地表达了“拒绝”的意思。有些研究人员开玩笑称,该会议应该改名为BIPS,即“贝叶斯信息处理系统”(Bayesian Information Processing Systems)。

马尔可夫权衡证据

但在通往统治世界的路上发生了有趣的事情。利用贝叶斯模型的研究人员注意到,如果你用非法的方式来调整概率,得出的结果会更好。例如,在语音识别器中,通过调整P(词语)可以提高准确率,但它就不再是贝叶斯定理了。发生了什么?结果是,问题的原因在于生成模型做出的错误独立性假设。简化的图形结构使模型变得可掌握,而且值得保留,不过因为手头任务,我们最好只掌握自己能力范围内的最佳参数,无论它们是否为概率。朴素贝叶斯法的一个真正优势在于,可以提供少量而有信息量的特征,通过这些特征可以预测级别。另外,它还可以提供快速、稳健的方法来掌握相应的参数。在垃圾邮件过滤器中,每个特征都是某个特定的词语出现在垃圾邮件中,而相应的参数是它发生的频率是多少,对于非垃圾邮件也是同样的道理。以这种方式来看,考虑到把最佳预测变成可能,甚至在很多情况下其独立性假设受到严重违背,朴素贝叶斯可能是最优的。当我意识到这一点,并于1996年发表一篇关于它的论文时,人们对于朴素贝叶斯的怀疑消解了,并帮助它取得成功。但它也向不同的模型迈出了一步,该模型在过去20年中已渐渐取代贝叶斯网络,它就是马尔可夫网络。

马尔可夫网络是一组特征以及对应的权值,特点和权值共同定义概率分布。特征可以和“这是一首民歌”一样简单,也可以与“这是一首由嘻哈艺术家创作的民歌,有萨克斯的重复乐段和递降的和弦部分”一样复杂。潘多拉利用一大组特征,它将其称为“音乐基因组计划”,目的是为你挑选要播放的歌曲。假定我们将它们与马尔可夫网络接通,那会怎么样?如果你喜欢民歌,相应特征的权值会上升,而当你打开潘多拉时,更有可能听到民歌。如果你也喜欢听嘻哈艺术家创作的歌曲,该特征的权值也会上升。这时你最有可能听到的歌曲同时包含这两种特征,即民歌和嘻哈艺术家的创作特点。如果你不喜欢民歌或者不喜欢嘻哈艺术家本身,而只喜欢两者的结合,那么你想要的是具备更加复杂特征的“嘻哈艺术家创作的民歌”。潘多拉的特征由手工创造,但在马尔可夫网络中我们也可以利用爬山法来掌握特征,这与规则归纳相似。不管怎样,梯度下降是掌握权值的一种好方法。

像贝叶斯网络一样,马尔可夫网络可以通过图表来表示,但它们用无向弧而不用箭头。两个变量被联结起来,这意味着它们会直接相互依赖,如果它们一起出现在某个体征中,例如,“由嘻哈艺术家创作的民歌”中的“民歌”和“由嘻哈艺术家创作”。

马尔可夫网络在许多领域中能起到主要作用,例如,计算机视觉。举个例子,一辆无人驾驶车辆需把看到的每张图片分成道路、天空、村庄三个部分。有一个选择就是根据其颜色,将每个像素标记为三个部分中的一个,但这种选择不够好。图片充满嘈杂因素和变量,车辆会出现幻觉,想象道路旁布满岩石,还有天空中出现的一段段公路。但是我们知道,图片中近似的像素通常属于同一物体,而我们可以引入相应的一组特征:对于每一对相邻像素,如果它们属于相同物体,则特征是真的,否则是假的。现在有大段连续街区公路和天空的图片比没有这些的图片更有可能,并且车会直走,而不是不断左右转向来避开想象中的岩石。

马尔可夫网络可以经过训练,来最大化整个数据的可能性,或者在知道某些信息的情况下,将我们想预测的事情的可能性最大化。对于Siri来说,整个数据的可能性是P(单词、声音),而我们感兴趣的条件可能性是P(单词|声音)。通过优化后者,我们可以忽略P(声音),因为这个概率只会使我们偏离目标。既然我们忽略它,它可以是任意复杂的。这比HMM不切实际的猜想要好得多:声音只依赖于对应的单词,不会受到周围环境的任何影响。实际上,如果Siri的所有关心找出你刚才说的话,可能它甚至就不用担心概率问题了。它只要确保在计算它们特征权值的总和时,正确单词的得分会比错误单词的得分高,而且为了保险,要高出很多。

类推学派用这种推理方式得出其逻辑结论,正如我们在第七章将看到的那样。在21世纪的前10年,他们反过来接管NIPS。现在联结学派打着深度学习的旗号再次占据主导地位。有些人说研究总是处于循环状态,但它更像一个螺旋,闭环沿着前进的方向绕。在机器学习中,螺旋会收敛至终极算法。

逻辑与概率:一对不幸的组合

你可能认为贝叶斯学派和符号学派相处得很好,因为考虑到他们都相信学习的第一原理方法,而不相信自然启发的方法。事实远不是这样,符号学派不喜欢概率,而且会开这样的玩笑:“换个电灯泡需要多少个贝叶斯学者?他们不确定。细想一下,原来他们是不确定灯泡是不是烧坏了。”更严肃地说,符号学派指出我们因为概率而付出的高昂代价。推理突然变得更加珍贵,所有那些数据都变得难以理解,我们得处理好先验概率,一大批“僵尸”假设会永远追着我们。短时间内将分散知识集中起来的能力,对于符号学派来说是多么重要,却已经消失。最糟糕的是,我们不知道如何对自己想学习的很多东西进行概率分配。贝叶斯网络是在变量的一个矢量上的分布,但在网络、数据库、知识库、语言、计划、计算机程序上的分布呢?所有这些在逻辑中都易于处理,而无法掌握它们的算法明显就不是终极算法。

反过来,贝叶斯学派指出了逻辑的脆弱性。如果我有一条规则,如“鸟会飞”,没有哪个世界会存在不会飞的鸟。如果我想补充一下,加上例外条件,例如,“鸟会飞,除非它们是企鹅”,那么这些例外条件永远都说不完(鸵鸟呢?笼中鸟呢?死鸟?断了翅膀的鸟?翅膀湿了的鸟?)。有个医生诊断你得了癌症,而你想听不同的意见。如果第二个医生不同意,你就陷入困境了。你无法权衡这两种观点,只能两个都相信。然后发生了一场灾祸:猪会飞,永恒运动成为可能,而地球则不再存在,因为在逻辑当中,任何事都可以从矛盾中推理出来。再者,如果知识是从数据中掌握得来的,那么我就无法肯定它是对的。为什么符号学派却假装肯定?无疑休谟会对这样漫不经心的态度感到不满。

贝叶斯学派和符号学派一致认为,先验假设不可避免,但对于他们认可的先验知识种类却存在分歧。对于贝叶斯学派来说,知识越过模型的结构和参数,进入先验分布中。原则上,之前的参数可以是任意我们喜欢的值,但讽刺的是,贝叶斯学派趋向于选择信息量不足的先验假设(比如将相同概率分配给所有假设),因为这样更易于计算。在任何情况下,人类都不是很擅长估算概率。对于结构这方面,贝叶斯网络提供直观的方法来整合知识:如果你认为A直接引起B,那么应把箭头从A指向B。但符号学者则要灵活得多:作为先验知识,你可以为自己的学习算法提供任何能用逻辑编码的东西,实际上,所有东西都可以用逻辑编码,只要它是黑白色的。

显然,我们既需要逻辑,也需要概率。治愈癌症就是一个很好的例子。贝叶斯网络可以从单个方面模仿细胞如何起作用,就像基因调节和蛋白质折叠那样,但只有逻辑可以将所有碎片组合到一张连贯的图片中。此外,逻辑无法处理不完整或包含嘈杂因素的信息,这在实验生物学中较普遍,但贝叶斯网络可以沉着地处理这个问题。

贝叶斯学习能对单个数据表起作用,表中的每列表示一个变量(例如,一个基因的表达水平),而每行表示一个实例(例如,一个微阵列实验,包含每个基因被观察到的水平)。如果表格有“漏洞”和测量误差,不要紧,因为我们可以利用概率推理来弥补漏洞,然后对误差取平均值。但如果我们拥有的表格超过一个,那么贝叶斯学习就会停滞不前。例如,它不懂如何将基因表达的数据与DNA片段转译成蛋白质的数据结合起来,也不知道那些三维形状的蛋白质如何反过来使它们锁定到DNA分子的不同部分中,同时影响其他基因的表达。利用逻辑,我们可以轻易地写出与所有这些方面相关的规则,然后通过结合相关表格来对它们进行学习,但唯一的条件就是表格没有任何漏洞或者误差。

将联结学派和进化学派结合起来很简单:只要改善网络结构,利用反向传播来掌握参数。但将逻辑和概率统一起来要困难得多。最早尝试这么做的人是莱布尼茨,他是逻辑和概率的开拓者。还有一些19—20世纪最伟大的哲学家和数学家,比如乔治·布尔和鲁道夫·卡尔纳普,他们都努力想解决这个问题,但最终没有走得很远。最近,计算机科学家和人工智能研究人员加入了这场争论。随着21世纪的到来,我们取得的最好成果也是不完整的,比如将一些逻辑结构加入贝叶斯网络中。多数专家相信,将逻辑和概率相统一是不可能的。寻求一个终极算法的前景并不乐观,特别原因在于,当前进化学派的和联结学派的算法无法处理不完整的信息和多数据组。

幸运的是,我们已经攻克了这个难题,而终极算法现在看起来离我们更近了。在第九章中,我们会看到人类是如何做到这一点的,并做出推断。首先,我们要找到已丢失的那张很重要的拼图:如何学习小数据。在当下数据洪流的背景下,可能这显得没有必要,但实际上我们常常会发现,自己有很多关于要解决问题的数据,而关于其他问题的数据则几乎没有。这是机器学习中最重要的思想之一流行起来的原因:类比思想。到目前为止,我们谈到的所有学派有一个共同点:他们都学习研究中的现象的显式模型,无论它是一组规则、一个多层感知器、一个基因计划,还是一个贝叶斯网络。当他们没有足够的数据来做这件事时,就会被难住。但类比学派可以从甚至小到一个例子的数据中学习,因为他们绝不会形成一种模式。下面,让我们看看他们是怎么做的。