MCMC、蒙特卡洛近似和Metropolis算法簡介

2021-01-10 deephub

MCMC 是Markov Chain Monte Carlo 的簡稱,但在傳統模擬中有一個很重要的假設是樣本是獨立的(independent samples),這一點在貝葉斯統計尤其是高緯度的模型中很難做到。所以MCMC的目的就是運用蒙特卡洛模擬出一個馬可鏈(Markov chain)。

如今,概率建模風靡一時,但是當我第一次了解它時,總有一件事情困擾我。 許多貝葉斯建模方法都需要計算積分,而我看到的任何工作示例似乎都使用高斯或伯努利分布,原因很簡單如果您嘗試使用比這更複雜的方法,它將成為分析的噩夢。 將貝葉斯模型限制在「表現良好」的分布的小子集中,可能會極大地阻礙你對問題建模的能力,所以我們必須找到克服這一限制的方法。

蒙特卡洛近似

如果我不想分析計算某個討厭的積分怎麼辦?可以使用蒙特卡洛近似。

我們知道,我們可以通過使用目標分布的樣本值計算期望通過使用目標分布的樣本值計算樣本均值。為什麼重要?那麼,期望是什麼呢?

連續隨機變量的期望。同樣的過程也適用於離散的情況,只要改變求和的積分。

這種估計積分的方法由中心極限定理提供了一些很好的保證。首先,這是期望的無偏估計,其次,我們可以計算估計的方差。

使用蒙特卡羅樣本計算積分是非常好的,但是我們如何從目標分布中抽取樣本呢?繪製高斯或均勻樣本很容易,但np.random會讓你失望。

畫樣本最簡單的方法是使用逆CDF方法但這依賴於獲得逆CDF函數它通常沒有一個很好的解析形式只對一維隨機變量有意義。

Metropolis算法是許多馬爾可夫鏈蒙特卡洛(MCMC)採樣方法的組成部分之一。 當您可以訪問的只是目標分布的pdf時,它使我們能夠繪製樣本。

MCMC方法需要注意的是我們不再採用獨立樣本所以我們不能保證估計的方差如何隨著樣本數量的增加而減少。如果樣本是獨立的,中心極限定理告訴我們估計值的方差將與樣本數量(N)成反比地減少。對於MCMC,我們可以通過將樣本數量從N調整為Neff來對其貼現。Neff(幾乎)總是小於N,與鏈中樣本的相關性有關。

Metropolis採樣

Metropolis算法的步驟如下:

1.從目標分布域或先前分布的域中均勻採樣起點。 2.在那時pdf。 3.根據一些狀態轉換函數,從當前位置走一步,為新樣本提出建議。 4.計算新的pdf值。 5.計算新pdf /舊pdf的值。 6.如果比率大於1,請接受該步驟。 7.如果比率小於1: 1.採樣一個統一的隨機變量。 2.如果比率大於隨機樣本,請接受該步驟。 8.否則拒絕該建議,將當前職位作為示例添加並採取新的步驟。

請注意,在5–8中描述的過程等效於以概率為min(1,p(new)/ p(old))的伯努利概率接受樣本,記住這個後面會用到……

Metropolis為何起作用?

對於任何MCMC方法,我們都希望確保一種稱為詳細平衡或可逆性的屬性。

詳細平衡

如果π滿足,則π是馬爾可夫鏈(1)的平穩分布。 我們可以通過對等式兩邊求和來證明這一點。 如果我們可以保證詳細的平衡,那麼我們也知道我們正在從馬爾可夫鏈的固定分布中取樣,我們將其作為目標分布。

詳細平衡的思想是,由於每次轉移的概率「質量」從狀態i到狀態j的轉移與從狀態j到狀態i的轉移是相同的,因此在鏈的每次轉移之後,我們保持在平穩分布 。

現在,讓我們展示一下Metropolis算法如何滿足這一條件……

