深入浅出LDA(1)

来源:互联网 发布:软件开发质量保证措施 编辑:程序博客网 时间:2024/05/27 00:50

作者:相国大人

  • 阅读说明
  • Gamma函数
    • 1 Gamma函数
    • 2 用Gamma函数来扩充定义
    • 3 Gamma函数的由来
    • 4 Gamma函数的性质

0. 阅读说明

与LDA紧密相关的必要且最小知识集合为博文的正文。凡是灰色框中的内容为拓展和补充内容,直接跳过并不会影响你的理解。灰色框指的是如下形式的段落:

这是一个灰色框示意段落
这部分内容为补充性内容,直接跳过并不会影响你的理解

1. Γ函数

1.1 Γ函数

Γ函数可以看做是阶乘在实数上的推广。

Γ(x)=+0tx1etdt=(x1)!(1.1)

我们这里不加证明的给出性质:
Γ(x)=(x1)Γ(x1)Γ(x)Γ(x1)=x1(1.2)

想要证明上面这个式子也不难,分布积分就可以了。

整数阶乘其实就是Γ函数在整数上的采样:
这里写图片描述

因此,以后只要看到Γ(α)α是一个定值),就把它当做定值就可以了。


1.2 用Γ函数来扩充定义


请注意:
我们使用Γ函数,一个最重要的考量是,它可以把很多离散模型拓展到实数域上。例如,下面的这个密度函数:

f(x)=n!(k1)!(nk)!xk1(1x)nk(1.3)

其中n,k均为正整数,x[0,1]. 现在我们想把这个密度函数的参数扩展到实数域上,我们可以怎么做呢?要知道,如果直接把上面这个式子里面的nk写成实数,那么实数的阶乘这个定义是有问题的。但是,如果我们明白本小节说的Γ函数是阶乘在实数域的推广,我们就会可以把上面的式子写成:
f(x)=Γ(n+1)Γ(k)Γ(nk+1)xk1(1x)nk(1.4)

写成这个式子后,我们发现,如果n,k仍然取正整数,这个式子就退化为原来的式子,而如果n,k取实数,那么这个式子仍然有意义。相当于原来的式子在实数域上的推广。为了好看一些,我们不妨另α=k,β=nk+1,此时这个在实数域上推广的式子就可以写成:
f(x)=Γ(α+β)Γ(α)Γ(β)xα1(1x)β1,x[0,1](1.5)

这个式子就是下一节我们要讲的β 分布。


1.3 Γ函数的由来

Γ 函数的由来

原作者:Rickjin

博主相国大人做了一些修改,精简和补充

参考文献:
《LDA-math-神奇的Gamma函数(1)》作者:Rickjin
《LDA-math-神奇的Gamma函数(2)》作者:Rickjin
《LDA-math-神奇的Gamma函数(3)》作者:Rickjin


欧拉发现n!可以用如下的一个无穷乘积表达

[(21)n1n+1][(32)n2n+2][(43)n3n+3]=n!(1.6)

limm123m(1+n)(2+n)(m+n)(m+1)n=n!(1.7)

欧拉开始尝试从一些简单的例子开始做一些计算,看看是否有规律可循,欧拉极其擅长数学的观察与归纳。当 n=1/2的时候,带入(1.7)式计算,整理后可以得到
(12)!=24334655687781099(1.8)

然而右边正好和著名的 Wallis 公式关联。Wallis 在1665年使用插值方法计算半圆曲线 y=x(1x)下的面积(也就是直径为1的半圆面积)的时候,得到关于π的如下结果
24334655687781099=π4(1.9)

于是,欧拉利用 Wallis 公式得到了如下一个很漂亮的结果:(12)!=π2
对数学家而言,有π的地方必然有和圆相关的积分。由此欧拉猜测n!一定可以表达为某种积分形式,于是欧拉开始尝试把n!表达为积分形式。Wallis 公式计算的是半圆曲线 y=x(1x)下的面积,即处理积分10x12(1x)12dx.受 Wallis 的启发,欧拉开始考虑如下的一般形式的积分
J(e,n)=10xe(1x)ndx(1.10)

此处n为正整数,e为正实数。迭代地进行分部积分方法,容易得到
J(e,n)=12n(e+1)(e+2)(e+n+1)(1.11)

即:
n!=(e+1)(e+2)(e+n+1)10xe(1x)ndx(1.12)

欧拉令e=f/g,这样有:
J(e,n)=10xfg(1x)ndx=gn+1n![f+(n+1)g](f+g)(f+2g)(f+ng)(1.13)

