1. 程式人生 > >LDA變分法和取樣法

LDA變分法和取樣法

目前比較方便的LDA解法是gibbs取樣,但是對於改進型LDA,如果分佈不再是dirchlet分佈,p(z|w)可能就不太好求了(這裡z代表隱藏變數,w是觀察量),只能用變分法。

LDA變分EM演算法

LDA主要完成兩個任務,給定現有文件集合D,要確定超引數αβ值;或者給一篇新的文件,能夠依據前面的超引數來確定隱藏變數θz分佈。其實後面一個任務可以歸到前面中,因為前面可以順帶求出隱變數分佈。
這裡採用模型是比較原始的LDA模型,論文參考blei的2003年論文和“Note 1: Varitional Methods for Latent Dirichlet Allocation”
這裡寫圖片描述


(這裡β代表k*v的矩陣,代表一個確定的主題-詞分佈矩陣)
首先我們想計算出p(Dα,β),然後用最大似然估計來確定引數。然而發現:
ln(p(Dα,β))=ln(p(w,θ,z)dθdz)顯然裡面的聯合概率很好求,但是積分沒法求。所以得尋求其他方案。
可以參見prml書的第九章和第十章,採用EM演算法。ln(p(Dα,β))=L(q(θ,z),α,β)+KL(q(θ,z)||p(θ,z|D))這裡把部分依賴\alpha ,\beta省略了。
由於KL>=0,所以L顯然是ln(p(D∣α,β))的一個下界。首先讓下界最大,即如果模型引數固定,那麼左式顯然是一個固定的常數,當且僅當KL最小的時候,即q(θ,z)是引數的後驗概率時成立。
這裡假定q的形式是已知的,變分引數未知,也就是假定:q
(θ,z|γ,ϕ)=q(θ|γ)q(z|ϕ)
,那麼最大化L就可以得到變分引數γ,ϕ。這裡主要的過程就是求導了。最後的結果是γ=f(α,β,ϕ),ϕ=g(α,β,γ),對了這裡採用固定點迭代的方法求。
上面的這一過程就是E步,即在給定模型引數的情況下試圖使下界儘可能大的一個過程,所表現出來的形式就是L函式可以是一個函式關於隱含變數後驗期望的表示。
下面介紹M步。即對於前面變分引數確定後,q(\theta,z|\gamma,\phi)已知了,L函式也表示出來了,那麼接下來就是使得L函式關於α,β最大化。注意前面L最大化針對的是γ,ϕ,結果上使得L趨近於ln(p(D∣α,β));而這裡針對α,
β
,結果上是提升ln(p(D∣α,β)),同時KL>0,導致ln(p(D∣α,β))主要變化集中在M步,而且是單調的。然後繼續是求導了,詳細過程參考前面的文件。
(Note:在E步時,因為推斷的是文件相關的變分引數和隱藏變數,而文件之間相互獨立,所以可以用一篇文件w代替文件集D;而M步的模型引數是針對全文件集的,因此必須使用D)

LDA的gibbs取樣

這裡假定主題-詞分佈是不確定的
詳細過程參考LDA數學八卦。這裡主要做一些補充解釋。
以該書推導過程為例,首先gibbs取樣前提是假設超引數已知,然後任務是推斷隱藏變數分佈或者說隱藏變數的期望。也就是實際上估計:p(θ,ϕ,z|D,α,β)。由於\theta,\phi是多項分佈的概率,所以可以依據z和w間的關係統計出來,所以實際上只要估計p(z|D,\alpha,\beta)就可以了,這稱之為collapsed的lda gibbs取樣。這就是gibbs要取樣的概率分佈。然後取樣到這些樣本後,可以直接拿來做平均就得到z的期望;或者統計次數得到其他隱藏變數的期望。
(NOTE:估計引數指得到一個固定的具體的值;估計隨機量首先必須要得到該分佈,或以概率最大的點MAP代替該隨機量;或採樣後以期望代替該隨機量)