您現在的位置是:首頁 > 綜合

貝葉斯統計:Gibbs sampling 原理到實踐

  • 由 架構師之家 發表于 綜合
  • 2022-03-15
簡介先看 LDA 的模型:整個過程可以描述為對於文件 d,從分佈中取樣出,即文件 d 的主題分佈對於文件的每個詞從多項分佈中取樣出主題 k,即對於主題 k,從中取樣出,即主題 k 的詞分佈對於每個詞,從主題分佈中取樣出具體的單詞 t上面整個模型

多項分佈公式怎麼來的

貝葉斯統計:Gibbs sampling 原理到實踐

經過前面兩篇文章,我們終於來到了 Gibbs samping,為什麼我這麼興奮呢?因為我當初看貝葉斯推斷就是因為 LDA 模型,裡面用到了 Gibbs sampling 的方法來解引數問題。

由於頭條對 Markdown 支援不是太好,可以去原文連結檢視:https://www。zybuluo。com/zhuanxu/note/1027270。

好了下面開始介紹 Gibbs 取樣。

Gibbs 取樣

前面一篇文章我介紹了細緻平穩條件,即:

Gibbs 取樣的演算法如下:

貝葉斯統計:Gibbs sampling 原理到實踐

我們來證明 Gibbs 取樣演算法也滿足細緻平穩條件。

假設 x = x 1 , 。 。 。 , x D ,當我們取樣第 k 個數據的時候,

此時我們的接受率為:

上面公式一個關鍵的部分是:

貝葉斯統計:Gibbs sampling 原理到實踐

帶入就可以得到 1,即 gibbs 取樣是一定接受的取樣。

下面我們照慣例還是來一個例子。

例子

假設有我們有資料 x1,x2。。。xN,其中 1-n 的數服從一個泊松分佈,n+1-N 的數服從另一個泊松分佈。

而泊松分佈的引數服從 Gamma 分佈,我們總結下目前的先驗假設:

貝葉斯統計:Gibbs sampling 原理到實踐

此時後驗機率是:

貝葉斯統計:Gibbs sampling 原理到實踐

我們下一步開始我們的取樣, 先計算下 logP:

貝葉斯統計:Gibbs sampling 原理到實踐

接著來取樣

貝葉斯統計:Gibbs sampling 原理到實踐

貝葉斯統計:Gibbs sampling 原理到實踐

我們此處只取了跟當前取樣引數有關的項,因為其他都是一些常數,作用只是將機率分佈歸一化,不影響取樣。

此處都服從 Gamma 分佈。

最後是 n:

貝葉斯統計:Gibbs sampling 原理到實踐

n 沒有顯示的分佈資訊,但是我們簡單將其認為是一個多項分佈。

下面是關鍵 Python 程式碼:

貝葉斯統計:Gibbs sampling 原理到實踐

完整程式碼見 Gibbs 。

取樣後輸出如下圖:

貝葉斯統計:Gibbs sampling 原理到實踐

LDA

下面我們來最激動人心的 LDA 模型,看怎麼用 Gibbs 取樣來解。

先看 LDA 的模型:

貝葉斯統計:Gibbs sampling 原理到實踐

整個過程可以描述為

對於文件 d,從分佈中取樣出,即文件 d 的主題分佈

對於文件的每個詞從多項分佈中取樣出主題 k,即

對於主題 k,從中取樣出,即主題 k 的詞分佈

對於每個詞,從主題分佈中取樣出具體的單詞 t

上面整個模型中,模型引數有:

貝葉斯統計:Gibbs sampling 原理到實踐

為了做 Gibbs 取樣,我們先看這幾個引數的聯合分佈。

貝葉斯統計:Gibbs sampling 原理到實踐

上面公式中是多項分佈,而是 Dir 分佈,我們知道 Dir 分佈和多項分佈是共軛分佈,因此後驗分佈比較容易寫出來。

下面我們開始計算每個引數的機率,主要是計算下面 3 個機率:

先來計算第一個主題的機率分佈:

其中

表示第 m 篇文件中,屬於每個主題的詞個數。

接著計算每個主題的詞分佈

其中

第 m 篇文件中屬於 k 個主題的,每個單詞的數量,共 (1-V) 個單詞。最後來估算每個詞的主題。

貝葉斯統計:Gibbs sampling 原理到實踐

我們可以看到 p(zmj=k) 是一個多項分佈,每一項的機率都是 beta*theta,而他們本身也是需要從 Dir 分佈中取樣出來的,一個自然的想法就是我們可以用估計值來代替,根據 Dir 分佈我們能夠很方便的計算出機率來。

此處需要的數學基礎可以看頭條號中的主題模型:LDA 數學基礎。

裡面一個點是 Dir 分佈和其數學期望

貝葉斯統計:Gibbs sampling 原理到實踐

貝葉斯統計:Gibbs sampling 原理到實踐

我們上面在 Gibbs 取樣中計算分別取樣都可以用 Dir 分佈的的期望來作為新的引數值。

編碼

介紹完數學基礎後,我麼就能來看如何實現了,下面是一個虛擬碼。

貝葉斯統計:Gibbs sampling 原理到實踐

完整的程式碼可以見玩點高階的 —— 帶你入門 Topic 模型 LDA(小改進 + 附原始碼)

pymc3 實現

下面我們再來用 pymc3 來實現下。

可以說 pymc3 寫出來的程式碼真是簡潔。but。就是太慢了,完整的程式碼可以看 gibbs-lda。

總結

本文介紹了 mh 演算法的特例 Gibbs 取樣,並且給出了證明為什麼 Gibbs 取樣 work,最後我們用 Gibbs 取樣來解決了 LDA 的引數估計問題。

你的鼓勵是我繼續寫下去的動力,期待我們共同進步。

Top