『终极算法』摘抄笔记-贝叶斯学派

『终极算法』摘抄笔记-贝叶斯学派

贝叶斯定理

对于贝叶斯学派来说,学习“仅仅是”贝叶斯定理的另外一个运用,将所有模型当作假设,将数据作为论据:随着你看到的数据越来越多,有些模型会变得越来越有可能性,而有些则相反,直到理想的模型渐渐突出,成为最终的胜者。

假设你半夜在一个陌生的星球上醒来。虽然你能看到的只是繁星闪烁的天空,你有理由相信太阳会在某个时间点升起,因为多数星球会自传并绕着自己的太阳转。所以你估计相应的概率应该会大于1/2(比如说2/3)。我们将其称为太阳会升起来的“先验概率”,因为这发生在看到任何证据之前。“先验概率”的基础并不是数过去这个星球上太阳升起的次数,因为过去你没有看到;它反映的是对于将要发生的事情,你优先相信的东西,这建立在你掌握的宇宙常识之上。但现在星星开始渐渐暗淡,所以你对于太阳会升起的信心越来越强,这建立于你在地球上生存的经历之上。你的这种信心源自“后验概率”,因为这个概率是在看到一些证据后得出的。天空开始渐渐变亮,后验概率又变得更大了

贝叶斯通过以下句子概况了这一点:P(原因|结果)随着P(结果),即结果的先验概率(也就是在原因不明的情况下结果出现的概率)的下降而下降。最终,其他条件不变,一个原因是前验的可能性越大,它该成为后验的可能性就越大。综上所述,贝叶斯定理认为:P(原因|结果)=P(原因)×P(结果|原因)/ P(结果)

贝叶斯定理之所以有用,是因为通常给定原因后,我们就会知道结果,但我们想知道的是已知结果,如何找出原因。例如,我们知道感冒病人发烧的概率,但真正想知道的是,发烧病人患感冒的概率是多少。

贝叶斯定理作为统计学和机器学习的基础,受到计算难题和巨大争论的困扰。你想知道原因也情有可原:这不就是我们之前在感冒的例子中看到的那样,贝叶斯定理是由条件概率概念得出的直接结果吗?的确,公式本身没有什么问题。争议在于相信贝叶斯定理的人怎么知道推导该定理的各个概率,以及那些概率的含义是什么。对于多数统计学家来说,估算概率的唯一有效方法就是计算相应事件发生的频率。例如,感冒的概率是0.2,因为被观察的100名病人中,有20名发烧了。这是“频率论”对于概率的解释,统计学中占据主导地位的学派就是由此来命名的。但请注意,在日出的例子以及拉普拉斯的无差别原则中,我们会做点不一样的事:千方百计找到方法算出概率。到底有什么正当的理由,能够假设太阳升起的概率是1/2、2/3,或者别的呢?

然而,贝叶斯学派眼中的概率。概率并非频率,而是一种主观程度上的信任。因此,用概率来做什么由你决定,而贝叶斯推理让你做的事就是:通过新证据来修正你之前相信的东西,得到后来相信的东西(也被称为“转动贝叶斯手柄”)。

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

随着变量的增加,如果有20种症状和1万个病人就会遇到之前提到过的组合爆照问题。因此我们会做简化的假设来减少概率的数量,这些概率的数量由我们估算而来,且我们可以掌控。一个很简单且受人追捧的假设就是,在给定原因的情况下,所有的结果都相互独立。如果我们想直接估算P(感冒|发烧、咳嗽等),假如不利用定理先将其转化成P(发烧、咳嗽等|感冒),那么我们就还需要指数数量的概率,每个组合的症状以及感冒或非感冒都有一个概率。

如果学习算法利用贝叶斯定理,且给定原因时,假定结果相互独立,那么该学习算法被称为“朴素贝叶斯分类器”。

