贝叶斯变分推断
Abstract
现代统计学的核心问题之一是近似难以计算的概率密度。这个问题在贝叶斯统计中尤其重要,贝叶斯统计将所有关于未知量的推论都框定为涉及后验密度的计算。但在实际模型中我们很难通过简单的贝叶斯理论直接求得后验概率的公式解,因此我们寻求一个近似的解来代表后验概率。 这里就可以尝试使用变分推断的方法。贝叶斯变分推断能将后验推断问题巧妙地转化为优化问题进行求解 ,在求解概率模型中有很广泛的运用。
Introduction
在本文中,我们将介绍贝叶斯变分推断(Variational Inference),这是一种来自机器学习的方法,通过优化来近似概率密度。VI已被用于许多应用中, 并且往往比经典方法更快,例如马尔可夫链蒙特卡洛采样。
VI 是一种确定性近似推断方法,背后的想法是首先假设一个密度家族,然后找到该家族中接近目标的成员。 即根据已有数据推断需要的分布p,通过变分推断的方法寻找容易表达和求解的分布q,当q和p的差距很小的时候,q就可以作为p的近似分布,成为输出结果了。 这里的接近度是通过 KL散度( Kullback–Leibler divergence) 来衡量的。
它与MCMC方法不同,MCMC方法是利用马尔科夫链取样来近似后验概率,变分法是利用优化结果来近似后验概率。首先,MCMC相较于变分法计算上消耗更大,但是它可以保证取得与目标分布相同的样本;而变分法没有这个保证,它只能寻找到近似于目标分布一个密度分布,因此变分法计算上更快。所以当数据量较小时我们可以用MCMC方法消耗更多的计算力但得到更精确的样本,当数据量较大时我们用变分法处理比较合适。
Method
【问题】
观测数据 :X
隐变量:Z
目的: 求数据的后验概率p (z∣x)
【思路】
首先,我们要求的公式为:
p ( Z ∣ X ) = p ( X ) p ( X , Z ) p(Z∣X)= p(X) p(X,Z) p(Z∣X)=p(X)p(X,Z)
然而在实际应用中,p(X)往往十分复杂,不易计算。因此我们就需要通过用一个q ( Z ) 的分布来近似真实的p ( Z ) 分布。为了达到该目的,我们需要一个能刻画两个分布之间逼近程度的度量,这里就引入 KL 散度的概念。
[KL散度]( (60条消息) KL 散度 (Kullback-Leibler divergence)_连理o的博客-CSDN博客_kl散度 )又可称为相对熵或信息散度,描述两个概率分布 P 和 Q 的差异或相似性,公式为 :
K L ( P ∣ ∣ Q ) = ∫ p ( x ) l o g ( p ( x ) / q ( x ) ) d x KL(P∣∣Q)=∫p(x)log( p(x)/ q(x) )dx KL(P∣∣Q)=∫p(x)log(p(x)/q(x))dx
将公式展开,可得:
K L ( P ∣ ∣ Q ) = ∫ p ( x ) l o g p ( x ) d x − ∫ p ( x ) l o g q ( x ) d x = − H ( P ) + H ( P , Q ) KL(P∣∣Q)=∫p(x)logp(x)dx−∫p(x)logq(x)dx =-H(P)+H(P,Q) KL(P∣∣Q)=∫p(x)logp(x)dx−∫p(x)logq(x)dx=−H(P)+H(P,Q)
有了散度的概念,我们再对之前的概率公式进行变换:
p ( X ) = p ( X , Z ) / p ( Z ∣ X ) p(X)= p(X,Z)/ p(Z∣X) p(X)=p(X,Z)/p(Z∣X)
在等式两边同时取对数:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &logP(X)=log …
对于左边的式子logp(X)求Z的期望得:
E ( l o g p ( X ) ) = ∫ Z l o g p ( X ) q ( Z ) d Z = l o g p ( X ) ∫ Z q ( Z ) d Z E(logp(X))=\int_{Z}{logp(X)q(Z)}dZ=logp(X)\int_{Z}{q(Z)}dZ E(logp(X))=∫Zlogp(X)q(Z)dZ=logp(X)∫Zq(Z)dZ
由 于 ∫ Z q ( Z ) d Z = 1 : E ( l o g p ( x ) ) = l o g p ( X ) 由于\int_{Z}{q(Z)}dZ=1:\\ E(logp(x))=logp(X) 由于∫Zq(Z)dZ=1:E(logp(x))=logp(X)
对于右边的式子变换得:
l o g p ( X , Z ) − l o g q ( Z ) − l o g p ( Z ∣ X ) / q ( Z ) = ∫ Z q ( Z ) l o g p ( X , Z ) d Z − ∫ Z q ( Z ) l o g q ( Z ) d Z + ∫ Z + q ( Z ) l o g ( q ( Z ) / p ( Z ∣ X ) ) d Z logp(X,Z)−logq(Z)−log p(Z∣X)/ q(Z) \\ =\int_{Z} q(Z)logp(X,Z)dZ−\int_{Z} q(Z)logq(Z)dZ + \int_{Z} +q(Z)log (q(Z)/ p(Z|X)) dZ logp(X,Z)−logq(Z)−logp(Z∣X)/q(Z)=∫Zq(Z)logp(X,Z)dZ−∫Zq(Z)logq(Z)dZ+∫Z+q(Z)log(q(Z)/p(Z∣X))dZ
其中各项可以分为下面两个值:
E L B O = ∫ Z q ( Z ) l o g p ( X , Z ) d Z − ∫ Z q ( Z ) l o g q ( Z ) d Z ELBO=\int_{Z} q(Z)logp(X,Z)dZ−\int_{Z} q(Z)logq(Z)dZ ELBO=∫Zq(Z)logp(X,Z)dZ−∫Zq(Z)logq(Z)dZ
K L ( q ( Z ) ∣ ∣ p ( Z ∣ X ) ) = ∫ Z q ( Z ) l o g ( q ( Z ) / p ( Z ∣ X ) ) d Z KL(q(Z)||p(Z|X))=\int_{Z} q(Z)log (q(Z)/ p(Z|X)) dZ KL(q(Z)∣∣p(Z∣X))=∫Zq(Z)log(q(Z)/p(Z∣X))dZ
由于KL散度是描述两个概率分布 P 和 Q 的差异的,所以我们希望这个值尽可能小以寻求到最优解。但是显然我们无法直接求出KL的值然后让它变小,因为P(Z|X)我们并不知道。于是很容易想到我们可以求ELBO的值并使它变大。
最大化[ELBO]( ELBO,全称为 Evidence Lower *Bound,即证据下界。这里的证据指数据或可观测变量的概率密度。* )(经典平均场理论):
假设变分后验分式是一种完全可分解的分布:
q ( z ) = ∏ i = 1 M z i q(z)=\prod_{i=1}^{M}{z_i} q(z)=i=1∏Mzi
也就是认为每个Zi 都是相互独立的, 这样将高维的参数转化成了低维,带入ELBO中:
L ( q ) = ∫ Z l o g p ( X , Z ) q ( Z ) d Z − ∫ Z l o g q ( Z ) q ( Z ) d Z = ∫ Z l o g p ( X , Z ) ∏ i = 1 M q i ( z i ) d Z − ∫ Z ∑ i = 1 M l o g q ( Z ) ∏ i = 1 M q i ( z i ) d Z L(q)= \int_Z logp(X,Z)q(Z)dZ− \int_Z logq(Z)q(Z)dZ \\=\int_Z logp(X,Z) \prod_{i=1}^{M}{qi(zi)} dZ−\int_Z \sum_{i=1}^{M}{logq(Z)} \prod_{i=1}^{M}{qi(zi)}dZ L(q)=∫Zlogp(X,Z)q(Z)dZ−∫Zlogq(Z)q(Z)dZ=∫Zlogp(X,Z)i=1∏Mqi(zi)dZ−∫Zi=1∑Mlogq(Z)i=1∏Mqi(zi)dZ
前半截公式变换( 将整个集合的Z拆解成一个个z进行积分 ):
$$
\int_Z
logp(X,Z)
\prod_{i=1}^{M}{qi(zi)}
dZ=
\int_{z1}
\int_{z2}
…\int_{zM}
q
i
(z
i
)log(p(X,Z))dz
1
dz
2
…dz
M
$$
我们这里特意提出第Zj个隐变量,将其他项的都积分掉,这样就可以留下含有Zj项的式子:
= ∫ z j q j ( z j ) [ ∫ z 1 ∫ z 2 . . . ∫ z M q i ( z i ) l o g ( p ( X , Z ) ) d z 1 d z 2... d z M ] d j = ∫ z j q j ( z j ) E ∏ i ≠ j M q i ( z i ) [ l o g p ( X , Z ) ] d z j =\int_{zj}qj(zj) [\int_{z1} \int_{z2} ...\int_{zM} qi(zi)log(p(X,Z))dz1dz2...dzM]dj\\ =\int_{z_j}q_j(z_j)E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(X,Z)]dz_j =∫zjqj(zj)[∫z1∫z2...∫zMqi(zi)log(p(X,Z))dz1dz2...dzM]dj=∫zjqj(zj)E∏i=jMqi(zi)[logp(X,Z)]dzj
这里我们做一步近似:
E ∏ i ≠ j M q i ( z i ) [ l o g p ( X , Z ) ] = l o g p ^ ( X , z j ) E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(X,Z)]=log \hat p(X,z_j) E∏i=jMqi(zi)[logp(X,Z)]=logp^(X,zj)
那么前半截式子最终可以化成:
∫ Z l o g p ( X , Z ) ∏ i = 1 M q i ( z i ) d Z = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) d z j \int_Z logp(X,Z) \prod_{i=1}^{M}{qi(zi)} dZ= \int_{z_j}q_j(z_j)log \hat p(X,z_j)dz_j ∫Zlogp(X,Z)i=1∏Mqi(zi)dZ=∫zjqj(zj)logp^(X,zj)dzj
然后对后半截公式进行变换:
∫ Z ∑ i = 1 M l o g q ( Z ) ∏ i = 1 M q i ( z i ) d Z = ∫ Z ∏ i = 1 M q i ( z i ) d Z [ l o g q 1 ( z 1 ) + l o g q 2 ( z 2 ) + . . . + l o g q M ( z M ) ] d Z \int_Z \sum_{i=1}^{M}{logq(Z)} \prod_{i=1}^{M}{qi(zi)}dZ =\int_Z \prod_{i=1}^{M}{qi(zi)}dZ [logq 1 (z 1 )+logq 2 (z 2 )+...+logq M (z M )]dZ ∫Zi=1∑Mlogq(Z)i=1∏Mqi(zi)dZ=∫Zi=1∏Mqi(zi)dZ[logq1(z1)+logq2(z2)+...+logqM(zM)]dZ
为了找出该式子的通项公式,现在我们假定M=2则有:
∫ z 1 ∫ z 2 [ l o g q 1 ( z 1 ) + l o g q 2 ( z 2 ) ] q 1 ( z 1 ) q 2 ( z 2 ) d z 1 d z 2 = ∫ z 1 ∫ z 2 q 1 ( z 1 ) q 2 ( z 2 ) l o g q 1 ( z 1 ) d z 1 d z 2 + ∫ z 1 ∫ z 2 q 1 ( z 1 ) q 2 ( z 2 ) l o g q 2 ( z 2 ) d z 1 d z 2 = ∫ z 1 q 1 ( z 1 ) l o g q 1 ( z 1 ) ∫ z 2 q 2 ( z 2 ) d z 2 d z 1 + ∫ z 2 q 2 ( z 2 ) l o g q 2 ( z 2 ) ∫ z 1 q 1 ( z 1 ) d z 1 d z 2 \int_{z1} \int_{z2} [logq 1 (z 1 )+logq 2 (z 2 )]q 1 (z 1 )q 2 (z 2 )dz 1 dz 2 \\= \int_{z1} \int_{z2} q 1 (z 1 )q 2 (z 2 )logq 1 (z 1 )dz 1 dz 2 +\int_{z1} \int_{z2} q 1 (z 1 )q 2 (z 2 )logq 2 (z 2 )dz 1 dz 2 \\=\int_{z1}q1(z1)logq1(z1)\int_{z2}q2(z2)dz2dz1 +\int_{z2}q2(z2)logq2(z2)\int_{z1}q1(z1)dz1dz2 ∫z1∫z2[logq1(z1)+logq2(z2)]q1(z1)q2(z2)dz1dz2=∫z1∫z2q1(z1)q2(z2)logq1(z1)dz1dz2+∫z1∫z2q1(z1)q2(z2)logq2(z2)dz1dz2=∫z1q1(z1)logq1(z1)∫z2q2(z2)dz2dz1+∫z2q2(z2)logq2(z2)∫z1q1(z1)dz1dz2
由 于 ∫ z 2 q 2 ( z 2 ) d z 2 = 1 , ∫ z 1 q 1 ( z 1 ) d z 1 = 1 原 式 = ∑ i = 1 2 ∫ z i q i ( z i ) l o g q ( z i ) d z i 由于\int_{z2}q2(z2)dz2=1,\int_{z1}q1(z1)dz1=1 \\原式=\sum_{i=1}^{2}\int_{zi}{qi(zi)logq(zi)}dzi 由于∫z2q2(z2)dz2=1,∫z1q1(z1)dz1=1原式=i=1∑2∫ziqi(zi)logq(zi)dzi
因此推出通项公式为:
∫ Z ∑ i = 1 M l o g q ( Z ) ∏ i = 1 M q i ( z i ) d Z = ∑ i = 1 M ∫ z i q i ( z i ) l o g q ( z i ) d z i \int_Z \sum_{i=1}^{M}{logq(Z)} \prod_{i=1}^{M}{qi(zi)}dZ= \sum_{i=1}^{M}\int_{zi}{qi(zi)logq(zi)}dzi ∫Zi=1∑Mlogq(Z)i=1∏Mqi(zi)dZ=i=1∑M∫ziqi(zi)logq(zi)dzi
这里我们关注的是第j项(迭代项)的结果,因此将其他项全看做常数C,则结果转变为:
∫ Z ∑ i = 1 M l o g q ( Z ) ∏ i = 1 M q i ( z i ) d Z = ∫ z i q i ( z i ) l o g q i ( z i ) d z i + C \int_Z \sum_{i=1}^{M}{logq(Z)} \prod_{i=1}^{M}{qi(zi)}dZ =\int_{zi}{qi(zi)logqi(zi)}dzi+C ∫Zi=1∑Mlogq(Z)i=1∏Mqi(zi)dZ=∫ziqi(zi)logqi(zi)dzi+C
那么将两个化简后式子合并得到ELBO最终的表达式:
E L B O = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) d z j − ( ∫ z i q i ( z i ) l o g q i ( z i ) d z i + C ) = ∫ z j q j ( z j ) l o g ( p ^ ( X , z j ) / q i ( z i ) ) d z j + C = − K L ( q j ( z j ) ∣ ∣ p ^ ( X , z j ) ) ELBO=\int_{z_j}q_j(z_j)log \hat p(X,z_j)dz_j -(\int_{zi}{qi(zi)logqi(zi)}dzi+C)\\ =\int_{z_j}q_j(z_j)log( \hat p(X,z_j)/qi(zi))dz_j+C \\=-KL(qj(zj)||\hat p(X,z_j)) ELBO=∫zjqj(zj)logp^(X,zj)dzj−(∫ziqi(zi)logqi(zi)dzi+C)=∫zjqj(zj)log(p^(X,zj)/qi(zi))dzj+C=−KL(qj(zj)∣∣p^(X,zj))
[重要思想]:
因 此 我 们 要 求 解 E L B O 的 最 大 值 的 问 题 就 转 变 为 了 求 K L ( q j ( z j ) ∣ ∣ p ^ ( X , z j ) ) 的 最 小 值 的 问 题 又 根 据 K L 散 度 的 定 义 ( 描 述 两 者 差 距 性 ) , 那 么 推 出 只 有 当 q j ( z j ) = p ^ ( X , z j ) 时 K L 达 到 最 小 值 。 因此我们要求解ELBO的最大值的问题就转变为了求KL(qj(zj)||\hat p(X,z_j))的最小值的问题\\ 又根据KL散度的定义(描述两者差距性),那么推出只有当qj(zj)=\hat p(X,z_j)时KL达到最小值。 因此我们要求解ELBO的最大值的问题就转变为了求KL(qj(zj)∣∣p^(X,zj))的最小值的问题又根据KL散度的定义(描述两者差距性),那么推出只有当qj(zj)=p^(X,zj)时KL达到最小值。
最后我们就可以得到每个隐变量的迭代更新的式子 :
q i ( z i ) = e x p E ∏ i ≠ j M q i ( z i ) [ l o g p ^ ( X , Z ) ] d z j l o g q i ( z i ) = E ∏ i ≠ j M q i ( z i ) [ l o g p ^ ( X , Z ) ] d z j q_i(z_i) = exp^{E_{\prod_{i\neq j}^Mq_i(z_i)}[log\hat p(X,Z)]dz_j} \\ logq_i(z_i) =E_{\prod_{i\neq j}^Mq_i(z_i)}[log\hat p(X,Z)]dz_j qi(zi)=expE∏i=jMqi(zi)[logp^(X,Z)]dzjlogqi(zi)=E∏i=jMqi(zi)[logp^(X,Z)]dzj
这就是贝叶斯变分推断的求解思路。
Conclusion
在机器学习中,有很多求后验概率的问题,求后验概率的过程被称为推断,推断分为精确推断和近似推断。精确推断一般主要是根据贝叶斯等概率公式推导出后验概率,但在一些生成模型中,如RBM, DBN, DBM很难应用精确推断,于是乎我们就有了近似推断,近似推断又分为确定性近似和随机性近似,,随机性近似的方法有马尔可夫蒙特卡洛采样(MCMC)、Metropolis-Hastings采样(MH)、吉布斯采样(Gibbs),而确定性近似方法就是变分推断。
这里我们要回顾贝叶斯变分推断的精华步骤:首先我们拥有两部分输入:数据x,模型p(z, x)。且我们需要推断的是后验概率p(z | x),但无法直接求得。然后就要构造后验概率p(z | x)的近似分布q(z)。为了保证结果的准确性不断缩小q和p之间的距离直至收敛(这里引入KL散度和ELBO的概念去求解)。
这样梳理便于理解变分推断的思想。
Reference
1 [1601.00670v8] 变分推理:统计学家综述 (arxiv.org)
2. (60条消息) KL 散度 (Kullback-Leibler divergence)_连理o的博客-CSDN博客_kl散度
3. (60条消息) 贝叶斯统计与变分推断_stepondust的博客-CSDN博客
4. (60条消息) 超详尽的变分推断算法教程及例子_m0_46385527的博客-CSDN博客_变分推断
5. (60条消息) 【一文学会】变分推断及其求解方法_谁把小明注册了的博客-CSDN博客_变分推断
6. 如何简单易懂地理解变分推断(variational inference)? - 知乎 (zhihu.com)
7. 变分推断——深度学习第十九章 - 知乎 (zhihu.com)
7D&request_id=165288005816781432982629&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-3-83088786-null-null.142v10pc_search_result_control_group,157v4new_style&utm_term=变分推断&spm=1018.2226.3001.4187)