LDA工程实践之算法篇之(一)算法实现正确性验证(转)

研究生二年级实习(2010年5月)开始,一直跟着王益(yiwang)和靳志辉(rickjin)学习LDA,包括对算法的理解、并行化和应用等等。毕业后进入了腾讯公司,也一直在从事相关工作,后边还在yiwang带领下,与孙振龙、严浩等一起实现了一套大规模并行的LDA训练系统——Peacock。受rick影响,决定把自己对LDA工程实践方面的一些理解整理出来,分享给大家,其中可能有一些疏漏和错误,还请批评指正。

Rickjin在《LDA数学八卦》[1]一文中已经对LDA的数学模型以及基本算法介绍得比较充分了,但是在工程实践上,我们还是有一些需要注意的问题,比如:

  • 怎样验证算法实现的正确性?
  • 怎样加速Gibbs sampling?
  • 在线推断(inference)时,需要注意些什么问题?
  • 超参数对模型的影响以及怎样做超参数优化?

本文将涉及以上内容,不包括:LDA并行化和应用,后续会在文章《LDA工程实践之架构篇》和《LDA工程实践之应用篇》中进行介绍。

为了方便大家理解,本文所有数学符号和 [2] 保持一致,具体见表 1。


Table 1: Symbols
1 算法实现正确性验证

在实现机器学习算法的时候,由于数值算法特有的收敛性问题,让这项本来相对简单的工作增加了难度。这其中的典型是多层次神经网络的优化算法——反向传播(Back Propagation,BP)算法,由于神经网络的强大表述能力,即使实现有误,在简单数据实验上,我们可能也发现不了问题。LDA算法的实现较BP简单,工作中我们常采用如下几个方法进行算法正确性的先期验证。

1.1 Toy data实验
Figure 1: KMeans toy data

在实现算法之前,toy data的准备必不可少。Toy data需要尽量简单——纬度低、数据量少,能表述清楚问题即可,这样方便我们实现算法时进行单元测试和调试。比如做KMeans聚类,可以采用2D高斯混合模型生成toy data(见图1,类别数为3)。LDA实现过程中,我们构造的toy data类似表 2(假设模型主题数 K=2),此时模型训练过程中的每一个迭代以及最终模型输出都是可预测的(表 2 数据收敛后,Doc1-3的词赋予的主题应该都是1,Doc4-6的词赋予的主题应该都是2,或者二者主题互换)。


Table 1: LDA toy data

随机算法在开发调试过程中,稳定不变的随机数序列是非常重要的,这样有利于定位问题。获取稳定不变的随机数非常简单,只需要我们额外提供一个伪随机数种子的命令行参数。

1.2 合成实验

算法包最终实现,toy data实验符合预期,此时如果我们想进一步验证LDA算法的效果呢?考虑到LDA是一种生成模型[3],Griffiths等人[4]在论文中采用合成实验来演示模型的效果,当然,这也可以作为算法正确性的验证。




Figure 2: Griffiths Ground truth


Figure 3: Griffiths Synthesis Experiment [4]


Figure 4: Ground truth

Φ


Figure 5: Estimated

合成实验过程中需要用到Dirichlet采样,一般的标准库中没有提供:对c/c++来说,gsl [5] 是不错的选择;对python来说,numpy [6] 有提供实现。

具体到LDA模型,Perplexity计算公式如Eq. 6。训练过程中,计算Perplexity严谨的做法应该使用当前迭代获得的模型在线Inference测试集文档,得到文档的的主题分布后代入Eq. 6,在第三章我们将看到,在线Inference新文档的主题分布也满足
Eq. 3。当然,工程上为了节省计算资源,我们通常就在训练集上计算当前迭代的Perplexity。

LDA模型训练过程中,随着迭代的进行,模型的Perplexity曲线会逐渐收敛。因此,我们通常会根据训练过程中模型的Perplexity曲线是否收敛来判定模型是否收敛。Perplexity曲线收敛性也从侧面可以证明算法实现的正确性。图 6 给出了一次模型训练过程的LogLikelihood和Perplexity曲线(主题数 K=10,000,迭代130左右的曲线突变将在第四章给出解释)。


Figure 6: LogLikelihood and perplexity curve


参考文献

时间: 2025-01-24 05:58:12

LDA工程实践之算法篇之(一)算法实现正确性验证(转)的相关文章

PaddlePaddle应用于百度视觉技术的工程实践

深度学习的出现,某种程度上改变了我们对计算机视觉的定义.而PaddlePaddle是百度开源的深度学习框架,它是如何支持百度视觉技术,有哪些工程实践,这篇文章将由百度视觉技术部主任研发架构师刘国翌为大家解答. 以下为刘国翌老师演讲实录 百度AI视觉能力 百度内部大规模应用计算机视觉的技术分为四个方面,第一是图像识别,包含图像分类.文字识别.人脸识别等.第二是图像检索,包含图文.相同图片.相似图片和商品图片检索.第三是视频理解,主要涉及视频分类.目标追踪.人体姿态跟踪,应用在商业.监控.安全.新零

