之前关于主题模型整理了《文本建模之Unigram Model,PLSA与LDA》与《再看LDA主题模型》两篇博客,以及针对PLSA的求解整理了博客《主题模型(3)——PLSA模型及其EM算法求解》,这一篇博客将继续整理LDA(Latent Dirichlet Allocation)模型的Gibbs Sample求解方法。
LDA回顾
同样,首先回归下LDA模型的文档生成过程。我们知道,LDA在PLSA的基础上引入了贝叶斯框架,即参数不仅未知,而且取值不固定。 按照贝叶斯学派的思想,我们先给参数指定一个先验分布(prior),然后我们观察到一些样本,进而对参数的分布进行调整,得到参数的后验分布(posterior),参数先验分布与后验分布通过贝叶斯定理连接:
p
(
x
∣
y
)
=
p
(
x
,
y
)
p
(
y
)
=
p
(
y
∣
x
)
p
(
x
)
p
(
y
)
p(x|y)=\frac{p(x,y)}{p(y)}=\frac{p(y|x)p(x)}{p(y)}
p(x∣y)=p(y)p(x,y)=p(y)p(y∣x)p(x)
LDA模型将Dirichlet分布作为参数的先验分布,至于原因,是因为Dirichlet分布于多项式分布是一对共轭分布,保证了计算后验概率的便利。在给出LDA模型文档生成概率之前,我们先规定一些记号:
- V V V:语料中词汇构成的字典大小
- K K K:人工定义的主题个数
- M M M:语料中文档数目
- N m N_m Nm:语料中第 m m m篇文档的单词数目
- w m , n w_{m,n} wm,n:语料中第 m m m篇文档第 n n n个单词
- z m , n z_{m,n} zm,n:语料中第 m m m篇文档第 n n n个单词 w m , n w_{m,n} wm,n对应的主题
- θ ⃗ m \vec{\theta}_m θm:第 m m m篇文档的主题分布参数,长度为 K K K,因此 M M M篇文档的主题分布构成了一个 M ∗ K M*K M∗K的矩阵,记为 Θ \Theta Θ,每一行代表一篇文档的主题分布。
- ϕ ⃗ k \vec{\phi}_k ϕk:第 k k k个主题的词分布参数,长度为 V V V,因此 K K K个主题的词分布构成了一个 K ∗ V K*V K∗V的矩阵,记为 Φ \Phi Φ,每一行代表一个主题的词分布。
LDA通过模拟文档生成过程,找出文档最有可能的主题参数。 在生成文档时,首先根据主题参数的先验分布随机选取一个文档主题分布
θ
⃗
m
\vec{\theta}_{m}
θm与主题词分布
Φ
\Phi
Φ,然后从主题分布下生成主题,从主题对应的词分布下生成单词,因此第
m
m
m篇文档第
n
n
n个单词生成概率是
(1)
p
(
w
m
,
n
,
z
m
,
n
,
θ
⃗
m
,
ϕ
⃗
z
m
,
n
∣
α
⃗
,
β
⃗
)
=
p
(
w
m
,
n
∣
ϕ
⃗
z
m
,
n
)
p
(
z
m
,
n
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
α
⃗
)
p
(
ϕ
⃗
z
m
,
n
∣
β
⃗
)
p(w_{m,n},z_{m,n},\vec{\theta}_m,\vec{\phi}_{z_{m,n}}|\vec{\alpha},\vec{\beta})=p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta}) \tag 1
p(wm,n,zm,n,θm,ϕzm,n∣α,β)=p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)(1)
上式中,
θ
⃗
m
\vec{\theta}_m
θm、
z
m
,
n
z_{m,n}
zm,n和
ϕ
⃗
z
m
,
n
\vec{\phi}_{z_{m,n}}
ϕzm,n都是隐变量,将
θ
⃗
m
\vec{\theta}_m
θm、
z
m
,
n
z_{m,n}
zm,n和
ϕ
⃗
z
m
,
n
\vec{\phi}_{z_{m,n}}
ϕzm,n积分掉,将得到全概率
p
(
w
m
,
n
∣
α
⃗
,
β
⃗
)
p(w_{m,n}|\vec{\alpha},\vec{\beta})
p(wm,n∣α,β)
(2)
p
(
w
m
,
n
∣
α
⃗
,
β
⃗
)
=
∑
z
m
,
n
∫
∫
p
(
w
m
,
n
∣
ϕ
⃗
z
m
,
n
)
p
(
z
m
,
n
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
α
⃗
)
p
(
ϕ
⃗
z
m
,
n
∣
β
⃗
)
d
ϕ
⃗
z
m
,
n
d
θ
⃗
m
p(w_{m,n}|\vec{\alpha},\vec{\beta})=\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \tag 2
p(wm,n∣α,β)=zm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm(2)
重复上述单词生成过程,生成一篇文档;重复文档生成过程,产生整个文档集,文档集的生成概率为:
(3)
p
(
D
)
=
∏
m
=
1
M
∏
n
=
1
N
m
p
(
w
m
,
n
∣
α
⃗
,
β
⃗
)
=
∏
m
=
1
M
∏
n
=
1
N
m
∑
z
m
,
n
∫
∫
p
(
w
m
,
n
∣
ϕ
⃗
z
m
,
n
)
p
(
z
m
,
n
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
α
⃗
)
p
(
ϕ
⃗
z
m
,
n
∣
β
⃗
)
d
ϕ
⃗
z
m
,
n
d
θ
⃗
m
\begin{aligned} p(D)&=\prod_{m=1}^{M}\prod_{n=1}^{N_m}p(w_{m,n}|\vec{\alpha},\vec{\beta})\\ &= \prod_{m=1}^{M}\prod_{n=1}^{N_m}\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \tag 3 \end{aligned}
p(D)=m=1∏Mn=1∏Nmp(wm,n∣α,β)=m=1∏Mn=1∏Nmzm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm(3)
按照常理,最大化 p ( D ) p(D) p(D),我们就能求出主题参数,但是,上式包含无数隐变量的累加,即使给定一组主题参数,直接求出 p ( D ) p(D) p(D)都几乎不可能。好在计算机科学家们想到了通过随机模拟的方法(又称蒙特卡洛方法,Monte Carlo Simulation),生成分布的无数样本,用频率近似代替概率的方式解决概率求解的问题,Gibbs Sample便是其中的代表方法。
Gibbs Sample算法
采样是从特定概率分布中抽取样本的过程,采样方法用于获得服从指定概率分布的样本。 因此要采样,我们就必须知道概率分布,但是,对于一个概率分布 p ( x ⃗ ) p(\vec{x}) p(x),其分布可能非常复杂,无法直接求出其概率值,将导致采样遇到困难。此时就需要Gibbs Sample等更加复杂的能够work的采样方法。那Gibbs Sample是怎么操作的呢?
Gibbs Sample是马尔可夫链蒙特卡罗理论中用来近似求解多维概率分布(2个或多个随机变量的联合分布)的算法。Gibbs Sample形式化描述如下:对于一个复杂的概率分布 p ( x ⃗ ) p(\vec{x}) p(x),我们没法求出其对应的概率分布,但如果我们能够求出在给定其他分量 x ¬ i x_{\neg i} x¬i情况下 x i x_i xi的概率 p ( x i ∣ x ¬ i ) p(x_i|x_{\neg i}) p(xi∣x¬i),那么我们可以根据 p ( x i ∣ x ¬ i ) p(x_i|x_{\neg i}) p(xi∣x¬i)采样每一个分量 x i x_i xi组成一个样本 x ⃗ \vec{x} x,重复上述采样过程 T T T次,最后统计频率作为概率。 执行过程如下:
- 随机初始化 x ⃗ 0 = { x 1 0 , x 2 0 , ⋯   , x N 0 } \vec{x}^0=\{x_1^0,x_2^0,\cdots,x_N^0\} x0={x10,x20,⋯,xN0}
- for
t
=
1
,
2
,
3
,
⋯
 
