隨機採樣方法——蒙特卡羅方法

2021-02-07 機器學習算法工程師

   作者: 劉建平         

編輯:祝鑫泉          

授權轉發自:劉建平《MCMC(一)蒙特卡羅方法》

地址:http://www.cnblogs.com/pinard/p/6625739.html

作為一種隨機採樣方法,馬爾科夫鏈蒙特卡羅(Markov Chain Monte Carlo,以下簡稱MCMC)在機器學習,深度學習以及自然語言處理等領域都有廣泛的應用,是很多複雜算法求解的基礎。

章節目錄

MCMC概述

蒙特卡羅方法引入

概率分布採樣

接受—拒絕採樣

蒙特卡羅方法小結

MCMC概述

從名字我們可以看出,MCMC由兩個MC組成,即蒙特卡羅方法(Monte Carlo Simulation,簡稱MC)和馬爾科夫鏈(Markov Chain ,也簡稱MC)。要弄懂MCMC的原理我們首先得搞清楚蒙特卡羅方法和馬爾科夫鏈的原理。我們將用三篇來完整學習MCMC。在本篇,我們關注於蒙特卡羅方法。

蒙特卡羅方法引入蒙特卡羅原來是一個賭場的名稱,用它作為名字大概是因為蒙特卡羅方法是一種隨機模擬的方法,這很像賭博場裡面的扔骰子的過程。最早的蒙特卡羅方法都是為了求解一些不太好求解的求和或者積分問題。比如積分:

如果我們很難求解出f(x)的原函數,那麼這個積分比較難求解。當然我們可以通過蒙特卡羅方法來模擬求解近似值。如何模擬呢?假設我們函數圖像如下圖:

則一個簡單的近似求解方法是在[a,b]之間隨機的採樣一個點。比如x0,然後用f(x0)代表在[a,b]區間上所有的f(x)的值。那麼上面的定積分的近似求解為:

當然,用一個值代表[a,b]區間上所有的f(x)的值,這個假設太粗糙。那麼我們可以採樣[a,b]區間的n個值:x0,x1,...xn−1,用它們的均值來代表[a,b]區間上所有的f(x)的值。這樣我們上面的定積分的近似求解為:

雖然上面的方法可以一定程度上求解出近似的解,但是它隱含了一個假定,即x在[a,b]之間是均勻分布的,而絕大部分情況,x在[a,b]之間不是均勻分布的。如果我們用上面的方法,則模擬求出的結果很可能和真實值相差甚遠。

怎麼解決這個問題呢? 如果我們可以得到x在[a,b]的概率分布函數p(x),那麼我們的定積分求和可以這樣進行:

上式最右邊的這個形式就是蒙特卡羅方法的一般形式。當然這裡是連續函數形式的蒙特卡羅方法,但是在離散時一樣成立。

可以看出,最上面我們假設x在[a,b]之間是均勻分布的時候,p(xi)=1/(b−a),帶入我們有概率分布的蒙特卡羅積分的上式,可以得到:

也就是說,我們最上面的均勻分布也可以作為一般概率分布函數p(x)在均勻分布時候的特例。那麼我們現在的問題轉到了如何求出x的分布p(x)對應的若干個樣本上來。

條概率分布採樣

上一節我們講到蒙特卡羅方法的關鍵是得到x的概率分布。如果求出了x的概率分布,我們可以基於概率分布去採樣基於這個概率分布的n個x的樣本集,帶入蒙特卡羅求和的式子即可求解。但是還有一個關鍵的問題需要解決,即如何基於概率分布去採樣基於這個概率分布的n個x的樣本集。 

對於常見的均勻分布uniform(0,1)是非常容易採樣樣本的,一般通過線性同餘發生器可以很方便的生成(0,1)之間的偽隨機數樣本。而其他常見的概率分布,無論是離散的分布還是連續的分布,它們的樣本都可以通過uniform(0,1)的樣本轉換而得。比如二維正態分布的樣本(Z1,Z2)可以通過通過獨立採樣得到的uniform(0,1)樣本對(X1,X2)通過如下的式子轉換而得:

