文本主题模型之ldalda求解之变分推断em算法

刘建平Pinard 刘建平Pinard     2022-09-01     450

关键词:

            文本主题模型之LDA(一) LDA基础

    文本主题模型之LDA(二) LDA求解之Gibbs采样算法

    文本主题模型之LDA(三) LDA求解之变分推断EM算法

    本文是LDA主题模型的第三篇,读这一篇之前建议先读文本主题模型之LDA(一) LDA基础,同时由于使用了EM算法,如果你对EM算法不熟悉,建议先熟悉EM算法的主要思想。LDA的变分推断EM算法求解,应用于Spark MLlib和Scikit-learn的LDA算法实现,因此值得好好理解。

1. 变分推断EM算法求解LDA的思路

    首先,回顾LDA的模型图如下:

  

    变分推断EM算法希望通过“变分推断(Variational Inference)”和EM算法来得到LDA模型的文档主题分布和主题词分布。首先来看EM算法在这里的使用,我们的模型里面有隐藏变量$\theta,\beta, z$,模型的参数是$\alpha,\eta$。为了求出模型参数和对应的隐藏变量分布,EM算法需要在E步先求出隐藏变量$\theta,\beta, z$的基于条件概率分布的期望,接着在M步极大化这个期望,得到更新的后验模型参数$\alpha,\eta$。

    问题是在EM算法的E步,由于$\theta,\beta, z$的耦合,我们难以求出隐藏变量$\theta,\beta, z$的条件概率分布,也难以求出对应的期望,需要“变分推断“来帮忙,这里所谓的变分推断,也就是在隐藏变量存在耦合的情况下,我们通过变分假设,即假设所有的隐藏变量都是通过各自的独立分布形成的,这样就去掉了隐藏变量之间的耦合关系。我们用各个独立分布形成的变分分布来模拟近似隐藏变量的条件分布,这样就可以顺利的使用EM算法了。

    当进行若干轮的E步和M步的迭代更新之后,我们可以得到合适的近似隐藏变量分布$\theta,\beta, z$和模型后验参数$\alpha,\eta$,进而就得到了我们需要的LDA文档主题分布和主题词分布。

    可见要完全理解LDA的变分推断EM算法,需要搞清楚它在E步变分推断的过程和推断完毕后EM算法的过程。

 2. LDA的变分推断思路

    要使用EM算法,我们需要求出隐藏变量的条件概率分布如下:$$p(\theta,\beta, z | w, \alpha, \eta) = \frac{p(\theta,\beta, z,  w| \alpha, \eta)}{p(w|\alpha, \eta)}$$

    前面讲到由于$\theta,\beta, z$之间的耦合,这个条件概率是没法直接求的,但是如果不求它就不能用EM算法了。怎么办呢,我们引入变分推断,具体是引入基于mean field assumption的变分推断,这个推断假设所有的隐藏变量都是通过各自的独立分布形成的,如下图所示:

    我们假设隐藏变量$\theta$是由独立分布$\gamma$形成的,隐藏变量$z$是由独立分布$\phi$形成的,隐藏变量$\beta$是由独立分布$\lambda$形成的。这样我们得到了三个隐藏变量联合的变分分布$q$为:$$\begin{align} 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{align}$$

    我们的目标是用$q(\beta, z, \theta|\lambda,\phi, \gamma) $来近似的估计$p(\theta,\beta, z | w, \alpha, \eta)$,也就是说需要这两个分布尽可能的相似,用数学语言来描述就是希望这两个概率分布之间有尽可能小的KL距离,即:$$(\lambda^*,\phi^*, \gamma^*) = \underbrace{arg \;min}_{\lambda,\phi, \gamma} D(q(\beta, z, \theta|\lambda,\phi, \gamma) || p(\theta,\beta, z | w, \alpha, \eta))$$

    其中$D(q||p)$即为KL散度或KL距离,对应分布$q$和$p$的交叉熵。即:$$D(q||p) = \sum\limits_{x}q(x)log\frac{q(x)}{p(x)} = E_{q(x)}(log\;q(x) - log\;p(x))$$

    我们的目的就是找到合适的$\lambda^*,\phi^*, \gamma^*$,然后用$q(\beta, z, \theta|\lambda^*,\phi^*, \gamma^*)$来近似隐藏变量的条件分布$p(\theta,\beta, z | w, \alpha, \eta)$,进而使用EM算法迭代。

    这个合适的$\lambda^*,\phi^*, \gamma^*$,也不是那么好求的,怎么办呢?我们先看看我能文档数据的对数似然函数$log(w|\alpha,\eta)$如下,为了简化表示,我们用$E_q(x)$代替$E_{q(\beta, z, \theta|\lambda,\phi, \gamma) }(x)$,用来表示$x$对于变分分布$q(\beta, z, \theta|\lambda,\phi, \gamma)$ 的期望。

