Good if make prior after data instead of before

Dynomight

先看了資料再下先驗,反而比較好

原文由 Dynomight 發布,訂閱此部落格

大家都說,你應該要事先選好你的先驗。這就是為什麼它會被叫做「先驗」。你應該要說清楚各種情況各自有多合理,然後再根據你在世界上看到的東西來更新你的信念。

舉例來說,我猜你現在——正在猶豫要不要別再讀這篇文章、去做點別的更有意義的事。如果你以前讀過這個部落格,那你心裡某個角落一定有個先驗,關於我的文章有多常是好看的。姑且假設你覺得我有 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]。或許,拒絕這個結論只是代表我有些個人問題需要處理。

我否認這種解釋。我否認!或者,至少我否認那是思考這個情況最有幫助的方式。為了說明原因,我們來建第二個模型。

更多的外星人

這裡有個看似瑣碎卻很重要的觀察:「有外星人」並不是單一的一種情況。可能有毛茸茸的外星人、黏答答的外星人、喜歡 synthwave 音樂的外星人,等等。當我陳述我的先驗時,我本來可以給每一種情況不同的機率。但就算我那樣做,也不會改變任何事,因為沒有理由認為毛茸茸跟黏答答的外星人,在想不想跑來猩猩星球、用違反物理的方式開著 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 aliensno 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 peopleweird 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% 的機率有外星人。第一個先驗並沒有,它只是比第二個不那麼詳細而已。

這很奇怪,因為第二個先驗似乎導致了完全不同的預測。如果先驗沒有錯、數學也沒有錯,那你的答案不應該也是沒錯的嗎?到底是怎麼回事?

簡單的解釋是,我對你撒了一點小謊。想想任何一個你要判斷真相的情況。那裡都會有一個可能為真的事物的空間。

在某些情況下,這個空間是有限的。如果你有一顆氚原子,等了一年,它要嘛衰變了,要嘛沒有。但在大多數情況下,可能性空間是很大、甚至無限的。你不會只是「生病」或「沒生病」,你可能是「發燒但精神很好」或「看起來沒事但一直狂吃洋蔥」。

(通常,可能為真的事物空間不容易被對應到一條小小的一維區間上。我這樣畫只是為了方便視覺化,但實際上你應該把它想成某個高維空間,甚至是無限維的空間。)

以外星人的例子來說,可能為真的事物空間可能包含「有很多黏答答的外星人和少數毛茸茸的外星人,而且黏答答的外星人非常害羞,毛茸茸的外星人很怕松鼠」這種情況。所以,原則上,你應該要做的,是把可能為真的事物空間切成一大堆極為細節的情況,並給每一種一個機率。

通常,可能為真的事物空間是無限的。所以理論上,如果你真的想照規矩來,你真正應該做的,是具體說明那(無限)多種可能性中每一種有多合理。

做完那件事之後,你才能去看資料。對於每一種可能為真的情況,你都要去想資料出現的機率。既然可能為真的情況有無限多種,那你就需要指定無限多個機率。你可以把它想像成像這樣的一條曲線:

(那是一條通用的曲線,不是專門畫給外星人的。)

對我來說,這是把貝氏推理應用到複雜現實世界時最被低估的問題:在實務上,可能為真的事物有無限多種。要為無限多種事物一一指定先驗機率,是非常浩大的工程。而要為無限多種事物一一指定在它們成立下資料出現的概似,也同樣浩大。

那在實務上我們怎麼做?我們會簡化,通常是把可能為真的事物空間分組、歸納成少數幾個離散的類別。以上面的曲線為例,你可能會把它切成這四種機率相等的可能性。

然後你可能會為這幾種可能性各自估計資料出現的機率。

接著你就可以把那些放在一起,得到這樣的後驗:

這樣不算差。但它就只是個近似值。你「真正」的後驗機率對應的是這些面積:

那個近似值還算不錯。但它之所以不錯,是因為我們一開始就對可能為真的事物空間做了很好的離散化:那是一種讓資料的概似在 ABCD 各自內部的不同可能性之間不會變化太多的切法。想像一下,如果你有辦法把所有無限多種可能性一一想過,資料的概似看起來像這樣:

這就危險了。問題在於,你實際上沒辦法把所有無限多種可能性都想過。當你只想到四種離散的可能性時,你可能會估出一個看起來像這樣的概似:

如果你那樣做,就會導致你低估 ABC 的機率,而高估 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。所以我也永遠不會預料到,我應該要有基於「人類有多容易幻覺出證據」或「外星人有多喜歡捉弄我們」來分的類別。所以,要得到好結果唯一務實的做法,就是看資料、弄清楚哪些分類是重要的,然後再問自己,如果還沒看到任何證據時,你本來會說那些分類有多可能。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言