NLP --- > LDA

共轭先验分布

在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布
Beta分布是二项式分布的共轭先验分布,而狄利克雷(Dirichlet)分布是多项式分布的共轭分布。
共轭的意思是,以Beta分布和二项式分布为例,数据符合二项分布的时候,参数的先验分布和后验分布都能保持Beta分布的形式,这种形式不变的好处是,我们能够在先验分布中赋予参数很明确的物理意义,这个物理意义可以延续到后续分布中进行解释,同时从先验变换到后验过程中从数据中补充的知识也容易有物理解释。

似然函数
在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。似然函数在统计推断中有重大作用,如在最大似然估计和费雪信息之中的应用等等。“似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然性”和“概率”(或然性)又有明确的区分。概率用于在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然性则是用于在已知某些观测所得到的结果时,对有关事物的性质的参数进行估计。
在这种意义上,似然函数可以理解为条件概率的逆反

符号含义
N:所有词的数量f
V:所有词的种类数量
K:主题数量
D:文档数
w j = 1   a n d   w − j = 0 w^j=1\ and\ w^{-j}=0 wj=1 and wj=0

LDA 建模过程

  1. LDA首先在主题的词分布的分布中抽取K次,得到K个主题的分布。并以此对所有文档采用该先验分布。
  2. LDA中然后从主题分布的分布抽样1次得到一篇文档的主题分布,然后该主题分布不变的情况下每个词抽样N次得到N的词的主题。
  3. 对于所有文档中,每个文档的主题分布的系数,依然未知;对于K个主题中,每个主题的词分布的系数,依然未知;
  4. 目的就是已知 α , β \alpha, \beta α,β的情况下,求3中参数,使得 p ( w ∣ α , β ) p(w|\alpha,\beta) p(wα,β)最大,最大likelihood。
  5. 方法有两种,一种是collapsed gibbs sampling,一种是variational inference。

Gibbs Sampling

对LDA 准确推断很难,一般使用近似推断,其中gibbs sampling更加简单易懂;
gibbs sampling是mcmc算法的一个特例,运行方式是每次选取概率向量的一个维度,给定其他维度的变量值sampling出当前维度的值,直到收敛。

采样算法流程总结
  1. 选择合适的主题数K, 以及合适的超参数 α ⃗ , η ⃗ \vec \alpha,\vec \eta α ,η

  2. 初始时根据先验分布随机地给每个单词分配主题编号z,然后更新5个数据,分别为
    - nd: M*K(M表示文档数量,K表示主题数量)每个doc中各个topic的词数量 (规则矩阵)
    - nw: V*K (V表示语料库中所有词的数量,相同词合并为一个)词word在主题topic中的数量(规则矩阵)
    - Z: M*n(n表示对于文档m中所有词的数量,相同词不合并为一个)每个doc中主题列表(非规则list集合)
    - nwsum K1 (每个topic词的总数)
    - ndsum M
    1 (每个doc中词的总数)

  3. 对每个文档的每个词(按文档顺序逐个词,一篇文档中词可能有重复),利用gibbs为每个词采样主题及词: z i = k , w i = v z_i=k, w_i=v zi=k,wi=v
    p ( z i = k ∣ w ⃗ , z ⃗ ¬ i ) = n d , ¬ i k + α k ∑ s = 1 K n d , ¬ i s + α s n k , ¬ i v + η v ∑ f = 1 V n k , ¬ i f + η f p(z_i=k| \vec w,\vec z_{\neg i}) = \frac{n_{d, \neg i}^{k} + \alpha_k}{\sum\limits_{s=1}^Kn_{d, \neg i}^{s} + \alpha_s} \frac{n_{k, \neg i}^{v} + \eta_v}{\sum\limits_{f=1}^Vn_{k, \neg i}^{f} + \eta_f} p(zi=kw ,z ¬i)=s=1Knd,¬is+αsnd,¬ik+αkf=1Vnk,¬if+ηfnk,¬iv+ηv

  4. 重复第3步过程,直至Gibbs采样收敛

  5. 统计预料库中各个文档各个词的主题,得到文档主题分布 θ d \theta_d θd,统计语料库中各个主题词的分布,得到LDA的主题与词的分布。

