重要性抽樣(importance sampling)
假設你想求某個量的平均,而它只在所有可能性中一個微小、難尋的角落裡很大,其餘幾乎處處為零。均勻撒樣幾乎把樣本全浪費在空曠區域,而偶爾落進那個重要角落的稀有樣本會以劇烈的起伏主宰答案。重要性抽樣的補救是:刻意在被積函數大的地方多取樣本,再藉由對每個樣本降權來修正這個偏差。
訣竅是一次改寫。要估計 I = f(x) dx 的積分,插入一個你能從中抽樣的抽樣密度 p(x):I = [f(x) / p(x)] 乘以 p(x) 的積分。現在從 p(x) 抽出 x_i,並估計 I ~= (1 / N) 乘以 f(x_i) / p(x_i) 的總和,其中每個樣本帶著權重 1 / p(x_i),恰好抵銷了優先抽取它所造成的偏差。當 p(x) 正比於 |f(x)| 時,此估計的變異數達到最小,形式上甚至會消失為零;這個理想無法達到,因為它需要你早已知道答案,但任何形狀大致像 f 的 p 都能大幅削減變異數。
這正是讓實用蒙地卡羅可行的變異數縮減引擎。在統計力學中它有一個著名的化身:梅特羅波利斯演算法就是取 p 為波茲曼分布的重要性抽樣,於是組態按其熱力學權重被造訪,某可觀測量的平均便化為一個普通、不加權的樣本平均。誠實的警告是:選得差的 p 會出賣你——若它太窄、漏掉了 f 並非可忽略的區域,估計會得到一個小而騙人的誤差棒,卻嚴重偏差。對尾部取樣不足是經典的陷阱。
要計算一團氣體的平均能量,均勻抽取分子組態毫無指望,因為幾乎所有組態的波茲曼權重都可忽略;改為直接從波茲曼分布抽取它們,讓典型、在熱力學上相關的組態主導,估計便能快速收斂。
把樣本花在關鍵處:依波茲曼權重抽取,而非均勻抽取。
重要性抽樣只有在抽樣密度契合被積函數的形狀時才降低變異數;一個不匹配、太窄、漏掉尾部的密度,可能把很大的偏差藏在騙人地小的誤差棒背後。