于是:
n!(f+g)(f+2g)(f+ng)=f+(n+1)ggn+110xfg(1x)ndx(1.14)

欧拉看到这的时候,就比较激动了,他想,如果令t=1,g=0左边就变成了n!,可是右边积分变成了:
10x10(1x)n0n+1dx

解这个式子比较困难,于是欧拉又做了一个变换:用xgf+g来代替x,这样,上面的积分变成:
10(1xgf+g)ngf+gdx(1.15)

(1.14)式变成:
n!(f+g)(f+2g)(f+ng)=f+(n+1)ggn+110(1xgf+g)ngf+gdx=f+(n+1)g(f+g)n+110(f+g)n+1gn+1(1xgf+g)ngf+gdx=f+(n+1)g(f+g)n+110(1xgf+g)g/(f+g)ndx(1.16)

这时,另f=1,g=0我们可以得到:
n!=10(1x00)ndx(1.17)

根据洛必达法则,有
limz01xzz=limz0xzlnx=lnx(1.18)

因此
n!=10(lnx)ndx(1.19)

如果令x=et上式就变成了
n!=+0tnetdt(1.20)

这样一来,整数的阶乘被写成了积分的形式,所以我们可以将整数的阶乘推广到实数域里,即定义一个在实数域的阶乘函数,Γ函数。
欧拉早期定义的Γ函数是:
Γ(x)=0txetdt=x!
就是上面的阶乘积分式子。但是后来欧拉修改了定义,将Γ函数定义为:
Γ(x)=+0tx1etdt=(x1)!(1.21)

之所以这样做,有数学家猜测,一个可能的原因是欧拉研究了如下积分:
B(m,n)=10xm1(1x)n1dx(1.22)
这个函数现在称为Beta 函数。如果Gamma 函数的定义选取满足 Γ(n)=(n1)!, 那么有
B(m,n)=Γ(m)Γ(n)Γ(m+n)(1.23)

非常漂亮的对称形式。可是如果选取Γ(n)=n!的定义,令
E(m,n)=10xm(1x)ndx

则有
E(m,n)=Γ(m)Γ(n)Γ(m+n+1)

这个形式显然不如B(m,n)优美,而数学家总是很在乎数学公式的美感的。


1.4 Γ函数的性质

Γ函数的性质

作者:相国大人

1. 与欧拉常数的关系
我们把调和级数与自然对数差值的极限叫做欧拉常数γ
γ=limn(k=1n1kln(n))(1.24)

其中:
γ=dΓ(x)dx|x=1(1.25)

为了证明上面这个式子,我们需要做两件事:
第一:我们需要知道
dnΓ(x)dxn=0tx1et(lnt)ndt(1.26)

得到这个式子并不难:
Γ(x)=+0tx1etdt=(x1)!(1.27)

dΓ(x)dx=0dtx1dxetdt=0tx1(lnt)etdt(1.26)

同理,以此类推可以得到任意阶导数(1.26)
第二:我们需要知道
dΓ(x)dx|x=1=0exlnxdx(1.27)
(1.26)中的x=1即可得到此式。
这样,我们只需要证明:
γ=0exlnxdx(1.28)
即可,下面是具体的证明过程。
在证明之前,我们需要知道几个常见的公式:
xn1=(x1)(xn1+xn2++x+1)(1.29)

10xk1dx=1k(1.30)

n11xdx=lnn(1.31)


证明:
(1.24,1.30,1.31)立即可得

γ=limn(k=1n10xk1dxn11xdx)=limn(10k=1nxk1dxn11xdx)(1.32)
(1.29)代入(1.32)立即得到:
(1.32)=limn(101xn+11xdxn11xdx)=1xtlimn(101(1t)n+1tdtn11xdx)=txn+1limnn01(1xn+1)n+1xdxn11xdx=limn101(1xn+1)n+1xdx+n11(1xn+1)n+1xdxn11xdx=limn101(1xn+1)n+1xdxn1(1xn+1)n+1xdx(1.33)

把上面的式子极限放到积分里面(之所以可以这样做是因为两部分都有极限)得到:
(1.32)=101exxdx1exxdx=(10exlnxdx+1exlnxdx)+(1ex)lnx10(ex)lnx+1(1.34)

对于式子(1.34),后面两项均为0:
limx0(1ex)lnx=limx0lnx11ex=limx01xex(1ex)2=limx02(1exex)ex+xex=limx02(1ex)x1=0

limx+(ex)lnx=limx+lnxex=limx+1xex=0

因此有:
γ=0exlnxdx=dΓ(x)dx|x=1


Γ函数的其他性质,我们日后会在这里继续补充