吉布斯採樣的簡單描述

幾個可以學習gibbs sampling的方法
1,讀Bishop的Pattern Recognition and Machine Learning,講的很清楚,但是我記得好像沒有例子。
2,讀artificial Intelligence,2、3版,都有。但是我沒讀過。
3,最方便的,查wiki,這個說的最清楚。

這裏通俗點的解釋一下。首先,什麼是sampling。sampling就是以一定的概率分佈,看發生什麼事件。舉一個例子。甲只能E:吃飯、學習、打球,時間T:上午、下午、晚上,天氣W:晴朗、颳風、下雨。現在要一個sample,這個sample可以是:打球+下午+晴朗。。。

問題是我們不知道p(E,T,W),或者說,不知道三件事的聯合分佈。當然,如果知道的話,就沒有必要用gibbs sampling了。但是,我們知道三件事的conditional distribution。也就是說,p(E|T,W),p(T|E,W),p(W|E,T)。現在要做的就是通過這三個已知的條件分佈,再用gibbs sampling的方法,得到joint distribution。

具體方法。首先隨便初始化一個組合,i.e. 學習+晚上+颳風,然後依條件概率改變其中的一個變量。具體說,假設我們知道晚上+颳風,我們給E生成一個變量,比如,學習-》吃飯。我們再依條件概率改下一個變量,根據學習+颳風,把晚上變成上午。類似地,把颳風變成颳風(當然可以變成相同的變量)。這樣學習+晚上+颳風-》吃飯+上午+颳風。

同樣的方法,得到一個序列,每個單元包含三個變量,也就是一個馬爾可夫鏈。然後跳過初始的一定數量的單元(比如100個),然後隔一定的數量取一個單元(比如隔20個取1個)。這樣sample到的單元,是逼近聯合分佈的。

  • 什麼是Gibbs Sampling

Gibbs Sampling是MCMC算法中的一種,用來構造多變量概率分佈的隨機樣本,比如構造兩個或多個變量的聯合分佈,求積分,期望。

  • 爲什麼需要Gibbs Sampling

這不是廢話,肯定是積分,期望或者聯合分佈很難計算出來,通常情況下當前面三個問題是NP問題時才需要Gibbs Sampling。不然的話,直接計算就可以了嘛,既準確又快速,幹嘛還要Gibbs Sampling呢。補充一句Gibbs Sampling只是(也只能)到近似解。

  • 應用場景

a、積分,期望,樣本概率很難計算出來;b、條件概率很容易計算。具體一點的例子:受限玻爾茲曼機(RBM)的訓練,貝葉斯網絡,LDA都用到Gibbs Sampling。

  • 爲什麼Gibbs Sampling有效

當Gibbs Sapling算法執行多次之後,產生的樣本服從真實樣本的分佈,即相當於直接從聯合分佈中採樣。

  • Gibbs Sampling 算法 

二維Gibbs Sampling的馬氏鏈轉移

 

n維Gibbs Sampling算法

 觀點:

1. We have a representation of p(x) and f(x), but integration is intractable. It turns out that if correctly sampled, only 10-20 points can be sufficient to estimate the mean and variance of a distribution. Of course, Samples must be independently drawn; Expectation may be dominated by regions of high probability, or high function values.[1]

Reference

[1] Lecture 1: Introduction - CUNY 

[2] LDA數學八卦

後記:爲什麼要寫關於Gibbs Sampling的文章呢?首先Gibbs Sampling是有用滴,Gibbs Sampling在機器學習中主要用於學習階段的推理,比如求期望(平均值)和積分;再者網上的關於Gibbs Sampling的博客寫得不好,資料也不多。