基于指数族分布的变分推断——变分推断(二)

基于指数族分布的变分推断——变分推断(二)

让我们书接上文。

前一篇博客(基于近似计算解决推断问题——变分推断(一))我们说到基于高斯贝叶斯混合的 CAVI (坐标上升变分推断),那么,我们能不能将这类变分推断进行扩展,变成更为通用的算法框架呢?

显然,基于指数分布族(exponential families)的某些特性,这样的做法是可行的。下面让我们先看看什么是指数分布族。

本文主要参考的文献为David M.Blei 2018年发表的论文 Variational Inference: A Review for Statisticians

指数分布族

指数分布族的定义

指数族分布(exponential family of distributions)也叫指数型分布族,包含高斯分布伯努利分布二项分布泊松分布Beta 分布Dirichlet 分布Gamma 分布。指数族分布通常可以表示为:

\begin{aligned} p(x|\eta)&=h(x)\exp(\eta^T\phi(x)-A(\eta))\\ &=\frac1{\exp(A(\eta))}h(x)\exp(\eta^T\phi(x)) \end{aligned}\tag{a}
其中有几个比较重要的参数后面可能会用到:

  • h(x)底层观测值(underlying measure)

  • \eta 是参数向量,也成为自然参数(natural parameter);

  • A(\eta) 是对数配分函数,可以认为是对数归一化因子(log normalizer);

  • \phi(x)充分统计量(sufficient statistic),包含样本集合所有信息,如高斯分布中的均值和方差。对于一个数据集,只需要记录样本的充分统计量即可。

    统计“:即表示对样本的统计值
    充分“:如通过两个统计值,可以求得均值和方差,进而可以获得高斯分布表达式。

或者,也可以采用另一种表示形式:
p(x|\theta,\psi)=\exp\{\frac{x\theta-b(\theta)}{\psi}+c(x,\psi)\}\tag{b}
其中, \theta 是指数族的自然参数\psi尺度参数讨厌参数b(\cdot)c(\cdot) 依据不同指数族而确定的函数。注意 c(\cdot) 只由 x\psi 决定

常见的指数分布族

image-20211002102134532.png

一维高斯分布的指数分布族表示形式

一维高斯分布

一维变量 x 若服从均值为 \mu 、方差为 \sigma 的一维高斯分布,则可以表示为
p(x|\mu,\sigma)=\frac1{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2})\tag{c}
公式(a)的形式

如果按照公式(a)对高斯分布的公式进行转变,则可以变为
\begin{aligned} p(x|\mu,\sigma)&=\frac1{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2})\\ &=\exp(\log(2\pi\sigma^2)^{-\frac12})\exp(-\frac1{2\sigma^2}\begin{pmatrix}-2\mu,1\end{pmatrix}\begin{pmatrix}x\\x^2\end{pmatrix}-\frac{\mu^2}{2\sigma^2}) \end{aligned}\tag{d}
可以看到,自然参数可以表示为 \eta=\begin{pmatrix}\frac{\mu}{\sigma^2}\\-\frac1{2\sigma^2}\end{pmatrix}=\begin{pmatrix}\eta_1\\\eta_2\end{pmatrix} ,对数配分函数可以表示为 A(\eta)=-\frac{\eta_1^2}{4\eta_2}+\frac12\log(-\frac{\pi}{\eta_2}) 。按照这个公式,我们可以计算出均值、方差与自然函数的关系
\begin{aligned} \mu&=-\frac{\eta_1}{2\eta_2}\\ \sigma^2&=-\frac1{2\eta_2}\\ \end{aligned}\tag{e}
这也是上一篇博客中,公式(34)的由来。

公式(b)的形式

按照公式(b),可以化为

p(x|\mu,\sigma)=\exp\big\{\frac{x\mu-\frac{\mu^2}2}{\sigma^2}-\frac{x^2}{2\sigma^2}-\frac12\log(2\pi\sigma^2)\big\}\tag{f}
其中,

\begin{aligned} \theta &= \mu\\ \psi &= \sigma^2\\ b(\mu) &= \frac{\mu^2}2\\ c(x,\psi)&= \frac{x^2}{2\psi}+\frac12\log(2\pi\sigma^2) \end{aligned}

充分统计量和配分函数的关系