注意
  • 第三步中的采样公式其实就是 p ( t o p i c ∣ d o c ) ⋅ p ( w o r d ∣ t o p i c ) p(topic|doc)\cdot p(word|topic) p(topicdoc)p(wordtopic),这个概率是一个 d o c → t o p i c → w o r d doc \rightarrow topic \rightarrow word doctopicword的路径,由于top 有K个,所有Gibbs 采样总就是在2K条路径中采样,doc-topic-word路径概率:

    在矩阵上,因为我们已知文档编号和词编号,所以也就是根据两向量的各自的积生产的向量,然后据此采样出一个主题

  • 然后使用更新的词的主题重新统计, 重新计算 n k m + = 1 , n m + = 1 , n k t + = 1 , n k + = 1 n_k^m+=1,n_m+=1,n_k^t+=1,n_k+=1 nkm+=1,nm+=1,nkt+=1,nk+=1

关键代码部分:

def sampling(self,i,j):
    topic = self.Z[i][j]
    word = self.dpre.docs[i].words[j]
    self.nw[word][topic] -= 1
    self.nd[i][topic] -= 1
    self.nwsum[topic] -= 1
    self.ndsum[i] -= 1
    
    Vbeta = self.dpre.words_count * self.beta
    Kalpha = self.K * self.alpha
    self.p = (self.nw[word] + self.beta)/(self.nwsum + Vbeta) * \
             (self.nd[i] + self.alpha) / (self.ndsum[i] + Kalpha)
    for k in xrange(1,self.K):
        self.p[k] += self.p[k-1] 
    
    u = random.uniform(0,self.p[self.K-1])
    for topic in xrange(self.K):
        if self.p[topic]>u:
            break
    
    self.nw[word][topic] +=1
    self.nwsum[topic] +=1
    self.nd[i][topic] +=1
    self.ndsum[i] +=1

def est(self):
    # Consolelogger.info(u"迭代次数为%s 次" % self.iter_times)
    for x in xrange(self.iter_times):
        for i in xrange(self.dpre.docs_count):
            for j in xrange(self.dpre.docs[i].length):
                topic = self.sampling(i,j)
                self.Z[i][j] = topic

变分推断

再看一下LDA的整体过程
  1. 对于任一篇文档d, 其主题分布 θ d \theta_d θd由Dirichlet分布得到,其中 α \alpha α为分布的超参数, 是一个K维向量,我们采样得到的 θ \theta θ也是一个K维的向量:
    θ d = D i r i c h l e t ( α ⃗ ) \theta_d = Dirichlet(\vec \alpha) θd=Dirichlet(α )
  2. 然后对于文档d中的每一词,我们从上述多项式分布 θ \theta θ中再采样出一个主题 z d n z_{dn} zdn,其为一个值:
    z d n = m u l t i ( θ d ) z_{dn}=multi(\theta_d) zdn=multi(θd)
  3. 对于任一主题,其对应的词分布的先验分布也是Dirichlet分布,我们从该先验分布中为一主题采样词分布,其中 η ⃗ \vec \eta η β k \beta_k βk的维度均为 1 ∗ K 1*K 1K
    β k = D i r i c h l e t ( η ⃗ ) \beta_k=Dirichlet(\vec \eta) βk=Dirichlet(η )
  4. 现在我们已经为文档d中第n个词采样一个主题 z d n z_{dn} zdn,并且该主题的词分布为 β z d n \beta_{z_{dn}} βzdn,然后我们为该位置采样出一个词:
    w d n = m u l t i ( β z d n ) w_{dn} = multi(\beta_{z_{dn}}) wdn=multi(βzdn)
变化推断过程

上述过程是模拟LDA生成文档的过程,而我们在求解的过程中,文档已经生成,我们要求的是上述过程中涉及到的参数,显然,此时利用到极大似然估计的思想。
我们要最大化的直观上就是 ∫ d ∫ n p ( w d n ∣ α , η ) \int_d \int_n p(w_{dn}|\alpha, \eta) dnp(wdnα,η)
对于其中一个词,可知:
p ( w ∣ α , η ) = = p ( θ , β , z , w ∣ α , η ) p ( θ , β , z ∣ w , α , η ) p(w|\alpha, \eta) = = \frac{p(\theta,\beta, z, w| \alpha, \eta)}{p(\theta,\beta, z | w, \alpha, \eta) } p(wα,η)==p(θ,β,zw,α,η)p(θ,β,z,wα,η)
由于 θ , β , z \theta, \beta, z θ,β,z之间的耦合,这些条件概率没法之间求;为此,我们引入变分推断,具体是引入 mean field assumption的变分推断,这个推断假设所有的隐藏变量都是通过各自的独立分布形成的,如下所示:

