1. 程式人生 > >機器學習基礎之 蒙特卡羅演算法

機器學習基礎之 蒙特卡羅演算法

 蒙特·卡羅方法(Monte Carlo method),也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的發展和電子計算機的發明,而被提出的一種以概率統計理論為指導的一類非常重要的數值計算方法。是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。與它對應的是確定性演算法。蒙特·卡羅方法在金融工程學,巨集觀經濟學,計算物理學(如粒子輸運計算、量子熱力學計算、空氣動力學計算)等領域應用廣泛。

基本思想

當所求解問題是某種隨機事件出現的概率,或者是某個隨機變數的期望值時,通過某種“實驗”的方法,以這種事件出現的頻率估計這一隨機事件的概率,或者得到這個隨機變數的某些數字特徵,並將其作為問題的解。工作過程蒙特卡羅方法的解題過程可以歸結為三個主要步驟:構造或描述概率過程;實現從已知概率分佈抽樣;建立各種估計量。蒙特卡羅方法解題過程的三個主要步驟:(1)構造或描述概率過程對於本身就具有隨機性質的問題,如粒子輸運問題,主要是正確描述和模擬這個概率過 程,對於本來不是隨機性質的確定性問題,比如計算定積分,就必須事先構造一個人為的概率過程,它的某些參量正好是所要求問題的解。即要將不具有隨機性質的問題轉化為
隨機
性質的問題。(2)實現從已知概率分佈抽樣構造了概率模型以後,由於各種概率模型都可以看作是由各種各樣的概率分佈構成的,因此產生已知概率分佈的隨機變數(或隨機向量),就成為實現蒙特卡羅方法模擬實驗的基本手段,這也是蒙特卡羅方法被稱為隨機抽樣的原因。最簡單、最基本、最重要的一個概率分佈是(0,1)上的均勻分佈(或稱矩形分佈)。隨機數就是具有這種均勻分佈的隨機變數。隨機數序列就是具有這種分佈的總體的一個簡單子樣,也就是一個具有這種分佈的相互獨立的隨機變數序列。產生隨機數的問題,就是從這個分佈的抽樣問題。在計算機上,可以用物理方法產生隨機數,但價格昂貴,不能重複,使用不便。另一種方法是用數學遞推公式產生。這樣產生的序列,與真正的
隨機數
序列不同,所以稱為偽隨機數,或偽隨機數序列。不過,經過多種統計檢驗表明,它與真正的隨機數,或隨機數序列具有相近的性質,因此可把它作為真正的隨機數來使用。由已知分佈隨機抽樣有各種方法,與從(0,1)上均勻分佈抽樣不同,這些方法都是藉助於隨機序列來實現的,也就是說,都是以產生隨機數為前提的。由此可見,隨機數是我們實現蒙特卡羅模擬的基本工具。(3)建立各種估計量一般說來,構造了概率模型並能從中抽樣後,即實現模擬實驗後,我們就要確定一個隨機變數,作為所要求的問題的解,我們稱它為無偏估計。建立各種估計量,相當於對模擬實驗的結果進行考察和登記,從中得到問題的解。數學應用:通常蒙特·卡羅方法通過構造符合一定規則的隨機數來解決數學上的各種問題。對於那些由於計算過於複雜而難以得到
解析解
或者根本沒有解析解的問題,蒙特·卡羅方法是一種有效的求出數值解的方法。一般蒙特·卡羅方法在數學中最常見的應用就是蒙特·卡羅積分。

應用領域

蒙特卡羅方法在金融工程學巨集觀經濟學,生物醫學,計算物理學(如粒子輸運計算、量子熱力學計算、空氣動力學計算、核工程)等領域應用廣泛。

工作過程

在解決實際問題的時候應用蒙特·卡羅方法主要有兩部分工作:1. 用蒙特·卡羅方法模擬某一過程時,需要產生某一概率分佈的隨機變數。2. 用統計方法把模型的數字特徵估計出來,從而得到實際問題的數值解。

分子模擬計算

使用蒙特·卡羅方法進行分子模擬計算是按照以下步驟進行的:1. 使用隨機數發生器產生一個隨機的分子構型。2. 對此分子構型的其中粒子座標做無規則的改變,產生一個新的分子構型。3. 計算新的分子構型的能量。4. 比較新的分子構型於改變前的分子構型的能量變化,判斷是否接受該構型。若新的分子構型能量低於原分子構型的能量,則接受新的構型,使用這個構型重複再做下一次迭代。 若新的分子構型能量高於原分子構型的能量,則計算玻爾茲曼因子,併產生一個隨機數。若這個隨機數大於所計算出的玻爾茲曼因子,則放棄這個構型,重新計算。 若這個隨機數小於所計算出的玻爾茲曼因子,則接受這個構型,使用這個構型重複再做下一次迭代。5. 如此進行迭代計算,直至最後搜尋出低於所給能量條件的分子構型結束。

專案管理

