变分推断学习笔记(3)——三硬币问题的变分推断解法

变分推断学习笔记系列:

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

其实三硬币的例子不写,前面的介绍也够了,写这个纯粹是吃撑了。这次我们采取更加普遍的假设,将原先假设的3枚硬币拓展开来。现在假设有\(K+1\)个骰子,第一个骰子有\(K\)个面,其余的骰子有\(T\)个面。进行如下实验:先掷第一个骰子,根据投出的结果\(Z_k\),选择第\(Z_k\)个骰子再投,观测到投出的\(N\)个结果,每个结果\(w_n\)可能是 \[ 1,3,7,8,3,2,6,9,... \]

可以看到现在第1个骰子投出的标签服从多项分布: \[Z_k \sim Multinomial(\pi)\] 然后剩余骰子投出的面也服从多项分布 \[W_{Z_{kt}} \sim Multinomial(\theta_{Z_k})\] 我们假设,随机变量\(\pi\)\(\theta\)的先验分布为狄利克雷分布,超参分别为\(\alpha\)\(\beta\)

图1:三硬币模型的变分族 让我们写出模型的联合概率: \[ \begin{split}P(W,Z,\Pi,\Theta)&=p(\pi|\alpha)\prod^K_{k=1}p(\theta_k|\beta)\prod^N_{n=1}\prod^K_{k=1}\prod^T_{t=1}p(z_{nkt}|\pi_{nkt})p(w_{n}|\theta_{z_{nkt}})\\ \end{split} \] 相应地,我们利用平均场理论切断模型直接耦合的地方(见图1),设定一个近似真实后验的分布族\(q\)\[ \begin{split}P(W,Z,\Pi,\Theta)&=q(\pi|\nu)\prod^K_{k=1}q(\theta_k|\lambda_k)\prod^N_{n=1}\prod^K_{k=1}\prod^T_{t=1}q(z_{nkt}|\phi_{nkt})\\ \end{split} \]

然后我们最小化\(q\) 与真实后验之间的KL 散度,也就是最大化证据下界\(\mathcal{L}\)(ELBO)。 证据下界写出来是这样的: \[ \begin{split} \mathcal{L} &= E_q[\log p(\pi|\alpha)]-E_q[\log q(\pi|\nu)] \\ &+\sum_k E_q[\log p(\theta_k|\beta)]-\sum_k E_q[\log q(\theta_k|\lambda_k)] \\ &+\sum_n\sum_t\sum_k E_q[\log p(z_{nkt}|\pi_{nkt})]-\sum_n\sum_t\sum_k E_q[\log q(z_{nkt}|\phi_{nkt})] \\ &+ \sum_n\sum_t\sum_k E_q[\log p(w_{nt}|\theta_{z_{nkt}})] \end{split} \]

因为Dirichlet分布为 \[ Dir(\vec{p}|\vec{\alpha})=\frac{\Gamma(\sum^K_{k=1}\alpha_k)}{\prod^K_{k=1}\Gamma{(\alpha_k)}}\prod^K_{k=1}p_k^{\alpha_k-1} \]

由LDA原论文的Appendix A.1可知,Dirichlet的某个分布(single probability component )的log期望为 \[ \mathbb{E}[\log p_k|\alpha_k]=\psi(\alpha_k)-\psi(\sum_k \alpha_k) \] 其中\(\psi(\alpha)=\frac{d}{d\alpha}\log \Gamma(\alpha)\)。 根据这个公式,计算\(\mathcal{L}\)关于\(q\)的期望,我们可以得到 \[ \begin{split} \mathcal{L} &=\log\Gamma(\sum_k \alpha_k)-\log\Gamma(\alpha_k)+\sum_{k}(\alpha_k-1)[\Psi(\nu_{k})-\Psi(\sum_v \nu_{k})]\\ &-\log\Gamma(\sum_k \nu_k)+\log\Gamma(\nu_k)-\sum_{k}(\nu_k-1)[\Psi(\nu_{k})-\Psi(\sum_v \nu_{k})]\\ &+\sum_k \log\Gamma(\sum_t \beta_{k,t})-\sum_{k,t}\log\Gamma(\beta_{k,t})+\sum_{k,t}(\beta_t-1)[\Psi(\lambda_{k,t})-\Psi(\sum_k \lambda_{k,t})]\\ &-\sum_k \log\Gamma(\sum_t \lambda_{k,t})+\sum_{k,t}\log\Gamma(\lambda_{k,t})-\sum_{k,t}(\lambda_{k,t}-1)[\Psi(\lambda_{k,t})-\Psi(\sum_k \lambda_{k,t})]\\ &+\sum_n\sum_k\sum_t \phi_{nkt}[\Psi(\alpha_{k})-\Psi(\sum_k \alpha_{k})]-\sum_n\sum_k\sum_t \phi_{nkt}\log \phi_{nkt} \\ &+\sum_n\sum_k\sum_t \phi_{nkt}\delta_t(w_{n})[\Psi(\lambda_{k,t})-\Psi(\sum_t \lambda_{k,t})] \\ \end{split} \] 其中\(\delta_t(w_{n})\)当且仅当\(w_n=t\)时为1,其余的时候均为0。因为多项分布\(p(x)=\prod^K_{k=1}p_k^{x_k}\)的期望\(E[x_k]=p_k\),所以这里有\(E[z_{nkt}]=\phi_{nkt}\)\(\phi_{nkt}\)代表隐藏变量的期望值。

\(\mathcal{L}\)分别对各自的参数求导,解得 \[ \begin{split} &\nu_k=\alpha_k \\ &\phi_{dnk} \propto \exp\{\Psi(\lambda_{k,t})-\Psi(\sum_t \lambda_{k,t})\} \\ &\lambda_{k,t}=\beta_t+\sum_n\phi_ {nkt}\delta_t(w_n) \end{split} \] 相互迭代到收敛就好啦。