最近看了一下LDA的文章, 寫個小結, 了解正确與否有待驗證.
Latent Dirichlet Allocation(LDA)是三層的層次機率貝葉斯模型(生成模型), 用于處理離散資料, 比如文本資料.
1. 概念
單詞(word): 形成資料的基本單元
文檔(document): 單詞形成的有限序列
語料庫(corpus): 所有文檔的集合
2. 記号
假設一共有 \(V\) 個單詞, 則第 \(j\) 個單詞表示為:
\[w = (0,\cdots,0,1,0,\cdots, 0), \text{其中$ 1 $位于第$ j $個位置.} \]
假設一共有 \(K\) 個主題, 則第 \(i\) 個主題表示為:
\[z = (0,\cdots,0,1,0,\cdots, 0), \text{其中$ 1 $位于第$ i $個位置.} \]
3. 流程
生成一個文檔的過程如下:
從參數為 \(\xi\) 的Poisson分布中選取文檔單詞數 \(N\);
從參數為 \(\alpha\) 的Dirichlet分布中選擇一個參數 \(\theta\);
依次生成每個單詞 \(w_n\)(\(n=1,\cdots,N\)):
從參數為 \(\theta\) 的多項分布中選擇一個主題 \(z_n\);
從以 \(\beta\) 為參數的條件多項分布 \(p(w_n|z_n, \beta)\) 中選取出單詞 \(w_n\).
其中假設Dirichlet分布的維數固定為 \(K\)(即主題數固定為 \(K\)).
各參數分析如下:
參數 \(\xi\) 是一個數;
參數 \(\theta = (\theta^1, \cdots, \theta^K)\) 是一個 \(K\)維向量, 表示 \(K\) 個主題的機率分布;
參數 \(\alpha=(\alpha^1, \cdots, \alpha^K)\) 是一個 \(K\) 維向量, \(\alpha^i\) 表示 \(\theta^i\) 對應的Dirichlet分布參數;
參數 \(\beta\) 是一個 \(K\times V\) 的矩陣, \(\beta_{ij} = p(w^j=1|z^i=1)\), 即第 \(i\) 個主題中第 \(j\) 個單詞的機率.
從上面的參數分析可以看見, 之是以使用Dirichlet先驗分布, 是因為它恰到好處地, 給了我們想要的主題分布的每個參數 \(\theta^i\) 一個對應的參數 \(\alpha^i\), 并且對後面的變分推斷和參數估計有益.
給定參數 \(\alpha\) 和 \(\beta\), 可以得到 \(\theta = (\theta^1, \cdots,\theta^K)\), \(z=(z_1, \cdots, z_N)\), \(w = (w_1, \cdots, w_N)\)的聯合分布
\[p(\theta,z,w|\alpha, \beta) = p(\theta|\alpha)\prod_{n=1}^{N}p(z_n|\theta)p(w_n|z_n, \beta), \]
對 \(\theta\) 和 \(z\) 分别積分求和, 可以得到關于文檔的邊際分布
\[p(w|\alpha, \beta) = \int p(\theta|\alpha) \bigg(\prod_{n=1}^{N}\sum_{z_n} p(z_n|\theta)p(w_n|z_n, \beta) \bigg) d\theta. \]
4. 推斷
LDA的推斷問題是, 給定文檔後, 隐變量的後驗分布
\[p(\theta, z|w, \alpha, \beta) = \frac{p(\theta, z, w|\alpha, \beta)}{p(w|\alpha, \beta)}. \]
上式分母不可計算, 近似的方法包括Laplace逼近, 變分逼近, Markov鍊蒙特卡羅法等.
用上面後驗分布的解耦樣式
\[q(\theta, z|\gamma, \phi) = q(\theta|\gamma)\prod_{n=1}^{N} q(z_n|\phi_n) \]
逼近, 其中 \(\gamma=(\gamma^1, \cdots, \gamma^K)\) 為Dirichlet參數(近似 \(\alpha\)), \(\phi = (\phi_1, \cdots, \phi_N)\) 每個分量都是多項分布參數(近似 \(\beta\)). 極大似然問題變為極小化KL散度的優化問題:
\[(\gamma^{*}, \phi^{*}) = \arg\min_{(\gamma, \phi)} D(a(\theta, z)\Vert p(\theta, z|w, \alpha, \beta)), \]
可以得到
\[\begin{aligned} \phi_{ni} &\propto \beta_{iw_n} e^{E_q[\log(\theta_i)|\gamma]} \\ \gamma_i &= \alpha_i + \sum_{n=1}^{N} \phi_{ni}. \end{aligned} \]
計算僞碼為

5. 參數估計
參數應極大化對數似然
\[l(\alpha, \beta) = \sum_{d=1}^{M} \log p(w_d|\alpha, \beta), \]
但是對數似然卻難以計算. 我們可以利用變分推斷得到的下界近似對數似然, 可以在EM算法的M步, 極大化證據下界以更新變分參數 \(\gamma\) 和 \(\phi\), 而對于固定的變分參數, 又可以通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).
EM算法:
(E步)對每個文檔, 尋找最優變分參數 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 這一步由變分推斷得到;
(M步)通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).
其中第二步中, 參數 \(\beta\) 可以解析表示
\[\beta_{ij} \propto \sum_{d=1}^{M}\sum_{n=1}^{N_d} \phi_{dni}^{*} w_{dn}^j, \]
但參數 \(\alpha\) 則需要用Newton-Raphson方法計算.
接下來希望能夠弄清楚具體的代碼實作.