对概率密度函数求积分:
\exp(A(\eta))=\int h(x)\exp(\eta^T\phi(x))dx\tag{g}
两边对参数求导
\exp(A(\eta))A'(\eta)=\int h(x)\exp(\eta^T\phi(x))\phi(x)dx\\ \Rightarrow A'(\eta)=\mathbb E_{p(x|\eta)}[\phi(x)]\tag{h}
类似的
A''(\eta)=Var_{p(x|eta)}[\phi(x)]\tag{i}
由于方差为正,所以 A(\eta) 一定是凸函数

充分统计量和极大似然估计

对于独立分布采样得到的数据集 \mathcal D=\{x_1,x_2,\dots,x_N\}

\eta 的的极大似然估计为
\begin{aligned} \eta_{MLE}&=\arg\max_\eta\sum^N_{i=1}\log p(x_i|\eta)\\ &= \arg\max_\eta\sum^N_{i=1}(\eta^T \psi (x_i)-A(\eta))\\ &\Longrightarrow A'(\eta_{MLE})=\frac1N\sum^N_{i=1}\psi(x_i) \end{aligned}\tag{j}
所以,如果要进行估算参数,只要知道充分统计量就可以了

最大熵原理推导指数分布族公式

信息熵公式为
\text{Entropy}=\int-p(x)\log(p(x))dx\tag{k}
对于一个数据集 D ,在这个数据集上的经验分布为 \hat{p}(x)=\frac{Count(x)}N ,实际不可能满足所有的经验概率相同,于是在上面的最大熵原理中还需要加入这个经验分布的约束。

对于任意一个函数,经验分布的经验期望可以求得为
\mathbb E_{\hat{p}}[f(x)]=\Delta
Lagrange 函数为
L(p,\lambda_0,\lambda)=\sum^K_{k=1}p_k\log p_k+\lambda_0(1-\sum^N_{K=1}p_k)+\lambda^T(\Delta-\mathbb E_{p}[f(x)])\tag{l}
求导可得
\begin{aligned} \frac{\partial}{\partial p(x)}L &=\sum^K_{k=1}(\log p_k(x)+1)-\sum^K_{k=1}\lambda_0-\sum^K_{k=1}\lambda^T f(x)\\ &\Longrightarrow \sum^K_{k=1}[\log p_k(x)+1-\lambda_0-\lambda^T f(x)] \end{aligned}\tag{m}
由于数据集是任意的,对数据集求和就意味着求和项里面的每一项都是0,所以有
p(x)=\exp(\lambda^Tf(x)+\lambda_0-1)\tag{n}
这就是指数族分布的公式。

共轭先验

在推断问题中,我们常常要计算下列式子
p(z|x)=\frac{P(x|z)p(z)}{\int_z P(x|z)p(z)dz}\tag{o}

上式中分母积分十分难计算,为了解决积分难计算的问题,一个思路是能否绕过积分呢?我们知道存在如下关系 p(z|x)\propto P(x|z)p(z) ,其中 p(z|x) 是后验分布, P(x|z) 是似然, p(z) 是先验

如果存在这样的⼀个先验分布,那么上⼀时刻的输出可以作为下⼀时刻计算的先验分布,那么这样整个计算就可以形成闭环。也就是说如果后验分布和先验分布是同分布,此时我们称先验分布和后验分布是共轭分布,且称先验分布是似然函数的共轭先验。⽐如⾼斯分布家族在⾼斯似然函数下与其⾃身共轭,也叫⾃共轭。

共轭先验的好处主要在于代数上的方便性,可以直接给出后验分布的封闭形式,否则的话只能做数值计算

对于一个模型分布假设(似然),那么我们在求解中,常常需要寻找一个共轭先验,使得先验与后验的形式相同,例如选取似然是二项分布,可取先验是 Beta 分布,那么后验也是 Beta 分布。指数族分布常常具有共轭的性质,于是我们在模型选择以及推断具有很大的便利。

指数分布族中的 Complete Conditional

