LDA主题模型思考

最近这几天在看LDA主题模型,大概整理下中间的思考流向。
先验,后验,后验共轭,LDA主题模型描述:模型里假定文档由一系列步骤产生,问题描述:已知信息文档与词的矩阵(后验),求文档与主题,主题与词的矩阵(先验)
也就是说LDA是已知后验求先验。求解方法是Gbiss采样。
Gbiss采样涉及 采样,蒙特卡洛方法,马尔科夫链,MCMC采样,MH采样, Gbiss采样。

LDA主题模型大部分知识参考刘老师

最近对MH有了新的理解,MH的描述如下:LDA主题模型思考
这里有两个问题:在已知的分布里生成候选状态是什么?p又是什么?
为了能对问题有更加清晰的思考,我决定从最简单的例子开始考虑:假如目标采样是若干个数值a,b,占总数比例为0.4,0.6。根据MH,首先采样第一个点,采样方式是均匀采样,那么第一个点的分布是{a: 0.5, b: 0.5},也就是有一半的可能性为a或者b。接下来采样第二个点,同样是均匀采样,那么情形是这样的:a -> b, a -> a, b -> a, b -> b,发生概率一致,为0.25。
LDA主题模型思考
注意a - > b , b -> a 是有一定概率被拒绝的。在这里已经可以看出与马尔科夫链的关联了。注意在一般的马尔科夫链中,上图的a- > a 和 a - > b的拒绝过程是没有画出来的。

马尔科夫链的收敛状态和细致平衡条件,请参考刘老师的文章。

在这里可以思考的是,所谓q,在很多资料里被称作状态转移概率,或者特定的采样,其实是节点的转移过程的概率。比如 q(b | a),其实是当前处于a节点,在特定采样的情况下采样到b的概率。这里只有两种情形,那么第一个节点为a第二个节点采样b的概率就是0.5。这也就是为什么很多MH代码,计算α根本没考虑q,因为均匀采样,q(a | b) == q(b | a),没必要写在代码里。
接下来就是就是p,如果要对下一个状态进行估算,考虑下转移a -> b,正常的计算方式是p(a) * q(b | a) * α,这里我们就应该知道,MH中的p其实是节点当前状态T的概率。如果不是离散的情况的话,p是分布密度函数。

最后,就是MH到底满足细致平稳条件吗?请参考马尔科夫链的资料。
细致平稳条件的简单描述:任一两个节点互相转移的概率符合 p(a) * K( a -> b) == p(b) * K(b -> a)。类似于物理的动态均衡。
考虑草图中节点a,节点b的互相转移过程:
p(a) * min{1, p(b) * q(b |a) / p(a) * q(a | b)}
p(b) * min{1, p(a) * q(a | b) / p(b) * q(b |a)}
不妨假设p(b) > p(a) ,则:
p(a) * 1
p(b)* [p(a) * q(a | b) / p(b) * q(b | a)]

对比下,就知道对于MH来说节点的状态转移是满足细致平稳条件的。

写点注意事项:
1.MH算法并不是拒绝采样,对于一个新的采样点,如果没有大于接受率,那么前一个状态会被继承,也就是采样旧节点。这在计算新的分布的时候可以体现出来。如果不继承,那么新的分布就不满足总和一的条件了。
根据状态转移图:p(a)new = p(a) * q(a | a) * α(a | a) + p(b) * q(a | b) *α(a | b) + p(a) * q(b | a) * (1 - α(b | a))
最后一部分相当于a - > b被拒绝的情形,被拒绝前一个状态会被继承。
实际的计算是p(a)new = 0.5 * 0.5 * 1 + 0.5 * 0.5 * (0.4 * 0.5 / 0.6 * 0.5) + 0.5 * 0.5 * (1 - 1) = 5 / 12
这里a -> b等于1 ,意味着没有拒绝。
可以认为采样第二个点的分布是{a: 5 /12 , b : 7 / 12},持续循环,最终就会稳点成 a: 0.4 , b: 0.6
提醒:q(a | b)是当前处于b节点下一次采样到a的概率,在这里(均匀采样)是0.5。对于非离散的情形,怎么考虑呢,可以把定义域离散成一个个小区间。对于单点考虑概率是没有意义的,概率只在区间上。然后q(a | b)可以认为是当前采样区间b,下一次采样到区间a的概率,比如是高斯分布,那么就得考虑a b 的位置了,靠近均值的区域概率更高。大概如此。

参考视频:徐亦达老师的精彩讲课

ok,接下来就是吉布斯采样了