其他一些常見的連續分布,比如t分布,F分布,Beta分布,Gamma分布等,都可以通過類似的方式從uniform(0,1)得到的採樣樣本轉化得到。在python的numpy,scikit-learn等類庫中,都有生成這些常用分布樣本的函數可以使用。

不過很多時候,我們的x的概率分布不是常見的分布,這意味著我們沒法方便的得到這些非常見的概率分布的樣本集。那這個問題怎麼解決呢?

接受—拒絕採樣

對於概率分布不是常見的分布,一個可行的辦法是採用接受-拒絕採樣來得到該分布的樣本。既然 p(x) 太複雜在程序中沒法直接採樣,那麼我設定一個程序可採樣的分布 q(x) 比如高斯分布,然後按照一定的方法拒絕某些樣本,以達到接近 p(x) 分布的目的,其中q(x)叫做 proposal distribution。

具體採用過程如下,設定一個方便採樣的常用概率分布函數 q(x),以及一個常量 k,使得 p(x) 總在 kq(x) 的下方。如上圖。

首先,採樣得到q(x)的一個樣本z0,採樣方法如第三節。然後,從均勻分布(0,kq(z0))中採樣得到一個值u。如果u落在了上圖中的灰色區域,則拒絕這次抽樣,否則接受這個樣本z0。重複以上過程得到n個接受的樣本z0,z1,...zn−1,則最後的蒙特卡羅方法求解結果為:

整個過程中,我們通過一系列的接受拒絕決策來達到用q(x)模擬p(x)概率分布的目的。

蒙特卡羅方法小結

使用接受-拒絕採樣,我們可以解決一些概率分布不是常見的分布的時候,得到其採樣集並用蒙特卡羅方法求和的目的。但是接受-拒絕採樣也只能部分滿足我們的需求,在很多時候我們還是很難得到我們的概率分布的樣本集。比如:

1)對於一些二維分布p(x,y),有時候我們只能得到條件分布p(x|y)和p(y|x)和,卻很難得到二維分布p(x,y)一般形式,這時我們無法用接受-拒絕採樣得到其樣本集。

2)對於一些高維的複雜非常見分布p(x1,x2,...,xn),我們要找到一個合適的q(x)和k非常困難。

從上面可以看出,要想將蒙特卡羅方法作為一個通用的採樣模擬求和的方法,必須解決如何方便得到各種複雜概率分布的對應的採樣樣本集的問題。而我們下一篇要講到的馬爾科夫鏈就是幫助找到這些複雜概率分布的對應的採樣樣本集的白衣騎士。下一篇我們來總結馬爾科夫鏈的原理。

END








機器學習算法工程師

                            一個用心的公眾號

長按,識別,加關注

進群,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助

