变分推断学习笔记(2)——一维高斯模型的例子

来源:互联网 发布:ubuntu 14.04 源 编辑:程序博客网 时间:2024/06/05 09:33

变分推断学习笔记(2)——一维高斯模型的例子

变分推断学习笔记系列:

  1. 变分推断学习笔记(1)——概念介绍
  2. 变分推断学习笔记(2)——一维高斯模型的例子
  3. 变分推断学习笔记(3)——三硬币问题的变分推断解法

举一个一元高斯模型的例子。假设我们有数据X={x1,,xM}X={x1,…,xM},要推断平均值μμ和精度τ(1/σ)τ(1/σ)的后验概率分布。 写出似然

p(X|μ,τ)=(τ2π)N/2exp{τ2n=1N(xnμ)2}(1)(1)p(X|μ,τ)=(τ2π)N/2exp⁡{−τ2∑n=1N(xn−μ)2}
其中μ,τμ,τ各自服从先验分布
p(μ|τ)=N(μ|μ,(λ0τ)1)(2)(2)p(μ|τ)=N(μ|μ,(λ0τ)−1)
p(τ)=Gam(τ|a0,b0)(3)(3)p(τ)=Gam(τ|a0,b0)
其中Gam为Gamma分布(见备注1)。

通用的估计方法

好,我们现在假设qq之间的分布都独立。

q(μ,τ)=qu(μ)qr(τ)(4)(4)q(μ,τ)=qu(μ)qr(τ)

对于qu(μ)qu(μ)我们有

lnqu(μ)  =Er[lnp(X|μ,τ)+lnp(μ|τ)]+const=E[τ]2{λ0(μu0)2+n=1N(xnμ)2}+const(5)(5)ln⁡qu∗(μ)=Er[ln⁡p(X|μ,τ)+ln⁡p(μ|τ)]+const =−E[τ]2{λ0(μ−u0)2+∑n=1N(xn−μ)2}+const 

我们把未知数μμ的项加和起来,就可以看出qu(μ)qu∗(μ)恰好是个高斯分布N(μ|uN,λ1N)N(μ|uN,λN−1),其中

uNλN=λ0u0+Nx¯λ0+N=(λ0+N)E[τ](6)(6)uN=λ0u0+Nx¯λ0+NλN=(λ0+N)E[τ]

同样对于qr(τ)qr(τ),我们有

lnqr(τ)=Eu[lnp(X|μ,τ)+lnp(μ|τ)]+lnp(τ)+const=(a01)lnτboτ+12lnτ+N2lnττ2Eu[n=1N(xnμ)2+λ0(μu0)2]+const(7)(7)ln⁡qr∗(τ)=Eu[ln⁡p(X|μ,τ)+ln⁡p(μ|τ)]+ln⁡p(τ)+const=(a0−1)ln⁡τ−boτ+12ln⁡τ+N2ln⁡τ−τ2Eu[∑n=1N(xn−μ)2+λ0(μ−u0)2]+const
这里qr(τ)qr∗(τ)也恰好是个Gamma分布Gam(τ|aN,bN)Gam(τ|aN,bN),其中
aNbN=a0+N2=b0+12Eu[n=1N(xnμ)2+λ0(μu0)2](8)(8)aN=a0+N2bN=b0+12Eu[∑n=1N(xn−μ)2+λ0(μ−u0)2]
首先,要注意我们并未对qu(μ)qu(μ)qr(τ)qr(τ)的最佳形式作出任何假设,它们就自然地形成了似然函数的形式(高斯分布)和它的先验分布形式(Gamma分布)。 然后可以看到这里qu(μ)qu(μ)qr(τ)qr(τ)通过ErErEuEu相互依赖。我们展开这些式子,使用高斯分布与Gamma分布的性质(见备注1)计算它们的期望:
E[τ|aN,bN]=aNbNE[μ|uN,λ1N]=uNE[X2]=Var(X)+(E[X])2E[μ2|uN,λ1N]=λ1N+u2N(9)(9)E[τ|aN,bN]=aNbNE[μ|uN,λN−1]=uNE[X2]=Var(X)+(E[X])2E[μ2|uN,λN−1]=λN−1+uN2
将式子(9)带入之前的式子(7)消去期望,最终得到:
uN=λ0u0+Nx¯λ0+NλN=(λ0+N)aNbNaN=a0+N+12bN=b0+12[(λ0+N)(λ1N+μ2N)2(λ0u0+n=1Nxn)uN+(n=1Nxn2)+λ0u02)](10)(10)uN=λ0u0+Nx¯λ0+NλN=(λ0+N)aNbNaN=a0+N+12bN=b0+12[(λ0+N)(λN−1+μN2)−2(λ0u0+∑n=1Nxn)uN+(∑n=1Nxn2)+λ0u02)]
所以这时候循环依赖的对象变成了λNλNbNbN。然后我们迭代计算这些值

  1. 利用x的值,计算aNaNuNuN
  2. λNλN赋一个初始值
  3. 利用λNλN,获得新的bNbN
  4. 利用bNbN,获得新的λNλN
  5. 反复迭代3,4步,直到收敛为止。

