LDA主题模型学习笔记4:求解模型参数(M-step)
2015-07-02 11:09
483 查看
这一步,我们根据E-step得到的γ,ϕ\gamma,\phi,最大化L(γ,ϕ;α,β)L(\gamma,\phi;\alpha,\beta),得到α,β\alpha,\beta.
用拉格朗日函数对β\beta求偏导,令偏导为0,可得:
这里的ϕdni\phi_{dni}指的是对第d个文档的变分参数ϕni\phi_{ni},也就是第n个单词在第i个主题的词分布中的概率,wjdnw_{dn}^j是第d个文档中第n个单词wnw_n,wnw_n是一个V维向量,其中只有一个元素是1,其他都是0,这个为1的元素对应的索引号就是这个单词在文档集字典中的ID,上标j是指wnw_n向量中的每个元素,如果wjdn=1w_{dn}^j=1那么单词wnw_n在文档集字典中的ID就是j。
因为α\alpha是Dirichlet分布的参数(K维的,K是主题个数),所以它没有约束条件,直接对α\alpha求偏导:
可以看到,一阶导数的结果中包含αj\alpha_j,这里不能直接令偏导为0解出α\alpha。所以需要考虑迭代的方法去求解,作者在这里使用牛顿迭代法。牛顿法的理解可以参考这里:http://blog.csdn.net/luoleicn/article/details/6527049
对于K维向量α\alpha,它的牛顿迭代式如下:
其中H(α),g(α)H(\alpha),g(\alpha)分别是α\alpha处的Hessian矩阵和梯度。这里我们可以看到有对Hessian矩阵求逆的操作,这个操作时间复杂度高达O(n3)O(n^3),所以考虑简化这个求逆操作。
Hessian矩阵的元素是:
首先对Hessian矩阵H进行分解:
这样Hessian矩阵的逆就成了如下形式:
对于α\alpha的第i个分量,Hessian矩阵的逆和梯度的乘积:
其中:
这样可以看到,(H−1g)i(H^{-1}g)_i只与hih_i和gig_i有关,它们的值各有k个,所以这时的牛顿法是线性的。
本文内容来自LDA原始论文《Latent Dirichlet Allocation》的附录A.2, A.4.
1,拉格朗日乘数法求解β\beta
首先把L(γ,ϕ;α,β)L(\gamma,\phi;\alpha,\beta)简化,只保留与β\beta有关的部分。因为β\beta是每一行存一个主题的词分布,所以每一行的和是1,存在等式约束∑Vj=1βij=1\sum_{j=1}^V\beta_{ij}=1,所以是带等式约束的最大化问题,使用拉格朗日乘数法,可得到拉格朗日函数如下:用拉格朗日函数对β\beta求偏导,令偏导为0,可得:
这里的ϕdni\phi_{dni}指的是对第d个文档的变分参数ϕni\phi_{ni},也就是第n个单词在第i个主题的词分布中的概率,wjdnw_{dn}^j是第d个文档中第n个单词wnw_n,wnw_n是一个V维向量,其中只有一个元素是1,其他都是0,这个为1的元素对应的索引号就是这个单词在文档集字典中的ID,上标j是指wnw_n向量中的每个元素,如果wjdn=1w_{dn}^j=1那么单词wnw_n在文档集字典中的ID就是j。
2,牛顿法求解α\alpha
首先把L(γ,ϕ;α,β)L(\gamma,\phi;\alpha,\beta)简化,只保留与α\alpha有关的部分:因为α\alpha是Dirichlet分布的参数(K维的,K是主题个数),所以它没有约束条件,直接对α\alpha求偏导:
可以看到,一阶导数的结果中包含αj\alpha_j,这里不能直接令偏导为0解出α\alpha。所以需要考虑迭代的方法去求解,作者在这里使用牛顿迭代法。牛顿法的理解可以参考这里:http://blog.csdn.net/luoleicn/article/details/6527049
对于K维向量α\alpha,它的牛顿迭代式如下:
其中H(α),g(α)H(\alpha),g(\alpha)分别是α\alpha处的Hessian矩阵和梯度。这里我们可以看到有对Hessian矩阵求逆的操作,这个操作时间复杂度高达O(n3)O(n^3),所以考虑简化这个求逆操作。
Hessian矩阵的元素是:
首先对Hessian矩阵H进行分解:
这样Hessian矩阵的逆就成了如下形式:
对于α\alpha的第i个分量,Hessian矩阵的逆和梯度的乘积:
其中:
这样可以看到,(H−1g)i(H^{-1}g)_i只与hih_i和gig_i有关,它们的值各有k个,所以这时的牛顿法是线性的。
本文内容来自LDA原始论文《Latent Dirichlet Allocation》的附录A.2, A.4.
相关文章推荐
- 《JAVA程序设计》日志四
- wamp5设置外网访问方法
- C# Generic(转载)
- Java文件选择对话框JFileChooser使用详解
- Solr4.10使用教程(三):solr crud
- 《Java课程实习》日志(周三)
- 输入一个数字,将其倒序输出,并输出其各个位上的乘积
- (五)HTML5本地存储——Web Storage
- 被问概率达99%的面试问题
- windows下写好脚本需要在Linux运行
- Leetcode|Surrounded Regions
- CListCtrl获取列数
- Nginx配置PATHINFO隐藏thinkphp index.php
- adb logcat输出安卓日志
- 三、Spring源码分析——ApplicationContext
- java-从先序遍历和中序遍历重建二叉树
- 统计字符串中出现频率最高的字符
- MTC脚本录制+eclipse回放
- extern 用法,全局变量与头文件(重复定义)
- cmake的使用