在上一篇博客中,我们提到,在推断问题中,对于第 j 个隐变量 z_j ,其 complete conditional (完全条件)为给定其他隐变量和观测数据时,它的条件密度,即 p(z_j|\boldsymbol z_{-j},\boldsymbol x) 。结合指数族分布的概念,当后验分布为指数族分布时,我们可以将隐变量的 complete conditional 写为
p(z_j|\boldsymbol z_{-j},\boldsymbol x)=h(z_j)\exp\{\eta_j(\boldsymbol z_{-j},\boldsymbol x)^\top z_j-a(\eta_j(\boldsymbol z_{-j},\boldsymbol x))\}\tag{36}
其中,

  • z_j 为充分统计量;
  • h(\cdot) 是基本测量(base measure)或底层观测值;
  • a(\cdot) 是对数归一化算子(log normalizer);
  • \eta_j(\boldsymbol z_{-j},\boldsymbol x) 是条件集合( \{\boldsymbol z_{-j},\boldsymbol x\})的函数。

所以,根据上一篇博客中,我们知道 CAVI 算法的参数更新公式(17),当假设后验分布为指数族分布时,坐标上升的更新公式为
\begin{aligned} q(z_j)&\propto\exp\{\mathbb E[\log p(z_j|\boldsymbol z_{-j},\boldsymbol x)]\}\\ &=\exp\{\log h(z_j)+\mathbb E[\eta_j(\boldsymbol z_{-j},\boldsymbol x)]^\top z_j-\mathbb E[a(\eta_j(\boldsymbol z_{-j},\boldsymbol x))]\}\\ &=h(z_j)\exp\{\mathbb E[\eta_j(\boldsymbol z_{-j},\boldsymbol x)]^\top z_j\} \end{aligned}\tag{37-39}
更新公式揭示了更新变分因子的参数形式,每一个更新因子都与它对应的 complete conditional 属于同一指数族,它的参数拥有相同维度以及相同的基本测量 h(\cdot) 和对数归因算子 a(\cdot)

我们可以令 v_j 为第 j 个数据点的变分参数,当我们更新每个因子时,只需要令其变分参数等于完全条件的期望参数
v_j=\mathbb[\eta_j(\boldsymbol z_{-j},\boldsymbol x)]\tag{40}

条件共轭模型及其推断

条件共轭模型

对于指数族模型,一个比较特殊的情况是条件共轭模型(conditionally conjugate models),它在贝叶斯学习和机器学习中常被运用。

我们将条件共轭模型涉及的变量可以分为两类

  • 一类变量是数族模型中我们要学习的参数,对所有数据都有潜在的控制能力,称之为全局隐变量(global latent variables),我们表示为向量 \boldsymbol\beta
  • 令一类变量只对某一个数据点进行控制,称之为局部隐变量(local latent variables),我们表示为向量 \boldsymbol z 。其中 z_i 控制第 i 个数据点

根据 i.i.d. 假设,其联合分布可以表示为
p(\boldsymbol\beta,\boldsymbol z,\boldsymbol x)=p(\boldsymbol\beta)\prod^n_i p(z_i,x_i|\boldsymbol\beta)\tag{41}
回顾前面提到的高斯混合,用这类的模型解释的话,全局变量就是混合组件参数,而局部变量就是每个数据点 x_i 的聚类分配。

我们假设基于全局变量 \beta,每个数据点 (x_i,z_i) 的联合分布,都有指数族形式
p(z_i,x_i|\beta)=h(z_i,x_i)\exp\{\beta^\top t(z_i,x_i)-\alpha(\beta)\}\tag{42}
其中 t(z_i,x_i) 为充分统计量。

接下来,我们可以假设全局变量的先验分布是公式(42)的共轭分布
p(\beta)=h(\beta)\exp\{\alpha^\top[\beta,-a(\beta)]-a(\alpha)\}\tag{43}
这一分布的自然参数为 \alpha=[\alpha_1,\alpha_2] ,充分统计量为全局变量及其对数归一化的负数。

