ref:http://www.crescentmoon.info/?p=745
举一个一元高斯模型的例子。假设我们有数据
X={x1,…,xM}
,要推断平均值
μ
和精度
τ(1/σ)
的后验概率分布。
写出似然
其中 μ,τ 各自服从先验分布
其中Gam为Gamma分布(见备注1)。
通用的估计方法
好,我们现在假设
q
之间的分布都独立。
对于
qu(μ)
我们有
我们把未知数 μ 的项加和起来,就可以看出 q∗u(μ) 恰好是个高斯分布 N(μ|uN,λ−1N) ,其中
同样对于
qr(τ)
,我们有
这里 q∗r(τ) 也恰好是个Gamma分布 Gam(τ|aN,bN) ,其中
首先,要注意我们并未对 qu(μ) 或 qr(τ) 的最佳形式作出任何假设,它们就自然地形成了似然函数的形式(高斯分布)和它的先验分布形式(Gamma分布)。
然后可以看到这里 qu(μ) 与 qr(τ) 通过 Er 与 Eu 相互依赖。我们展开这些式子,使用高斯分布与Gamma分布的性质(见备注1)计算它们的期望:
将式子(9)带入之前的式子(7)消去期望,最终得到:
所以这时候循环依赖的对象变成了 λN 和 bN 。然后我们迭代计算这些值
- 利用x的值,计算 aN 和 uN 。
- 给 λN 赋一个初始值
- 利用 λN ,获得新的 bN 。
- 利用 bN ,获得新的 λN 。
- 反复迭代3,4步,直到收敛为止。
最后我们就得到了近似分布 Q(Z) 的所有超参数的值。
另一种估计方法
首先我们看到,之前这个 lnp(X) (也就是似然)难求是因为 Z 未知,在我们这个例子里的具体表现为未知参数 μ 与 τ 之间存在耦合关系,即 μ 是由 τ 生成的( p(μ|τ) 。由于原模型存在共轭先验,所以变分后验分布的因子函数形式也可以用同样的共轭结构。因为我们定义 Q(Z) 分布的目的是要获得tractable的分布,所以可以在原模型的分布上作小修改,只要斩断耦合的部分即可。(这部分论述可能有问题,还需要多看书才行)
所以我们假设 q(μ) 与 q(τ) 之间相互独立,即 q(μ) 的参数不受 τ 的控制。但它依旧是个高斯分布, q(τ) 依旧是个Gamma分布,只是各自的参数未知。所以我们只要把下界看成这些分布的未知参数的函数形式,然后通过对各自参数的求导就能获得下界的极大值。(可能是因为指数家族的关系,未知参数的期望都有固定的函数形式,所以比较好求)
以之前为例,我们假设
其中, aN,bN,uN,λ−1N 均为未知参数。
写出变分下界
其中
根据Gamma分布的性质,将消去式(13)中的期望,最后我们获得的式子将只包括 aN,bN,uN,λ−1N 这4个变量,分别对其求导,就可以得到每个参数的更新公式了(同式(10))。
备注:
1.Gamma分布
它的一些期望
其中 Ψ(a)=ddalnΓ(a)