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

变分推断学习笔记系列:

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

举一个一元高斯模型的例子。假设我们有数据\(\mathbf{X}=\{x_1,\ldots,x_M\}\),要推断平均值\(\mu\)和精度\(\tau(1/\sigma)\)的后验概率分布。 写出似然 \[\begin{equation} p(\mathbf{X}|\mu,\tau)=(\frac{\tau}{2\pi})^{N/2}\exp\{-\frac{\tau}{2}\sum^N_{n=1}(x_n-\mu)^2\} \end{equation}\] 其中\(\mu,\tau\)各自服从先验分布 \[\begin{equation}p(\mu|\tau)=N(\mu|\mu,(\lambda_0\tau)^{-1})\end{equation}\] \[\begin{equation}p(\tau)=Gam(\tau|a_0,b_0)\end{equation}\] 其中Gam为Gamma分布(见备注1)。

通用的估计方法

好,我们现在假设\(q\)之间的分布都独立。 \[\begin{equation}q(\mu,\tau)=q_u(\mu)q_r(\tau)\end{equation}\]

对于\(q_u(\mu)\)我们有 \[\begin{equation} \begin{split} \ln q^*_u(\mu)&= \mathbb{E}_r[\ln p(\mathbf{X}|\mu,\tau)+\ln p(\mu|\tau)]+const \\\ &= -\frac{\mathbb{E}[\tau]}{2}\{\lambda_0(\mu-u_0)^2+\sum^N_{n=1}(x_n-\mu)^2\}+const \\\ \end{split} \end{equation}\]

我们把未知数\(\mu\)的项加和起来,就可以看出\(q^*_u(\mu)\)恰好是个高斯分布 \(N(\mu|u_N,\lambda_N^{-1})\),其中 \[\begin{equation} \begin{split}u_N &=\frac{\lambda_0u_0+N\bar{x}}{\lambda_0+N} \\\lambda_N &=(\lambda_0+N)\mathbb{E}[\tau] \\\end{split}\end{equation}\]

同样对于\(q_r(\tau)\),我们有 \[\begin{equation}\begin{split}\ln q^*_r(\tau)&=\mathbb{E}_u[\ln p(\mathbf{X}|\mu,\tau)+\ln p(\mu|\tau)]+\ln p(\tau)+const \\&=(a_0-1)\ln \tau-b_o \tau+\frac{1}{2}\ln \tau+\frac{N}{2}\ln \tau \\& -\frac{\tau}{2}\mathbb{E}_u[\sum^N_{n=1}(x_n-\mu)^2+\lambda_0(\mu-u_0)^2]+const \\\end{split}\end{equation}\] 这里\(q^*_r(\tau)\)也恰好是个Gamma分布 \(Gam(\tau|a_N,b_N)\),其中 \[\begin{equation}\begin{split}a_N&=a_0+\frac{N}{2} \\b_N&=b_0+\frac{1}{2}\mathbb{E}_u[\sum^N_{n=1}(x_n-\mu)^2+\lambda_0(\mu-u_0)^2]\end{split}\end{equation}\] 首先,要注意我们并未对\(q_u(\mu)\)\(q_r(\tau)\)的最佳形式作出任何假设,它们就自然地形成了似然函数的形式(高斯分布)和它的先验分布形式(Gamma分布)。 然后可以看到这里\(q_u(\mu)\)\(q_r(\tau)\)通过\(\mathbb{E}_r\)\(\mathbb{E}_u\)相互依赖。我们展开这些式子,使用高斯分布与Gamma分布的性质(见备注1)计算它们的期望: \[\begin{equation}\begin{split}& E[\tau|a_N,b_N]=\frac{a_N}{b_N} \\& E[\mu|u_N,\lambda^{-1}_N]=u_N \\& E[X^2]=Var(X)+(E[X])^2 \\& E[\mu^2|u_N,\lambda^{-1}_N]=\lambda^{-1}_N+u_N^2 \\\end{split}\end{equation}\] 将式子(9)带入之前的式子(7)消去期望,最终得到: \[\begin{equation}\begin{split}& u_N =\frac{\lambda_0u_0+N\bar{x}}{\lambda_0+N} \\& \lambda_N =(\lambda_0+N)\frac{a_N}{b_N} \\& a_N=a_0+\frac{N+1}{2}\\&b_N=b_0+\frac{1}{2}[(\lambda_0+N)(\lambda^{-1}_N+\mu^2_N)\\& -2(\lambda_0u_0+\sum^N_{n=1}x_n)u_N+(\sum^N_{n=1}{x_n}^2)+\lambda_0{u_0}^2)]\\\end{split}\end{equation}\] 所以这时候循环依赖的对象变成了\(\lambda_N\)\(b_N\)。然后我们迭代计算这些值

  1. 利用x的值,计算\(a_N\)\(u_N\)
  2. \(\lambda_N\)赋一个初始值
  3. 利用\(\lambda_N\),获得新的\(b_N\)
  4. 利用\(b_N\),获得新的\(\lambda_N\)
  5. 反复迭代3,4步,直到收敛为止。

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