,
T
:
t=1,2,3,\cdots,T:
t=1,2,3,⋯,T:
- x 1 t ∼ p ( x 1 ∣ x 2 t − 1 , x 3 t − 1 , ⋯   , x N t − 1 ) x_1^t \thicksim p(x_1|x_2^{t-1},x_3^{t-1},\cdots,x_N^{t-1}) x1t∼p(x1∣x2t−1,x3t−1,⋯,xNt−1)
- x 2 t ∼ p ( x 2 ∣ x 1 t , x 3 t − 1 , ⋯   , x N t − 1 ) x_2^t \thicksim p(x_2|x_1^{t},x_3^{t-1},\cdots,x_N^{t-1}) x2t∼p(x2∣x1t,x3t−1,⋯,xNt−1)
- x 3 t ∼ p ( x 2 ∣ x 1 t , x 2 t , ⋯   , x N t − 1 ) x_3^t \thicksim p(x_2|x_1^{t},x_2^{t},\cdots,x_N^{t-1}) x3t∼p(x2∣x1t,x2t,⋯,xNt−1)
- ⋯ \cdots ⋯
- x N t ∼ p ( x 2 ∣ x 1 t , x 2 t , ⋯   , x N − 1 t ) x_N^t \thicksim p(x_2|x_1^{t},x_2^{t},\cdots,x_{N-1}^{t}) xNt∼p(x2∣x1t,x2t,⋯,xN−1t)
- 得到一个样本 x ⃗ t = { x 1 t , x 2 t , ⋯   , x N t } \vec{x}^t=\{x_1^t,x_2^t,\cdots,x_N^t\} xt={x1t,x2t,⋯,xNt}
- 直至采样过程收敛,得到的样本 [ x ⃗ n + 1 , x ⃗ n + 2 , ⋯   , x ⃗ T ] [\vec{x}^{n+1},\vec{x}^{n+2},\cdots,\vec{x}^{T}] [xn+1,xn+2,⋯,xT]就是真实的 p ( x ⃗ ) p(\vec{x}) p(x)样本。
马尔可夫链及其性质
在引出Gibbs Sample前,需要先简要介绍下马尔可夫链及其平稳分布,马尔可夫链数学定义如下:
p
(
X
t
+
1
∣
X
t
,
X
t
−
1
,
⋯
 
)
=
p
(
X
t
+
1
∣
X
t
)
p(X_{t+1}|X_t,X_{t-1},\cdots)=p(X_{t+1}|X_t)
p(Xt+1∣Xt,Xt−1,⋯)=p(Xt+1∣Xt)
即当前状态只受到前一个状态的影响,而与其他状态无关。通常状态之间的转移概率用转移矩阵描述,如下图,展示了状态1,2,3之间的概率转移