最后我们就得到了近似分布Q(Z)Q(Z)的所有超参数的值。

另一种估计方法

首先我们看到,之前这个lnp(X)ln⁡p(X)(也就是似然)难求是因为ZZ未知,在我们这个例子里的具体表现为未知参数μμττ之间存在耦合关系,即μμ是由ττ生成的(p(μ|τ)p(μ|τ)。由于原模型存在共轭先验,所以变分后验分布的因子函数形式也可以用同样的共轭结构。因为我们定义Q(Z)Q(Z)分布的目的是要获得tractable的分布,所以可以在原模型的分布上作小修改,只要斩断耦合的部分即可。(这部分论述可能有问题,还需要多看书才行)

所以我们假设q(μ)q(μ)q(τ)q(τ)之间相互独立,即q(μ)q(μ)的参数不受ττ的控制。但它依旧是个高斯分布,q(τ)q(τ)依旧是个Gamma分布,只是各自的参数未知。所以我们只要把下界看成这些分布的未知参数的函数形式,然后通过对各自参数的求导就能获得下界的极大值。(可能是因为指数家族的关系,未知参数的期望都有固定的函数形式,所以比较好求)

以之前为例,我们假设

q(μ)=N(μ|uN,λ1N)q(τ)=Gam(τ|aN,bN)(11)(11)q(μ)=N(μ|uN,λN−1)q(τ)=Gam(τ|aN,bN)
其中,aN,bN,uN,λ1NaN,bN,uN,λN−1均为未知参数。

写出变分下界

L=q(μ,τ)lnp(X,μ,τ)q(μ,τ)dudr=Eq[lnp(X,μ,τ)]Eq[lnq(μ,τ)]=Eq[lnp(X|μ,τ)]+Eq[lnp(μ|τ)]+Eq[lnp(τ)]Eq[lnq(μ)]Eq[lnq(τ)](12)(12)L=∫∫q(μ,τ)ln⁡p(X,μ,τ)q(μ,τ)dudr=Eq[ln⁡p(X,μ,τ)]−Eq[ln⁡q(μ,τ)]=Eq[ln⁡p(X|μ,τ)]+Eq[ln⁡p(μ|τ)]+Eq[ln⁡p(τ)]−Eq[ln⁡q(μ)]−Eq[ln⁡q(τ)]
其中
Eq[lnp(X|μ,τ)]=N2Er[lnτ]τ2Eu[n=1N(xnμ)2]Eq[lnp(μ|τ)]=12Er[lnτ]τ2Eu[λ0(μu0)2]Eq[lnp(τ)]=(a01)Er[lnτ]boEr[τ]Eq[lnq(μ)]=uNEq[lnp(τ)]=aNbN(13)(13)Eq[ln⁡p(X|μ,τ)]=N2Er[ln⁡τ]−τ2Eu[∑n=1N(xn−μ)2]Eq[ln⁡p(μ|τ)]=12Er[ln⁡τ]−τ2Eu[λ0(μ−u0)2]Eq[ln⁡p(τ)]=(a0−1)Er[ln⁡τ]−boEr[τ]Eq[ln⁡q(μ)]=uNEq[ln⁡p(τ)]=aNbN
根据Gamma分布的性质,将消去式(13)中的期望,最后我们获得的式子将只包括aN,bN,uN,λ1NaN,bN,uN,λN−1这4个变量,分别对其求导,就可以得到每个参数的更新公式了(同式(10))。

备注: 1.Gamma分布

Gam(λ|a,b)=1Γ(a)baλa1exp(bλ)(14)(14)Gam(λ|a,b)=1Γ(a)baλa−1exp⁡(−bλ)
它的一些期望
E[λ]=abvar[λ]=ab2E[lnλ]=Ψ(a)ln(b)(15)(15)E[λ]=abvar[λ]=ab2E[ln⁡λ]=Ψ(a)−ln⁡(b)
其中Ψ(a)=ddalnΓ(a)Ψ(a)=ddaln⁡Γ(a)

分享到 Comments
原创粉丝点击