另一种估计方法

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

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

以之前为例,我们假设 \[\begin{equation}\begin{split}&q(\mu)=N(\mu|u_N,\lambda_N^{-1}) \\&q(\tau)=Gam(\tau|a_N,b_N) \\\end{split}\end{equation}\] 其中,\(a_N,b_N,u_N,\lambda_N^{-1}\)均为未知参数。

写出变分下界 \[\begin{equation}\begin{split}L &=\int\int q(\mu,\tau)\ln \frac{p(X,\mu,\tau)}{q(\mu,\tau)} \text{du} \text{dr} \\&=\mathbb{E}_q[\ln p(X,\mu,\tau)]-\mathbb{E}_q[\ln q(\mu,\tau)] \\&=\mathbb{E}_q[\ln p(X|\mu,\tau)]+\mathbb{E}_q[\ln p(\mu|\tau)]+\mathbb{E}_q[\ln p(\tau)] \\&-\mathbb{E}_q[\ln q(\mu)]-\mathbb{E}_q[\ln q(\tau)] \\\end{split}\end{equation}\] 其中 \[\begin{equation}\begin{split}&\mathbb{E}_q[\ln p(X|\mu,\tau)]= \frac{N}{2}\mathbb{E}_r[\ln \tau]-\frac{\tau}{2}\mathbb{E}_u[\sum^N_{n=1}(x_n-\mu)^2] \\&\mathbb{E}_q[\ln p(\mu|\tau)]= \frac{1}{2}\mathbb{E}_r[\ln \tau]- \frac{\tau}{2}\mathbb{E}_u[\lambda_0(\mu-u_0)^2]\\&\mathbb{E}_q[\ln p(\tau)]= (a_0-1)\mathbb{E}_r[\ln \tau]-b_o \mathbb{E}_r[\tau]\\&\mathbb{E}_q[\ln q(\mu)]= u_N\\&\mathbb{E}_q[\ln p(\tau)]= \frac{a_N}{b_N}\\\end{split}\end{equation}\] 根据Gamma分布的性质,将消去式(13)中的期望,最后我们获得的式子将只包括\(a_N,b_N,u_N,\lambda_N^{-1}\)这4个变量,分别对其求导,就可以得到每个参数的更新公式了(同式(10))。

备注: 1.Gamma分布 \[\begin{equation}Gam(\lambda|a,b)=\frac{1}{\Gamma(a)}b^a\lambda^{a-1}\exp(-b\lambda)\end{equation}\] 它的一些期望 \[\begin{equation}\begin{split}& \mathbb{E}[\lambda]=\frac{a}{b} \\& var[\lambda]=\frac{a}{b^2} \\& \mathbb{E}[\ln \lambda]=\Psi(a)-\ln(b)\\\end{split}\end{equation}\] 其中\(\Psi(a)=\frac{d}{da}\ln \Gamma(a)\)