JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

馬可夫鏈蒙地卡羅:對棘手分布抽樣

樸素的蒙地卡羅要求你能直接從某個分布抽樣——但貝氏後驗通常只能寫到差一個未知常數的形狀。MCMC 的巧思是:打造一條馬可夫鏈,讓它長遠的遊走恰好以你想要的比例造訪各個狀態,於是這條鏈本身就成了你的抽樣器。

樸素蒙地卡羅撞上的牆

上一篇展示了蒙地卡羅如何把困難的積分與機率,化為可由抽樣平均來估計的東西:若你能從某分布抽出 X1, X2, ..., Xn,則 E[f(X)] 約等於 f(Xi) 的平均,而大數法則(其樸素的獨立同分布版本)讓這個平均收斂。但請留意那條藏在明處的隱含假設:*你一開始得抽得出樣本*。對常態或指數分布,沒問題——反轉換法或某個巧妙的配方能隨叫隨到地給你抽樣。麻煩在於:當你關心的分布,是你只能描述、卻無法抽樣的那一種。

本級第一篇談的貝氏推論,交給你的正是這種分布。後驗為 P(theta given data) = P(data given theta) P(theta) / P(data),而分母 P(data)——證據——是對 theta 所有取值的積分,通常無法寫出封閉解。所以後驗的*形狀*你完全清楚:它正比於概似乘以先驗。你不知道的,只是讓它積分為 1 的那個歸一化常數。寫 q(theta) = P(data given theta) P(theta),則後驗 = q(theta) / Z,而 Z 未知。當你連一條曲線底下有多少面積都量不出來時,又該如何從這條曲線抽樣?

核心構想:打造一條落腳在你想要之處的鏈

這裡 MCMC 向馬可夫鏈那一級借了招。回想:一條行為良好的馬可夫鏈——不可約且非週期——有唯一的平穩分布 pi,即 pi P = pi 的解,而且鏈會忘記出發點、安定於 pi:長遠來看,停留在各狀態的時間比例恰好等於 pi。MCMC 把這個事實倒過來用。不是給你一條鏈、要你找平穩分布,而是給你想要的分布(後驗)、要你*設計一條以該目標為平穩分布的鏈*。然後只要讓鏈跑起來,讀出它走到哪裡即可。

一旦這樣的鏈存在,跑一趟就給你一條長軌跡 theta_1, theta_2, theta_3, ...,而在最初的暖機(burn-in)段(仍被任意起點汙染的早期步)之後,其餘狀態就等同於來自後驗的樣本。它們並不獨立——每一步都由前一步推移而來——但馬可夫鏈版本的大數法則,即遍歷定理,保證沿軌跡的時間平均仍收斂到真正的後驗期望 E[f(theta)]。所以蒙地卡羅式的估計一如既往地有效;我們只是把獨立抽樣換成了相依、但分布正確的遊走。

細緻平衡:工程師的捷徑

如何設計一條鏈使其擁有指定的平穩分布?直接對 P 解 pi P = pi 是無望的——那是一條方程式對上整個矩陣的未知數。訣竅是一個更強、卻好安排得多的條件,叫細緻平衡:若對每一對狀態都有 pi(x) P(x to y) = pi(y) P(y to x),鏈就滿足它。用白話說,在平衡時從 x 流向 y 的機率流,恰好被從 y 流回 x 的機率流抵消——這條鏈是*可逆的*。細緻平衡是 pi 為平穩分布的充分(而非必要)條件:把細緻平衡對所有 x 求和,pi P = pi 就免費掉出來了。

而這裡正是化解我們歸一化常數難題的回報。細緻平衡只透過 pi 的*比值* pi(y) / pi(x) 來牽涉 pi。既然後驗是 q(theta) / Z、分子分母帶著同一個未知 Z,這個 Z 就消掉了:pi(y) / pi(x) = q(y) / q(x)。我們從頭到尾都不需要 Z。整個設計只需在差一個常數的意義下知道目標即可——而對貝氏後驗來說,這恰恰就是我們手上僅有的。細緻平衡正是讓 MCMC 得以完全繞過那個棘手的證據積分的東西。