$$\begin{align} log(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{align} $$

    其中,从第(5)式到第(6)式用到了Jensen不等式:$$f(E(x)) \geq E(f(x)) \;\; f(x)为凹函数$$

    我们一般把第(7)式记为:$$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(\lambda,\phi, \gamma; \alpha, \eta)$是我们的对数似然的一个下界(第6式),所以这个$L$一般称为ELBO(Evidence Lower BOund)。那么这个ELBO和我们需要优化的的KL散度有什么关系呢?注意到:$$\begin{align} 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{align} $$

    在(10)式中,由于对数似然部分和我们的KL散度无关,可以看做常量,因此我们希望最小化KL散度等价于最大化ELBO。那么我们的变分推断最终等价的转化为要求ELBO的最大值。现在我们开始关注于极大化ELBO并求出极值对应的变分参数$\lambda,\phi, \gamma$。

3. 极大化ELBO求解变分参数

    为了极大化ELBO,我们首先对ELBO函数做一个整理如下:$$\begin{align} 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{align} $$

    可见展开后有7项,现在我们需要对这7项分别做一个展开。为了简化篇幅,这里只对第一项的展开做详细介绍。在介绍第一项的展开前,我们需要了解指数分布族的性质。指数分布族是指下面这样的概率分布:$$p(x|\theta) = h(x) exp(\eta(\theta)*T(x) -A(\theta))$$

    其中,$A(x)$为归一化因子,主要是保证概率分布累积求和后为1,引入指数分布族主要是它有下面这样的性质:$$\frac{d}{d \eta(\theta)} A(\theta) = E_{p(x|\theta)}[T(x)]$$

    这个证明并不复杂,这里不累述。我们的常见分布比如Gamma分布,Beta分布,Dirichlet分布都是指数分布族。有了这个性质,意味着我们在ELBO里面一大推的期望表达式可以转化为求导来完成,这个技巧大大简化了计算量。

    回到我们ELBO第一项的展开如下:$$\begin{align} 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{align} $$

    第(15)式的第三项的期望部分,可以用上面讲到的指数分布族的性质,转化为一个求导过程。即:$$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^{'}})$$

    其中:$$\Psi(x) = \frac{d}{d x}log\Gamma(x) = \frac{\Gamma^{'}(x)}{\Gamma(x)}$$

    最终,我们得到EBLO第一项的展开式为:$$\begin{align} E_q[logp(\beta|\eta)]  & =  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{align} $$

    类似的方法求解其他6项,可以得到ELBO的最终关于变分参数$\lambda,\phi, \gamma$的表达式。其他6项的表达式为:$$\begin{align} E_q[logp(z|\theta)] = \sum\limits_{n=1}^N\sum\limits_{k=1}^K\phi_{nk}\Psi(\gamma_{k}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{k^{'}}) \end{align} $$

$$\begin{align} E_q[logp(\theta|\alpha)]  & = log\Gamma(\sum\limits_{k=1}^K\alpha_k) - \sum\limits_{k=1}^Klog\Gamma(\alpha_k)  + \sum\limits_{k=1}^K(\alpha_k-1)(\Psi(\gamma_{k}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{k^{'}})) \end{align} $$

$$\begin{align}  E_q[logp(w|z, \beta)]  & = \sum\limits_{n=1}^N\sum\limits_{k=1}^K\sum\limits_{i=1}^V\phi_{nk}w_n^i(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) ) \end{align} $$

$$\begin{align} E_q[logq(\beta|\lambda)] = \sum\limits_{k=1}^K(log\Gamma(\sum\limits_{i=1}^V\lambda_{ki}) - \sum\limits_{i=1}^Vlog\Gamma(\lambda_{ki})) + \sum\limits_{k=1}^K\sum\limits_{i=1}^V (\lambda_{ki}-1)(\Psi(\lambda_{ki}) - \Psi(\sum\limits_{i^{'}=1}^V\lambda_{ki^{'}}) )\end{align} $$

$$\begin{align} E_q[logq(z|\phi)] & = \sum\limits_{n=1}^N\sum\limits_{k=1}^K\phi_{nk}log\phi_{nk} \end{align} $$

$$\begin{align}  E_q[logq(\theta|\gamma)] & =  log\Gamma(\sum\limits_{k=1}^K\gamma_k) - \sum\limits_{k=1}^Klog\Gamma(\gamma_k)  +  \sum\limits_{k=1}^K(\gamma_k-1)(\Psi(\gamma_{k}) - \Psi(\sum\limits_{k^{'}=1}^K\gamma_{k^{'}}))\end{align} $$

    有了ELBO的具体的关于变分参数$\lambda,\phi, \gamma$的表达式,我们就可以用EM算法来迭代更新变分参数和模型参数了。

4. EM算法之E步:获取最优变分参数

    有了前面变分推断得到的ELBO函数为基础,我们就可以进行EM算法了。但是和EM算法不同的是这里的E步需要在包含期望的EBLO计算最佳的变分参数。如何求解最佳的变分参数呢?通过对ELBO函数对各个变分参数$\lambda,\phi, \gamma$分别求导并令偏导数为0,可以得到迭代表达式,多次迭代收敛后即为最佳变分参数。

    这里就不详细推导了,直接给出各个变分参数的表达式如下:

$$\begin{align} \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{align} $$

     其中,$w_n^i =1$当且仅当文档中第$n$个词为词汇表中第$i$个词。

$$\begin{align} \gamma_k & = \alpha_k + \sum\limits_{n=1}^N\phi_{nk} \end{align} $$

$$\begin{align} \lambda_{ki} & = \eta_i + \sum\limits_{n=1}^N\phi_{nk}w_n^i \end{align} $$

    由于变分参数$\lambda$决定了$\beta$的分布,对于整个语料是共有的,因此我们有:

$$\begin{align} \lambda_{ki} & = \eta_i +  \sum\limits_{d=1}^M\sum\limits_{n=1}^{N_d}\phi_{dnk}w_{dn}^i \end{align} $$

    最终我们的E步就是用(23)(24)(26)式来更新三个变分参数。当我们得到三个变分参数后,不断循环迭代更新,直到这三个变分参数收敛。当变分参数收敛后,下一步就是M步,固定变分参数,更新模型参数$\alpha,\eta$了。

5. EM算法之M步:更新模型参数

    由于我们在E步,已经得到了当前最佳变分参数,现在我们在M步就来固定变分参数,极大化ELBO得到最优的模型参数$\alpha,\eta$。求解最优的模型参数$\alpha,\eta$的方法有很多,梯度下降法,牛顿法都可以。LDA这里一般使用的是牛顿法,即通过求出ELBO对于$\alpha,\eta$的一阶导数和二阶导数的表达式,然后迭代求解$\alpha,\eta$在M步的最优解。

    对于$\alpha$,它的一阶导数和二阶导数的表达式为:$$\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}) )$$

    其中,当且仅当$k=j$时,$\delta(k,j)=1$,否则$\delta(k,j)=0$。

    对于$\eta$,它的一阶导数和二阶导数的表达式为:$$\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}) )$$

    其中,当且仅当$i=j$时,$\delta(i,j)=1$,否则$\delta(i,j)=0$。

    最终牛顿法法迭代公式为:$$\begin{align} \alpha_{k} = \alpha_k + \frac{\nabla_{\alpha_k}L}{\nabla_{\alpha_k\alpha_j}L} \end{align}$$

$$\begin{align} \eta_{i} = \eta_i+ \frac{\nabla_{\eta_i}L}{\nabla_{\eta_i\eta_j}L} \end{align}$$

6. LDA变分推断EM算法流程总结

    下面总结下LDA变分推断EM的算法的概要流程。

    输入:主题数$K$,M个文档与对应的词。

    1) 初始化$\alpha,\eta$向量。

    2)开始EM算法迭代循环直到收敛。

      a) 初始化所有的$\phi, \gamma, \lambda$,进行LDA的E步迭代循环,直到$\lambda,\phi, \gamma$收敛。

        (i) for d from 1 to M:

             for n from 1 to $N_d$:

               for k from 1 to K:

                按照(23)式更新$\phi_{dnk}$

             标准化$\phi_{nk}$使该向量各项的和为1.

          按照(24) 式更新$\gamma_{dk}$。

        (ii) for k from 1 to K:

            for i from 1 to V:

          按照(26) 式更新$\lambda{ki}$。

        (iii)如果$\phi, \gamma, \lambda$均已收敛,则跳出a)步,否则回到(i)步。

      b) 进行LDA的M步迭代循环, 直到$\alpha,\eta$收敛

        (i) 按照(27)(28)式用牛顿法迭代更新$\alpha,\eta$直到收敛

      c) 如果所有的参数均收敛,则算法结束,否则回到第2)步。

 

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

 

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

