概率论只不过是把常识用数学公式表达了出来。
——拉普拉斯
记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时;有一次,在书店看到一本书,名叫《贝叶斯方法》。当时数学系的课程还没有学到概率统计。我心想,一个方法能够专门写出一本书来,肯定很牛逼。后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛的方法。
前言
这是一篇关于贝叶斯方法的科普文,我会尽量少用公式,多用平白的语言叙述,多举实际例子。更严格的公式和计算我会在相应的地方注明参考资料。贝叶斯方法被证明是非常具有一般性且强大的推理框架,文中你会看到很多有趣的应用。
历史
托马斯·贝叶斯(Thomas Bayes)同学的详细生平在 这里 。以下摘一段wikipedia上的简介:
所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测?”这个问题,就是所谓的逆概问题。
实际上,贝叶斯当时的论文只是对这个问题的一个直接的求解尝试,并不清楚他当时是不是已经意识到这里面包含着的深刻的思想。然而后来,贝叶斯方法席卷了概率论,并将应用延伸到各个问题领域,所有需要作出概率预测的地方都可以见到贝叶斯方法的影子,特别地,贝叶斯是机器学习的核心方法之一。这背后的深刻原因在于,现实世界本身就是不确定的,人类的观察能力是有局限性的(否则有很大一部分科学就没有必要做了——设想我们能够直接观察到电子的运行,还需要对原子模型争吵不休吗?),我们日常所观察到的只是事物表面上的结果,沿用刚才那个袋子里面取球的比方,我们往往只能知道从里面取出来的球是什么颜色,而并不能直接看到袋子里面实际的情况。这个时候,我们就需要提供一个猜测(hypothesis,更为严格的说法是“假设”,这里用“猜测”更通俗易懂一点),所谓猜测,当然就是不确定的(很可能有好多种乃至无数种猜测都能满足目前的观测),但也绝对不是两眼一抹黑瞎蒙——具体地说,我们需要做两件事情: 1.算出各种不同猜测的可能性大小。2.算出最靠谱的猜测是什么。 第一个就是计算特定猜测的后验概率,对于连续的猜测空间则是计算猜测的概率密度函数。第二个则是所谓的 模型比较 ,模型比较如果不考虑先验概率的话就是最大似然方法。
一个例子:自然语言的二义性 。下面举一个自然语言的不确定性的例子。当你看到这句话:
The girl saw the boy with a telescope.
你对这句话的含义有什么猜测?平常人肯定会说:那个女孩拿望远镜看见了那个男孩(即你对这个句子背后的实际语法结构的猜测是:The girl saw-with-a-telescope the boy)。然而,仔细一想,你会发现这个句子完全可以解释成:那个女孩看见了那个拿着望远镜的男孩(即:The girl saw the-boy-with-a-telescope)。那为什么平常生活中我们每个人都能够迅速地对这种二义性进行消解呢?这背后到底隐藏着什么样的思维法则?我们留到后面解释。
贝叶斯公式 。贝叶斯公式是怎么来的?我们还是使用wikipedia上的一个例子:
一所学校里面有60%的男生,40%的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算“随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多大”,这个就是前面说的“正向概率”的计算。然而,假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?
一些认知科学的研究表明(《决策与判断》以及《 Rationality for Mortals 》第12章:小孩也可以解决贝叶斯问题),我们对形式化的贝叶斯问题不擅长,但对于以频率形式呈现的等价问题却很擅长。在这里,我们不妨把问题重新叙述成:你在校园里面 随机游走 ,遇到了N个穿长裤的人(仍然假设你无法直接观察到他们的性别),问这N个人里面有多少个女生多少个男生。
你说,这还不简单:算出学校里面有多少穿长裤的,然后在这些人里面再算出有多少女生,不就行了?
我们来算一算:假设学校里面人的总数是U个。60%的男生都穿长裤,于是我们得到了U*P(Boy)*P(Pants|Boy)个穿长裤的(男生)(其中P(Boy)是男生的概率=60%,这里可以简单的理解为男生的比例;P(Pants|Boy)是条件概率,即在Boy这个条件下穿长裤的概率是多大,这里是100%,因为所有男生都穿长裤)。40%的女生里面又有一半(50%)是穿长裤的,于是我们又得到了U*P(Girl)*P(Pants|Girl)个穿长裤的(女生)。加起来一共是 U*P(Boy)*P(Pants|Boy)+U*P(Girl)*P(Pants|Girl)个穿长裤的,其中有U*P(Girl)*P(Pants|Girl)个女生。两者一比就是你要求的答案。
下面我们把这个答案形式化一下:我们要求的是P(Girl|Pants)(穿长裤的人里面有多少女生),我们计算的结果是U*P(Girl)* P(Pants|Girl)/[U*P(Boy)*P(Pants|Boy)+U*P(Girl)*P(Pants|Girl)]。容易发现这里校园内人的总数是无关的,可以消去。于是得到
P(Girl|Pants)=P(Girl)*P(Pants|Girl)/[P(Boy)*P(Pants|Boy)+P(Girl)*P(Pants|Girl)]
注意,如果把上式收缩起来,分母其实就是P(Pants),分子其实就是P(Pants,Girl)。而这个比例很自然地就读作:在穿长裤的人(P(Pants))里面有多少(穿长裤)的女孩(P(Pants,Girl))。
上式中的Pants和Boy/Girl可以指代一切东西,所以其一般形式就是:
P(B|A)=P(A|B)*P(B)/[P(A|B)*P(B)+P(A|~B)*P(~B)]
收缩起来就是:
P(B|A)=P(AB)/P(A)
其实这个就等于:
P(B|A)*P(A)=P(AB)
难怪拉普拉斯说 概率论只是把常识用数学公式表达了出来 。
然而,后面我们会逐渐发现,看似这么平凡的贝叶斯公式,背后却隐含着非常深刻的原理。
(待续;此文的修订版已收录《暗时间》一书,由电子工业出版社2011年8月出版。作者于2009年7月获得南京大学计算机系硕士学位,现在微软亚洲研究院创新工程中心从事软件研发工程师工作。)