相關焦點

  • MCMC(一):蒙特卡羅方法小結
    蒙特卡羅方法引入3. 概率分布採樣4. 接受-拒絕採樣從名字我們可以看出,MCMC由兩個MC組成,即蒙特卡羅方法(Monte Carlo Simulation,簡稱MC)和馬爾科夫鏈(Markov Chain ,也簡稱MC)。要弄懂MCMC的原理我們首先得搞清楚蒙特卡羅方法和馬爾科夫鏈的原理。我們將用三篇來完整學習MCMC 。
  • 蒙特卡羅(Monte Carlo)方法簡介
    (Monte Carlo)方法,也稱為計算機隨機模擬方法,是一種基於"隨機數"的計算方法。      2)工作過程    在解決實際問題的時候應用蒙特卡羅方法主要有兩部分工作:  用蒙特卡羅方法模擬某一過程時,需要產生各種概率分布的隨機變量。   用統計方法把模型的數字特徵估計出來,從而得到實際問題的數值解。
  • 機器學習之統計採樣方法和馬爾可夫過程(馬爾可夫鏈蒙特卡羅方法)匯總
    通過隨機採樣的方法,以隨機事件出現的頻率估計其概率,或者以採樣的數字特徵估算隨機變量的數字特徵,並將其作為問題的解,此種方法常用於求解複雜的高維積分問題    在實際的應用中,所要面對的第一個問題就是如何進行數據採樣,在計算機模擬中,通常所說的採樣指的是:從一個概率分布中生成觀察值的方法,且該分布通常是由它的概率密度函數決定並表示,但是結合之前所提到的無意識統計學家法則LOTUS
  • 一種採樣隨機Clifford算子的簡單方法
    這篇文章提出了一種可以均勻隨機採樣Clifford算子的方法,相比於此前的採樣算法,該方法實現更為簡單,且可以直接生成Clifford
  • 基於序列模型的隨機採樣
    對於目前基於神經網絡的序列模型,很重要的一個任務就是從序列模型中採樣。比如解碼時我們希望能產生多個不一樣的結果,而傳統的解碼算法只能產生相似的結果。又比如訓練時使用基於強化學習或者最小風險訓練的方法需要從模型中隨機採集多個不一樣的樣本來計算句子級的損失,而一般的確定性方法不能提供所需要的隨機性。
  • 機器學習的5種採樣方法介紹
    本文介紹了在處理數據時可以使用的一些最常見的採樣技術。 簡單隨機抽樣 假設您要選擇一個群體的子集,其中該子集的每個成員被選擇的概率都相等。 下面我們從一個數據集中選擇 100 個採樣點。 sample_df = df.sample(100) 分層採樣
  • 數據科學家需要了解的 5 種採樣方法
    雷鋒網 AI 科技評論按,採樣問題是數據科學中的常見問題,對此,WalmartLabs 的數據科學家 Rahul Agarwal 分享了數據科學家需要了解的 5 種採樣方法,雷鋒網 AI 科技評論編譯整理如下。數據科學實際上是就是研究算法。我每天都在努力學習許多算法,所以我想列出一些最常見和最常用的算法。
  • ​隨機算法(randomized algorithm)概述——概念、方法、類型、複雜度、設計方法和計算舉例(14k字)
    本文概述隨機算法(randomized algorithm)的概念、方法、類型、複雜度、設計方法和計算舉例。關鍵詞:隨機算法(randomized algorithm)、隨機、計算。但是出現不正確的答案的機率可以非常非常低,而且我們可以多次運行,每次做不同的隨機選擇,那麼機率就更加低了。蒙特卡羅方法是這一類隨機方法的統稱。如投針法計算pi值等。4、舍伍德算法(Sherwood):很多具有很好的平均運行時間的確定性算法,在最壞的情況下性能很壞。
  • 蒙特卡洛模擬方法
    數學家馮·諾伊曼用馳名世界的賭城—摩納哥的Monte Carlo—來命名這種方法,為它蒙上了一層神秘色彩。在這之前,蒙特卡羅方法就已經存在。1777年,法國Buffon提出用投針實驗的方法求圓周率∏。這被認為是蒙特卡羅方法的起源。 很簡單的一個小例子,在長寬都為1cm的正方形中有一個最大圓,如何用數理統計的思想去求解這個面積呢?
  • 機器學習中需要了解的 5 種採樣方法
    種採樣方法,編譯整理如下。現假設該國有 3 個城鎮:我們可以選擇在整個人口中隨機抽取一個 60 大小的樣本,但在這些城鎮中,隨機樣本可能不太平衡,因此會產生偏差,導致估計誤差很大。相反,如果我們選擇從 A、B 和 C 鎮分別抽取 10、20 和 30 個隨機樣本,那麼我們可以在總樣本大小相同的情況下,產生較小的估計誤差。
  • 一文讀懂貝葉斯推理問題:MCMC方法和變分推斷
    本文將討論兩種可用於解決貝葉斯推理問題的主要方法:基於採樣的馬爾可夫鏈蒙特卡羅(Markov Chain Monte Carlo,簡稱MCMC)方法和基於近似的變分推理(Variational Inference,簡稱VI)方法。
  • MIMOSA: 用於分子優化的多約束分子採樣
    現有的生成模型和強化學習方法在同時優化多種藥物屬性方面仍面臨一定困難。為此,本文提出多約束分子採樣框架—MIMOSA,使用輸入分子作為初始採樣框架,並從目標分布中採樣分子。MIMOSA首先預先訓練兩個屬性不可知圖神經網絡(GNN),分別用於分子拓撲和子結構類型預測,其中子結構可以是原子或單環。
  • 獨家| AAAI-17獲獎論文深度解讀(下):蒙特卡羅定位和推薦系統
    這種新的基於樣本的蒙特卡羅定位(sample-based Monte Carlo Localization)在計算上非常高效,同時還保留了它表徵任意分布的能力。這種 MCL 應用了基於樣本的方法來逼近樣本數量所採用的概率分布,它是可以在線調整的,因此可以動態地調用樣本集,這是基於網格的方法(通過三維網格進行表徵,在計算上非常繁瑣)所無法實現的。
  • 蒙特卡羅算法(Monte Carlo Methods)
    那麼回到蒙特卡羅方法來,MonteCarlo是世界著名的賭城,而這個方法則是被馮諾依曼提出。所以說,當你用蒙特卡羅方法時,你大可以說:我承認這有賭的成分。而蒙特卡洛方法的理論原理大概就是,如果你有兩個篩子,你想知道扔出兩個6的概率是多少,然後你選擇扔個一萬次篩子,記錄下多少次兩個6,然後做個簡單的除法就得到答案了。你覺得這樣做有誤差?
  • 當隨機採樣遇見插值,微軟亞研提出節省推理計算量的新範式
    在一篇 ECCV 2020 Oral 論文中,來自微軟亞洲研究院等機構的研究者提出了一種隨機採樣與插值相結合的新方法,可以有效降低節省推理的計算量。近年來,隨著深度學習的不斷發展,視覺領域出現了越來越多的高精度模型,但這些模型所需的計算量也越來越大。因此,如何在推理階段避免冗餘的計算在近年來成為研究熱點。
  • 計算VaR的方法
    主要包括方差一協方差法(Variance—Covariance Approach)、歷史模擬法(Histor- ical Simulation Method)和蒙特卡羅模擬法(Monte-Carlo Sim- ulation)。
  • 通過隨機採樣和數據增強來解決數據不平衡的問題
    從多數類中刪除樣本的過程稱為欠採樣,而將樣本添加到少數類中的過程稱為過採樣。隨機欠採樣是指多數類別的隨機採樣。進行該過程,直到達到少數群體的平衡為止。儘管此技術有助於在多數和少數類別之間建立平衡,但是從多數類中刪除樣本時可能會丟失重要信息。
  • 簡潔清晰解釋馬爾可夫鏈蒙特卡洛方法
    有三種解釋MCMC的方法: 初級:MCMC允許我們利用計算機進行貝葉斯統計。 中級:MCMC是一種可以找到我們感興趣的參數的後驗分布的方法。具體來說,這種類型的算法以依賴Markov屬性的方式生成蒙特卡羅模擬,然後以一定的速率接受這些模擬以獲得後驗分布。 高級:完整的統計思想。
  • STOTEN:不同採樣方法對微生物群落α多樣性的影響
    選擇一個合適的採樣方法是微生物群落研究的第一個關鍵步驟,因為它在很大程度上影響結果的可靠性和後續分析的統計能力。在土壤生態系統中,大多數研究都採用了兩種類型的採樣策略。第一種策略代表是五點取樣法,在正方形四角和中心取樣,然後混合成一個樣本。第二種方法是在一個確定的區域內隨機選點取樣後混合。目前很少有研究系統地評價不同採樣策略對α多樣性測量的影響。