文本主题模型之ldalda求解之gibbs采样算法

 本文是LDA主题模型的第二篇,读这一篇之前建议先读文本主题模型之LDA(一)LDA基础,同时由于使用了基于MCMC的Gibbs采样算法,如果你对MCMC和Gibbs采样不熟悉,建议阅读之前写的MCMC系列MCMC(四)Gibbs采样。 1. Gibbs采样算法求... 查看详情

文本主题模型之ldalda基础

https://www.cnblogs.com/pinard/p/6831308.html     http://www.360doc.com/content/16/0428/10/478627_554452907.shtml     LDA(LatentDirichletAllocation)是一 查看详情

文本主题模型之ldalda基础

...这个LDA的信息,参看之前写的线性判别分析LDA原理总结。文本关注于隐含狄利克雷分布对应的LDA。1.LDA贝叶斯模型    LDA是基 查看详情

[转]em算法总结

...学习领域算法的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断等等。本文就对EM算法的原理做一个总结。1. EM算法要解决的问题    我们经常会从样本观察数据中,找出样本的模型参数。最常用的方法就是... 查看详情

数据挖掘十大经典算法之em

...turemodel,简称GMM)的参数;隐式马尔科夫算法(HMM)、LDA主题模型的变分推断等等。EM算法是一种迭代优化策略,由于它的计算方法中每一次迭代都分两步,其中一个为期望步(E步),另一个为极大步(M步),一轮轮迭代更新... 查看详情