统计学家乔治·博克斯说的一句很有名的话:“所有的模型都是错的,但有些却有用。”虽然一个模型过于简化,但你有足够的数据用来估算那就比没有数据的完美模型要好。令人诧异的是,有些模型错误百出,同时又很有用。经济学家弥尔顿·弗里德曼甚至在一篇很有影响力的文章中提出,最有说服力的理论往往受到最大程度的简化,只要这些理论所做的预测是准确的,因为它们用最简洁的方法解释最复杂的问题。

马尔科夫链

1913年第一次世界大战前夕,俄国数学家安德烈·马尔可夫发表了一篇文章,将所有事情的概率运用到诗歌当中。诗中,他模仿俄国文学的经典:普希金的《尤金·奥涅金》,运用了当今我们所说的“马尔可夫链”。他没有假定每个字母都是随机产生的,与剩下的毫无关联,而是最低限度引入了顺序结构:每个字母出现的概率由在它之前、与它紧接的字母来决定

例如元音和辅音常常会交替出现,所以如果你看到一个辅音,那么下一个字母(忽略发音和空格)很有可能就是元音,但如果字母之间互相独立,出现元音的可能性就不会那么大。这可能看起来微不足道,但在计算机发明出来之前的年代,这需要花费数小时来数文字,而马尔可夫的观点在当时则很新颖。如果元音i是一个布尔型变量,《尤金·奥涅金》的第i个字母是元音,则该变量为真,如果它是一个辅音则为假。

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

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

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

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

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

贝叶斯网络:推理问题

马尔可夫链隐含这样的猜想:考虑到现在,未来会有条件地独立于过去。此外,HMM假设每个观察值只依赖于对应的状态。贝叶斯网络对贝叶斯学派来说,就像逻辑与符号学者的关系:一种通用语,可以让我们很好地对各式各样的情形进行编码,然后设计出与这些情形相一致的算法。我们可以把贝叶斯网络想成“生成模型”,即从概率的角度,形成世界状态的方法:首先要决定盗窃案或地震是否会发生,然后在此基础上决定报警器是否会响起,再次在此基础上决定鲍勃和克莱尔是否会打电话。贝叶斯网络讲述这样的故事:A发生了,接着它导致B的发生;同时,C也发生了,而B和C共同引起D的发生。为了计算特定事件的概率,我们只需将与之相关事件的概率相乘即可。

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

语音识别的方法: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”。

然而,最受人青睐的选择就是借酒浇愁,喝得酩酊大醉,然后整夜都在跌跌撞撞。该选择的技术术语为“马尔可夫链蒙特卡洛理论”(Markov chain Monte Carlo,MCMC):有“蒙特卡洛”这个部分,是因为这个方法涉及机遇,比如到同名的赌场去,有“马尔可夫链”部分,是因为它涉及采取一系列措施,每个措施只能依赖于前一个措施。MCMC中的思想就是随便走走,就像众所周知的醉汉那样,以这样的方式从网络的这个状态跳到另一个状态。这样长期下来,每个状态受访的次数就与它的概率成正比。人们在谈论MCMC时,往往把它当作一种模拟,但它其实不是:马尔可夫链不会模仿任何真实的程序,我们将其创造出来,目的是为了从贝叶斯网络中有效生成样本,因为贝叶斯网络本身就不是序变模式。

对于贝叶斯学派来说,知识越过模型的结构和参数,进入先验分布中。原则上,之前的参数可以是任意我们喜欢的值,但讽刺的是,贝叶斯学派趋向于选择信息量不足的先验假设(比如将相同概率分配给所有假设),因为这样更易于计算。在任何情况下,人类都不是很擅长估算概率。对于结构这方面,贝叶斯网络提供直观的方法来整合知识:如果你认为A直接引起B,那么应把箭头从A指向B。

在生物信息中,贝叶斯学习能对单个数据表起作用,表中的每列表示一个变量(例如,一个基因的表达水平),而每行表示一个实例(例如,一个微阵列实验,包含每个基因被观察到的水平)。


本文作者:思考问题的熊

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×