為了找到滿足詳細平衡的p(i,j),我們首先提出任意的「跳躍」概率q(i,j),然後僅通過接受概率為α(的「跳躍」來獲得p(i,j)。 i,j)。 當「跳轉」被拒絕時,狀態保持j = i。 這種「接受」的想法並不是Metropolis算法獨有的,它存在於MCMC的大多數變體中。

跳躍概率推導

這取決於α是有效概率分布。 因此,α的有效形式為:

Metropolis-Hastings 跳躍概率

如果跳躍概率是對稱的,則可以簡化為:

否則,它可以保留為完整形式,稱為Metropolis-Hasting MCMC。

現在我們可以保證詳細的平衡,我們可以讓馬爾可夫鏈式接管。 如果馬爾可夫鏈是遍歷的(所有狀態都是不可約的),那麼在某個時候,該鏈將到達平穩分布,並且我們能夠從目標分布中獲取樣本。

你可能還注意到,由於alpha是π(j)/π(i)的函數。 這樣的結果意味著目標分布無需標準化。 當將Metropolis用於難以計算證據項的貝葉斯後驗估計時,這特別有用。

實現的注意事項

Metropolis算法的通用版本稱為「隨機行走Metropolis」,其中建議的狀態為當前狀態,再加上均值為零且協方差矩陣為σI的多元高斯。σ應選擇為足夠使得足夠多的樣本被拒絕大。 這是為了確保對目標分布進行良好的探索。

要注意的第二件事是老化的概念。 在馬爾可夫鏈到達平穩分布之前採集的樣本應刪除,因為它們在鏈收斂之前不能代表目標分布。 確定要刪除的樣本數量有些困難,但通常,要刪除的樣本為10–20%(或有效的樣本為10–100)。

Numpy代碼實現

def metropolis(pi, dims, n_samples, burn_in=0.1, var=1): theta_ = np.random.randn(dims)*var samples = [] while len(samples) < n_samples: theta = theta_ + np.random.randn(dims)*varratio = pi(theta)/pi(theta_) if np.random.rand(1) < ratio: sample = theta theta_ = theta samples.append(sample) else: sample = theta_ samples.append(sample) samples = np.array(samples) return samples[int(samples*burn_in):,:]

我們可以看到這在兩個高斯函數的和上的表現(注意這是一個非正態分布)。

from scipy.stats import multivariate_normal def make_pdf(mean1, mean2, cov1, cov2): pdf1 = multivariate_normal(mean1, cov1) pdf2 = multivariate_normal(mean2, cov2) def pdf(x): return pdf1.pdf(x) * pdf2.pdf(x) return pdfpdf = make_pdf( [3, 3], [-1, -1], np.array([[1,0.1],[0.1,1]], dtype=float), np.array([[1,0.1],[0.1,1]], dtype=float), ) samples = metropolis(pdf, 2, 1_000, 0.1)

上面的gif顯示了算法是如何遍歷分布的,偶爾會在分布的兩種不同模式之間跳轉。注意,這也突出了metropolis算法的一個弱點,它處理相對較差的多模型分布。這是由於要探索一種新模式,步驟必須足夠大,以便從一種模式希望到另一種模式。這要麼需要一個大的步長,要麼需要一個模態緊密分布。修改如哈密頓量MCMC可以幫助解決這一問題,但一般來說,這是大多數MCMC方法的一個問題。

論文地址:arxiv/1504.01896.pdf

作者:Alexander Bailey

deephub翻譯組