gaussianlda:lda回想以及变分em

LatentDirichletAllocation(LDA)是一个主题模型,可以对文本进行建模。得到文档的主题分布。经常使用的模型參数预计方法有GibbsSampling和VariationalInference,网上有许多关于LDA的介绍,最为经典的比如Rickjin的《LDA数学八卦》。本文旨在... 查看详情

gaussianlda:lda回顾以及变分em

LatentDirichletAllocation(LDA)是一个主题模型,能够对文本进行建模,得到文档的主题分布。常用的模型参数估计方法有GibbsSampling和VariationalInference,网上有非常多关于LDA的介绍,最为经典的例如Rickjin的《LDA数学八卦》... 查看详情

概率图模型之em算法

...极大算法)是一种迭代算法,用于求解含有隐变量的概率模型参数的极大似然估计(MLE)或极大后验概率估计(MAP)。EM算法是一种比较通用的参数估计算法,被广泛用于朴素贝叶斯、GMM(高斯混合模型)、K-means(K均值聚类)... 查看详情

gaussianlda:lda回顾以及变分em

LatentDirichletAllocation(LDA)是一个主题模型,能够对文本进行建模,得到文档的主题分布。常用的模型参数估计方法有GibbsSampling和VariationalInference,网上有非常多关于LDA的介绍,最为经典的例如Rickjin的《LDA数学八卦》... 查看详情

从em到vi,最后落地vae

...EM是一种从频率角度解决优化问题(常见的频率角度模型有:回归模型、SVM等)。EM常与MLE进行对比。MLE(极大似然估计)EM算法1.2VI算法变分推断(VariationalInference)解决的是贝叶斯角度的积分问题࿰... 查看详情

变分推断——进阶

...我们可以通过变分推断将其转换为简单的可计算的问题来求解。现在我们贝叶斯统计的角度,来看一个难以准确计算的案例。推断问题可以理解为计算条件概率$p(y|x)$。利用贝叶斯定理,可以将计算条件概率(或者说后验概率,p... 查看详情

变分推断

...GAN的原理以及一些变种,这次打算介绍另一个重要的生成模型——变分自编码器(VariationalAutoEncoder,VAE)。但在介绍编码器之前,这里会先花一点时间介绍变分推断(VariationalInference,VI),而这一小系列最后还会介绍贝... 查看详情

lda笔记

...ationalInference)。该方法较为复杂,而且最后训练出的topic主题非全局最优分布,而是局部最优分布。后期发明了CollapsedGibbsSample方法,推导和使用较为简洁。    LatentDirichletAllocation是Blei等人于2003年提出的基于概率模型的主... 查看详情

变分推断——进阶(续)

SVI变分推断的前两篇介绍了变分推断的构造方法、目标函数以及优化算法CAVI,同时上一篇末尾提到,CAVI并不适用于大规模的数据的情况,而这一篇将要介绍一种随机优化(stochasticoptimization)的方法。这种优化方法与随机梯度下... 查看详情

统计学习方法c++实现之八em算法与高斯混合模型(代码片段)

EM算法与高斯混合模型前言EM算法是一种用于含有隐变量的概率模型参数的极大似然估计的迭代算法。如果给定的概率模型的变量都是可观测变量,那么给定观测数据后,就可以根据极大似然估计来求出模型的参数,比如我们假... 查看详情

大模型时代的ai之变与开发之根

自2018年谷歌发布Bert以来,预训练大模型以强大的算法效果,席卷了NLP为代表的各大AI榜单与测试数据集。随着产学研各界的深入研究,大模型在AI产学研各界的地位得到不断加强。到2021年,我们可以看到各大学术... 查看详情

em算法

...代算法,1977年由Dempster等人提出,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。每次迭代由两部分构成,E步求期望,M步求极大,称为期望极大算法。  概率模型有时既含有观测变量,又含有隐变量... 查看详情

em算法

...期望最大化的算法最大似然估计:已知:样本服从分布的模型观测到的样本求解:模型的参数极大似然估计是用来估计模型参数的统计学方法就是什么参数能使得样本符合这么一个模型最大似然函数:什么样的参数使得出现当前... 查看详情