这里假设隐藏变量 θ \theta θ是由独立Dirichlet分布 γ \gamma γ形;隐藏变量 z z z是由独立多项式分布 ϕ \phi ϕ形成的,隐藏变量 β \beta β是由独立Dirichlet分布 λ \lambda λ形成的。这样我们得到三个隐藏变量联合变分分布q为:

q ( β , z , θ ∣ λ , ϕ , γ ) = ∏ k = 1 K q ( β k ∣ λ k ) ∏ d = 1 M q ( θ d , z d ∣ γ d , ϕ d ) = ∏ k = 1 K q ( β k ∣ λ k ) ∏ d = 1 M ( q ( θ d ∣ γ d ) ∏ n = 1 N d q ( z d n ∣ ϕ d n ) ) \begin{aligned} q(\beta, z, \theta|\lambda,\phi, \gamma) & = \prod_{k=1}^Kq(\beta_k|\lambda_k)\prod_{d=1}^Mq(\theta_d, z_d|\gamma_d,\phi_d) \\ & = \prod_{k=1}^Kq(\beta_k|\lambda_k)\prod_{d=1}^M(q(\theta_d|\gamma_d)\prod_{n=1}^{N_d}q(z_{dn}| \phi_{dn})) \end{aligned} q(β,z,θλ,ϕ,γ)=k=1Kq(βkλk)d=1Mq(θd,zdγd,ϕd)=k=1Kq(βkλk)d=1M(q(θdγd)n=1Ndq(zdnϕdn))

我们的目标就是用 q ( β , z , θ ∣ λ , ϕ , γ ) q(\beta, z, \theta|\lambda,\phi, \gamma) q(β,z,θλ,ϕ,γ)来近似估计 p ( θ , β , z ∣ w , α , η ) p(\theta,\beta, z | w, \alpha, \eta) p(θ,β,zw,α,η),也就是让两个分布尽可能相似,这里用到KL散度:
( λ ∗ , ϕ ∗ , γ ∗ ) = a r g    m i n ⏟ λ , ϕ , γ D ( q ( β , z , θ ∣ λ , ϕ , γ ) ∣ ∣ p ( θ , β , z ∣ w , α , η ) ) (\lambda^*,\phi^*, \gamma^*) = \underbrace{arg \;min}_{\lambda,\phi, \gamma} D(q(\beta, z, \theta|\lambda,\phi, \gamma) || p(\theta,\beta, z | w, \alpha, \eta)) (λ,ϕ,γ)=λ,ϕ,γ argminD(q(β,z,θλ,ϕ,γ)p(θ,β,zw,α,η))
我们的目的找到合适的 λ ∗ , ϕ ∗ , γ ∗ \lambda^*,\phi^*, \gamma^* λ,ϕ,γ,然后用 q ( β , z , θ ∣ λ ∗ , ϕ ∗ , γ ∗ ) q(\beta, z, \theta|\lambda^*,\phi^*, \gamma^*) q(β,z,θλ,ϕ,γ)来近似隐藏变量的条件分布 p ( θ , β , z ∣ w , α , η ) p(\theta,\beta, z | w, \alpha, \eta) p(θ,β,zw,α,η),进而使用EM算法求解几个近似分布的参数。

