應用:貝氏推論、資訊與模擬

蒙地卡羅模擬(Monte Carlo simulation)

/ MON-tay KAR-loh /

假設你想要一個無法用公式算出的數字——一個奇形怪狀區域的面積、一個難算積分的值、一個複雜系統失效的機率。蒙地卡羅模擬說:別再試著解它了;改成生成大量隨機的例子,然後就只是去數或去平均。它以那座賭城命名,把難解的數學變成你在電腦上跑的一場賭博式實驗,而大數法則保證你那些隨機樣本的平均會收斂到真正的答案。

核心動作是把你想要的量寫成一個期望,再用一個平均來估計那個期望。要求 E[g(X)],就從 X 的分布抽 n 個獨立樣本 X_1, ..., X_n,並回報樣本平均 (1/n) 乘以 i=1 到 n 求和 g(X_i)。由大數法則,這會在 n 增長時收斂到 E[g(X)]。同樣的技巧可估計任何積分:要算 f 在 [a, b] 上的積分,注意它等於 (b - a) 乘以 E[f(U)],其中 U 在 [a, b] 上均勻,所以在隨機點上平均 f 再縮放即可。要估計一個機率,就平均一個指示函數——落在某事件中的樣本比例,估計了該事件的機率。

它的招牌特徵是誤差。中央極限定理說蒙地卡羅誤差的標準差約為 sigma / sqrt(n),其中 sigma 是 g(X) 的標準差。關鍵的後果:準確度以 1 比 sqrt(n) 的方式改善,所以要把誤差砍半,你需要「四倍」的樣本,而要多一位小數,你需要一百倍。這聽起來很慢,但這個速率「不」依賴 X 的維度——這正是為什麼蒙地卡羅在高維積分上輾壓格點法,因為格點所需的點數會以天文速度增長。誠實的提醒:你的樣本必須真的來自正確的分布,而一個悄悄帶偏差的亂數產生器,會悄悄地讓每一個答案都帶偏差。

用飛鏢估計 pi。把 n 個點均勻地丟進單位正方形,數有多少落在半徑為 1 的四分之一圓內(即 x^2 + y^2 <= 1 者)。落在內部的比例估計了四分之一圓的面積 pi/4,所以那個比例的 4 倍就估計了 pi。丟 10,000 次,你通常能得到約兩位數的 pi;要可靠地多得一位數,你大約需要一百萬次。

把答案寫成一個平均、抽樣、再平均;誤差以 1 比 sqrt(n) 的方式縮小。

蒙地卡羅誤差只以 1 比 sqrt(n) 的方式下降,所以四倍的樣本只換來一半的誤差;它真正的優勢是這個速率不理會維度,在高維度上勝過格點。

又稱
Monte Carlo methodMC蒙地卡羅法蒙特卡羅