相關焦點

  • 蒙特卡洛方法-最簡單的代碼
    基本概念介紹其實我們最近推送的數學方面的東西,都是在幫助同學們一步一步理解PBR或者PBS,為什麼要了解蒙特卡洛算法呢
  • 【機器學習基礎】數學推導+純Python實現機器學習算法21:馬爾可夫鏈蒙特卡洛
    Author:louwillMachine Learning Lab          蒙特卡洛(Monte Carlo,MC)方法作為一種統計模擬和近似計算方法,是一種通過對概率模型隨機抽樣進行近似數值計算的方法。
  • 蒙特卡洛方法到底有什麼用?
    蒙特卡洛方法(Monte Carlo method,也有翻譯成「蒙特卡羅方法」)是以概率和統計的理論、方法為基礎的一種數值計算方法,將所求解的問題同一定的概率模型相聯繫,用計算機實現統計模擬或抽樣,以獲得問題的近似解,故又稱隨機抽樣法或統計試驗法。上述就是蒙特卡洛方法的基本概念,比較抽象,下面結合實際工作中的理解,談一談對蒙特卡洛方法的一些認識。
  • 機器學習算法地圖
    蒙特卡洛算法和時序差分算法是解決這這類問題的兩種方法。蒙特卡洛算法是一種隨機數值算法,它通過使用隨機數來近似解決某些難以直接求解的問題。在強化學習中,蒙特卡洛算法可以根據樣本得到狀態價值函數以及動作價值函數的估計值,用於近似數學期望值。在上面的例子中,樣本是一些隨機的點,在用於計算強化學習的價值函數時,樣本是一些片段。
  • 蒙特卡洛梯度估計方法(MCGE)簡述
    隨機函數梯度估計在機器學習以及諸多領域都是核心計算問題,比如:變分推斷,一種常見的近似貝葉斯推斷方法;強化學習中的策略梯度算法;實驗設計中的貝葉斯優化和主動學習方法等。其中,對於函數期望類目標問題,最常見的是基於蒙特卡洛採樣的方法。背景知識要了解基於蒙特卡洛採樣的梯度估計方法,首先先了解蒙特卡洛採樣方法和隨機優化方法。MCS 是一種經典的求解積分方法,公式(1)中的問題通常可以用 MCS 近似求解如下:
  • 貪心算法與近似算法
    在獲得精確解需要的時間太長時,可使用近似算法。判斷近似算法優劣的標準如下:速度有多快;得到的近似解與最優解的接近程度。貪婪算法是不錯的選擇,它們不僅簡單,而且通常運行速度很快。在這個例子中,貪婪算法的運行時間為O(n2),其中n為廣播臺數量。下面來看看解決這個問題的代碼。
  • 一文了解AlphaGo中蒙特卡洛方法的由來與發展
    ,主要是為核武器的研發和製作而工作,蒙特卡洛方法以概率統計為理論指導,由於一個簡單的隨機數發生器一輪盤賭,外加烏拉姆的叔叔十分嗜好賭博且經常在蒙特卡洛賭場輸錢,方法便以摩納哥的馳名世界的賭城-蒙特卡洛來命名,蒙特卡洛方法的名稱和系統開發由此開始。
  • 【深度乾貨】專知主題鏈路知識推薦#5-機器學習中似懂非懂的馬爾科夫鏈蒙特卡洛採樣(MCMC)入門教程01
    今天給大家繼續介紹我們獨家整理的機器學習——馬爾科夫鏈蒙特卡洛採樣(MCMC)方法。(如,正態和獨立)大多數近似方法的關鍵是在於從分布中採樣的能力,我們需要通過採樣來預測特定的模型在某些情況下的行為,並為潛在的變量(參數)找到合適的值以及將模型應用到實驗數據中,大多數採樣方法都是將複雜的分布中抽樣的問題轉化到簡單子問題的採樣分布中。
  • 【算法地圖】一張地圖帶你玩轉機器學習
    對於很多應用場景,我們無法得到準確的狀態模型和回報函數。因此前面介紹的這兩種算法在實際問題中使用價值有限。對於無法建立精確的環境模型的問題,我們只能根據一些狀態、動作、回報值序列樣本進行計算,估計出價值函數和最優策略。基本思想是按照某種策略嘗試執行不同的動作,觀察得到的回報,然後進行改進。蒙特卡洛算法和時序差分算法是解決這這類問題的兩種方法。
  • 蒙特卡洛模擬方法
    在本文中您可以學習到以下幾點知識蒙特卡洛定積分算法原理講解(公式篇)python實現算法(代碼篇)蒙特卡洛算法起源       蒙特卡羅方法於20世紀40年代美國在第二次世界大戰中研製原子彈的「曼哈頓計劃」計劃的成員S.M.烏拉姆和J.馮·諾伊曼首先提出。
  • 蒙特卡洛(Monte Carlo, MC)那麼厲害?究竟是啥?
    引言  蒙特卡洛(Monte Carlo,簡稱MC)是一類通過重複隨機抽樣進行模擬運算的數學算法
  • 蒙特卡洛算法(MC)
    根據統計學的思想,我們可以利用回報平均值來近似期望回報,樣本數越大,近似值將會收斂到期望值。這就是MC的思想,很簡單。(為何不使用DP的方法?因為MC不知道精確的環境模型)下面就是具體的實施環節了。every-visit MC更容易聯繫到後面講的值函數近似和資格跡。
  • 機器學習 —— 淺談貝葉斯和MCMC
    這是這個系列的第一個筆記,是關於貝葉斯和MCMC一些數學原理的講解和代碼的實現,希望能夠深入淺出,敘述的容易讓人理解。…▌淺談貝葉斯不論是學習概率統計還是機器學習的過程中,貝葉斯總是是繞不過去的一道坎,大部分人在學習的時候都是在強行地背公式和套用方法,沒有真正去理解其牛逼的思想內涵。
  • 強化學習——蒙特卡洛方法
    學習目標理解什麼是first-visit和every-visit;理解什麼是on-policy和off-policy;理解蒙特卡洛方法的Prediction和Control問題;Prediction和Control其實這兩個名詞在總結動態規劃方法的文章中也提到過了,但是沒有細說,這裡再簡單的說明一下。
  • 一文讀懂貝葉斯推理問題:MCMC方法和變分推斷
    在解決大型問題時,精確的方案往往需要繁重的計算,要完成這些難以處理的計算,必須採用一些近似技術,並構建快速且有可擴展性的系統。本文將討論兩種可用於解決貝葉斯推理問題的主要方法:基於採樣的馬爾可夫鏈蒙特卡羅(Markov Chain Monte Carlo,簡稱MCMC)方法和基於近似的變分推理(Variational Inference,簡稱VI)方法。
  • 蒙特卡洛模擬(Python)深入教程
    初始化數據:圖21: 初始化代表門的枚舉變量和存儲概率值的列表。3. Main函數:圖22: 用蒙特卡洛模擬來實現主函數。4. 調用main函數:圖23: 調用主函數模擬1000次博弈。輸出:圖24: 得到堅持自己的選擇或換門的近似獲勝概率。在圖24中,我們發現在1000次模擬後,如果我們換門,獲勝概率是0.669。因此,我們確信在本例中換門對我們更有利。4.
  • 詳解蒙特卡洛方法
    那麼,我認為你會很樂意了解蒙特卡洛方法。這是一種可近似困難的概率分布的經典方法,可以解決你對動態編程解決方案的所有擔憂!同樣,我們會按照 Richard Sutton 的強化學習教材《Reinforcement Learning: An Introduction》進行講解,並會給出一些該書中沒有的額外解釋和示例。
  • 強化學習之原理詳解、算法流程及Python代碼
    智能體agent根據當前對環境的觀察採取動作獲得環境的反饋,並使環境發生改變的循環過程蒙特卡洛強化學習1.在現實的強化學習任務中,環境的轉移概率、獎勵函數往往很難得知,甚至很難得知環境中有多少狀態。若學習算法不在依賴於環境建模,則稱為免模型學習,蒙特卡洛強化學習就是其中一種。
  • 什麼是近似算法?它適用於哪些問題?這篇文章給你答案
    新冠大流行給世界帶來了巨大的改變,全球科學家和研究人員在研製有效的疫苗。他們正在做的就是從廣闊的樣本空間中近似地收緊可能性範圍,並盡力得到一些有效解。近似在我們的生活中發揮了重要作用。以在線食品配送為例,我們經常從網上訂購食物,享受快速送達的服務。但你想過這些 app 後端運行的什麼算法讓快遞員在更短時間內抵達目的地嗎?答案是近似算法。