其对应的状态转移矩阵如下:
P
=
[
0.65
0.28
0.07
0.15
0.67
0.18
0.12
0.36
0.52
]
P= \begin{bmatrix} 0.65 & 0.28 & 0.07 \\ 0.15 & 0.67 & 0.18 \\ 0.12 & 0.36 & 0.52 \\ \end{bmatrix}
P=⎣⎡0.650.150.120.280.670.360.070.180.52⎦⎤
对于马尔可夫链状态转移矩阵,存在马氏链定理: 如果一个非周期马氏链具有状态转移矩阵 P P P,且它的任意两个状态是联通的(从任意一个状态能到其他任意状态),那么 lim n → ∞ P i j n \lim\limits_{n\to\infty} P_{ij}^n n→∞limPijn存在且与 i i i无关,记 lim n → ∞ P i j n = π ( j ) \lim\limits_{n\to\infty} P_{ij}^n=\pi(j) n→∞limPijn=π(j),我们有
- lim n → ∞ P n = [ π ( 1 ) π ( 2 ) ⋯ π ( j ) ⋯ π ( 1 ) π ( 2 ) ⋯ π ( j ) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ π ( 1 ) π ( 2 ) ⋯ π ( j ) ⋯ ] \lim\limits_{n\to\infty}P^n=\begin{bmatrix} \pi(1)& \pi(2) & \cdots & \pi(j) & \cdots \\ \pi(1)& \pi(2) & \cdots & \pi(j) & \cdots \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ \pi(1)& \pi(2) & \cdots & \pi(j) & \cdots \\ \end{bmatrix} n→∞limPn=⎣⎢⎢⎡π(1)π(1)⋯π(1)π(2)π(2)⋯π(2)⋯⋯⋯⋯π(j)π(j)⋯π(j)⋯⋯⋯⋯⎦⎥⎥⎤
- π ( j ) = ∑ i = 0 ∞ π ( i ) P i j \pi(j)=\sum_{i=0}^\infty\pi(i)P_{ij} π(j)=∑i=0∞π(i)Pij
- π \pi π是方程 π P = π \pi P=\pi πP=π的唯一非负解
其中,
π
=
[
π
(
1
)
,
π
(
2
)
,
⋯
 
,
π
(
j
)
,
⋯
 
]
,
∑
i
π
(
i
)
=
1
\pi = [\pi(1),\pi(2),\cdots,\pi(j),\cdots],\quad\sum \nolimits_i\pi(i)=1
π=[π(1),π(2),⋯,π(j),⋯],∑iπ(i)=1
称为马氏链的平稳分布。
上面1,2,3分别说明
- 状态转移矩阵经过多次转移后,会达到稳定。
- 马氏链稳定后,转移到任意状态的概率是稳定的。
- 一个状态转移矩阵只对应唯一一个平稳分布。
如果我们从一个具体地初始状态
x
0
x_0
x0出发,时刻1所处状态
x
1
x_1
x1满足概率分布
P
i
P_i
Pi(
P
i
P_i
Pi是状态转移矩阵中状态
x
0
x_0
x0对应的转移概率),将其记为
π
1
(
x
)
\pi_{1}(x)
π1(x)。时刻2所处状态
x
2
x_2
x2满足概率分布
π
1
(
x
)
P
\pi_1(x)P
π1(x)P,将其记为
π
2
(
x
)
\pi_{2}(x)
π2(x)。以此类推,时刻n所处状态
x
n
x_n
xn满足概率分布
π
n
−
1
(
x
)
P
=
π
1
(
x
)
P
n
−
1
\pi_{n-1}(x)P=\pi_1(x)P^{n-1}
πn−1(x)P=π1(x)Pn−1,即
x
0
x
1
∼
π
1
(
x
)
=
P
i
⋯
x
n
∼
π
n
(
x
)
=
π
n
−
1
(
x
)
P
=
P
i
P
n
−
1
x
n
+
1
∼
π
n
+
1
(
x
)
=
π
n
(
x
)
P
=
P
i
P
n
x
n
+
2
∼
π
n
+
2
(
x
)
=
π
n
+
1
(
x
)
P
=
P
i
P
n
+
1
⋯
\begin{aligned} x_0&\\ x_1&\thicksim \pi_1(x)=P_i\\ \cdots \\ x_n&\thicksim \pi_n(x)=\pi_{n-1}(x)P=P_iP^{n-1} \\ x_{n+1}&\thicksim \pi_{n+1}(x)=\pi_{n}(x)P=P_iP^{n} \\ x_{n+2}&\thicksim \pi_{n+2}(x)=\pi_{n+1}(x)P=P_iP^{n+1} \\ \cdots \end{aligned}
x0x1⋯xnxn+1xn+2⋯∼π1(x)=Pi∼πn(x)=πn−1(x)P=PiPn−1∼πn+1(x)=πn(x)P=PiPn∼πn+2(x)=πn+1(x)P=PiPn+1
根据马氏链的收敛定理,假设 n n n时刻马氏链已经收敛到平稳分布 π ( x ) \pi(x) π(x),那么 x n + 1 , x n + 2 , ⋯ x_{n+1},x_{n+2},\cdots xn+1,xn+2,⋯都将是平稳分布 π ( x ) \pi(x) π(x)的样本。这不正是我们想要实现的从某个概率分布中采样的过程吗?
Markov Chain Monte Carlo
根据上面的推导,对于一个概率分布 p ( x ) p(x) p(x),如果我们能够构造一个转移矩阵为 P P P的马氏链,并且该马氏链的平稳分布恰好是 p ( x ) p(x) p(x),那么当马氏链收敛后,我们就得到了概率分布 p ( x ) p(x) p(x)的样本。 因为上述方法属于随机模拟方法的扩展,并且用到了马尔可夫链,因此这类方法被称为马尔可夫链蒙特卡罗方法(Markov Chain Monte Carlo,MCMC)。
基于马氏链做采样的关键是如何构造概率分布 p ( x ) p(x) p(x)对应的状态转移矩阵 P P P,直接找到这个矩阵 P P P通常很难做到,需要借助细致平稳条件(detailed balance condition)实现。
细致平稳条件的定义如下:如果非周期马氏链的转移矩阵
P
P
P和概率分布
p
(
x
)
p(x)
p(x)满足
p
(
i
)
P
(
i
,
j
)
=
p
(
j
)
P
(
j
,
i
)
for all
i
,
j
p(i)P(i,j)=p(j)P(j,i)\qquad \text{for all}\enspace i,j
p(i)P(i,j)=p(j)P(j,i)for alli,j
则概率分布 p ( x ) p(x) p(x)是马氏链转移矩阵 P P P的平稳分布。
也就是说我们只需要找到使概率分布满足细致平稳条件的矩阵
P
P
P。通常情况下,对于一个状态转移矩阵
Q
Q
Q,
p
(
i
)
q
(
i
,
j
)
 