《大话操作系统——做坚实的工程实践派》(硬件篇)

 很多朋友需要PDF,经过这几天的辛苦校对,当然目前只校对了一部分,那就先发这一部分的PDF PDF:<大话操作系统--做坚实的工程实践派>(硬件篇)下面是一部分PDF的截图,可以先预览一下

Vue3都要上的TypeScript之工程实践

0. 前言 怎么上... 咳咳,大家别想歪,这是一篇纯技♂术文章. 0.1 Why TypeScript 什么?尤大要把Vue 3.0全部改成用Typescript来写?这不是逗我吗,那我是不是要用TypeScript来写Vue应用了? 好吧,Vue3.0可能最快也要19年年末才出来,Vue3.0是会对Ts使用者更友好,而不是只能用ts了,尤大使用ts的原因也是因为ts的静态类型检测以及ts的表现比flow越来越好了.自从巨硬大步迈向开源,前端圈子多了很多新工具比如VS Code.TypeScr

c++ STL 工程实践的15条建议

STL是c++非常重要的一部分,它是很多大神的杰作,高效,稳定,可扩展性好,虽然STL确实存在难以调试,内存碎片的问题(现在机器的内存越来越大,内存碎片的问题基本不太可能成为系统瓶颈,但只要你使用恰当,它能显著提高生产力,并使代码更短,更易维护. 而在工程中,如果不养成好的使用习惯,也容易造成一些问题! 而自己在工程实践中,总结了一些建议 1.  vector, map, set, list, queue, dequeue, stack 等容器存放的对象必须是可拷贝的,尤其注意深拷贝的情况,必须

编码原则实例------c++程序设计原理与实践(进阶篇)

编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标识,而推荐原则都用小写字母r及其编号标识,对于前者程序员必须严格遵守,而后者则偶尔可以不遵守) 1.一般原则 R100:任何函数和类的代码规模都不应超过200行(不包括注释). 原因:长的函数和类会更复杂,因而难以理解和测试. r101:任何函数和类都应该能完全显示在一屏上,并完成单一的逻辑功能.

实现求解线性方程(矩阵、高斯消去法)------c++程序设计原理与实践(进阶篇)

步骤: 其中A是一个n*n的系数方阵 向量x和b分别是未知数和常量向量: 这个系统可能有0个.1个或者无穷多个解,这取决于系数矩阵A和向量b.求解线性系统的方法有很多,这里使用一种经典的方法--高斯消去法(https://zh.wikipedia.org/wiki/高斯消去法).首先,我们对A和b进行交换,使得A变为一个上三角矩阵.上三角矩阵就是对角线之下的所有元素均为0.即如下形式: 实现这个目标是很容易的.为了使a(i,j)变为0,我们先将它乘以一个常量,使它等于第j列上的另一个元素,比如说

工程实践:如何规范地打印程序日志?

工程实践:如何规范地打印程序日志? 很久之前,有个朋友问我,如果一个老项目让你接手去进行后续维护,你会先从哪里入手.让自己更快地上手项目?当时我没有特别正面去回答这个朋友的问题,我说:一个老项目是否容易上手,一个非常关键的地方就是这个项目的日志是否打得足够好.因为通常来说,一个老项目相对比较稳定了,后续大概率不会有比较大的变更和改动,那么对于这样的项目,核心就是“维稳”.但是任何人都无法保证项目在线上运行时不会出线上故障,在出现线上问题或者故障时,如何快速止损就是第一要义,而日志在止损过程中就扮

结合工程实践选题调研分析同类软件产品

我的工程实践选题是 “服务器风扇散热控制” 本项目主要是根据服务器内部的芯片的功耗和温度,只能的调控服务器风扇转速.主要涉及风扇转速智能控制算法设计,linux下的应用开发,服务器系统风扇控制编程,板卡温度读取等技术. 由于以往生活和学习经历中并没有接触过服务器散热控制等,本片文章以温控风扇为例进行调研和分析同类软件. 本文主要以 1.基于51单片机的智能温控风扇系统 2.树梅派自动风扇降温系统 3.基于pid的只能风扇系统.这三种都属shrinkwrap(包装在盒子里的软件) 1.这些软件的开

结合工程实践分析同类软件产品-抖音快手微视

我的工程实践选题是做前后端软件开发,所以挑选了三款软件进行分析:1.抖音  2.微视  3.快手 这三款软件具有一定的共同点:用户可以在此之上观看基于推荐算法的视频流,但是它们的定位与特点有很多的不同之处, 从信息架构图中可以看出,三个产品的主要核心功能都是浏览短视频.拍摄短视频和搜索,并通过视频.关注.互动.消息等操作发展短视频社区. 下面具体分析: 一.总体分析 1.抖音的风格潮酷,视频质量高,但拍摄成本高,拍摄需要内容引导,会导致视频内容同质化. 2.快手的视频接地气,与生活息息相关,内容