怎么求合适的 λ ∗ , ϕ ∗ , γ ∗ \lambda^*,\phi^*, \gamma^* λ,ϕ,γ参数呢,有
D ( q ( β , z , θ ∣ λ , ϕ , γ ) ∣ ∣ p ( θ , β , z ∣ w , α , η ) ) = E q l o g q ( β , z , θ ∣ λ , ϕ , γ ) − E q l o g p ( θ , β , z ∣ w , α , η ) = E q l o g q ( β , z , θ ∣ λ , ϕ , γ ) − E q l o g p ( θ , β , z , w ∣ α , η ) p ( w ∣ α , η ) = − L ( λ , ϕ , γ ; α , η ) + l o g ( w ∣ α , η ) \begin{aligned} D(q(\beta, z, \theta|\lambda,\phi, \gamma) || p(\theta,\beta, z | w, \alpha, \eta)) & = E_q logq(\beta, z, \theta|\lambda,\phi, \gamma) - E_q log p(\theta,\beta, z | w, \alpha, \eta) \\& =E_q logq(\beta, z, \theta|\lambda,\phi, \gamma) - E_q log \frac{p(\theta,\beta, z, w| \alpha, \eta)}{p(w|\alpha, \eta)} \\& = - L(\lambda,\phi, \gamma; \alpha, \eta) + log(w|\alpha,\eta) \end{aligned} D(q(β,z,θλ,ϕ,γ)p(θ,β,zw,α,η))=Eqlogq(β,z,θλ,ϕ,γ)Eqlogp(θ,β,zw,α,η)=Eqlogq(β,z,θλ,ϕ,γ)Eqlogp(wα,η)p(θ,β,z,wα,η)=L(λ,ϕ,γ;α,η)+log(wα,η)
由于对数似然部分 l o g p ( w ∣ α , η ) log p(w|\alpha, \eta) logp(wα,η)和我们的KL散度无关,可以看做常量,因此我们希望最小化KL散度等价于最大化ELBO,即转化为求ELBO的最大值。