/
=
p
(
j
)
q
(
j
,
i
)
p(i)q(i,j)\mathrlap{\,/}{=}p(j)q(j,i)
p(i)q(i,j)/=p(j)q(j,i),因此我们需要对转移矩阵
Q
Q
Q进行改造,使得
p
(
i
)
q
′
(
i
,
j
)
=
p
(
j
)
q
′
(
j
,
i
)
p(i)q'(i,j)=p(j)q'(j,i)
p(i)q′(i,j)=p(j)q′(j,i)。最直观的方法是引入一个
α
(
i
,
j
)
\alpha(i,j)
α(i,j),使得
p
(
i
)
q
(
i
,
j
)
α
(
i
,
j
)
=
p
(
j
)
q
(
j
,
i
)
α
(
j
,
i
)
p(i)q(i,j)\alpha(i,j)=p(j)q(j,i)\alpha(j,i)
p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)
按照对称性,我们可以取
α
(
i
,
j
)
=
p
(
j
)
q
(
j
,
i
)
α
(
j
,
i
)
=
p
(
i
)
q
(
i
,
j
)
\alpha(i,j)=p(j)q(j,i)\\ \alpha(j,i)=p(i)q(i,j)
α(i,j)=p(j)q(j,i)α(j,i)=p(i)q(i,j)
此时,新的转移矩阵 q ′ ( i , j ) = q ( i , j ) α ( i , j ) q'(i,j)=q(i,j)\alpha(i,j) q′(i,j)=q(i,j)α(i,j),即 Q ′ = Q ⊙ α Q'=Q\odot\alpha Q′=Q⊙α,此处是矩阵的Hadamard乘积。直接从 Q ′ Q' Q′中采样还是难以实现,可以将 α \alpha α看作接受率,应用接受-拒绝采样得到分布的一系列样本。
Gibbs Sample原理
分析上面的MCMC采样,由于接受率 α \alpha α的存在,导致算法效率不高;另一方面,更为致命的是,很多时候我们很难求出多维联合概率分布 p ( x ⃗ ) p(\vec{x}) p(x),导致上面的算法无法work,这时就需要使用Gibbs Sample。
考虑由二维特征
(
x
,
y
)
(x,y)
(x,y)描述的状态,假设其概率分布为
p
(
x
,
y
)
p(x,y)
p(x,y),现在固定其中的
x
x
x,对于两个状态
A
(
x
1
,
y
1
)
A(x_1,y_1)
A(x1,y1)和
B
(
x
1
,
y
2
)
B(x_1,y_2)
B(x1,y2),根据概率公式:
p
(
x
1
,
y
1
)
p
(
y
2
∣
x
1
)
=
p
(
x
1
)
p
(
y
1
∣
x
1
)
p
(
y
2
∣
x
1
)
p
(
x
1
,
y
2
)
p
(
y
1
∣
x
1
)
=
p
(
x
1
)
p
(
y
2
∣
x
1
)
p
(
y
1
∣
x
1
)
p(x_1,y_1)p(y_2|x_1)=p(x_1)p(y_1|x_1)p(y_2|x_1)\\ p(x_1,y_2)p(y_1|x_1)=p(x_1)p(y_2|x_1)p(y_1|x_1)
p(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)p(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)
可得
(4)
p
(
x
1
,
y
1
)
p
(
y
2
∣
x
1
)
=
p
(
x
1
,
y
2
)
p
(
y
1
∣
x
1
)
p(x_1,y_1)p(y_2|x_1)=p(x_1,y_2)p(y_1|x_1) \tag 4
p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)(4)
其中,因为
A
,
B
A,B
A,B两状态的
x
x
x特征相同,因此从
A
A
A状态转移到
B
B
B状态等价于在给定
x
1
x_1
x1时
y
2
y_2
y2的取值概率,即
p
(
y
2
∣
x
1
)
p(y_2|x_1)
p(y2∣x1),所以
p
(
y
2
∣
x
1
)
p(y_2|x_1)
p(y2∣x1)表示了转移概率
p
(
A
→
B
)
p(A\to B)
p(A→B),
p
(
y
1
∣
x
1
)
p(y_1|x_1)
p(y1∣x1)表示了转移概率
p
(
B
→
A
)
p(B\to A)
p(B→A),所以上面等式(4)表达了
(5)
p
(
A
)
p
(
A
→
B
)
=
p
(
B
)
p
(
B
→
A
)
p(A)p(A\to B)=p(B)p(B\to A) \tag 5
p(A)p(A→B)=p(B)p(B→A)(5)
同理,固定特征
y
y
y,我们也会得到同样的等式,这表明在二维概率分布中,固定其中一维,使用条件分布
p
(
y
∣
x
)
p(y|x)
p(y∣x)作为状态之间的转移概率,那么任意两个状态之间的转移满足细致平稳条件。即构造如下状态转移矩阵
Q
(
A
→
B
)
=
p
(
y
B
∣
x
1
)
if
x
A
=
x
B
=
x
1
Q
(
A
→
C
)
=
p
(
x
C
∣
y
1
)
if
y
A
=
y
B
=
y
1
Q
(
A
→
D
)
=
0
else
\begin{aligned} Q(A\to B)=&p(y_B|x_1) \qquad \text{if}\enspace x_A=x_B=x_1\\ Q(A\to C)=&p(x_C|y_1) \qquad \text{if}\enspace y_A=y_B=y_1\\ Q(A\to D)=&0\qquad\qquad\qquad\qquad\qquad\enspace \text{else} \end{aligned}
Q(A→B)=Q(A→C)=Q(A→D)=p(yB∣x1)ifxA=xB=x1p(xC∣y1)ifyA=yB=y10else
如下图所示:

