这篇文章的主要目标,就是科普在学习理解LDA 模型中,需要了解的一些重要的数学知识。预设的读者是做自然语言处理、机器学习、数据挖掘方向的工程师,要读懂这篇科普,需要的数学基础知识基本上不超过陈希孺先生的《概率论与数理统计》这本书。0.1开篇在 Machine learning中,LDA是两个常用模型的简称: Linear discrim-inant, Analysis和 Latent dirichlet allocation,在这篇文章中我们主要八卦的是后者。IDA是一个在文本建模中很著名的模型,类似于SVD,PISA等模型,可以用于浅层语义分析在文本语义分析中是一个很有用的模型。很不幸的是,这个模型中涉及的数学知识有点多,包括 Gamma.函数, Dirichlet分布,Dirichlet- Multinomial共轭, Gibbs sampling, Variational inference,贝叶斯文本建模,PLSA建模,以及LDA文本建模。这篇文章的主要日标,就是科普在学习理解LDA模型中,需要了解的些重要的数学知识。预设的读者是做自然语言处理、机器学习、数据挖掘方向的工程师,要读懂这篇科普,需要的数学基础知识基本上不超过陈希孺先生的《概率论与数理统训》这本书。文章标题挂上“八卦”两字,因为八卦意味着自由、不拘束、可以天马行空,细节处理上也难免有不严谨的地方:当然我也希望八卦是相对容易理解的,即便他是关于数学的八卦。对于本文中的任何评论,欢迎发信到我的新浪微博帐号 rickjinl,或者是邮箱 zhihiuijing@ gMail coir0.2神奇的 Gamma函数0.2.1 Gamma函数诞生记学高等数学的时候,我们都学习过如下一个长相有点奇特的 Gamma函数通过分部积分的方法,可以推导出这个函数有如下的递归性质r(x+1)=x(x)于是很容易证明,T(x)函数可以当成是阶乘在实数集上的延拓,具有如下性质r(m)=(7-1)学习了 Gamma函数之后,多年以来我一直有两个疑问:1.这个长得这么怪异的个函数,数学家是如何找到的;2.为何定义r函数的时候,不使得这个函数的定义满足r(n)=m!而是T(m)=(m-1最近翻了一些资料,发现有不少文献资料介绍 Gamma函数发现的历史,要说清楚它需要一定的数学推导,这儿只是简要的说一些主线。1728年,哥德巴赫在考虑数列插值的问题,通俗的说就是把数列的通项公式定义从整数集合延拓到实数集合,例如数列1,4.9,16,…可以用通项公式2白然的表达,即便为实数的时候,这个通项公式也是良好定义的。直观的说也就是可以找到一条平滑的曲线通过y=x2通过所有的整数点(m,n2)这些点,从而可以把定义在整数集上的公式延拓到实数集合。天哥德巴赫开始处理阶乘序列1,2,6,24,120.720,……,我们可以计算2!,3!,是否可以计算25!呢?我们把最初的一些(mn,m!)的点画在坐标轴上,确实可以看到,容易画出一条通过这些点的平滑曲线THE FACTORIALS2345682624120504040,3209Figurc1:通过(m,m)的曲线哥德巴赫无法解决这个问题,丁是写信请教尼古拉斯.贝努利和他的弟弟丹尼尔.贝努利,由丁欧拉当时和丹尼尔.贝努利在一块,他也因此得知了这个问题。而欧拉于1729年完美的解决了这个问题,由此导致了T函数的诞生,当时欧拉只有22岁。事实上首先解决〃!的插值计算问题的是月尼尔.贝努利,他发现,如果m,n都是正整数,如果m→∞,有r几(m+→m!(1+m)(2+m)…(m-1+m)于是用这个无穷乘积的方式可以把m!的定义延拓到实数集合。例如,取m=2.5,3m足够大,基于上式就可以近似计算出2.5!。欧拉也偶然的发现nl!可以用如下的一个无穷乘积表达1)m+1m+3用极限形式,这个式子整理后可以写为1·2.3·mm→∞(1+n)(2+m)…(m+m)(m1+1)=n左边可以整理为1·2·3·m7+(1+m)(2+n)…(m1.2.3n+1)(m+2)m(m+1)”2(1+n)(2+n)…m(m+1)(m+2)…(m+m)m7+1)nm-1)(m+2)…(m+m)m+1n1+k所以(1)、(2)式都成立。欧拉开始尝试从一些简单的例子开始做一些计算,看看是否有规律可循,欢拉极其擅长数学的观察与归纳。当n=1/2的时候,带入(1)式计算,整理后可以得到44.66·88·1023.35.57.79.9然而右边正好和著名的wali公式关联。 Wallis在1665年使用插值方法计算半圆线y=√x(1-x)下的面积(也就是直径为1的半圆面积)的时候,得到关于丌的如下结耒,2·44·66·88·103·35·57·79.94于是,欧拉利用Wali公式得到了如下一个很漂亮的结果欧拉和高斯都是具有超凡直觉的数学家,但是欧拉和高斯的风格迥异。高斯是个老狐狸,数学上非常严谨,发表结果的时候却都把思考的痕迹抹去,只留下漂亮的结果,这招致了一些数学家对高斯的批评;而欧拉的风格不同,经常通过经验直觉做大胆的猜测,而他的文章中往往留下他如何做数学猜想的痕迹,而文章有的时候论证不够严谨。拉普拉斯曾说过:”读读欧拉,他是所有人Figure2:大数学家欧拉的老师。”波利亚在他的名著《数学与猜想》中也对欧拉做数学归纳和猜想的方式推崇备至。欧拉看到()中居然有丌,对数学家而言,有丌的地方必然有和圆相关的积分。由此欧拉猜测n!一定可以表达为某种积分形式,丁是欧拉开始尝试把n!表达为积分形式。虽然 Wallis的时代微积分还没有发明出来, Wallis是使用插值的方式做推导计算的,但是 Wallis公式的推导过程基本上就是在处理积分x2(1-m)=dx,受 Wallis的启发,欧拉开始考虑如下的般形式的积分J (e, n)此处n为正整数,e为正实数。利用分部积分方法,容易得到J(e+1e+1重复使用上述迭代公式,最终可以得到1.2·7+1)(c+2)…(c+m+1)于是欧拉得到如下一个重要的式子n!-(e+1)((e+n+1)/x°(1-x)接下来,欧拉使用了一点计算技巧,取e=/9并且令f→1,9→0,然后对上式右边计算极限(极限讣算的过程此处略去,推导不难,有兴趣的同学看后面的参考文献吧),于是欧拉得到如下简洁漂亮的结果:(logt)dt欧拉成功的把n!表达为了积分形式!如果我们做一个变换t=e-",就可以得到我们常见的 Galma函数形式' eda于是,利用上式把阶乘延拓到实数集上,我们就得到 Gamma函数的一般形式T(aHFigure 3: T(r)Gamma函数找到了,我们来看看第二个问题,为何 Gamma函数被定义为r(π)=(η-1),这看起来挺别扭的。如果我们梢微修正一下,把 Gamma图数定义中的t-1替换为tT(L)这不就可以使得r(n)-m!了嘛。欧拉最早的 Gamma函数定义还真是如上所示,选择了r(m)-m!,可是欧拉不知出于什么原因,后续修改了Gama函数的定义,使得r(m)=(n-1)!。而随后勒让德等数学家对 Gamma函数的进一步深入研究中,认可了这个定义,于是这个定义就成为了既成事实。有数学家猜测,个可能的原因是欧拉研究了如下积分B(m, n)这个函数现在称为Beta函数。如果(ama凶数的定义选取满足I(m)=(7-1)!,那么有BT(mr(nm.2r(m +n6非常漂亮的对称形式。可是如果选取rn)=ml!的定义,令E(m,n=/am(1-c)"dx则有E(m, n)T(mr(n)r(m+n+1)这个形式显然不如B(m,m)优美,而数学家总是很在乎数学公式的美感的。要了解更多的(amna函数的历史,推荐阅读Philip Davis, Leon hard Fuler's Integra A Historical Profile of theGamma functionJacques Dutka, The early history of the Factorial FunctionDetlef gronna. Why is the gamma function so as it is?0.22 Gamma函数欣赏Each generation has found something of interest to say about thegamma function. Perhaps the neat generation will alsoPhilip DavisGamma函数从它诞生开始就被许多数学家进行研究,包括高斯、勒让德、威尔斯特拉斯、柳维尔等等。这个函数在现代数学分析中被深入研究,在概率论中也是无处不在,很多统计分布都和这个函数相关。 Gamma函数作为阶乘的推广,首先它也有和 Stirling公式类似的一个结论T(a)v2Te-ax"t-i另外, Gamma函数不仅可以定义在实数集上,还可以延拓到整个复平面上。Figure4:复平面上的 Gamma函数Gamma函数有很多妙用,它不但使得(1/2)!的计算有意义,还能扩展很多其他的数学概念。比如导数,我们原来只能定义一阶、二阶等整数阶导数,有了Gama函数我们可以把函数导数的定义延拓到实数集,从而可以计算1/2阶导数同样的积分作为导数的逆运算也可以有分数阶。我们先考虑下x”的各阶导数first derivativenXsecond derivativethird derivativennk-th derivativen(m-1)(n-2)…(n-k+1)x6(n-k)Figure5:mn的各阶导数由于k阶号数可以用阶乘表达,于是我们用 Gamma函数表达为r(n+1)(7-k+1)于是基于上式,我们可以把导数的阶从整数延拓到实数集。例如,取n=1,k我们可以计算x的阶导数为r(1+1(1-1/2+1)很容易想到对于一般的函数f()通过Tyor级数展开可以表达为幂级数,于是借用xn的分数阶导数,我们可以尝试定义出仟意函数的分数阶导数。不过有点遗憾的是这种定义方法并非良定义的,不是对所有函数都适用,但是这个思想却是被数学家广泛采纳了,并由此发展了数学分析中的一个研究课题Fractional( alculus,在这种微积分中,分数阶的导数和积分都具有良定义,而这都依赖于 Gamma函数。Gamma函数和欧拉常数?有密切关系,可以发现dr(dl=1-im(1+2+2+…+--0gm)→进一步还可以发现 Gamma函数和黎曼卤数(s)有密切联系((s)=1++而函数涉及了数学中著名的黎曼猜想和素数的分布定理。希尔伯特曾说,如果他在沉睡1000年后醒来,他将问的第一个问题便是:黎曼猜想得到证明了吗?Figurc 6 log r(a)从 Gamma函数的图像我们可以看到它是个凸函数,不仅如此,logr(ax)也是个凸函数,数学上可以证明如下定理定理0.21( Bohr-Mullerup)如果f:(0,∞)→(0,∞),且满足f(1)-12.f(x+1)=xf(x)3.logf(x)是凸函数那么f(x)=I(x),也就是r(x)是唯一满足以上条件的函数。如下数被称为 Digamma函数,业(x)=d log r(z)T这也是一个很重要的函数,在涉及求 Dirichlet分布相关的参数的极大似然估计时,往往需要使用到这个函数。 Digamma函数具有如下一个漂亮的性质y(x+1)=(x)+函数亚(x)和欧拉常数?以及函数都有密切关系,令d m+l log tyn(c)+1则业o(x)=y(x),可以证明v(2)=1