Detailed balance:   pi(x) P(x->y) = pi(y) P(y->x)

Sum over x:         sum_x pi(x) P(x->y) = pi(y) sum_x P(y->x)
                                        = pi(y) * 1
  =>  (pi P)(y) = pi(y)    for every y      i.e.   pi P = pi

Key:  pi appears only as the ratio  pi(y)/pi(x)  =  q(y)/q(x)
      so the unknown normalizer Z in pi = q/Z cancels.
細緻平衡蘊含平穩性,且只透過比值依賴目標分布——所以 Z 消去。

Metropolis-Hastings:先提議,再接受或拒絕

Metropolis-Hastings 演算法是一道配方,能用幾乎任何你喜歡的提議來打造一條滿足細緻平衡的鏈。你提供一個提議分布 g(y given x),在當前狀態 x 之下建議一個候選的下一狀態 y——例如「把當前的 theta 以一個小小的常態步抖動」。接著你以一個精心挑選的機率接受或拒絕該候選,而這個接受步驟正是把動態調整到讓你的目標滿足細緻平衡的關鍵。妙處在於:彆扭的提議可以是任何合理的東西;接受規則會在其後收拾妥當。

  1. 從任意處出發:在參數空間裡挑一個起始 theta_0(粗略的猜測即可)。
  2. 提議候選 y,由 g(y given current x) 抽出——例如在 x 周圍的一小步常態跳躍。
  3. 計算接受比 a = min(1, [q(y) g(x given y)] / [q(x) g(y given x)])。注意 q 只以比值出現,故 Z 消去。
  4. 抽一個 [0,1] 上的均勻 u:若 u < a,移動到 y(接受);否則停在 x(拒絕),並再次記錄 x。
  5. 重複許多步;丟棄暖機段,再把保留下來的狀態當作後驗樣本。

當提議對稱時——g(y given x) = g(x given y),常態抖動正是如此——g 項相消,比值化簡為原始的 Metropolis 形式 a = min(1, q(y) / q(x))。直白地讀:若候選的目標密度較高,一律接受;若較低,則以等於密度比的機率接受。於是鏈會熱切地往高機率區域爬升,但仍時不時地往下踏一步——而這份偶爾往下走的意願,正是讓它不致卡在單一山峰、得以勾勒出*整個*後驗的關鍵。一個實務調校要點:步長極為要緊。步子太大幾乎總被拒絕(鏈凍結);步子太小總被接受卻爬得極慢(高相關)。一條經驗法則是把接受率瞄準在大約 20% 到 50% 的範圍。

吉布斯抽樣:當你能一次處理一個座標

許多真實模型有好幾個參數——比方 theta = (a, b, c)——而即使聯合後驗棘手難解,每個參數在給定其餘所有參數下的*條件*分布,卻往往能直接抽樣(常常是因為該條件恰好化為熟悉的共軛形式)。吉布斯抽樣器正是利用這一點。它一次掃過一個座標,在固定其餘的同時,依各自的完整條件重抽:由 P(a given b, c) 抽 a_new,再由 P(b given a_new, c) 抽 b_new,再由 P(c given a_new, b_new) 抽 c_new,如此循環。不必調校、沒有拒絕——每個提議都被接受,因為吉布斯其實是 Metropolis-Hastings 的特例,其接受機率恆等於 1。

當條件分布好抽時,吉布斯出奇地俐落,這也是它推動了早期許多應用貝氏工作的原因。但它有一個值得誠實點名的真實弱點:當參數在後驗中強烈相關時,一次只更新一個座標,會迫使鏈沿著一道狹窄的對角脊線,以微小的、貼著座標軸的步伐挪動,因而混合得痛苦地慢。在那些普遍的頭痛問題上同樣沒有免費午餐:如同所有 MCMC,吉布斯與 Metropolis-Hastings 都可能收斂緩慢、都可能在多峰後驗中被騙過、漏掉一個遠方的眾數,也都需要真正的診斷——從不同起點跑好幾條鏈、檢查它們彼此一致——你才能信任輸出。在極限上正確,並不等於在你真正跑過的那一趟之後正確。