轉 如何理解 重要性採樣(importance sampling)

 

 

分類: 我叫學術帖

重要性採樣是很是有意 思的一個方法。咱們首先須要明確,這個方法是基於採樣的,也就是基於所謂的蒙特卡洛法(Monte Carlo)。蒙特卡洛法,自己是一個利用隨機採樣對一個目標函數作近似。例如求一個稀奇古怪的形狀的面積,若是咱們沒有一個解析的表達方法,那麼怎麼作 呢?蒙特卡洛法告訴咱們,你只要均勻的在一個包裹了這個形狀的範圍內隨機撒點,並統計點在圖形內的個數,那麼當你撒的點不少的時候,面積能夠近似爲=(在 圖形內的點的個數/總的點個數),當你撒的點足夠多的時候,這個值就是面積。 這裏假設咱們總有辦法(至少要比找解析的面積公式簡單)求出一個點是否在圖形內。另外一個例子,若是你要求一個稀奇古怪的積分,沒有解析辦法怎麼辦?蒙特卡 洛法告訴你,一樣,隨機撒點,你必定能夠知道f(xi)的值,那麼這個積分的解能夠表示爲=(b-a)/點的個數*sigma[f(xi)],其中b,a 爲積分的上下限。函數

好了,知道了蒙特卡洛法,下面來講重要性採樣的前提一些內容。post

不少問題裏,咱們須要知道一個隨機變量的指望 E(X),更多時候,咱們甚至須要知道關於X的某一個函數f(X)的指望E[f(X)]。問題來了,若是這個X的機率分佈超級特麼的複雜,你準備怎麼作 呢?積分麼?逐點求和麼?聽上去挺不現實的。這時蒙特卡洛法跑出來告訴你,來來來,咱只要按照你這個機率分佈,隨機的取一些樣本點,再 sigma(p(xi)*f(xi))不就能夠近似這個指望了麼。但問題又來了,你怎麼」按照這個機率分佈「去撒點呢?spa

經典蒙特卡洛法是這 麼作的,首先把這個機率分佈寫成累計機率分佈的形式,就是從pdf寫成cdf,而後在[0,1]上均勻取隨機數(由於計算機只能取均勻隨機數),假如咱們 取到了0.3,那麼在cdf上cdf(x0)=0.3的點x0就是咱們依據上述機率分佈取得的隨機點。.net

舉個具體例子吧,例如我想按照標準正態分佈N(0,1)取10個隨機數,那麼我首先在[0,1]上按照均勻分佈取10個點blog

0.4505    0.0838    0.2290    0.9133    0.1524    0.8258    0.5383    0.9961    0.0782    0.4427get

而後,我去找這些值在cdf上對應的x0,以下it

-0.1243   -1.3798   -0.7422    1.3616   -1.0263    0.9378    0.0963    2.6636   -1.4175   -0.1442模板

那麼上述這些點,就是我按照正態分佈取得的10個隨機數。class

OK,你按照上述方法去找cdf吧。pdf

我若是這麼說,你確定會瘋掉。由於,若是機率分佈都超級特麼的複雜,累計機率分佈豈不是會更特麼不知道怎麼求了!

 

而後,咱們開始了重要性採樣的介紹。

讓 咱們回顧一下指望的求法E(f(x))=sum( p(x) * f(x) ) dx。那麼,如今咱們引入另外一個機率分佈s(x),相比於p(x),s(x)是很是簡單能找到cdf的。那麼咱們變形一下E(f(x)) = sum( p(x) * f(x) / s(x) * s(x) ) dx ,再仔細看看,這個求f(x)的指望變成了,求在s(x)分佈下,p(x)*f(x)/s(x)的指望。

重要性採樣的關鍵就在這裏,把對f(x)很差求的指望,變成了一個在另外一個分佈下相對好求的指望。

這樣,s(x)能找到cdf,那麼就用上面提到的那個方法去採樣,而後對應的,求出h(x0)=p(x0)*f(x0)/s(x0)的值,最後再sigma(s(xi)*h(xi))就能夠近似E(f(x))了。

舉 個例子:就上面那個求積分的問題,用重要性採樣解釋還能夠有很好玩兒的內容。上面求積分時,咱們是用的均勻採樣的方法,注意這個時候自變量X已經被咱們弄 成了隨機變量,f(X)就是這個隨機變量的函數。可是,你們可能會注意到這個問題:若是這個f(x)長的比較特別,例如是個高斯函數N(a,b^2),只 不過它的方差b特別的小,可是自變量範圍特別大。這時的均勻採樣,大多數點都會落在了機率很低的地方,落在a附近的點不多。這樣,均勻隨機採樣法獲得的期 望頗有可能會和真實值差得很是遠。(唉,這個問題想不明白的畫圖,還想不明白的作實驗)。那麼,此時,若是咱們換一個機率,不用均勻採樣法,用,例如說 N(a,b^2)分佈,用上述方法重要性採樣一下。那麼落在a附近的點會超級的多,這樣,獲得的指望會很好的近似真實值。

固然,上面那個分 布是我隨口說的,你們都但願那個重要性採樣的機率函數能夠無限的逼近真實分佈。但既然能表示真實分佈,咱們就知道cdf了,誰還須要重要性採樣呢?因此這 只是理論狀況。實際上,通常你們用的方法都會根據具體的狀況選擇。我所見到的,大多都是利用某一種距離/類似度度量函數,而後把這些距離利用某種方法變換 成機率分佈。這麼說仍是太抽象,舉例吧:

我有一個特定人的模板,我但願在一個給定的區域內尋找這我的。那麼粒子的狀態就是位置座標(x, y)和大小(w,h),每一個粒子的權重:

首先,求這個粒子的直方圖,再和模板求一個距離,巴式距離啦,EMD啦,隨你選。假設這個值爲x。

而後,計算K*exp^(-alpha*x)。這個方法被稱爲likelihood map,就是說分數越小則機率越高,分數越大機率越低。反正K和alpha積分從0到正無窮的和是1就能夠了。這樣每一個點都有了一個機率值。

且慢,如今還不是機率值。全部粒子的和不是1,因此只能叫權重值。而後再歸一化一下,就成爲了機率值。

最後這個值就是咱們要找的s(x)。p(x),f(x),s(x)都有了,這樣咱們就能夠比較輕易的利用s(x)的分佈撒點,求指望了。

 

固然,在不少文章裏這些機率都是帶着條件機率的,有的利用馬爾科夫性,只和前一幀的狀態以及觀測相關,有的則寫成和之前所有狀態相關。可是原理基本是一致的。s(x)的選取也各不相同,具體問題具體分析了。

相關文章
相關標籤/搜索