有了上述的共轭先验,我们也能让得到全局变量的 complete conditional 也在同一分布
\begin{aligned} p(\boldsymbol\beta,\boldsymbol z,\boldsymbol x)&=p(\boldsymbol\beta)\prod^n_i p(z_i,x_i|\boldsymbol\beta)\\ &=h(\beta)\exp\{\alpha^\top[\beta,-a(\beta)]-a(\alpha)\}\cdot\prod^n_i h(z_i,x_i)\exp\{\beta^\top t(z_i,x_i)-\alpha(\beta)\}\\ &=[h(\boldsymbol\beta)\prod^n_i h(z_i,x_i)]\cdot\exp\{\begin{bmatrix}\alpha_1+\sum^n_{i=1}t(z_i,x_i)\\\alpha_2+n\end{bmatrix}[\beta,-a(\beta)]-a(\hat\alpha)\}\\ &=H(\boldsymbol\beta,\boldsymbol x,\boldsymbol z)\exp\{\hat\alpha^\top[\beta,-a(\beta)]-a(\hat\alpha)\} \end{aligned}\tag{44}
其中,基本测量为 H(\boldsymbol\beta,\boldsymbol x,\boldsymbol z)=h(\boldsymbol\beta)\prod^n_i h(z_i,x_i),自然参数为 \hat\alpha=[\alpha_1+\sum^n_{i=1}t(z_i,x_i),\alpha_2+n]

而对于局部变量 z_i 的 complete conditional ,在 i.i.d. 假设下有等式
p(z_i|x_i,\boldsymbol\beta,\boldsymbol z_{-i},\boldsymbol x_{-i})=p(z_i|x_i,\boldsymbol\beta)\tag{45}
我们假设其服从指数族分布
p(z_i|x_i,\boldsymbol\beta)=h(z_j)\exp\{\eta(\beta,x_i)^\top z_i-a(\eta(\beta,x_i))\}\tag{46}

条件共轭模型的变分推断

接下来让我们将这个模型引入 CAVI 算法框架。我们将 \beta 的变分后验分布近似表示为 q(\beta|\lambda)\lambda全局变分参数),它与后验分布有相同的指数族分布;将 z_i 的变分后验分布近似为 q(z_i|\psi_i) ,其中 \psi_i 为数据点 i局部变分参数,它与局部 complete condititonal 有相同的指数族分布。

在 CAVI 算法中,我们将迭代地进行局部变分参数和全局变分参数的更新。

局部变分参数的更新

这里我们用到前面的公式(40),可以得到更新公式
\psi_i=\mathbb E_\lambda[\eta(\boldsymbol\beta,x_i)]\tag{47}
得到的结果为公式(45)中自然参数的期望。

全局变分参数的更新

全局变分参数的更新利用类似的方法,更新公式为
\lambda=[\alpha_1+\sum^n_{i=1}\mathbb E_{\psi_i}[t(z_i,x_i)],\alpha_2+n]^\top\tag{48}
得到的结果为公式(44)中自然参数的期望。

ELBO 的计算

CAVI 通过迭代更新局部变分参数和全局变分参数,每次迭代我们可以计算 ELBO ,来决定模型是否收敛。将公式(44)带入 ELBO 公式(13),我们可以得到条件共轭模型的 ELBO
ELBO=(\alpha_1+\sum^n_{i=1}\mathbb E_{\psi_i}[t(z_i,x_i)])^\top\mathbb E_\lambda[\boldsymbol\beta]-(\alpha_2+n)\mathbb E_\lambda[a(\boldsymbol\beta)]-\mathbb E[\log q(\boldsymbol\beta,\boldsymbol z)]\tag{49}
后面一项可以表示为
\mathbb E[\log q(\boldsymbol\beta,\boldsymbol z)]=\lambda^\top\mathbb E_\lambda[t(\boldsymbol\beta)]-a(\lambda)+\sum^n_{i=1}\psi_i^\top\mathbb E_{\psi_i}[z_i]-a(\psi_i)\tag{50}
论文中附录 C 还有描述了基于 LDA 的 CAVI 算法,有兴趣的小朋友可以看一下论文,这里不过多赘述。

CAVI 的问题

CAVI 给了变分推断问题一个解决问题的框架,引入指数族分布使得模型更加简化,似乎到这里问题已经解决得差不多了,但事实上真的是这样吗?

实际上,在真实场景中,我们要应对的数据可能是成百上千甚至是上十万的,这就给 CAVI 这一算法框架带来了极大的挑战。 CAVI 在计算过程中,每一次迭代都需要遍历所有数据,随着数据量的增加,计算量也越来越大,这显然是不符合我们的需要。

所以,我们还需要另外一套计算方法,对算法的效率进行优化。这也是我下一篇博客会讲到的两种方法——随机变分推断(Stochastic variational inference,SVI)和变分自编码器(Variational Auto-encoder,VAE)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容