zoukankan      html  css  js  c++  java
  • LDA高效并行Gibbs学习(1)

      在那篇2003年发表的文章之前,pLSI提出了每个word是有一个特定的topic也就是主题产生的,而word可以看做是每个document的样本,于是我们不难可以认为每个document是不同的主题在其上的一个近似的一个概率分布。同时,有两个前提。第一,document以及word的顺寻是可以交换并且是可以忽略的。第二,可交换性不以为着各个元素之间是完全独立的,而是条件性的独立。由以上两条,就可以引出LDA。其实,在我看来这是一种存在弱相互联系的概率分布。而后来我通过查资料了解发现潜在的狄利克雷分布正是强调的这一点。但是LDA具体的推到还是不能很好地看懂。

      Gibbs采样在我推测看来可能是利用了LDA的两个条件之一的可交换性以及条件独立性来实行的一种采样拟合的分析方法。而他的要求很明显是要求能收敛采样分析出一条马尔科夫链。这里我顺便想谈谈我对狄利克雷分布的一点理解,狄利克雷分布是在描述某种概率分布出现的概率。当我把某个概率分布形成的过程切开看,在利用概率分布的概率来计算我看到的就正好是马尔科夫链所描述的关系。具体的公式我就不写上来了,我相信日后编程只需要这样算就可以了。但是,从公式中不难看出,我们程序的任务可能主要是完成一个计数与统计的功能。

      首先,我要声明的是我对于多线程以及集群计算的编程实践几乎是少到没有,可能了解的只是些皮毛。首先,谈一下Gibbs分布式否满足能够用多线程或者说是集群计算的优化条件。依据算法,我们的处理对象是一个corpus包含多个文档很多topic,但是我们的任务非常单一是遍历所有word,并且对全局变量以及相应的局部变量进行相应的修改。而我们的传统多线程以及集群也是通过这样一种手段来实现的。但是,由于各种我们在统计局部变量进行计算的时候我们的全局变量必须也进行相应的更新,要不然是无法得到收敛的结果的。由于我没有切身的实验过,但是在我看了论文后我觉得这个系统的瓶颈应该就是同步全局变量的时间。这意味着控制同步的进程或是线程需要通过类似于轮询的手段挨个同步后再发出继续的指令。这的确会造成paper中所说的网络处于“冰火两种天”。同时,还有一个就是负载问题,我们是按照步骤切分的但是各个现成或是集群中的主机可能由于word的长短以及分布差异可能会在负载上不太一致,即在计算资源的分配上可能不太合理。造成处理机资源的浪费以及进程或是线程等待的浪费。

      

  • 相关阅读:
    [原创] 基础中的基础(三):理解数据库的几种键和几个范式
    [原创] 思维导图笔记(一):设计模式
    [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
    [原创] 基础中的基础(一):简单排序算法总结(附代码)
    [转载] Linux 下产生和调试core文件
    [转载] C++异常处理机制
    spring cloud开发、部署注意
    使用Spring Sleuth和Zipkin跟踪微服务
    HttpClient4.5 SSL访问工具类
    多线程处理中Future的妙用
  • 原文地址:https://www.cnblogs.com/Morrow/p/2590258.html
Copyright © 2011-2022 走看看