文章目录
公式输入请参考: 在线Latex公式
前言
要搞清楚Gibbs,先要搞清楚通过LDA方法文章是怎么生成的,再反过来考虑怎么从文章里面训练模型,学习参数。
生成文章是一个过程,即process。我们的目标是生成document。也就是用一个生成模型来干这个事情。
从看不见的参数集合,生成看得见的文档。如果是从文档反推是什么参数生成我们的文档,这个过程就是inference。
LDA文章的生成过程(非官方)
第一步:确定主题
这个步骤有两种情况:
a:一个文章只有一个主题(朴素贝叶斯干这个事)
b:一个文章对应多个主题(这个是我们要讨论的)
第二步:根据主题的分布,生成文章,也就是要生成一堆的单词(类似LDA是不考虑单词的顺序的)
词表是已知的:
过程大概如下:
循环N次(N为要生成的单词格式)
step1按主题概率分布选择一个主题,例如体育
step2从选定主题中根据词库中的单词在该主题的概率分布选择一个单词,例如篮球
生成过程了解了以后(从主题分布和词表的分布来生成),就是理解反向inference的过程:
我们现在有文档,反推词表分布概率和主题分布概率。LDA是无监督算法(不是分类模型,相对于一个聚类模型),文档不需要任何的标注。LDA通常用于特征工程,例如在情感分析中,可以用LDA算法抽取文章的主题,然后用抽取的主题作为文章的特征向量(和其他特征向量结合在一起)进行下游的情感分析。
生成的例子
假设已知:
例如生成文档1(Doc1),它的主题分布对应的参数为
θ
1
\theta_1
θ1,用这个参数来采样主题,例如:
然后根据这些个主题生成单词:
文章的生成(官方)
K
K
K:主题的个数
N
N
N:要生成的文章数量
N
i
N_i
Ni:文章
i
i
i中的单词数量
θ
i
\theta_i
θi:文章
i
i
i的主题分布(模型参数,未知,要先生成它,用
α
\alpha
α来生成它)
Z
i
j
Z_{ij}
Zij:第
i
i
i个文章中第
j
j
j个单词的主题(隐变量)
α
,
β
\alpha,\beta
α,β是超参数,分别生成
θ
\theta
θ(所有文章的
θ
\theta
θ都是同一个
α
\alpha
α生成的)和
ϕ
\phi
ϕ:词的分布(模型参数)
下图中外面的框代表对文章的循环(
N
N
N次),里面的框代表对文章的单词的嵌套循环((
N
i
N_i
Ni次)
下图红色数字代表依赖关系,其中
w
i
j
w_{ij}
wij同时依赖两个玩意,一个是
Z
i
j
Z_{ij}
Zij,一个是
ϕ
\phi
ϕ。
再贴一个官方图:
1. α 生 成 θ \alpha生成\theta α生成θ
首先一个条件是所有的
θ
i
\theta_i
θi对应的主题分布概率累加和为1.
例如:
这个文章主题有3个:
这里
θ
i
1
+
θ
i
2
+
θ
i
3
=
1
\theta_{i1}+\theta_{i2}+\theta_{i3}=1
θi1+θi2+θi3=1
第二个条件是:
θ
i
j
∈
[
0
,
1
]
\theta_{ij}\in [0,1]
θij∈[0,1]
要想生成这样的一个分布就是用狄利克雷Dirichlet distribution分布(当然还有别的方法来做这个事情,例如:
θ
i
=
s
o
f
t
m
a
x
(
θ
i
)
\theta_i=softmax(\theta_i)
θi=softmax(θi),但是狄利克雷分布比较好计算,刚好有一个参数
α
\alpha
α,采样出来的东西也满足上面两个条件)。记为:
θ
i
∼
D
i
r
(
α
)
\theta_i\sim Dir(\alpha)
θi∼Dir(α)
如果用高斯分布
θ
i
∼
N
(
μ
,
Σ
)
\theta_i\sim N(\mu,\Sigma)
θi∼N(μ,Σ)来计算,采样出来的东西不能满足:
∑
θ
i
=
1
\sum\theta_i=1
∑θi=1
这里有介绍,要翻墙
https://en.wikipedia.org/wiki/Dirichlet_distribution
这里涉及到一个关于参数生成的一些经验,根据参数的定义域,我们可以选择不同的生成方式,例如,当
θ
i
∈
(
0
,
1
)
,
∑
θ
i
≠
1
\theta_i\in(0,1),\sum\theta_i\ne1
θi∈(0,1),∑θi=1则可以选用Gamma分布来生成参数。
2. θ i 生 成 Z i j \theta_i生成Z_{ij} θi生成Zij
Z
i
j
∼
M
u
l
t
i
n
o
m
i
a
l
(
θ
i
)
Z_ij\sim Multinomial(\theta_i)
Zij∼Multinomial(θi)
如果i=3,那么:
3. β 生 成 ϕ \beta生成\phi β生成ϕ
跟上面步骤1一样的,每个
ϕ
k
\phi_k
ϕk的分布累加为1,
ϕ
k
i
∈
[
0
,
1
]
\phi_{ki}\in [0,1]
ϕki∈[0,1],满足这两个条件可从
β
\beta
β的狄利克雷分布生成,记为:
ϕ
k
∼
D
i
r
(
β
)
\phi_k\sim Dir(\beta)
ϕk∼Dir(β)
4. Z i j 和 ϕ 生 成 w i j Z_{ij}和\phi生成w_{ij} Zij和ϕ生成wij
这里和步骤2类似,如下图所示,当
Z
i
j
=
1
Z_{ij}=1
Zij=1时候,从第一列
ϕ
1
\phi_1
ϕ1采样:
w
i
j
∼
M
u
l
t
i
n
o
m
i
a
l
(
ϕ
Z
i
j
)
w_ij\sim Multinomial(\phi_{Z_{ij}})
wij∼Multinomial(ϕZij)
整体生成过程
Gibbs sampling
Gibbs sampling的由来
由于上面的分析可知,如果要反向估计
{
θ
,
ϕ
,
Z
}
\{\theta,\phi,Z\}
{θ,ϕ,Z},也就是要求:
P
(
θ
,
ϕ
,
Z
∣
w
,
α
,
β
)
P(\theta,\phi,Z|w,\alpha,\beta)
P(θ,ϕ,Z∣w,α,β)
这个是很难求的,只能用近似的方法来求,大概意思就是通过采样来近似,这个方法就是Gibbs sampling。
同时采样多个参数
{
θ
,
ϕ
,
Z
}
\{\theta,\phi,Z\}
{θ,ϕ,Z}是很困难的,把它展开:
{
θ
1
,
θ
2
,
.
.
.
ϕ
1
,
ϕ
2
,
.
.
.
Z
1
,
Z
2
,
.
.
.
}
\{\theta_1,\theta_2,...\phi_1,\phi_2,...Z_1,Z_2,...\}
{θ1,θ2,...ϕ1,ϕ2,...Z1,Z2,...}
这个时候如果采样
θ
1
\theta_1
θ1,那么我们假定其他参数是已知的。以此类推。这个采样方法就是Gibbs sampling。类似coordinate descent。
θ i \theta_i θi的采样
根据上面的分析,可以写为:
θ
i
∼
P
(
θ
i
∣
α
,
Z
,
w
,
ϕ
,
β
)
\theta_i\sim P(\theta_i|\alpha,Z,w,\phi,\beta)
θi∼P(θi∣α,Z,w,ϕ,β)
根据Markov Blanket定理,就是不直接相关的条件(不影响
θ
\theta
θ,或者不依赖
θ
\theta
θ)可以去掉,例如:
这里和A4不直接相关的A8,A3等可以从条件概率中去掉,他们两个的信息包含在了A5里面,所以A5保留,A6A7是由A4生成的,也保留。最后变成:P(A4|A1A2A5A6A7)
因此,根据上图的生成关系,上面的
θ
i
\theta_i
θi可以写为:
θ
i
∼
P
(
θ
i
∣
α
,
Z
,
w
,
ϕ
,
β
)
=
P
(
θ
i
∣
α
,
Z
)
\theta_i\sim P(\theta_i|\alpha,Z,w,\phi,\beta)\\ =P(\theta_i|\alpha,Z)
θi∼P(θi∣α,Z,w,ϕ,β)=P(θi∣α,Z)
由于
θ
i
\theta_i
θi只依赖于当前文章(第
i
i
i篇文章)的单词,所以其他文章的单词,或者说主题可以不要:
θ
i
=
P
(
θ
i
∣
α
,
Z
i
⋅
)
\theta_i=P(\theta_i|\alpha,Z_{i\cdot})
θi=P(θi∣α,Zi⋅)
上面的概率是已知条件中的
α
,
Z
i
⋅
\alpha,Z_{i\cdot}
α,Zi⋅,求
θ
i
\theta_i
θi,是明显的后验概率的形式,因此根据我们在学习前面MAP的经验,知道,后验概率正比于likelyhood×先验概率。
这里面likelyhood就是用
θ
i
\theta_i
θi观察到
Z
i
⋅
Z_{i\cdot}
Zi⋅的概率(写出来就是
P
(
Z
i
⋅
∣
θ
i
)
P(Z_{i\cdot}|\theta_i)
P(Zi⋅∣θi),这个就是上面提到的multinomial),先验概率则是用
α
\alpha
α生成
θ
i
\theta_i
θi的概率(写出来就是
P
(
θ
i
∣
α
)
P(\theta_i|\alpha)
P(θi∣α)这个就是上面提到的狄利克雷分布
θ
i
∼
D
i
r
(
α
)
\theta_i\sim Dir(\alpha)
θi∼Dir(α)),因此可以得到:
θ
i
∝
P
(
θ
i
∣
α
)
P
(
Z
i
⋅
∣
θ
i
)
\theta_i\propto P(\theta_i|\alpha)P(Z_{i\cdot}|\theta_i)
θi∝P(θi∣α)P(Zi⋅∣θi)
根据狄利克雷的PDF(概率密度函数)进行展开
上图来自百度百科
P
(
θ
i
∣
α
)
=
1
B
(
α
)
∏
k
=
1
K
θ
i
k
α
k
−
1
P(\theta_i|\alpha)=\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1}
P(θi∣α)=B(α)1k=1∏Kθikαk−1
多项式分布(Multinomial Distribution)也可以展开
P
(
Z
i
⋅
∣
θ
i
)
=
∏
j
=
1
N
i
∏
k
=
1
K
θ
i
k
I
(
Z
i
j
=
k
)
P(Z_{i\cdot}|\theta_i)=\prod_{j=1}^{N_i}\prod_{k=1}^K\theta_{ik}^{I(Z_{ij}=k)}
P(Zi⋅∣θi)=j=1∏Nik=1∏KθikI(Zij=k)
I
(
Z
i
j
=
k
)
I(Z_{ij}=k)
I(Zij=k)表示当
Z
i
j
=
k
Z_{ij}=k
Zij=k成立时表达式为1,否则为0.
整理合并:
θ
i
∝
1
B
(
α
)
∏
k
=
1
K
θ
i
k
α
k
−
1
∏
j
=
1
N
i
∏
k
=
1
K
θ
i
k
I
(
Z
i
j
=
k
)
=
1
B
(
α
)
∏
k
=
1
K
θ
i
k
∑
j
=
1
N
i
I
(
Z
i
j
=
k
)
+
α
k
−
1
=
D
i
r
(
α
+
∑
j
=
1
N
i
I
(
Z
i
j
=
k
)
)
\begin{aligned}\theta_i&\propto\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1}\prod_{j=1}^{N_i}\prod_{k=1}^K\theta_{ik}^{I(Z_{ij}=k)}\\ &=\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\sum_{j=1}^{N_i}I(Z_{ij}=k)+\alpha_{k}-1}\\ &=Dir(\alpha+\sum_{j=1}^{N_i}I(Z_{ij}=k))\end{aligned}
θi∝B(α)1k=1∏Kθikαk−1j=1∏Nik=1∏KθikI(Zij=k)=B(α)1k=1∏Kθik∑j=1NiI(Zij=k)+αk−1=Dir(α+j=1∑NiI(Zij=k))
下面来说下这个公式的意思,现有一个狄利克雷分布来产生参数,然后由观测数据(
∑
j
=
1
N
i
I
(
Z
i
j
=
k
)
+
α
k
−
1
\sum_{j=1}^{N_i}I(Z_{ij}=k)+\alpha_{k}-1
∑j=1NiI(Zij=k)+αk−1)来对参数进行修正。例如刚开始由
α
\alpha
α生成的参数
θ
i
∼
D
i
r
(
α
)
\theta_i\sim Dir(\alpha)
θi∼Dir(α)是这个样子:
α
=
(
1
,
1
,
1
,
1
)
\alpha=(1,1,1,1)
α=(1,1,1,1)
然后在第
i
i
i个文章中,有
n
i
j
n_{ij}
nij个单词背分类为主题
j
j
j,例如:
n
i
1
=
2
,
n
i
2
=
3
,
n
i
3
=
2
,
n
i
4
=
3
,
n_{i1}=2,n_{i2}=3,n_{i3}=2,n_{i4}=3,
ni1=2,ni2=3,ni3=2,ni4=3,
以上信息是可以从现有数据中统计出来的,修正后:
α
=
(
1
+
2
,
1
+
3
,
1
+
2
,
1
+
3
)
=
(
3
,
4
,
3
,
4
)
\alpha=(1+2,1+3,1+2,1+3)=(3,4,3,4)
α=(1+2,1+3,1+2,1+3)=(3,4,3,4)
最后小结,
θ
i
\theta_i
θi的估计可以写为:
θ
i
∼
D
i
r
(
α
+
∑
j
=
1
N
i
I
(
Z
i
j
=
k
)
)
\theta_i\sim Dir(\alpha+\sum_{j=1}^{N_i}I(Z_{ij=k}))
θi∼Dir(α+j=1∑NiI(Zij=k))
Z的采样
用上面
θ
i
\theta_i
θi的套路,写出
Z
i
j
Z_{ij}
Zij(这个玩意是离散值)的概率,
P
(
Z
i
j
=
k
∣
w
i
j
,
ϕ
k
,
θ
i
)
∝
P
(
Z
i
j
=
k
∣
θ
i
)
⋅
P
(
w
i
j
∣
Z
i
j
=
k
,
ϕ
k
)
=
θ
i
k
⋅
ϕ
k
,
w
i
j
=
exp
(
log
θ
i
k
+
log
ϕ
k
,
w
i
j
)
\begin{aligned}P(Z_{ij}&=k|w_{ij},\phi_k,\theta_i)\\&\propto P(Z_{ij}=k|\theta_i)\cdot P(w_{ij}|Z_{ij}=k,\phi_k)\\ &=\theta_{ik}\cdot\phi_{k,w_{ij}}\\&=\exp(\log\theta_{ik}+\log\phi_{k,w_{ij}})\end{aligned}
P(Zij=k∣wij,ϕk,θi)∝P(Zij=k∣θi)⋅P(wij∣Zij=k,ϕk)=θik⋅ϕk,wij=exp(logθik+logϕk,wij)
ϕ \phi ϕ的采样略了。。。
小结
吉布斯采样的思想和之前在讲LASSO的时候提到过一个东西很相似,就是coordinate descent,就是固定其他变量,求其中一个变量。吉布斯采样可以用在所有的贝叶斯估计中
这个算法是有缺点的:就是参数个数比较多,不断采样上面三个参数,注意是有下标的(例如:
Z
i
j
Z_{ij}
Zij是和文档中的单词个数有关)
因此我们要想,到底有没有必要对所有的参数进行采样?
其实有些情况是不必要的,例如:一个文档中有6个单词:
每个单词所属的主题分别是:
以上就是相当于
Z
i
j
Z_{ij}
Zij是知道的,
Z
i
j
Z_{ij}
Zij就是单词主题的分布,我们就可以用
Z
i
j
Z_{ij}
Zij来估计参数
θ
i
\theta_i
θi(文章主题的分布):
类似也可以用
Z
i
j
Z_{ij}
Zij来估计
ϕ
\phi
ϕ,通过这里例子,我们看到,没有必要采样所有参数,只需要采样
Z
i
j
Z_{ij}
Zij,然后用
Z
i
j
Z_{ij}
Zij来估计其他参数就可以了。
这样的估计方式就叫做collapsed gibbs sampling。上面用
Z
i
j
Z_{ij}
Zij来估计参数
θ
i
\theta_i
θi和
ϕ
\phi
ϕ的过程就叫collapsed 或者Integral。(从概率上来看实际就是边缘化的操作)
collapsed gibbs sampling下节分析。