l o g    p ( w ∣ α , η ) = l o g ∫ ∫ ∑ z p ( θ , β , z , w ∣ α , η ) d θ d β = l o g ∫ ∫ ∑ z p ( θ , β , z , w ∣ α , η ) q ( β , z , θ ∣ λ , ϕ , γ ) q ( β , z , θ ∣ λ , ϕ , γ ) d θ d β = l o g    E q p ( θ , β , z , w ∣ α , η ) q ( β , z , θ ∣ λ , ϕ , γ ) ≥ E q    l o g p ( θ , β , z , w ∣ α , η ) q ( β , z , θ ∣ λ , ϕ , γ ) = E q    l o g p ( θ , β , z , w ∣ α , η ) − E q    l o g q ( β , z , θ ∣ λ , ϕ , γ ) \begin{aligned} log\;p(w|\alpha,\eta) & = log \int\int \sum\limits_z p(\theta,\beta, z, w| \alpha, \eta) d\theta d\beta \\ & = log \int\int \sum\limits_z \frac{p(\theta,\beta, z, w| \alpha, \eta) q(\beta, z, \theta|\lambda,\phi, \gamma)}{q(\beta, z, \theta|\lambda,\phi, \gamma)}d\theta d\beta \\ & = log\;E_q \frac{p(\theta,\beta, z, w| \alpha, \eta) }{q(\beta, z, \theta|\lambda,\phi, \gamma)} \\ & \geq E_q\; log\frac{p(\theta,\beta, z, w| \alpha, \eta) }{q(\beta, z, \theta|\lambda,\phi, \gamma)} \\ & = E_q\; log{p(\theta,\beta, z, w| \alpha, \eta) } - E_q\; log{q(\beta, z, \theta|\lambda,\phi, \gamma)} \end{aligned} logp(wα,η)=logzp(θ,β,z,wα,η)dθdβ=logzq(β,z,θλ,ϕ,γ)p(θ,β,z,wα,η)q(β,z,θλ,ϕ,γ)dθdβ=logEqq(β,z,θλ,ϕ,γ)p(θ,β,z,wα,η)Eqlogq(β,z,θλ,ϕ,γ)p(θ,β,z,wα,η)=Eqlogp(θ,β,z,wα,η)Eqlogq(β,z,θλ,ϕ,γ)
其中不等号部分用到Jensen不等式:
f ( E ( x ) ) ≥ E ( f ( x ) )      f ( x ) 为 凹 函 数 f(E(x)) \geq E(f(x)) \;\; f(x)为凹函数 f(E(x))E(f(x))f(x)
我们把上述推导最后的式子记做:
L ( λ , ϕ , γ ; α , η ) = E q    l o g p ( θ , β , z , w ∣ α , η ) − E q    l o g q ( β , z , θ ∣ λ , ϕ , γ ) L(\lambda,\phi, \gamma; \alpha, \eta) = E_q\; log{p(\theta,\beta, z, w| \alpha, \eta) } - E_q\; log{q(\beta, z, \theta|\lambda,\phi, \gamma)} L(λ,ϕ,γ;α,η)=Eqlogp(θ,β,z,wα,η)Eqlogq(β,z,θλ,ϕ,γ)
可以看出 L ( λ , ϕ , γ ; α , η ) L(\lambda,\phi, \gamma; \alpha, \eta) L(λ,ϕ,γ;α,η)是我们对数似然log p ( w ∣ α , η ) p(w|\alpha, \eta) p(wα,η)的一个下界,所以这个L一般称为ELBO((Evidence Lower BOund)。

极大化ELBO求解变分参数
对其进行整理
L ( λ , ϕ , γ ; α , η ) = E q [ l o g p ( β ∣ η ) ] + E q [ l o g p ( z ∣ θ ) ] + E q [ l o g p ( θ ∣ α ) ] + E q [ l o g p ( w ∣ z , β ) ] − E q [ l o g q ( β ∣ λ ) ] − E q [ l o g q ( z ∣ ϕ ) ] − E q [ l o g q ( θ ∣ γ ) ] \begin{aligned} L(\lambda,\phi, \gamma; \alpha, \eta) & = E_q[logp(\beta|\eta)] + E_q[logp(z|\theta)] + E_q[logp(\theta|\alpha)] \\ & + E_q[logp(w|z, \beta)] - E_q[logq(\beta|\lambda)] \\ & - E_q[logq(z|\phi)] - E_q[logq(\theta|\gamma)] \end{aligned} L(λ,ϕ,γ;α,η)=Eq[logp(βη)]+Eq[logp(zθ)]+Eq[logp(θα)]+Eq[logp(wz,β)]Eq[logq(βλ)]Eq[logq(zϕ)]Eq[logq(θγ)]
可见展开后有7项,我们只对第一项展开:
E q [ l o g p ( β ∣ η ) ] = E q [ l o g ∏ k = 1 K ( Γ ( ∑ i = 1 V η i ) ∏ i = 1 V Γ ( η i ) ∏ i = 1 V β k i η i − 1 ) ] = K l o g Γ ( ∑ i = 1 V η i ) − K ∑ i = 1 V l o g Γ ( η i ) + ∑ k = 1 K E q [ ∑ i = 1 V ( η i − 1 ) l o g β k i ] \begin{aligned} E_q[logp(\beta|\eta)] & = E_q[log\prod_{k=1}^K(\frac{\Gamma(\sum\limits_{i=1}^V\eta_i)}{\prod_{i=1}^V\Gamma(\eta_i)}\prod_{i=1}^V\beta_{ki}^{\eta_i-1})] \\ & = Klog\Gamma(\sum\limits_{i=1}^V\eta_i) - K\sum\limits_{i=1}^Vlog\Gamma(\eta_i) + \sum\limits_{k=1}^KE_q[\sum\limits_{i=1}^V(\eta_i-1) log\beta_{ki}] \end{aligned} Eq[logp(βη)]=Eq[logk=1K(i=1VΓ(ηi)Γ(i=1Vηi)i=1Vβkiηi1)]=KlogΓ(i=1Vηi)Ki=1VlogΓ(ηi)+k=1KEq[i=1V(ηi1)logβki]

利用指数分布族的性质
E q [ ∑ i = 1 V l o g β k i ] = ( l o g Γ ( λ k i ) − l o g Γ ( ∑ i ′ = 1 V λ k i ′ ) ) ′ = Ψ ( λ k i ) − Ψ ( ∑ i ′ = 1 V λ k i ′ ) E_q[\sum\limits_{i=1}^Vlog\beta_{ki}] = (log\Gamma(\lambda_{ki} ) - log\Gamma(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}))^{'} = \Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) Eq[i=1Vlogβki]=(logΓ(λki)logΓ(i=1Vλki))=Ψ(λki)Ψ(i=1Vλki)
其 中 , Ψ ( x ) = d d x l o g Γ ( x ) = Γ ′ ( x ) Γ ( x ) 其中 ,\Psi(x) = \frac{d}{d x}log\Gamma(x) = \frac{\Gamma^{'}(x)}{\Gamma(x)} Ψ(x)=dxdlogΓ(x)=Γ(x)Γ(x)

上式继续化简
原 式 = K l o g Γ ( ∑ i = 1 V η i ) − K ∑ i = 1 V l o g Γ ( η i ) + ∑ k = 1 K ∑ i = 1 V ( η i − 1 ) ( Ψ ( λ k i ) − Ψ ( ∑ i ′ = 1 V λ k i ′ ) ) \begin{aligned} 原式 & = \\ &Klog\Gamma(\sum\limits_{i=1}^V\eta_i) - K\sum\limits_{i=1}^Vlog\Gamma(\eta_i) + \sum\limits_{k=1}^K\sum\limits_{i=1}^V(\eta_i-1)(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) ) \end{aligned} =KlogΓ(i=1Vηi)Ki=1VlogΓ(ηi)+k=1Ki=1V(ηi1)(Ψ(λki)Ψ(i=1Vλki))
同样,我们可以求出其他几项的表达,得到关于变分参数 λ , ϕ , γ \lambda, \phi, \gamma λ,ϕ,γ的表达式。

EM算法E步

再回顾一下我们求解的思路,对于这种存在隐变量的场景,我们需要能够写出含隐变量的分布,但由于原始隐变量之间存在关系,没法直接写成相应的形式,因为我们使用若干分布来近似,并且我们需要保证近似分布与真实分布尽可能接近,即是上述提到的KL散度,让其尽可能变小;然后利用得到的近似分布,执行EM算法。

与普通EM算法不同的是,这里的E步需要在包含期望的EBLO计算最佳变分参数。即通过EBLO对各个变分参数 λ , ϕ , γ \lambda, \phi, \gamma λ,ϕ,γ分布求导并令偏导数为0,可以得到迭代表达式,多次收敛后即为最佳变分参数。

直接给出变分参数的表达式
ϕ n k ∝ e x p ( ∑ i = 1 V w n i ( Ψ ( λ k i ) − Ψ ( ∑ i ′ = 1 V λ k i ′ ) ) + Ψ ( γ k ) − Ψ ( ∑ k ′ = 1 K γ k ′ ) ) γ k = α k + ∑ n = 1 N ϕ n k λ k i = η i + ∑ d = 1 M ∑ n = 1 N d ϕ d n k w d n i \begin{aligned} \phi_{nk} & \propto exp(\sum\limits_{i=1}^Vw_n^i(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) ) + \Psi(\gamma_{k}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{k^{'}}))\\ \gamma_k & = \alpha_k + \sum\limits_{n=1}^N\phi_{nk} \\ \lambda_{ki} & = \eta_i + \sum\limits_{d=1}^M\sum\limits_{n=1}^{N_d}\phi_{dnk}w_{dn}^i \end{aligned} ϕnkγkλkiexp(i=1Vwni(Ψ(λki)Ψ(i=1Vλki))+Ψ(γk)Ψ(k=1Kγk))=αk+n=1Nϕnk=ηi+d=1Mn=1Ndϕdnkwdni

其中,对于第一个式子
ϕ n k ∝ e x p ( ∑ i = 1 V w n i ( Ψ ( λ k i ) − Ψ ( ∑ i ′ = 1 V λ k i ′ ) ) + Ψ ( γ k ) − Ψ ( ∑ k ′ = 1 K γ k ′ ) ) \begin{aligned} \phi_{nk} & \propto exp(\sum\limits_{i=1}^Vw_n^i(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) ) + \Psi(\gamma_{k}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{k^{'}}))\end{aligned} ϕnkexp(i=1Vwni(Ψ(λki)Ψ(i=1Vλki))+Ψ(γk)Ψ(k=1Kγk)), w n i = 1 w_n^i=1 wni=1当且仅当文档中第n个词为词汇表中第i个词。

最终的E步就是用上述三个式子来更新参数,并且不断循环迭代更新,直到三个变分参数收敛。当三个都收敛后,下一步就是M步,固定变分参数,更新模型参数 α , η \alpha, \eta α,η

EM算法M步

我们在该步固定变分参数 λ , ϕ , γ \lambda, \phi, \gamma λ,ϕ,γ,极大化ELBO得到最优的模型参数 α , η \alpha, \eta α,η,求解方法有很多,LDA这里一般使用牛顿法,即通过求出ELBO对于 α , η \alpha, \eta α,η的一阶和二阶导数的表达式,然后迭代求解 α , η \alpha, \eta α,η在M步的最优解。

对于 α , 它 的 一 阶 和 二 阶 导 数 表 达 式 为 \alpha, 它的一阶和二阶导数表达式为 α,

∇ α k L = M ( Ψ ( ∑ k ′ = 1 K α k ′ ) − Ψ ( α k ) ) + ∑ d = 1 M ( Ψ ( γ d k ) − Ψ ( ∑ k ′ = 1 K γ d k ′ ) ) ∇ α k α j L = M ( Ψ ′ ( ∑ k ′ = 1 K α k ′ ) − δ ( k , j ) Ψ ′ ( α k ) ) \nabla_{\alpha_k}L = M(\Psi(\sum\limits_{k^{'}=1}^K\alpha_{k^{'}}) - \Psi(\alpha_{k}) ) + \sum\limits_{d=1}^M(\Psi(\gamma_{dk}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{dk^{'}}))\\ \nabla_{\alpha_k\alpha_j}L = M(\Psi^{'}(\sum\limits_{k^{'}=1}^K\alpha_{k^{'}})- \delta(k,j)\Psi^{'}(\alpha_{k}) ) αkL=M(Ψ(k=1Kαk)Ψ(αk))+d=1M(Ψ(γdk)Ψ(k=1Kγdk))αkαjL=M(Ψ(k=1Kαk)δ(k,j)Ψ(αk))
其中看,当且仅当k=j时, δ ( k , j ) = 1 \delta(k,j)=1 δ(k,j)=1,否则 δ ( k , j ) = 0 \delta(k,j)=0 δ(k,j)=0

对于 η \eta η,它的一阶和二阶导数表达式为:
∇ η i L = K ( Ψ ( ∑ i ′ = 1 V η i ′ ) − Ψ ( η i ) ) + ∑ k = 1 K ( Ψ ( λ k i ) − Ψ ( ∑ i ′ = 1 V λ k i ′ ) ) ∇ η i η j L = K ( Ψ ′ ( ∑ i ′ = 1 V η i ′ ) − δ ( i , j ) Ψ ′ ( η i ) ) \nabla_{\eta_i}L = K(\Psi(\sum\limits_{i^{'}=1}^V\eta_{i^{'}}) - \Psi(\eta_{i}) ) + \sum\limits_{k=1}^K(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}))\\ \nabla_{\eta_i\eta_j}L = K(\Psi^{'}(\sum\limits_{i^{'}=1}^V\eta_{i^{'}}) - \delta(i,j)\Psi^{'}(\eta_{i}) ) ηiL=K(Ψ(i=1Vηi)Ψ(ηi))+k=1K(Ψ(λki)Ψ(i=1Vλki))ηiηjL=K(Ψ(i=1Vηi)δ(i,j)Ψ(ηi))

最终牛顿法迭代公式为:
α k = α k + ∇ α k L ∇ α k α j L η i = η i + ∇ η i L ∇ η i η j L \begin{aligned} \alpha_{k} = \alpha_k + \frac{\nabla_{\alpha_k}L}{\nabla_{\alpha_k\alpha_j}L} \\ \eta_{i} = \eta_i+ \frac{\nabla_{\eta_i}L}{\nabla_{\eta_i\eta_j}L} \end{aligned} αk=αk+αkαjLαkLηi=ηi+ηiηjLηiL

summary

变分推断

  1. 求解过程实际上求解 l o g   p ( w ∣ α , η ) log\ p(w|α,η) log p(wα,η),得到其下界函数 L ( λ , ϕ , γ ; α , η ) = E q    l o g p ( θ , β , z , w ∣ α , η ) − E q    l o g q ( β , z , θ ∣ λ , ϕ , γ ) L(\lambda,\phi, \gamma; \alpha, \eta) = E_q\; log{p(\theta,\beta, z, w| \alpha, \eta) } - E_q\; log{q(\beta, z, \theta|\lambda,\phi, \gamma)} L(λ,ϕ,γ;α,η)=Eqlogp(θ,β,z,wα,η)Eqlogq(β,z,θλ,ϕ,γ)
  2. 可以通过求解该下届,得到逼近该数值
  3. 通过计算化简得到该L函数关于 λ , ϕ , γ \lambda,\phi, \gamma λ,ϕ,γ的表达式。
  4. 通过对ELBO函数求导并令其为0,得到 λ , ϕ , γ \lambda,\phi, \gamma λ,ϕ,γ的表达式的值,三者之间存在联系,迭代更新直到收敛。得到固定 α , η \alpha, \eta α,η情况下的最大值。
  5. 由ELBO函数对 α , η \alpha, \eta α,η求导,另其为0,得到其对应的表达式。由4步得到的值对两者进行更新
  6. 重复上述过程,即求解。

变分推断算法流程

算法

输入:主题数K,M个文档与对应的词
1. 初始化 α , η \alpha, \eta α,η向量
2. 开始EM算法迭代直至收敛
a). 初始化所有的 ϕ , γ , λ \phi, \gamma, \lambda ϕ,γ,λ,进行E步迭代循环,直至 ϕ , γ , λ \phi, \gamma, \lambda ϕ,γ,λ收敛
    (i) for d from 1 to M:
            for n from 1 to N d N_d Nd:
                for k from 1 to K:
                    按照E步中 ϕ n k \phi_{nk} ϕnk公式更新 ϕ d n k \phi_{dnk} ϕdnk
            标准化 ϕ n k \phi_{nk} ϕnk使得该向量各项的和为1.
        按照E步中 γ k \gamma_k γk公式更新 γ d k \gamma_{dk} γdk
    (ii) for k from 1 to K:
            for i from 1 to V:
                按照E步更新 λ k i \lambda_{ki} λki
    (iii)如果 ϕ , γ , λ \phi, \gamma, \lambda ϕ,γ,λ收敛,则跳出a) 步,否则回到(i)步。
b) 进行LDA的M步迭代循环, 直到 α , η \alpha, \eta α,η收敛
    按照M步中更新 α , η \alpha, \eta α,η参数直到收敛
c) 如果所有的参数均收敛,则算法结束,否则回到第2)步。

算法结束后,我们可以得到模型的后验参数 α , η \alpha, \eta α,η,以及我们需要的近似模型主题词分布 λ \lambda λ,以及近似训练文档主题分布 γ \gamma γ

summary

Q函数也即 l o g   p ( w ∣ α , η ) log\ p(w|α,η) log p(wα,η)

  1. 原则上求Q函数,然后再极大化Q函数
  2. 对于单隐变量条件下Q函数为 E z [ l o g   p ( z , o ∣ λ ) ∣ o , λ i ] = ∑ z p ( z ∣ o , λ i ) l o g   p ( z , o ∣ λ ) E_{z}[log \ p(z,o|\lambda)|o,\lambda^i]=\sum_z p(z|o,\lambda^i)log\ p(z,o|\lambda) Ez[log p(z,oλ)o,λi]=zp(zo,λi)log p(z,oλ)
  3. LDA中隐变量分布 p ( θ , β , z ∣ w , α , η ) p(\theta,\beta,z|w, \alpha,\eta) p(θ,β,zw,α,η)不可直接得到,由 q ( θ , β , z ∣ λ , ϕ , γ ) 近 似 得 到 q(\theta,\beta,z|\lambda, \phi,\gamma)近似得到 q(θ,β,zλ,ϕ,γ),得到该分布后,代入Q函数,极大化求取 α , η \alpha, \eta α,η
  4. 在求Q函数时,由KL散度代表两分布的差异性,此时第一个分布的参数 w , α , η w, \alpha, \eta w,α,η已知,求KL散度时,可转化为求ELBO(evidence lower bound)的极大值
  5. Q步时,需迭代求取参数 λ , ϕ , γ \lambda, \phi, \gamma λ,ϕ,γ,直到收敛
  6. M步时,同样需迭代求取参数 α , γ \alpha, \gamma α,γ,直到收敛

reference
LDA数学八卦
变分推断求解 http://blog.csdn.net/happyer88/article/details/46723941
https://segmentfault.com/a/1190000012215533
https://www.cnblogs.com/pinard/p/6873703.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值