公式输入请参考:
在线Latex公式
前言
要搞清楚Gibbs,先要搞清楚通过LDA方法文章是怎么生成的,再反过来考虑怎么从文章里面训练模型,学习参数。
生成文章是一个过程,即process。我们的目标是生成document。也就是用一个生成模型来干这个事情。
从看不见的参数集合,生成看得见的文档。如果是从文档反推是什么参数生成我们的文档,这个过程就是inference。
LDA文章的生成过程(非官方)
第一步:确定主题
这个步骤有两种情况:
a:一个文章只有一个主题(朴素贝叶斯干这个事)
b:一个文章以后多个主题(这个是我们要讨论的)
第二步:根据主题的分布,生成文章,也就是要生成一堆的单词(类似LDA是不考虑单词的顺序的)
词表是已知的:
过程大概如下:
生成过程了解了以后,就是理解反向的过程:
我们现在有文档,反推词表分布概率和主题分布概率。文档不需要任何的标注。
生成的例子
假设已知:
例如生成文档1(Doc1),它的主题分布对应的参数为
θ1,用这个参数来采样主题,例如:
然后根据这些个主题生成单词:
文章的生成(官方)
K:主题的个数
N:要生成的文章数量
Ni:文章i中的单词数量
θi:文章i的主题分布(模型参数)
Zij:第i个文章中第j个单词的主题(隐变量)
α,β是超参数,分别生成
θ(所有文章的
θ都是同一个
α生成的)和
ϕ:词的分布(模型参数)
每个方框代表一个循环,单词
wij由两个东西决定,一个是
Zij,一个是
ϕ
1.alpha生成theta
首先一个条件是所有的
θi对应的主题分布概率累加和为1.
例如:
这个文章主题有3个:
这里
θi1+θi2+θi3=1
第二个条件是:
θij∈[0,1]
要想生成这样的一个分布就是用狄利克雷Dirichlet distribution分布(当然还有别的方法来做这个事情,例如:
θi=softmax(θi),但是狄利克雷分布比较好计算)。记为:
θi∼Dir(α)
这里有介绍,要翻墙
https://en.wikipedia.org/wiki/Dirichlet_distribution
3.beta生成phi
跟上面一样的,每个
ϕk的分布累加为1,
ϕki∈[0,1],记为:
ϕk∼Dir(β)
2.theta_i生成Z_ij
Zij∼Multinomial(θi)
如果i=3,那么:
4.Z_ij和phi生成w_ij
wij∼Multinomial(ϕZij)
整体生成过程
Gibbs sampling
Gibbs sampling的由来
由于上面的分析可知,如果要反向估计
{θ,ϕ,Z},也就是要求:
P(θ,ϕ,Z∣w,α,β)
这个是很难求的,只能用近似的方法来求,大概意思就是通过采样来近似,这个方法就是Gibbs sampling。
同时采样多个参数
{θ,ϕ,Z}是很困难的,把它展开:
{θ1,θ2,...ϕ1,ϕ2,...Z1,Z2,...}
这个时候如果采样
θ1,那么我们假定其他参数是已知的。以此类推。
theta_i的采样
根据上面的分析,可以写为:
θi∼P(θi∣α,Z,w,ϕ,β)
根据Markov Blanket定理,就是不直接相关的条件可以去掉,例如:
这里和A4不直接相关的A8,A3等可以从条件概率中去掉,他们两个的信息包含在了A5里面,所以A5保留,A6A7是由A4生成的,也保留。最后变成:P(A4|A1A2A5A6A7)
因此,根据上图的生成关系,上面的
θi可以写为:
θi∼P(θi∣α,Z,w,ϕ,β)=P(θi∣α,Z)
由于
θi只依赖于当前文章的单词,所以其他文章的单词,或者说主题可以不要:
θi=P(θi∣α,Zi⋅)
上面的概率是已知条件中的
α,Zi⋅,求
θi,是明显的后验概率的形式,因此根据我们在学习签名MAP的经验,知道,后验概率正比于likelyhood*先验概率
这里面likelyhood就是用
θi观察到
Zi⋅的概率(写出来就是
P(Zi⋅∣θi),这个就是上面提到的multinomial),先验概率则是用
α生成
θi的概率(写出来就是
P(θi∣α)这个就是上面提到的狄利克雷分布
θi∼Dir(α)),因此可以得到:
θi∝P(θi∣α)P(Zi⋅∣θi)
根据狄利克雷的PDF(概率密度函数)进行展开
上图来自百度百科
P(θi∣α)=B(α)1k=1∏Kθikαk−1
多项式分布(Multinomial Distribution)也可以展开
P(Zi⋅∣θi)=j=1∏Nik=1∏KθikI(Zij=k)
I(Zij=k)表示当
Zij=k成立时表达式为1,否则为0.
整理合并:
θ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=1NiI(Zij=k)+αk−1)来对参数进行修正。例如刚开始由
α生成的参数
θi∼Dir(α)是这个样子:
α=(1,1,1,1)
然后在第i个文章中,有
nij个单词背分类为主题j,例如:
ni1=2,ni2=3,ni3=2,ni4=3,
修正后:
α=(1+2,1+3,1+2,1+3)=(3,4,3,4)
最后小结,
θi的估计可以写为:
θi∼Dir(α+j=1∑NiI(Zij=k))
Z的采样
用上面
θi的套路,写出Z的概率
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,就是固定其他变量,求其中一个变量。吉布斯采样可以用在所有的贝叶斯估计中
这个算法是有缺点的:就是参数个数比较多(例如:
Zij是和文档中的单词个数有关)
因此我们要想,到低有没有必要对所有的参数进行采样?
其实有些情况是不必要的,例如:一个文档中有6个单词:
每个单词所属的主题分别是:
以上就是相当于
Zij是知道的,
Zij就是单词主题的分布,我们就可以用
Zij来估计参数
θi(文章主题的分布):
类似也可以用
Zij来估计
ϕ
这样的方式就叫做collapsed gibbs sampling。上面用
Zij来估计参数
θi和
ϕ的过程就叫collapsed 或者Integral。(从概率上来看实际就是边缘化的操作)
collapsed gibbs sampling
下图是LDA生成的过程。
为了更好描述collapsed gibbs sampling。把里面的标识换一下,问题的描述变成:
计算
P(Zts∣Z−ts,w,α,β)
t代表第t个文档
s代表第t个文档的第s个单词
假设有一个集合
x={x1,x2,...xn}
那么它可以表示为:
x=xi∪x−i
同样的,问题描述中的
Z=Zts∪Z−ts
第一步
可以看到,问题描述中是没有
ϕ,θ的,我们就是要用collapsed 的方式把这两个变量进行边缘化,
P(Zts∣Z−ts,w,α,β)=P(Z−ts,w∣α,β)P(Z,w∣α,β)
上面的式子为什么会相等呢?
P(Z−ts,w∣α,β)P(Z,w∣α,β)∗P(α,β)P(α,β)=P(Z−ts,w,α,β)P(Z,w,α,β)(1)
P(Zts∣Z−ts,w,α,β)∗P(Z−ts,w,α,β)=P(Zts,Z−ts,w,α,β)=P(Z,w,α,β)(2)
把公式2代入1就得到上面的等式了。
第二步 看分子
把第一步中的分子分母分开看,先看分子
P(Z,w∣α,β)
如果要把
ϕ,θ边缘化就是要写成下面的积分:
P(Z,w∣α,β)=P(Z∣α)⋅P(w∣Z,β)=∫P(Z∣θ)⋅P(θ∣α)dθ∫P(w∣Z,ϕ)⋅P(ϕ∣β)dϕ
分别看这两项积分:
第一项
第一项中
P(Z∣θ)相当于multinomial分布,
P(θ∣α)相当于狄利克雷分布,因此:
∫P(Z∣θ)⋅P(θ∣α)dθ=∫i=1∏Nj=1∏Nik=1∏KθikI(Zij=k)⋅i=1∏NB(α)1k=1∏Kθikαk−1dθk=i=1∏N∫j=1∏Nik=1∏KθikI(Zij=k)⋅B(α)1k=1∏Kθikαk−1dθk
这里把连乘
∏j=1Ni放到指数变成累加
∑j=1Ni,然后和后面的
θikαk−1的指数进行相加,上式变为:
=i=1∏NB(α)1∫k=1∏Kθik∑j=1NiI(Zij=k)+αk−1dθk(3)
根据狄利克雷分布的概念:
Dir(θ∣α)=B(α)1k=1∏Kθikαk−1
可以看到公式3其实是狄利克雷分布,最后变成:
(3)=i=1∏NB(α)B(α+∑j=1NiIk(Zij))(4)
这里给个例子看看
∑j=1NiIk(Zij)是怎么算,例如一个文档里面有六个词,每个词对应的主题
Zij如下
wi1 |
wi2 |
wi3 |
wi4 |
wi5 |
wi6 |
zi1 |
zi2 |
zi3 |
zi4 |
zi5 |
zi6 |
1 |
1 |
2 |
3 |
2 |
2 |
也就是主题为1的有2个词,为2的有3个词,为3的有1个词,因此
∑j=1NiIk(Zij)=(2,3,1)
公式4中
α通常是一个向量,可以写作:
(α1,α2,α3,...)
公式4中的分子就变成了
B(α1+2,α2+3,α3+1),分母变成了
B(α1,α2,α3)
第二项
∫P(w∣Z,ϕ)⋅P(ϕ∣β)dϕ
跟第一项类似的,是一个multinomial和dirichlet分布相乘,经过上面的证明我们知道这两个东西相乘结果还是一个dirichlet分布。上式:
=∫k=1∏Ki:Zi=k∏v=1∏Vϕk,vI(wi=v)⋅k=1∏KB(β)1v=1∏Vϕk,vβv−1dϕk
这里的
i:Zi=k意思是所有的单词i是属于主题k的,另外也可以吧连乘变成指数上的累加:
=k=1∏KB(β)1∫v=1∏Vϕk,v∑i:Zi=kI(wi=v)+βv−1dϕk=k=1∏KB(β)B(β+∑i:Zi=kIv(wi))
联合第一、第二项
P(Z,w∣α,β)=第一项⋅第二项=i=1∏NB(α)B(α+∑j=1NiIk(Zij))⋅k=1∏KB(β)B(β+∑i:Zi=kIv(wi))
第二步 看分母
P(Z−ts,w∣α,β)
也就是不考虑
Zts
P(Z−ts,w∣α,β)=i=1∏NB(α)B(α+∑j=1,δj=(t,s)NiIk(Zij))⋅k=1∏KB(β)B(β+∑i:Zi=k,δj=(t,s)Iv(wi))
δj代表当前单词所在的位置
分子分母同时看
P(Zts∣Z−ts,w,α,β)=分母分子
可以看到分子和分母除了第t个文档,其他项是一样的,由于最外面是连乘,所以可以都消掉:
P(Zts∣Z−ts,w,α,β)=B(α+∑j=1,j=sNiIk(Zij))B(α+∑j=1NiIk(Zij))B(β+∑i:Zi=k,δj=(t,s)Iv(wi))B(β+∑i:Zi=kIv(wi))
下面就是利用
B函数来进行简化。
化简
用例子来看上面的
B(α+∑j=1,j=sNiIk(Zij))B(α+∑j=1NiIk(Zij))
的分子和分母
先看分子
∑j=1NiIk(Zij)是怎么算,例如一个文档里面有六个词,每个词对应的主题
Zij如下
wi1 |
wi2 |
wi3 |
wi4 |
wi5 |
wi6 |
zi1 |
zi2 |
zi3 |
zi4 |
zi5 |
zi6 |
1 |
1 |
1 |
2 |
3 |
2 |
也就是主题为1的有3个词,为2的有2个词,为3的有1个词,因此
∑j=1NiIk(Zij)=(3,2,1)
上式中
α通常是一个向量,可以写作:
(α1,α2,α3,...,αk)
因此上式的分子就变成了
B(α1+3,α2+2,α3+1)。
由于分母不包含当前词的主题,当当前词是
wi1的时候,分母变成了
B(α1+2,α2+2,α3+1)
因此:
B(α+∑j=1,j=sNiIk(Zij))B(α+∑j=1NiIk(Zij))=B(α1+nt1′,α2+nt2′+...+αk+nkt1′)B(α1+nt1,α2+nt2+...+αk+nkt1)(5)
nti表示第t个文档有多少单词被分配主题i
nti′表示去掉
Zts后,第t个文档有多少单词被分配主题i
这里的分子分母都有k项,而且只有一项不一样。
继续化简前先给出
B函数的形式:
因此:
B(α1,α2,α3,...,αk)=Γ(∑k=1Kαk)∏k=1K(Γ(αk)
(5)=Γ(∑k=1K(αk+ntk))∏k=1K(Γ(αk+ntk))⋅∏k=1K(Γ(αk+ntk′))Γ(∑k=1K(αk+ntk′))
伽玛函数:
Γ(n)=(n−1)!,而且上面提到过
αk+ntk和
αk+ntk′都有k项,而且只有一项不一样。例如:
当
Zts=2,则
nt2−nt2′=1且
nti=nti′,i=2,因此:
(5)=∏k=1K(Γ(αk+ntk′))∏k=1K(Γ(αk+ntk))⋅Γ(∑k=1K(αk+ntk))Γ(∑k=1K(αk+ntk′))=∑k=1Kαk+ntnewαk+ntunew⋅∑v=1Vβv+nunewβwi+nuwinew
ntunew表示当前第t个文档有多少个单词被分配到主题u(丢掉
Zts,不考虑当前词)
ntnew表示当前第t个文档的单词数量(丢掉
Zts,不考虑当前词)
nuwinew表示对于单词
wi有多少次被分配到了主题u(丢掉
Zts,不考虑当前词)
nunew表示所有文档中有多少单词分配到了主题u(丢掉
Zts,不考虑当前词)
小栗子
假设有两个文档:
主题数量k为3,词库大小为4.
先随机初始化每个单词的主题。
超参数
α=(0.1,0.1,0.1),β=(0.1,0.1,0.1,0.1)
下面按化简后的公式来进行计算第一个文档的第一个单词:
这个时候把第一个单词【今天】从文档1中去掉,可以看到
n1,1new=2(就是还有2个单词分配到主题1),
n1new=6(还剩下6个单词)
因为每一个单词在不同文档可以有不同的主题,也就是有不同的主题概率分布,因此:把第一个单词【今天】从文档1中去掉,没有【今天】分配到主题1,因此
n1,w1new=0,但是除了第一个单词【今天】外,分配到主题1的单词有3个,因此
n1new=3
P(Z1,1=1∣Z−(1,1),w,α,β)=0.1+0.1+0.1+60.1+2⋅0.1+0.1+0.1+0.1+30.1+0
同理:
P(Z1,1=2∣Z−(1,1),w,α,β)=0.1+0.1+0.1+60.1+2⋅0.1+0.1+0.1+0.1+50.1+1
P(Z1,1=3∣Z−(1,1),w,α,β)=0.1+0.1+0.1+60.1+2⋅0.1+0.1+0.1+0.1+40.1+2
计算完毕后,进行归一化得到(使得累加等于1):
然后就可以进行multinomial采样。
小结
P(Zts∣Z−ts,w,α,β)=∑k=1Kαk+ntnewαk+ntunew⋅∑v=1Vβv+nunewβwi+nuwinew
右边的第一项代表一个文档中的单词的主题分类,当一个文档中的单词分类越集中,主题也越集中,例如一个文档中的有10个单词,前面9个都是主题1,那么第十个单词也会倾向于采样为第1个主题。
第二项是所有文档中某个单词的主题分类影响,例如所有文章中某个单词出现100次,80次是主题1,那么该单词被抽样为主题1的概率越大。