先验在看到数据之后再定,反而更好
常听人说,先验就该事先定好。之所以叫“先验”,就是这个道理。首先,你得说明各种情况各自有多大可能,然后再根据你在现实世界中观察到的东西来更新信念。
举个例子,我猜你现在正在纠结,要不要关掉这篇文章去干点别的正事。如果你以前读过这个博客,你心里大概已经对我的文章质量有个先验判断——也就是觉得我的文章多久能有一篇写得不错。为了便于讨论,不妨假设你觉得我25%的文章又好笑又有洞见,75%的文章则无聊透顶、一文不值。
好吧。但此刻你正在读这些字。如果它们看起来很糟/还不错,那就分别提高了这篇文章不值得看/值得看的概率。再作一个假设:你觉得这几句话还算有点希望,也就是说,一篇好文章出现这种水准文字的可能性,是一篇烂文章的1.5倍。
把这两个假设结合起来,就意味着这篇文章是好文章的概率是33.3%。之所以如此,是因为下图中红色矩形的面积是蓝色矩形的一半,因此这篇文章是好文章的概率应该是烂文章概率的一半(33.3%对66.6%)。
(为什么是一半的面积?因为红色矩形的宽度是蓝色矩形的⅓,高度是³⁄₂,而⅓ × ³⁄₂ = ½。如果你只信公式,点击这里看公式。)
最容易算的是这篇文章是好文章相对于烂文章的概率比,也就是
P[good | words] / P[bad | words]
= P[good, words] / P[bad, words]
= (P[good] × P[words | good])
/ (P[bad] × P[words | bad])
= (0.25 × 1.5) / (0.75 × 1)
= 0.5.由此可得
P[good | words] = 0.5 × P[bad | words],进而可得
P[good | words] = 1/3.或者,如果你非要用贝叶斯公式:
P[good | words]
= P[good] × P[words | good] / P[words]
= P[good] × P[words | good]
/ (P[good] × P[words | good] + P[bad] × P[words | bad])
= 0.25 × 1.5 / (0.25 × 1.5 + 0.75)
= (1/3)理论上,当你把先验定为 dynomight 的文章有25%是好文章时,这应该反映的是你在读这篇文章之前一生中遇到的所有信息。基于这篇文章里的信息去改动这个数字是没有意义的,因为这些信息本应在第二步——也就是你设定似然 p[good | words] 时——得到体现。基于这篇文章去改先验,就相当于“重复计算”。
理论上,这么说是没错的。对于上面的例子,以及教科书里那些可爱的小例子,在实践中也没错。
但对于真正的问题,我越来越确信,看过数据后还拒绝修改先验,往往会酿成悲剧。原因在于,在真实问题里,事情很少只是“好”或“坏”、“真”或“假”。相反,真相有无穷多种形态。而在看到数据之前,你往往无法预判其中哪些形态是重要的。
外星人
我来说明一下我的意思。假设你在想地球上是否有外星人。就我们所知,没有理由认为外星人不该在别的星球上从分子的随机搅动中演化出来,发展出科技文明,造出飞船,然后来到这里。所以,设定一个认为有外星人和没有外星人各占一半可能性的先验,似乎是合理的,也就是说
P[aliens] ≈ P[no aliens] ≈ 50%.与此同时,在我们真实的世界里,有大量诡异的、像是外星人留下的证据,比如Gimbal 视频、Go Fast 视频、FLIR1 视频、Wow! 信号、政府关于不明空中现象的报告,以及大量飞行员报告看到“tic-tac”以物理上不可能的方式飞来飞去。把这些东西统称为 data。如果外星人不在这里,那这些东西似乎就很难解释。所以 P[data | no aliens] 应该是个很小的数。
另一方面,如果外星人真的在这里,那为什么我们从来得不到一张清晰的照片?为什么总是没完没了的混乱报告、传闻和颗粒感的模糊视频,却从来没有一段清晰的近距离高清视频,也从来没有哪个普通人在地上捡到过外星残骸?如果外星人真的在这里,这同样很难解释。所以我觉得 P[data | aliens] 也应该是个很小的数。为了简单起见,我们就当两者抵消,假设
P[data | no aliens] ≈ P[data | aliens].既然先验和数据都看不出有外星人和没有外星人之间有什么区别,后验概率就是
P[no aliens | data] ≈ P[aliens | data] ≈ 50%.看出问题了吗?
(点击这里看计算过程。)
注意到
P[aliens | data] / P[no aliens | data]
= P[aliens, data] / P[no aliens, data]
= (P[aliens] × P[data | aliens])
/ (P[no aliens] × P[data | no aliens])
≈ 1,其中最后一行是因为 P[aliens] ≈ P[no aliens] 且 P[data | aliens] ≈ P[data | no aliens]。于是我们得到
P[aliens | data] ≈ P[no aliens | data] ≈ 50%.我们是朋友,彼此尊重。所以别去争论我的初始假设好不好。那是我的假设,我喜欢它们。可最终的结论在我看来却荒谬至极。到底哪里出了问题?
假设我没有算错数学(我没算错),最显而易见的解释就是,我因为采纳了一套相互矛盾的信念而产生了认知失调。打个比方,你声称 Alice 比 Bob 高,Bob 比 Carlos 高,却否认 Alice 比 Carlos 高。如果这样,那就说明你糊涂了,而不是你发现了什么有趣的悖论。
也许如果我相信 P[aliens] ≈ P[no aliens] 并且相信 P[data | aliens] ≈ P[data | no aliens],那我就必须接受 P[aliens | data] ≈ P[no aliens | data]。也许拒绝这个结论只是说明我个人有些问题需要解决。
我否认这种解释。我就是否认!或者说,至少我否认这是思考这个问题的最有帮助的方式。为了明白为什么,我们来建第二个模型。
再谈外星人
这里有个看似平凡却很重要的观察:“有外星人”并不是单一的一件事。可能是毛茸茸的外星人、黏糊糊的外星人、喜欢合成器浪潮音乐的外星人,等等。当我陈述先验时,我本可以给每种情况赋予不同的概率。但就算我那么做了,也不会改变什么,因为没有理由认为毛茸茸和黏糊糊的外星人在想来猿类星球、开着物理上不可能的 tic-tac 到处飞这件事上的积极性会有什么不同。
但假设我把世界的状态划分成以下四种可能性:
| 可能性 | 描述 |
|---|---|
No aliens + normal people | 没有外星人。同时,人类很正常,并不会为不存在的东西幻觉出证据。 |
No aliens + weird people | 没有外星人。同时,人类很古怪,确实会为不存在的东西幻觉出证据。 |
Normal aliens | 有外星人。他们可能有也可能没有炫酷的飞船、喜不喜欢拿激光枪射人。但不管怎样,他们会留下明显、无可辩驳的证据来证明他们就在附近。 |
Weird aliens | 有外星人。但他们会一直躲起来,直到人类开始对太空旅行产生兴趣。之后,他们会让人类拍到模糊不清的颗粒状视频,但永远、永远不会让人类拍到哪怕一段清晰的视频,一段都没有。 |
如果我那样来划分,我可能会选择这样的先验:
P[no aliens + normal people] ≈ 41%
P[no aliens + weird people] ≈ 9%
P[normal aliens] ≈ 49%
P[weird aliens] ≈ 1%现在,我们再来想想这些经验证据。它与 no aliens + normal people 不相容,因为如果没有外星人,正常的人类是不会幻觉出会飞的 tic-tac 的。这些证据也与 normal aliens 不相容,因为如果是那种外星人在,他们会让自己的存在变得显而易见。然而,这些证据与 weird aliens 以及 no aliens + weird people 都相当吻合。
所以,一个合理的模型会是
P[data | normal aliens] ≈ 0
P[data | no aliens + normal people] ≈ 0
P[data | weird aliens] ≈ P[data | no aliens + weird people].如果把这些假设结合起来,现在得到的外星人存在的后验概率只有10%。
P[no aliens + normal people | data] ≈ 0
P[no aliens + weird people | data] ≈ 90%
P[normal aliens | data] ≈ 0
P[weird aliens | data] ≈ 10%现在结果看起来就不那么荒谬了。
(计算过程)
要明白为什么,首先注意到
P[normal aliens | data]
≈ P[data | no aliens + normal people]
≈ 0,因为 normal aliens 和 no aliens + normal people 产生观测数据的概率都接近于零。
与此同时,
P[no aliens + weird people | data] / P[weird aliens | data]
= P[no aliens + weird people, data] / P[weird aliens, data]
≈ P[no aliens + weird people] / P[weird aliens]
≈ .09 / .01
= 9,其中第二个等号是因为假设数据在 no aliens + weird people 和 weird people 下出现的可能性相等
由此可得
P[no aliens + normal people | data]
≈ 9 × P[weird aliens | data],所以
P[no aliens + weird people | data] ≈ 90%
P[weird aliens | data] ≈ 10%.哈?
我希望你现在感到困惑了。如果还没有,让我来点明奇怪之处:上面两个模型的先验都说外星人存在的概率是50%。第一个先验并没有错,它只是没有第二个那么细致。
这就很奇怪了,因为第二个先验似乎导向了完全不同的预测。如果先验没错,数学也没错,那答案不也应该没错吗?到底怎么回事?
简单的解释是,我之前对你稍微撒了点谎。设想任何一种你要判断某事真假的情形。此时都存在一个可能为真的事物的空间。
在某些情况下,这个空间是有限的。如果你有一个氚原子,等上一年,它要么衰变,要么不衰变。但在大多数情况下,可能性的空间是巨大甚至无限的。你不只是“生病”或“没生病”,你可能是“发烧但精神不错”,也可能是“看起来没事,就是不停地吃洋葱”。
(通常,可能为真的事物空间并不容易映射到一个小小的一维区间上。我这么画只是为了便于可视化,但实际上你应该把它想象成一个高维空间,甚至是无限维空间。)
就外星人这件事而言,可能为真的事物空间可能包括:“有很多黏糊糊的外星人和少量毛茸茸的外星人,而且黏糊糊的外星人非常害羞,毛茸茸的外星人则害怕松鼠。”所以,原则上,你应该做的是把可能为真的事物空间划分成大量极其细致的情形,并给每一种都赋予一个概率。
很多时候,可能为真的事物空间是无限的。所以理论上,如果你真的想按规矩办事,你真正应该做的是指明这(无限)多种可能性中每一种有多大可能。
完成这一步后,你就可以看数据了。对于每一种可能为真的情形,你都需要考虑数据的概率。由于可能为真的情形有无限多种,这意味着你需要指定无限多个概率。你可以把它想象成这样一条曲线:
(这是一条示意曲线,不是针对外星人的。)
在我看来,这是把贝叶斯推理应用于复杂现实问题时最被低估的难题:在实践中,可能为真的事物有无限多种。要为无限多种事物逐一指定先验概率,工作量巨大。而要为无限多种事物逐一指定数据的似然,工作量同样巨大。
那么实践中我们怎么做?我们会做简化,通常是把可能为真的事物空间归并成少数几个离散的类别。对于上面那条曲线,你可能会把它划分成这样四种等可能性的情形。
然后你可能会为这些可能性分别估计数据的概率。
接着你就可以把它们结合起来,得到这样的后验:
这还不赖。但这只是一个近似。你“真实”的后验概率对应的是这些面积:
这个近似相当不错。但它之所以不错,原因在于我们一开始就对可能为真的事物空间做了一个很好的离散化:在 A、B、C 和 D 各自内部,数据的似然没有太大变化。设想一下,如果你能把所有无限多种可能性逐一考虑,数据的似然看起来是这样的:
这就很危险了。问题在于,你实际上无法把所有那些无限的可能性都想一遍。当你只考虑四个离散的可能性时,你可能会估计出一个看起来像这样的似然:
如果你那样做,就会低估 A、B 和 C 的概率,而高估 D 的概率。
我的第一个外星人模型就是在这里出了问题。我的先验 P[aliens] 并没有错。(至少对我而言没有。)错误在于给 P[data | aliens] 和 P[data | no aliens] 赋了相同的值。诚然,我觉得我们那些像外星人证据的数据,在有外星人和没有外星人的情况下出现的可能性是相等的。但那只对某些种类的外星人和某些种类的没有外星人的情况才成立。而我对那些种类的外星人的先验,远低于对那些种类的非外星人情况的先验。
从技术上讲,修正第一个模型很简单:把 P[data | aliens] 调低就行。但它之所以要调低,原因在于我有一些额外的先验信息忘了放进最初的先验里。如果我只是断言 P[data | aliens] 远低于 P[data | no aliens],那整个形式化的贝叶斯流程其实没起到多大作用——我还不如直接说我认为 P[aliens | data] 很低。要想形式化地论证为什么 P[data | aliens] 应该更低,就需要一个繁琐的递归过程:先把那些遗漏的先验信息补进去,然后在计算数据似然时再把它积分掉。
(计算过程)
数学上,
P[data | aliens]
= ∫ P[wierd aliens | aliens]
× P[data | wierd aliens] d(weird aliens)
+ ∫ P[normal aliens | aliens]
× P[data | normal aliens] d(normal aliens).但现在我不管怎样都得给出一个细致的先验了。那一开始用一个简单的先验还有什么意义呢?
我不觉得那个技术性的修正有多好。虽然它在技术上是正确的(哈哈),但非常不直观。更好的解决方法是我在第二个模型里做的那样:对可能为真的事物空间做更细的划分,使得每一项对应的数据概率都大致保持不变。
问题在于:这样的划分依赖于数据。如果没有看到我们这个世界里的实际数据,我永远也不会预料到会有那么多飞行员报告看到 tic-tac。所以我也永远不会预料到,我应该设立基于“人类在多大程度上会幻觉出证据”或“外星人有多喜欢捉弄我们”的类别。因此,要想在实践中得到好的结果,唯一可行的方法是先看数据,弄清楚哪些类别是重要的,然后再问自己:如果还没看到任何证据,你本来会觉得这些类别有多大可能。
随机一篇博客
评论
登录后参与讨论