根据上面的状态转移矩阵,我们可以很容易的验证任意两个状态
X
,
Y
X,Y
X,Y,满足细致平稳条件:
p
(
X
)
Q
(
X
→
Y
)
=
p
(
Y
)
Q
(
y
→
X
)
p(X)Q(X\to Y)=p(Y)Q(y\to X)
p(X)Q(X→Y)=p(Y)Q(y→X)
因此,在二维平面中,马氏链轮换的沿着 x x x轴和 y y y轴转移,得到样本 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ⋯ (x_0,y_0),(x_1,y_1),\cdots (x0,y0),(x1,y1),⋯,等到马氏链收敛后,最终得到的样本就是概率分布 p ( x , y ) p(x,y) p(x,y)的样本,上述过程就是二维Gibbs Sample算法。推广到多维分布,我们就得到了Gibbs Sample的一般形式。
LDA模型的Gibbs Sample求解步骤
回到我们的LDA模型,我们已经写出文档集的生成概率为:
p
(
D
)
=
∏
m
=
1
M
∏
n
=
1
N
m
p
(
w
m
,
n
∣
α
⃗
,
β
⃗
)
=
∏
m
=
1
M
∏
n
=
1
N
m
∑
z
m
,
n
∫
∫
p
(
w
m
,
n
∣
ϕ
⃗
z
m
,
n
)
p
(
z
m
,
n
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
α
⃗
)
p
(
ϕ
⃗
z
m
,
n
∣
β
⃗
)
d
ϕ
⃗
z
m
,
n
d
θ
⃗
m
\begin{aligned} p(D)&=\prod_{m=1}^{M}\prod_{n=1}^{N_m}p(w_{m,n}|\vec{\alpha},\vec{\beta})\\ &= \prod_{m=1}^{M}\prod_{n=1}^{N_m}\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \end{aligned}
p(D)=m=1∏Mn=1∏Nmp(wm,n∣α,β)=m=1∏Mn=1∏Nmzm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm
这个概率直接求解几乎不可能。遇到困难,再看一下目标,能保证我们不迷失方向。
单词主题联合概率
LDA模型的目标是:找出文档的主题参数,也就是文档中每个单词对应的主题,那我们是不是可以对上面的
p
(
D
)
p(D)
p(D)放松一下,求出
p
(
w
⃗
,
z
⃗
)
p(\vec{w},\vec{z})
p(w,z)的概率呢?
p
(
w
⃗
,
z
⃗
)
=
p
(
w
⃗
∣
z
⃗
,
β
⃗
)
p
(
z
⃗
∣
α
⃗
)
\begin{aligned} p(\vec{w},\vec{z})&=p(\vec{w}|\vec{z},\vec{\beta})p(\vec{z}|\vec{\alpha})\\ \end{aligned}
p(w,z)=p(w∣z,β)p(z∣α)
上式在博客《再看LDA主题模型》中已经分析过,其包含两个独立的过程:先生成文档每个位置对应的主题,然后根据主题生成每个位置的单词。
文档
m
m
m的主题生成概率
p
(
z
m
⃗
∣
α
⃗
)
p(\vec{z_m}|\vec{\alpha})
p(zm∣α)计算如下:
p
(
z
m
⃗
∣
α
⃗
)
=
∫
p
(
z
m
⃗
∣
θ
m
⃗
)
p
(
θ
m
⃗
∣
α
⃗
)
d
θ
m
⃗
=
∫
p
(
z
m
⃗
∣
θ
m
⃗
)
D
i
r
(
θ
m
⃗
∣
α
⃗
)
d
θ
m
⃗
=
∫
∏
k
=
1
K
θ
k
,
m
n
k
,
m
1
Δ
(
α
⃗
)
∏
k
=
1
K
θ
k
,
m
α
k
,
m
−
1
d
θ
m
⃗
=
1
Δ
(
α
⃗
)
∫
∏
k
=
1
K
θ
k
,
m
n
k
,
m
+
α
k
−
1
d
θ
m
⃗
=
Δ
(
n
m
⃗
+
α
⃗
)
Δ
(
α
⃗
)
\begin{aligned} p(\vec{z_m}|\vec{\alpha}) =& \int p(\vec{z_m}|\vec{\theta_m})p(\vec{\theta_m}|\vec{\alpha})d\vec{\theta_m} \\ =& \int p(\vec{z_m}|\vec{\theta_m})Dir(\vec{\theta_m}|\vec{\alpha})d\vec{\theta_m} \\ =& \int \prod_{k=1}^K\theta_{k,m}^{n_{k,m}}\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^K\theta_{k,m}^{\alpha_{k,m}-1}d\vec{\theta_m} \\ =& \frac{1}{\Delta(\vec\alpha)}\int\prod_{k=1}^K\theta_{k,m}^{n_{k,m}+\alpha_{k}-1}d\vec{\theta_m} \\ =& \frac{\Delta(\vec{n_m}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned}
p(zm∣α)=====∫p(zm∣θm)p(θm∣α)dθm∫p(zm∣θm)Dir(θm∣α)dθm∫k=1∏Kθk,mnk,mΔ(α)1k=1∏Kθk,mαk,m−1dθmΔ(α)1∫k=1∏Kθk,mnk,m+αk−1dθmΔ(α)Δ(nm+α)
主题
k
k
k下单词生成概率
p
(
w
k
⃗
∣
z
k
,
β
⃗
)
p(\vec{w_k}|z_k,\vec{\beta})
p(wk∣zk,β)计算如下:
p
(
w
k
⃗
∣
z
k
,
β
⃗
)
=
∫
p
(
w
k
⃗
∣
φ
k
⃗
)
p
(
φ
k
⃗
∣
β
⃗
)
d
φ
k
⃗
=
∫
p
(
w
k
⃗
∣
φ
k
⃗
)
D
i
r
(
φ
k
⃗
∣
z
k
,
β
⃗
)
d
φ
k
⃗
=
∫
∏
v
=
1
V
φ
v
,
k
n
v
,
k
1
Δ
(
β
⃗
)
∏
v
=
1
V
φ
v
,
k
n
v
,
k
d
φ
k
⃗
=
1
Δ
(
β
⃗
)
∫
∏
v
=
1
V
φ
v
,
k
n
v
,
k
+
β
v
−
1
d
φ
k
⃗
=
Δ
(
n
k
⃗
+
β
⃗
)
Δ
(
β
⃗
)
\begin{aligned} p(\vec{w_k}|z_k,\vec{\beta}) =& \int p(\vec{w_k}|\vec{\varphi_k})p(\vec{\varphi_k}|\vec{\beta})d\vec{\varphi_k} \\ =& \int p(\vec{w_k}|\vec{\varphi_k})Dir(\vec{\varphi_k}|z_k,\vec{\beta})d\vec{\varphi_k} \\ =& \int \prod_{v=1}^V\varphi_{v,k}^{n_{v,k}}\frac{1}{\Delta(\vec{\beta})}\prod_{v=1}^V\varphi_{v,k}^{n_{v,k}}d\vec{\varphi_k} \\ =& \frac{1}{\Delta(\vec{\beta})}\int\prod_{v=1}^V\varphi_{v,k}^{n_{v,k}+\beta_{v}-1}d\vec{\varphi_k}\\ =& \frac{\Delta(\vec{n_k}+\vec{\beta})}{\Delta(\vec{\beta})} \end{aligned}
p(wk∣zk,β)=====∫p(wk∣φk)p(φk∣β)dφk∫p(wk∣φk)Dir(φk∣zk,β)dφk∫v=1∏Vφv,knv,kΔ(β)1v=1∏Vφv,knv,kdφkΔ(β)1∫v=1∏Vφv,knv,k+βv−1dφkΔ(β)Δ(nk+β)
因此
p
(
w
⃗
,
z
⃗
)
=
p
(
w
⃗
∣
z
⃗
,
β
⃗
)
p
(
z
⃗
∣
α
⃗
)
=
∏
k
=
1
K
p
(
w
⃗
∣
z
⃗
,
β
⃗
)
∏
m
=
1
M
p
(
z
⃗
∣
α
⃗
)
=
∏
k
=
1
K
Δ
(
n
k
⃗
+
β
⃗
)
Δ
(
β
⃗
)
∏
m
=
1
M
Δ
(
n
m
⃗
+
α
⃗
)
Δ
(
α
⃗
)
\begin{aligned} p(\vec{w},\vec{z}) =& p(\vec{w}|\vec{z},\vec{\beta})p(\vec{z}|\vec{\alpha}) \\ =& \prod_{k=1}^K p(\vec{w}|\vec{z},\vec{\beta})\prod_{m=1}^Mp(\vec{z}|\vec{\alpha})\\ =& \prod_{k=1}^K\frac{\Delta(\vec{n_k}+\vec{\beta})}{\Delta(\vec{\beta})}\prod_{m=1}^M\frac{\Delta(\vec{n_m}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned}
p(w,z)===p(w∣z,β)p(z∣α)k=1∏Kp(w∣z,β)m=1∏Mp(z∣α)k=1∏KΔ(β)Δ(nk+β)m=1∏MΔ(α)Δ(nm+α)
主题条件概率
有了联合概率,下面就需要求解条件概率
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
¬
i
)
p(z_i=k|\vec{w},\vec{z}_{¬i})
p(zi=k∣w,z¬i),这里
i
i
i是指第
m
m
m篇文档的第
n
n
n个词。因为词
w
i
w_i
wi是可以观察到的,因此我们有:
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
¬
i
)
∝
p
(
z
i
=
k
,
w
i
=
t
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
=
∫
∫
p
(
z
i
=
k
,
w
i
=
t
,
θ
⃗
m
,
φ
⃗
k
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
θ
⃗
m
d
φ
⃗
k
=
∫
∫
p
(
z
i
=
k
,
θ
⃗
m
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
p
(
w
i
=
t
,
φ
⃗
k
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
θ
⃗
m
d
φ
⃗
k
=
∫
p
(
z
i
=
k
,
θ
⃗
m
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
θ
⃗
m
∗
∫
p
(
w
i
=
t
,
φ
⃗
k
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
φ
⃗
k
=
∫
p
(
z
i
=
k
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
θ
⃗
m
∗
∫
p
(
w
i
=
t
∣
φ
⃗
k
)
p
(
φ
⃗
k
∣
w
⃗
¬
i
,
z
⃗
¬
i
)
d
φ
⃗
k
=
∫
p
(
z
i
=
k
∣
θ
⃗
m
)
D
i
r
(
θ
⃗
m
∣
n
⃗
m
,
¬
i
+
α
⃗
)
d
θ
⃗
m
∗
∫
p
(
w
i
=
t
∣
φ
⃗
k
)
D
i
r
(
φ
⃗
k
∣
n
⃗
k
,
¬
i
+
β
⃗
)
d
φ
⃗
k
=
∫
θ
m
,
k
D
i
r
(
θ
⃗
m
∣
n
⃗
m
,
¬
i
+
α
⃗
)
d
θ
⃗
m
∗
∫
φ
k
,
t
D
i
r
(
φ
⃗
k
∣
n
⃗
k
,
¬
i
+
β
⃗
)
d
φ
⃗
k
=
E
(
θ
m
,
k
)
∗
E
(
φ
k
,
t
)
\begin{aligned} p(z_i=k|\vec{w},\vec{z}_{¬i})&\propto p(z_i=k,w_i=t|\vec{w}_{¬i},\vec{z}_{¬i})\\ &=\int\int p(z_i=k,w_i=t,\vec{\theta}_m,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_md\vec{\varphi}_k\\ &=\int\int p(z_i=k,\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})p(w_i=t,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_md\vec{\varphi}_k\\ &=\int p(z_i=k,\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_m*\int p(w_i=t,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\varphi}_k\\ &=\int p(z_i=k|\vec{\theta}_m)p(\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_m*\int p(w_i=t|\vec{\varphi}_k)p(\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\varphi}_k\\ &=\int p(z_i=k|\vec{\theta}_m)Dir(\vec{\theta}_m|\vec{n}_{m,¬i}+\vec{\alpha})d\vec{\theta}_m*\int p(w_i=t|\vec{\varphi}_k)Dir(\vec{\varphi}_k|\vec{n}_{k,¬i}+\vec{\beta})d\vec{\varphi}_k\\ &=\int \theta_{m,k}Dir(\vec{\theta}_m|\vec{n}_{m,¬i}+\vec{\alpha})d\vec{\theta}_m*\int \varphi_{k,t}Dir(\vec{\varphi}_k|\vec{n}_{k,¬i}+\vec{\beta})d\vec{\varphi}_k\\ &=E(\theta_{m,k})*E(\varphi_{k,t}) \end{aligned}
p(zi=k∣w,z¬i)∝p(zi=k,wi=t∣w¬i,z¬i)=∫∫p(zi=k,wi=t,θm,φk∣w¬i,z¬i)dθmdφk=∫∫p(zi=k,θm∣w¬i,z¬i)p(wi=t,φk∣w¬i,z¬i)dθmdφk=∫p(zi=k,θm∣w¬i,z¬i)dθm∗∫p(wi=t,φk∣w¬i,z¬i)dφk=∫p(zi=k∣θm)p(θm∣w¬i,z¬i)dθm∗∫p(wi=t∣φk)p(φk∣w¬i,z¬i)dφk=∫p(zi=k∣θm)Dir(θm∣nm,¬i+α)dθm∗∫p(wi=t∣φk)Dir(φk∣nk,¬i+β)dφk=∫θm,kDir(θm∣nm,¬i+α)dθm∗∫φk,tDir(φk∣nk,¬i+β)dφk=E(θm,k)∗E(φk,t)
上式正是Dirichlet分布的期望,对于其中任意一项
i
i
i,我们有:
E
(
p
k
)
=
∫
0
1
p
k
∗
Γ
(
∑
i
=
1
K
α
i
)
∏
i
=
1
K
Γ
(
α
i
)
∏
i
=
1
K
p
i
α
i
−
1
d
p
⃗
=
Γ
(
∑
i
=
1
K
α
i
)
∏
i
=
1
K
Γ
(
α
i
)
∫
0
1
∏
i
=
1
k
−
1
p
i
α
i
−
1
∗
p
k
α
k
∗
∏
i
=
k
+
1
K
p
i
α
i
−
1
d
p
⃗
=
Γ
(
∑
i
=
1
K
α
i
)
∏
i
=
1
K
Γ
(
α
i
)
∗
∏
i
=
1
k
−
1
Γ
(
α
i
)
∗
Γ
(
α
k
+
1
)
∗
∏
i
=
k
+
1
K
Γ
(
α
i
)
Γ
(
∑
i
=
1
k
−
1
α
i
+
(
α
k
+
1
)
+
∑
i
=
k
+
1
K
α
i
)
=
α
k
∑
k
=
1
K
α
k
\begin{aligned} E(p_k)&=\int_0^1p_k*\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}\prod_{i=1}^Kp_i^{\alpha_i-1}d\vec{p}\\ &=\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}\int_0^1\prod_{i=1}^{k-1}p_i^{\alpha_i-1}*p_k^{\alpha_k}*\prod_{i=k+1}^{K}p_i^{\alpha_i-1}d\vec{p}\\ &=\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}*\frac{\prod_{i=1}^{k-1}\varGamma(\alpha_i)*\varGamma(\alpha_k+1)*\prod_{i=k+1}^{K}\varGamma(\alpha_i)}{\varGamma(\sum_{i=1}^{k-1}\alpha_i+(\alpha_k+1)+\sum_{i=k+1}^K\alpha_i)}\\ &=\frac{\alpha_k}{\sum_{k=1}^K\alpha_k} \end{aligned}
E(pk)=∫01pk∗∏i=1KΓ(αi)Γ(∑i=1Kαi)i=1∏Kpiαi−1dp=∏i=1KΓ(αi)Γ(∑i=1Kαi)∫01i=1∏k−1piαi−1∗pkαk∗i=k+1∏Kpiαi−1dp=∏i=1KΓ(αi)Γ(∑i=1Kαi)∗Γ(∑i=1k−1αi+(αk+1)+∑i=k+1Kαi)∏i=1k−1Γ(αi)∗Γ(αk+1)∗∏i=k+1KΓ(αi)=∑k=1Kαkαk
因此
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
¬
i
)
∝
E
(
θ
m
,
k
)
∗
E
(
φ
k
,
t
)
=
n
m
,
¬
i
(
k
)
+
α
k
∑
k
=
1
K
(
n
m
,
¬
i
(
k
)
+
α
k
)
∗
n
k
,
¬
i
(
t
)
+
β
t
∑
t
=
1
V
(
n
k
,
¬
i
(
t
)
+
β
t
)
p(z_i=k|\vec{w},\vec{z}_{¬i})\propto E(\theta_{m,k})*E(\varphi_{k,t})=\frac{n_{m,¬i}^{(k)}+\alpha_k}{\sum_{k=1}^K(n_{m,¬i}^{(k)}+\alpha_k)}*\frac{n_{k,¬i}^{(t)}+\beta_t}{\sum_{t=1}^V(n_{k,¬i}^{(t)}+\beta_t)}
p(zi=k∣w,z¬i)∝E(θm,k)∗E(φk,t)=∑k=1K(nm,¬i(k)+αk)nm,¬i(k)+αk∗∑t=1V(nk,¬i(t)+βt)nk,¬i(t)+βt
有了上式,我们就可以借助Gibbs Sample算法对概率分布进行采样,待算法收敛后,采样出的样本就是概率分布 p ( w ⃗ , z ⃗ ) p(\vec{w},\vec{z}) p(w,z)的样本。通过采样我们得到了每个词的主题,统计各个主题下单词出现频率,就可以得到各个主题的词分布。同样的,统计每篇文档的主题频率,我们就得到了各个文档的主题分布。通常,我们取Gibbs Sample收敛后的 n n n个样本进行平均做参数估计。
总结
LDA参数估计是Gibbs Sample的一个非常好的应用实例,本文主要总结了Gibbs Sample的工作原理以及LDA模型的Gibbs Sample求解步骤。
关于采样:
- 采样可以用来计算一些复杂的代数式子的值,这些式子可能在机器学习的优化过程中遇到,比如一些很复杂的积分,级数,没有办法去直接求解,那么Gibbs采样后可以用采样样本去近似求值。
- 对于简单的概率分布,如果可以计算机程序实现,就直接采样。
- 如果概率分布的形式比较复杂或者概率分布根本不知道,我们就需要借助接受-拒绝采样,MCMC等算法,避开直接对原始分布进行采样。
- 在使用MCMC方法时,如果概率分布已知,一般可以考虑M-H采样(M-H采样必须知道要采样的概率分布)。但是如果概率分布未知,或者特征维度特别大时,M-H采样就不那么work了。
- 在M-H采样中,即使我们构造出使得概率分布满足平稳分布的转移矩阵 P P P, p ( i , j ) = q ( i , j ) π ( j ) q ( j , i ) p(i,j)=q(i,j)π(j)q(j,i) p(i,j)=q(i,j)π(j)q(j,i),因为 π ( j ) π(j) π(j)的存在导致我们直接从P中采样无法程序实现,所以我们需要用接受-拒绝采样。
- 即使不知道联合概率,只知道特征之间转换的条件概率,我们也可以采用Gibbs Sample获得分布的样本。
个人也是最近才开始深入了采样方法,欢迎指正,多多交流。
参考文献
MCMC(一)蒙特卡罗方法
一文了解采样方法
深度学习中的采样以及采样算法
各领域中采样方式研究 (持续更新)
从随机过程到马尔科夫链蒙特卡洛方法
MCMC(三)MCMC采样和M-H采样
MCMC(四)Gibbs采样
文本主题模型之LDA(二) LDA求解之Gibbs采样算法
LDA数学八卦