專案管理中蒙特·卡羅模擬方法的一般步驟是:1.對每一項活動,輸入最小、最大和最可能估計資料,併為其選擇一種合適的先驗分佈模型;2.計算機根據上述輸入,利用給定的某種規則,快速實施充分大量的隨機抽樣3.對隨機抽樣的資料進行必要的數學計算,求出結果4.對求出的結果進行統計學處理,求出最小值、最大值以及數學期望值和單位標準偏差5.根據求出的統計學處理資料,讓計算機自動生成概率分佈曲線和累積概率曲線(通常是基於正態分佈的概率累積S曲線)6.依據累積概率曲線進行專案風險分析

力學

在力學中,蒙特卡羅方法多被用來求解稀薄氣體動力學問題,其中最為成功的是澳大利亞G.A.伯德等人發展的直接模擬統計試驗法。此法通過在計算機上追蹤幾千個或更多的模擬分子的運動、碰撞及其與壁面的相互作用,以模擬真實氣體的流動。它的基本假設與玻耳茲曼方程一致,但它是通過追蹤有限個分子的空間位置和速度來代替計算真實氣體中分佈函式。模擬的相似條件是流動的克努曾數(Kn)相等,即數密度與碰撞截面之積保持常數。對每個分子分配以記錄其位置和速度的單元。在模擬過程中分別考慮分子的運動和碰撞,在此平均碰撞時間間隔內,分別計算分子無碰撞的運動和典型碰撞。若空間網格取得足夠小,其中任意兩個分子都可以互相碰撞。具體決定哪兩個剛體分子相撞,是隨機取一對分子,計算它們的相對速度,根據此值與最大相對速度的比值和隨機取樣比較的結果,來決定該對分子是否入選。碰撞後分子的速度根據特定分子模型的碰撞力學和隨機取樣決定。分子與壁面碰撞後的速度,則根據特定的反射模型和隨機取樣決定。對於運動分子的位置和速度的追蹤和求矩可以得出氣體的密度、溫度、速度等一些感興趣的巨集觀參量。而對於分子與壁面間的動量和能量交換的記錄則給出阻力、舉力和熱交換系數等的數學期望值。

--------------------相關摘錄:內容來源於網路----------------------

最簡單的例子就是算\pi,隨機產生點集P = \{ (x,y)\big|x \in [0,1],y \in [0,1]\}n =\Big |\big\{ (x,y)\big|x^2+y^2 \le 1,(x,y) \in P \big\}\Big|,\pi = 4 \frac{n}{|P|}

蒙特卡羅也只是剛開始隨機進行預測,但後面的每步迭代都有權重不同。

蒙特卡羅演算法和蒙特卡羅方法有一些微妙的不同。本質上蒙特卡羅都指的是Monte Carlo,也就是一個很有名的大賭場,在概率論裡邊的意思近似等同於“隨機”。下邊簡稱為MC。

MC方法指的是用隨機來計算一些確定性演算法(deterministic algorithm)算起來麻煩/慢的東西。舉一個例子,如果你要測量一隻貓的體積,但是貓的表面那個曲線非常難以積分(...),而且這隻貓高冷地拒絕了你想要把它泡到水裡的請求,所以你選擇了另一種途徑:用一個能在空間中隨機(uniformly)產生一種標誌粒子的機器,讓這個機器在一個包含了貓的正方體內隨機產生粒子。假設粒子如果正好在貓的體內或者表皮(在數學上表皮體積為0所以你要去掉表皮也可以)的話,那麼這個粒子就無法被觀測到,否則就可以被觀測到。假設正方體的體積為1立方米,而你在空間中產生了一萬個點,最後觀測到了9950個點,那麼這隻貓的體積就可以用這個MC演算法測算為5立方分米。

當然了,除了測量貓的體積(?),MC方法還有很多其他的用途。一類非常常見的演算法叫Markov Chain Monte Carlo(MCMC)。假設你要求一個概率分佈的一些性質(比如均值,方差等等),但是這個概率分佈沒辦法直接算,但是你可以構造一個Markov Chain,而這個Markov Chain的equilibrium distribution就是你想要算的那個概率分佈。這時候,你只需要直接讓這個Markov Chain跑一定的步數,然後進入equilibrium distribution,這時候你隨機取一些作為樣本,當抽取的數量足夠的時候,就可以用這些樣本來模擬最開始要算的概率分佈,而你想要算的那些東西可以直接用樣本分佈來算。

計算機科學裡邊也有一類MC演算法。很多用途廣泛的演算法是NP甚至複雜度更高的,這時候你想要算出一個確定性的解的話,需要的計算量非常的大,常常超出了你導師/上司能容忍的範圍(...),有一些情況下,比如一些算一個數字是不是質數,或者是一些其他的決策問題,就可以用一個MC演算法,用少很多的計算時間,來得到一個正確概率足夠大(比如90%多一些,但是嚴格小於1)的解。