精华内容
下载资源
问答
  • 变分推断
    千次阅读
    2020-06-24 22:09:31

    变分推断

    变分推断(Variational Inference, VI)是贝叶斯近似推断方法中的一大类方法,它将后验推断问题巧妙地转化为优化问题进行求解,相比另一大类方法马尔可夫链蒙特卡洛方法(Markov Chain Monte Carlo, MCMC),VI 具有更好的收敛性和可扩展性(scalability),更适合求解大规模近似推断问题 [14]。

    变分推断概述

    在概率机器学习问题中,其一个中心任务是在给定观测数据变量X的条件下,计算潜在变量Z的后验概率分布 P ( Z ∣ X ) P(Z|X) P(Z

    更多相关内容
  • 高斯过程模型的自动变分推断。 论文“高斯过程模型的自动变分推论”的代码。 如果您使用任何代码,请引用: Nguyen,电视和Bonilla,EV,高斯过程模型的自动变分推理,在NIPS 2014中。 请参见src / demoFull.m和src ...
  • EM算法与变分推断

    2022-04-15 20:55:39
    θ ) \sum_ZP(X,Z|\theta) ∑Z​P(X,Z∣θ)不好直接处理,但对转化后的目标函数,我们可以利用已知数据对 Z Z Z进行推断得到 P ( Z ∣ X , θ ) P(Z|X,\theta) P(Z∣X,θ),再利用推断得到的 P ( Z ∣ X , θ ) P(Z|...

    一、EM算法

    目的:找到含有潜变量模型的极大似然解
    应用背景:对于某些数据直接估计模型参数较为困难,但通过引入潜变量可以降低模型的求解难度。但引入潜变量后怎样来求解?——EM算法。

    1. 直观感受EM算法

    对对数似然函数 log ⁡ P ( X ∣ θ ) \log P(X|\theta) logP(Xθ) log ⁡ P ( X ∣ θ ) = log ⁡ ∑ Z P ( X , Z ∣ θ ) \log P(X|\theta)=\log \sum_Z{P(X,Z|\theta)} logP(Xθ)=logZP(X,Zθ),这样处理的目的是为了引入潜变量,但这样同时也会导致如下两个问题

    1. 求和操作在对数里面使得对数运算无法直接作用在联合分布上
    2. 由于 Z Z Z是隐变量,我们无法得知关于它的信息

    为了解决以上这两个问题,我们可以将 arg ⁡ max ⁡ θ log ⁡ P ( X ∣ θ ) \arg\max_{\theta}\log P(X|\theta) argmaxθlogP(Xθ)近似为
    arg ⁡ max ⁡ θ ∑ Z P ( Z ∣ X , θ ) log ⁡ P ( X , Z ∣ θ ) (1) \arg\max_{\theta}\sum_ZP(Z|X,\theta)\log P(X,Z|\theta) \tag{1} argθmaxZP(ZX,θ)logP(X,Zθ)(1)
    (为什么可以这样近似在后面会讲述),近似后的目标函数相比于原目标函数的优势在于

    1. 求和符号从对数里面提到了对数外面降低了处理难度
    2. ∑ Z P ( X , Z ∣ θ ) \sum_ZP(X,Z|\theta) ZP(X,Zθ)不好直接处理,但对转化后的目标函数,我们可以利用已知数据对 Z Z Z进行推断得到 P ( Z ∣ X , θ ) P(Z|X,\theta) P(ZX,θ),再利用推断得到的 P ( Z ∣ X , θ ) P(Z|X,\theta) P(ZX,θ)来进行求和

    在近似处理结束后,对于目标 θ ∗ = arg ⁡ max ⁡ θ ∑ Z P ( Z ∣ X , θ ) log ⁡ P ( X , Z ∣ θ ) \theta^*=\arg\max_{\theta}\sum_ZP(Z|X,\theta)\log P(X,Z|\theta) θ=argmaxθZP(ZX,θ)logP(X,Zθ),可以采用交替更新的方式来对目标进行求解,具体来说求解算法包括两步(这两步分别被称为E步和M步):

    1. E步:在E步中我们利用数据和现有参数(记为 θ o l d \theta^{old} θold)来对Z的概率进行推断,并用得到的 P ( Z ∣ X , θ o l d ) P(Z|X,\theta^{old}) P(ZX,θold)计算 Q ( θ , θ o l d ) = ∑ Z P ( Z ∣ X , θ o l d ) log ⁡ P ( X , Z ∣ θ ) Q(\theta,\theta^{old})=\sum_ZP(Z|X,\theta^{old})\log P(X,Z|\theta) Q(θ,θold)=ZP(ZX,θold)logP(X,Zθ),因为这里利用 P ( Z ∣ X , θ o l d ) P(Z|X,\theta^{old}) P(ZX,θold) log ⁡ P ( X , Z ∣ θ ) \log P(X,Z|\theta) logP(X,Zθ)进行了期望运算,进而这一步也被称为E(Expectation)步。
    2. M步:在M步中对于E步所获得的期望 Q ( θ , θ o l d ) Q(\theta,\theta^{old}) Q(θ,θold),我们寻找最优的新参数 θ n e w = arg ⁡ max ⁡ θ Q ( θ , θ o l d ) \theta^{new}=\arg\max_{\theta}Q(\theta,\theta^{old}) θnew=argmaxθQ(θ,θold),并令 θ o l d = θ n e w \theta^{old}=\theta^{new} θold=θnew在这一步骤中因为涉及到了最大化期望,因而它也被称为M(Maximization)步

    通过不断交替重复E步和M步,直至收敛条件满足或达到最大迭代次数,得到参数 θ \theta θ

    2. 从数学角度推导EM

    在这里我们假设潜变量 Z Z Z服从分布 q ( Z ) q(Z) q(Z)
    log ⁡ P ( X ∣ θ ) = ∑ Z q ( Z ) log ⁡ P ( X ∣ θ ) = ∑ Z q ( Z ) log ⁡ ( P ( X ∣ θ ) P ( X , Z ∣ θ ) P ( X , Z ∣ θ ) q ( Z ) q ( Z ) ) = ∑ Z q ( Z ) log ⁡ ( q ( Z ) P ( Z ∣ X , θ ) ) + ∑ Z q ( Z ) log ⁡ P ( X , Z ∣ θ ) q ( Z ) = ∑ Z q ( Z ) log ⁡ ( q ( Z ) P ( Z ∣ X , θ ) ) + ∑ Z q ( Z ) log ⁡ P ( X , Z ∣ θ ) − ∑ Z q ( Z ) log ⁡ q ( Z ) = K L ( q ( Z ) ∣ ∣ P ( Z ∣ X , θ ) ) + ∑ Z q ( Z ) log ⁡ P ( X , Z ∣ θ ) + H ( Z ) \begin{aligned} \log P(X|\theta)=\sum_Z{q(Z)\log P(X|\theta)}&=\sum_Z{q(Z)\log(\frac{P(X|\theta)}{P(X,Z|\theta)}\frac{P(X,Z|\theta)}{q(Z)}q(Z))}\\ &=\sum_Z{q(Z)\log(\frac{q(Z)}{P(Z|X,\theta)})}+\sum_Z{q(Z)\log \frac{P(X,Z|\theta)}{q(Z)}}\\ &=\sum_Z{q(Z)\log(\frac{q(Z)}{P(Z|X,\theta)})}+\sum_Z{q(Z)\log P(X,Z|\theta)}-\sum_Z{q(Z)\log q(Z)}\\ &=KL(q(Z)||P(Z|X,\theta))+\sum_Z{q(Z)\log P(X,Z|\theta)}+H(Z) \end{aligned} logP(Xθ)=Zq(Z)logP(Xθ)=Zq(Z)log(P(X,Zθ)P(Xθ)q(Z)P(X,Zθ)q(Z))=Zq(Z)log(P(ZX,θ)q(Z))+Zq(Z)logq(Z)P(X,Zθ)=Zq(Z)log(P(ZX,θ)q(Z))+Zq(Z)logP(X,Zθ)Zq(Z)logq(Z)=KL(q(Z)P(ZX,θ))+Zq(Z)logP(X,Zθ)+H(Z)
    这里注意到 H ( Z ) H(Z) H(Z)是与 X , θ X,\theta X,θ无关的,我们不考虑它,从而得到一个新的目标函数
    L = K L ( q ( Z ) ∣ ∣ P ( Z ∣ X , θ ) ) + ∑ Z q ( Z ) ln ⁡ P ( X , Z ∣ θ ) (2) \mathcal{L}=KL(q(Z)||P(Z|X,\theta))+\sum_Z{q(Z)\ln P(X,Z|\theta)}\tag{2} L=KL(q(Z)P(ZX,θ))+Zq(Z)lnP(X,Zθ)(2)
    注意式(2)中的第二部分与式(1)很像。在这里,最大化 L \mathcal{L} L等价于最大化似然函数 log ⁡ P ( X ∣ θ ) \log P(X|\theta) logP(Xθ). 对目标函数 L \mathcal{L} L我们可以采取两步优化的方式来最大化。

    1. 优化KL散度: L \mathcal{L} L θ \theta θ θ = θ o l d \theta=\theta^{old} θ=θold)给定的时候是一个定值,此时最小化KL散度可以使 ∑ Z q ( Z ) log ⁡ P ( X , Z ∣ θ o l d ) \sum_Z{q(Z)\log P(X,Z|\theta^{old})} Zq(Z)logP(X,Zθold)最大。由KL散度的性质不难得到当 q ( Z ) = p ( Z ∣ X , θ o l d ) q(Z)=p(Z|X,\theta^{old}) q(Z)=p(ZX,θold)时KL散度最小其值为0. 当 q ( Z ) = p ( Z ∣ X , θ o l d ) q(Z)=p(Z|X,\theta^{old}) q(Z)=p(ZX,θold) K L ( q ( Z ) ∣ ∣ P ( Z ∣ X , θ o l d ) ) = 0 KL(q(Z)||P(Z|X,\theta^{old}))=0 KL(q(Z)P(ZX,θold))=0,这时 L = ∑ Z q ( Z ∣ X , θ o l d ) log ⁡ P ( X , Z ∣ θ o l d ) \mathcal{L}=\sum_Z{q(Z|X,\theta^{old})\log P(X,Z|\theta^{old})} L=Zq(ZX,θold)logP(X,Zθold),正好是EM算法E步的Q函数的形式。
    2. 最大化 L \mathcal{L} L arg ⁡ max ⁡ θ ∑ Z P ( Z ∣ X , θ o l d ) log ⁡ P ( X , Z ∣ θ ) \arg\max_\theta\sum_ZP(Z|X,\theta^{old})\log P(X,Z|\theta) argmaxθZP(ZX,θold)logP(X,Zθ),此时最大化 L \mathcal{L} L等价于最大化似然函数。同时由于 θ \theta θ的更新导致 q ( Z ) = P ( Z ∣ X , θ o l d ) ≠ P ( Z ∣ X , θ n e w ) q(Z)=P(Z|X,\theta^{old})\ne P(Z|X,\theta^{new}) q(Z)=P(ZX,θold)=P(ZX,θnew),这会使得KL散度不再为0导致 L \mathcal{L} L上升,同时KL不为0又使得我们可以进行新的一轮优化。这也是EM算法为什么可以最大化似然函数的原因。

    整个过程的示意图如下:在这里插入图片描述

    注:

    1. 省略 H ( Z ) H(Z) H(Z)是否合理:在E步中通过 q ( Z ) = P ( Z ∣ X , θ o l d ) q(Z)=P(Z|X,\theta^{old}) q(Z)=P(ZX,θold)来估计 q ( Z ) q(Z) q(Z)。在得到 q ( Z ) q(Z) q(Z)的估计后 log ⁡ P ( X ∣ θ ) \log P(X|\theta) logP(Xθ)变为 log ⁡ P ( X ∣ θ ) = ∑ Z q ( Z ∣ X , θ o l d ) log ⁡ P ( X , Z ∣ θ ) + ∑ Z q ( Z ∣ X , θ o l d ) log ⁡ q ( Z ∣ X , θ o l d ) \log P(X|\theta)=\sum_Z{q(Z|X,\theta^{old})\log P(X,Z|\theta)}+\sum_Z{q(Z|X,\theta^{old})\log q(Z|X,\theta^{old})} logP(Xθ)=Zq(ZX,θold)logP(X,Zθ)+Zq(ZX,θold)logq(ZX,θold)。显然 H ( Z ) H(Z) H(Z)在这个时候是定值与 θ \theta θ无关,因此在优化时省略掉也是合理的。
    2. 在这里可以把 ∑ Z q ( Z ) log ⁡ P ( X ∣ θ ) \sum_Z{q(Z) \log P(X|\theta)} Zq(Z)logP(Xθ)换为 E q ( Z ) log ⁡ P ( X ∣ θ ) E_{q(Z)}\log P(X|\theta) Eq(Z)logP(Xθ)也成立(后者是更一般的情况)。

    二、变分推断

    变分推断(Variational Inference, VI)
    目的:近似推断后验分布 P ( Z ∣ X ) P(Z|X) P(ZX)
    核心思想:假设一个密度族,然后再在密度族中找出一个与目标密度最为接近的密度。(一般两个密度之间的距离用KL散度刻画。)

    1. ELBO的引入

    这里尝试从两个不同的角度分别引入ELBO

    a. 近似推断

    由于对 P ( Z ∣ X ) P(Z|X) P(ZX)的推断较为困难(潜在空间维度高或 P ( Z ∣ X ) P(Z|X) P(ZX)的形式复杂)。因此尝试在一个密度函数族 Q Q Q中找到一个 q ( Z ) q(Z) q(Z)使其与 P ( Z ∣ X ) P(Z|X) P(ZX)尽可能接近即 q ∗ ( Z ) = arg ⁡ min ⁡ q ( Z ) ∈ Q K L ( q ( Z ) ∣ ∣ P ( Z ∣ X ) ) q^*(Z)=\arg\min_{q(Z)\in Q}KL(q(Z)||P(Z|X)) q(Z)=argminq(Z)QKL(q(Z)P(ZX))。其中(这一部分的 E [ ⋅ ] E[\cdot] E[]是关于分布 q ( Z ) q(Z) q(Z)求期望)
    arg ⁡ min ⁡ q ∗ ( Z ) ∈ Q K L ( q ( Z ) ∣ ∣ P ( Z ∣ X ) ) = E [ log ⁡ q ( Z ) ] − E [ log ⁡ P ( Z ∣ X ) ] = E [ log ⁡ q ( Z ) ] − E [ log ⁡ P ( X , Z ) ] + E [ log ⁡ P ( X ) ] \begin{aligned} \arg\min_{q^*(Z)\in Q}KL(q(Z)||P(Z|X))&=E[\log q(Z)]-E[\log P(Z|X)]\\ &=E[\log q(Z)]-E[\log P(X,Z)]+E[\log P(X)] \end{aligned} argq(Z)QminKL(q(Z)P(ZX))=E[logq(Z)]E[logP(ZX)]=E[logq(Z)]E[logP(X,Z)]+E[logP(X)]
    但这个目标并不好优化,因为其中含有 P ( X ) P(X) P(X),而 P ( X ) = ∫ Z P ( X , Z ) d Z P(X)=\int_Z P(X,Z)dZ P(X)=ZP(X,Z)dZ计算起来较为困难。但我们注意到 P ( X ) P(X) P(X) q ( Z ) q(Z) q(Z)没有直接联系,因此对目标函数进行转化,得到以下等价目标函数证据下界 (evidence lower bound, ELBO)。
    E L B O ( q ) = E [ log ⁡ P ( X , Z ) ] − E [ log ⁡ q ( Z ) ] ELBO(q)=E[\log P(X,Z)]-E[\log q(Z)] ELBO(q)=E[logP(X,Z)]E[logq(Z)]
    ELBO等于负的KL散度加上 log ⁡ P ( X ) \log P(X) logP(X),因此最大化 E L B O ( q ) ELBO(q) ELBO(q)等价于最小化 K L ( q ( Z ) ∣ ∣ P ( Z ∣ X ) ) KL(q(Z)||P(Z|X)) KL(q(Z)P(ZX))。此外对ELBO的表达式还可以有以下直观理解:

    1. ELBO可以进行如下转化
      E L B O ( q ) = E [ log ⁡ P ( X , Z ) ] − E [ log ⁡ q ( Z ) ] = E [ log ⁡ P ( X ∣ Z ) ] + E [ log ⁡ P ( Z ) ] − E [ log ⁡ q ( Z ) ] = E [ log ⁡ P ( X ∣ Z ) ] − K L ( q ( Z ) ∣ ∣ P ( Z ) ) \begin{aligned} ELBO(q)&=E[\log P(X,Z)]-E[\log q(Z)]\\ &=E[\log P(X|Z)]+E[\log P(Z)]-E[\log q(Z)]\\ &=E[\log P(X|Z)]-KL(q(Z)||P(Z)) \end{aligned} ELBO(q)=E[logP(X,Z)]E[logq(Z)]=E[logP(XZ)]+E[logP(Z)]E[logq(Z)]=E[logP(XZ)]KL(q(Z)P(Z))
      其中第一项为对数似然要求潜变量尽可能解释观测数据的分布,第二项为KL散度要求让后验 q ( Z ) q(Z) q(Z)分布尽可能接近先验分布 P ( Z ) P(Z) P(Z)

    2. log ⁡ P ( X ) ≥ E L B O ( q ) \log P(X) \ge ELBO(q) logP(X)ELBO(q) log ⁡ P ( X ) = E L B O ( q ) + K L ( q ( Z ) ∣ ∣ P ( Z ∣ X ) ) \log P(X)=ELBO(q)+KL(q(Z)||P(Z|X)) logP(X)=ELBO(q)+KL(q(Z)P(ZX)),而KL散度大于等于0。从这里我们也可以知道ELBO名字的由来。

    b. 极大似然

    计算 P ( Z ∣ X ) P(Z|X) P(ZX)的目的是在合适的条件下使 log ⁡ P ( X ) \log P(X) logP(X)(似然函数)最大。因此我们可以基于 log ⁡ P ( X ) \log P(X) logP(X)来推导 E L B O ( q ) ELBO(q) ELBO(q)
    log ⁡ P ( X ) = ∫ q ( Z ) log ⁡ P ( X ) d Z = ∫ q ( Z ) log ⁡ P ( X ) P ( X , Z ) P ( X , Z ) q ( Z ) q ( Z ) = ∫ q ( Z ) log ⁡ q ( Z ) P ( Z ∣ X ) d Z + ∫ q ( Z ) log ⁡ P ( X , Z ) q ( Z ) d Z = K L ( q ( Z ) ∣ ∣ p ( Z ∣ X ) ) + L ( q ) \begin{aligned} \log P(X)&=\int q(Z)\log P(X)dZ\\ &=\int q(Z)\log{\frac{P(X)}{P(X,Z)}\frac{P(X,Z)}{q(Z)}q(Z)}\\ &=\int q(Z)\log\frac{q(Z)}{P(Z|X)}dZ+\int q(Z)\log\frac{P(X,Z)}{q(Z)}dZ\\ &=KL(q(Z)||p(Z|X))+\mathcal{L}(q) \end{aligned} logP(X)=q(Z)logP(X)dZ=q(Z)logP(X,Z)P(X)q(Z)P(X,Z)q(Z)=q(Z)logP(ZX)q(Z)dZ+q(Z)logq(Z)P(X,Z)dZ=KL(q(Z)p(ZX))+L(q)
    其中 L ( q ) = ∫ q ( Z ) log ⁡ P ( X , Z ) q ( Z ) d Z = E [ log ⁡ p ( X , Z ) ] − E [ log ⁡ q ( Z ) ] \mathcal{L}(q)=\int q(Z)\log\frac{P(X,Z)}{q(Z)}dZ=E[\log p(X,Z)]-E[\log q(Z)] L(q)=q(Z)logq(Z)P(X,Z)dZ=E[logp(X,Z)]E[logq(Z)] E L B O ( q ) ELBO(q) ELBO(q)。注意到,在样本给定的时候 log ⁡ P ( X ) \log P(X) logP(X)是一个定值,因此在这种情况下最大化 L ( q ) \mathcal{L}(q) L(q)等价于最小化 K L ( q ( Z ) ∣ ∣ p ( Z ∣ X ) ) KL(q(Z)||p(Z|X)) KL(q(Z)p(ZX))

    2.几种特殊的变分推断

    a. 平均场变分推断

    平均场假设(Mean-Field Assumption): q ( Z ) = ∏ i q i ( Z i ) q(Z)=\prod_i q_i(Z_i) q(Z)=iqi(Zi) 这里 Z i Z_i Zi并非特指单个随机变量,而可以理解成是一个团。

    基于平均场假设
    L ( q ) = ∫ q ( Z ) log ⁡ P ( X , Z ) d Z − ∫ q ( Z ) log ⁡ q ( Z ) d Z = ∫ q j ( log ⁡ p ( X , Z ) ∏ i ≠ j q i d Z i ) d Z j − ∫ q j log ⁡ q j d Z j + const = ∫ q j log ⁡ p ~ ( X , Z j ) d Z j − ∫ q j log ⁡ q j d Z j + const \begin{aligned} \mathcal{L}(q)&=\int q(Z)\log P(X,Z)dZ-\int q(Z)\log q(Z)dZ\\ &=\int q_j(\log p(X,Z)\prod_{i\ne j}q_idZ_i)dZ_j-\int q_j\log q_j dZ_j+\text{const}\\ &=\int q_j\log \tilde{p}(X,Z_j)dZ_j-\int q_j\log q_j dZ_j+\text{const} \end{aligned} L(q)=q(Z)logP(X,Z)dZq(Z)logq(Z)dZ=qj(logp(X,Z)i=jqidZi)dZjqjlogqjdZj+const=qjlogp~(X,Zj)dZjqjlogqjdZj+const
    这里 log ⁡ p ~ ( X , Z j ) = E i ≠ j [ log ⁡ P ( X , Z ) ] + const \log\tilde{p}(X,Z_j)=E_{i\ne j}[\log P(X,Z)]+\text{const} logp~(X,Zj)=Ei=j[logP(X,Z)]+const。在这里保持 { q i ≠ j } \{q_{i \ne j}\} {qi=j}固定,关于分布 q j ( Z j ) q_j(Z_j) qj(Zj)来最大化 L ( q ) = − K L ( q j ∣ ∣ p ~ ( X , Z j ) ) + const \mathcal{L}(q)=-KL(q_j||\tilde{p}(X,Z_j))+\text{const} L(q)=KL(qjp~(X,Zj))+const。此时最大化 L \mathcal{L} L等价于最小化KL散度。由KL散度的定义易知 log ⁡ q j ∗ ( Z j ) = E i ≠ j [ log ⁡ P ( X , Z ) ] + const \log q^*_j(Z_j)=E_{i\ne j}[\log P(X,Z)]+\text{const} logqj(Zj)=Ei=j[logP(X,Z)]+const,于是我们可以得到如下方程组
    q j ∗ ( Z j ) = exp ⁡ ( E i ≠ j [ log ⁡ P ( X , Z ) ] ) ∫ exp ⁡ ( E i ≠ j [ log ⁡ P ( X , Z ) ] ) d Z j ( j = 1 , ⋯   , n ) q^*_j(Z_j)=\frac{\exp(E_{i\ne j}[\log P(X,Z)])}{\int\exp(E_{i\ne j}[\log P(X,Z)])dZ_j}\quad (j=1,\cdots,n) qj(Zj)=exp(Ei=j[logP(X,Z)])dZjexp(Ei=j[logP(X,Z)])(j=1,,n)
    这个方程组无显示解,因此采用一种交替迭代的方法来求解(CAVI)具体表现为:在给出一个恰当的初始话后,循环更新 q ( Z i ) q(Z_i) q(Zi)(用 q ∗ ( Z i ) q^*(Z_i) q(Zi)给出估计)。

    b. 随机梯度变分推断

    对目标函数: q ^ = arg ⁡ min ⁡ q K L ( q ∣ ∣ p ) = arg ⁡ min ⁡ L ( q ) \hat{q}=\arg\min_q KL(q||p)=\arg\min \mathcal{L}(q) q^=argminqKL(qp)=argminL(q),设 Z Z Z服从分布 q ϕ ( Z ) q_\phi(Z) qϕ(Z),这样目标函数变为 ϕ ^ = arg ⁡ min ⁡ ϕ L ( ϕ ) \hat{\phi}=\arg\min_{\phi} \mathcal{L}(\phi) ϕ^=argminϕL(ϕ)
    ∇ ϕ L ( ϕ ) = ∇ ϕ E q ϕ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] = E q ϕ [ ∇ ϕ ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) ] = ∫ ∇ ϕ q ϕ ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) d Z + ∫ q ϕ ∇ ϕ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] d Z \begin{aligned} \nabla_\phi\mathcal{L}(\phi)&=\nabla_\phi E_{q_\phi}[\log P_\theta(X,Z)-\log q_\phi]\\ &=E_{q_\phi}[\nabla_\phi(\log P_\theta(X,Z)-\log q_\phi)]\\ &=\int\nabla_\phi q_\phi(\log P_\theta(X,Z)-\log q_\phi)dZ+\int q_\phi\nabla_\phi[\log P_\theta(X,Z)-\log q_\phi]dZ \end{aligned} ϕL(ϕ)=ϕEqϕ[logPθ(X,Z)logqϕ]=Eqϕ[ϕ(logPθ(X,Z)logqϕ)]=ϕqϕ(logPθ(X,Z)logqϕ)dZ+qϕϕ[logPθ(X,Z)logqϕ]dZ
    这里 ∫ q ϕ ∇ ϕ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] d Z = − ∫ q ϕ ∇ ϕ log ⁡ q ϕ d Z = − ∫ ∇ ϕ q ϕ d Z = − ∇ ϕ ∫ q ϕ d Z = 0 \int q_\phi\nabla_\phi[\log P_\theta(X,Z)-\log q_\phi]dZ=-\int q_\phi\nabla_\phi \log q_\phi dZ=-\int\nabla_\phi q_\phi dZ= -\nabla_\phi\int q_\phi dZ=0 qϕϕ[logPθ(X,Z)logqϕ]dZ=qϕϕlogqϕdZ=ϕqϕdZ=ϕqϕdZ=0,进而
    ∇ ϕ L ( ϕ ) = ∫ q ϕ ∇ ϕ log ⁡ q ϕ ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) d Z = E q ϕ [ ∇ ϕ log ⁡ q ϕ ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) ] (3) \begin{aligned} \nabla_\phi\mathcal{L}(\phi)&=\int q_\phi \nabla_\phi \log q_\phi(\log P_\theta(X,Z)-\log q_\phi)dZ\\ &=E_{q_\phi}[\nabla_\phi \log q_\phi(\log P_\theta(X,Z)-\log q_\phi)] \end{aligned}\tag{3} ϕL(ϕ)=qϕϕlogqϕ(logPθ(X,Z)logqϕ)dZ=Eqϕ[ϕlogqϕ(logPθ(X,Z)logqϕ)](3)
    注:对于(3)式中的期望计算可以利用MCMC来估计,即记 Z ( l ) ∼ q ( z ) l = 1 , 2 , ⋯   , L Z^{(l)}\sim q(z)\quad l=1,2,\cdots,L Z(l)q(z)l=1,2,,L,则 ∇ ϕ L ( ϕ ) = 1 L ∑ l ∇ ϕ log ⁡ q ϕ ( log ⁡ P θ ( X , Z ( l ) ) − log ⁡ q ϕ ( Z ( l ) ) \nabla_\phi\mathcal{L}(\phi)=\frac{1}{L}\sum_l{\nabla_\phi \log q_\phi(\log P_\theta(X,Z^{(l)})-\log q_\phi(Z^{(l)})} ϕL(ϕ)=L1lϕlogqϕ(logPθ(X,Z(l))logqϕ(Z(l)),若采样过程中 Z ( l ) Z^{(l)} Z(l)过小会导致 log ⁡ q ϕ ( Z ( l ) ) \log q_\phi(Z^{(l)}) logqϕ(Z(l))过大,使得计算不稳定,为了稳定则需要大量采样。

    c. 重参数技巧

    不妨设 Z = g ϕ ( ϵ , X ) Z=g_\phi(\epsilon,X) Z=gϕ(ϵ,X),这里 ϵ ∼ p ( ϵ ) \epsilon \sim p(\epsilon) ϵp(ϵ)同时有 ∣ q ϕ ( Z ∣ X ) d Z ∣ = ∣ p ( ϵ ) d ϵ ∣ |q_\phi(Z|X)dZ|=|p(\epsilon)d\epsilon| qϕ(ZX)dZ=p(ϵ)dϵ,于是我们可以推导
    ∇ ϕ L ( ϕ ) = ∇ ϕ E q ϕ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] = ∇ ϕ ∫ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] q ϕ d Z = ∇ ϕ ∫ [ log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ] p ( ϵ ) d ϵ = E p ( ϵ ) [ ∇ ϕ ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) ] = E p ( ϵ ) [ ∇ Z ( log ⁡ P θ ( X , Z ) − log ⁡ q ϕ ) ∇ ϕ g ϕ ( ϵ , X ) ] \begin{aligned} \nabla_\phi\mathcal{L}(\phi)&=\nabla_\phi E_{q_\phi}[\log P_\theta(X,Z)-\log q_\phi]\\ &=\nabla_\phi\int[\log P_\theta(X,Z)- \log q_\phi]q_\phi dZ\\ &=\nabla_\phi\int[\log P_\theta(X,Z)- \log q_\phi]p(\epsilon) d\epsilon\\ &=E_{p(\epsilon)}[\nabla_\phi(\log P_\theta(X,Z)-\log q_\phi)]\\ &=E_{p(\epsilon)}[\nabla_Z(\log P_\theta(X,Z)-\log q_\phi)\nabla_\phi g_\phi(\epsilon,X)] \end{aligned} ϕL(ϕ)=ϕEqϕ[logPθ(X,Z)logqϕ]=ϕ[logPθ(X,Z)logqϕ]qϕdZ=ϕ[logPθ(X,Z)logqϕ]p(ϵ)dϵ=Ep(ϵ)[ϕ(logPθ(X,Z)logqϕ)]=Ep(ϵ)[Z(logPθ(X,Z)logqϕ)ϕgϕ(ϵ,X)]

    注:VI和EM的一个差异,在EM中 θ \theta θ是固定的, Z Z Z是随机的;但在VI中只有一个随机的 Z Z Z,因此EM可以视为VI的特例。

    参考

    [1] Blei, D. M., Kucukelbir, A., & McAuliffe, J. D. (2017). Variational inference: A review for statisticians. Journal of the American statistical Association, 112(518), 859-877.
    [2] Bishop, C. M., & Nasrabadi, N. M. (2006). Pattern recognition and machine learning (Vol. 4, No. 4, p. 738). New York: springer.
    [3]https://www.bilibili.com/video/BV1DW41167vr?spm_id_from=333.999.0.0

    展开全文
  • 1、变分推断的算法 在推导之前先陈述一下各个变量的含义 X:观测变量,Z:隐变量+参数 根据我们的贝叶斯公式,我们所要求的后验分布为: p(Z∣X)=p(X,Z)p(X) p(Z|X) = \frac {p(X,Z)}{p(X)} p(Z∣X)=p(X)p(X,Z)​ p(Z...

    k1、变分推断的算法

    在推导之前先陈述一下各个变量的含义

    X:观测变量,Z:隐变量+参数

    根据我们的贝叶斯公式,我们所要求的后验分布为:
    p ( Z ∣ X ) = p ( X , Z ) p ( X ) p(Z|X) = \frac {p(X,Z)}{p(X)} p(ZX)=p(X)p(X,Z)

    p ( Z ∣ X ) = p ( X , Z ) ∫ Z p ( X ∣ Z ) p ( Z ) d Z p(Z|X) = \frac {p(X,Z)}{\int_Z p(X|Z)p(Z)dZ} p(ZX)=Zp(XZ)p(Z)dZp(X,Z)

    很多时候 p ( Z ∣ X ) p(Z|X) p(ZX)是很不好求的原因是当Z的维度很大时分母进行积分就会变的很复杂求不出解析解因此我们就需要通过用一个 q ( Z ) q(Z) q(Z)的分布来近似真实的 p ( Z ) p(Z) p(Z)分布,我们可以将上述的式子进行化简,引入 q ( z ) q(z) q(z)

    进行简单的变换我们可以得到
    p ( X ) = p ( X , Z ) p ( Z ∣ X ) p(X) = \frac {p(X,Z)}{p(Z|X)} p(X)=p(ZX)p(X,Z)
    两边同时取对数可以得到:
    l o g P ( X ) = l o g p ( X , Z ) p ( Z ∣ X ) logP(X) = log\frac {p(X,Z)}{p(Z|X)} logP(X)=logp(ZX)p(X,Z)

    = l o g p ( X , Z ) − l o g p ( Z ∣ X ) =log{p(X,Z)}-log{p(Z|X)} =logp(X,Z)logp(ZX)

    = l o g p ( X , Z ) q ( Z ) − l o g p ( Z ∣ X ) q ( Z ) =log\frac {p(X,Z)}{q(Z)}-log\frac {p(Z|X)}{q(Z)} =logq(Z)p(X,Z)logq(Z)p(ZX)

    = l o g p ( X , Z ) − l o g q ( Z ) − l o g p ( Z ∣ X ) q ( Z ) =log{p(X,Z)}-log{q(Z)}-log\frac {p(Z|X)}{q(Z)} =logp(X,Z)logq(Z)logq(Z)p(ZX)

    最后一行的 q ( X ) q(X) q(X)是我们需要用来拟合 p ( X ) p(X) p(X)的一个分布

    1.1公式化简

    我们对上述公式同时左右两边同时求q(Z)期望可以得到

    左边:

    对于左边的式子 l o g p ( X ) logp(X) logp(X)求q(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 \int_Z q(Z)dZ=1 Zq(Z)dZ=1故最终的 E ( l o g p ( x ) ) = l o g p ( X ) E(logp(x))=logp(X) 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 l o g p ( X , Z ) q ( Z ) d Z − ∫ Z l o g q ( Z ) q ( Z ) d Z ⏟ E L B O + ∫ Z − l o g p ( Z ∣ X ) q ( Z ) q ( Z ) d Z ⏟ K L log{p(X,Z)}-log{q(Z)}-log\frac {p(Z|X)}{q(Z)}=\underbrace {\int_Z log{p(X,Z)}q(Z)dZ-\int_Z logq(Z)q(Z)dZ}_{ELBO}+\underbrace{\int_Z -log\frac {p(Z|X)}{q(Z)}q(Z)dZ}_{KL} logp(X,Z)logq(Z)logq(Z)p(ZX)=ELBO Zlogp(X,Z)q(Z)dZZlogq(Z)q(Z)dZ+KL Zlogq(Z)p(ZX)q(Z)dZ

    = ∫ Z l o g p ( X , Z ) q ( Z ) q ( Z ) d Z ⏟ E L B O + ∫ Z − l o g p ( Z ∣ X ) q ( Z ) q ( Z ) d Z ⏟ K L =\underbrace{\int_Z log\frac {p(X,Z)}{q(Z)}q(Z)dZ}_{ELBO}+\underbrace{\int_Z -log\frac {p(Z|X)}{q(Z)}q(Z)dZ}_{KL} =ELBO Zlogq(Z)p(X,Z)q(Z)dZ+KL Zlogq(Z)p(ZX)q(Z)dZ

    最终化简的形式如下:
    l o g p ( X ) = ∫ Z l o g p ( X , Z ) q ( Z ) q ( Z ) d Z ⏟ E L B O + ∫ Z − l o g p ( Z ∣ X ) q ( Z ) q ( Z ) d Z ⏟ K L logp(X)=\underbrace{\int_Z log\frac {p(X,Z)}{q(Z)}q(Z)dZ}_{ELBO}+\underbrace{\int_Z -log\frac {p(Z|X)}{q(Z)}q(Z)dZ}_{KL} logp(X=ELBO Zlogq(Z)p(X,Z)q(Z)dZ+KL Zlogq(Z)p(ZX)q(Z)dZ

    其中 E L B O ELBO ELBO也是被记为 L ( q ) L(q) L(q)

    而KL散度可以衡量两个分布 p p p q q q之间的距离

    在这里插入图片描述

    此公式的含义也可以由上图所表示出来

    由于我们求不出 p ( Z ∣ X ) p(Z|X) p(ZX),我们的目的是寻找一个 q ( Z ) q(Z) q(Z)使得 p ( Z ∣ X ) p(Z|X) p(ZX)近似 q ( Z ) q(Z) q(Z)也就是 K L ( q ∣ ∣ p ( z ∣ x ) ) KL(q||p(z|x)) KL(qp(zx))越小越好(p和q越相近越好,其中为什么是近似 p ( z ∣ x ) p(z|x) p(zx)而不是 p ( z ) p(z) p(z)的原因是 p ( z ) p(z) p(z)很多时候并不能求出来具体的值,另一方面就是我们可以利用x的值来求后验概率缩小概率的范围)。并且,$p(X) 是 个 定 值 ( 原 因 是 P ( X ) 代 表 真 实 的 分 布 , 真 实 分 布 是 存 在 的 也 是 一 个 具 体 的 值 , 只 不 过 是 我 们 不 知 道 它 具 体 的 值 是 多 少 , 因 此 对 应 的 X 的 概 率 是 一 个 具 体 的 值 ) , 那 么 我 们 的 目 标 变 成 了 是个定值(原因是P(X)代表真实的分布,真实分布是存在的也是一个具体的值,只不过是我们不知道它具体的值是多少,因此对应的X的概率是一个具体的值),那么我们的目标变成了 P(X)X argmax_{q(z)}L(q)$。那么,我们理一下思路,

    我们想要求得一个 q ( Z ) ≈ p ( Z ∣ X ) q(Z)≈p(Z|X) q(Z)p(ZX)。也就是
    q ( Z ) = a r g m a x q ( z ) L ( q ) q(Z)=argmax_{q(z)}L(q) q(Z)=argmaxq(z)L(q)

    1.2模型求解(经典平均场理论)

    那么我们如何来求解这个问题呢?我们使用到统计物理中的一种方法,就是平均场理论 (mean field theory)。也就是假设变分后验分式是一种完全可分解的分布:

    q ( z ) = ∏ i = 1 M q i ( z i ) q(z)=\prod_{i=1}^Mq_i(z_i) q(z)=i=1Mqi(zi)
    也就是认为每个 z i z_i zi都是相互独立的(但是这种方法的条件性很强,造成的问题就是对于一些比较复杂的问题拟合的 p ( z ) p(z) p(z)会有比较大的bias,好处就是将高维的参数转化成了低纬度,极大简化计算)我们将 q ( z ) q(z) q(z)带入到 L ( q ) L(q) L(q)

    通过平均场理论我们就把原先高维的隐变量转化成低维的独立的隐变量相乘,极大简化的积分的复杂度
    L ( q ) = ∫ Z l o g p ( X , Z ) q ( Z ) d Z − ∫ Z l o g q ( Z ) q ( Z ) d Z L(q)=\int_Z log{p(X,Z)}q(Z)dZ-\int_Z logq(Z)q(Z)dZ L(q)=Zlogp(X,Z)q(Z)dZZlogq(Z)q(Z)dZ

    = ∫ 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 =\int_Z log{p(X,Z)}\prod_{i=1}^Mq_i(z_i)dZ-\int_Z \sum _{i=1}^Mlogq(Z)\prod_{i=1}^Mq_i(z_i)dZ =Zlogp(X,Z)i=1Mqi(zi)dZZi=1Mlogq(Z)i=1Mqi(zi)dZ

    然后我们将上述式子分成两个部分

    part 1:

    ∫ Z l o g p ( X , Z ) q ( Z ) d Z = ∫ Z l o g p ( X , Z ) ∏ i = 1 M q i ( z i ) d Z \int_Z log{p(X,Z)}q(Z)dZ=\int_Z log{p(X,Z)}\prod_{i=1}^Mq_i(z_i)dZ Zlogp(X,Z)q(Z)dZ=Zlogp(X,Z)i=1Mqi(zi)dZ

    我们将整个集合的Z拆解成一个个z进行积分
    = ∫ 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 =\int_{z_1}\int_{z_2}...\int_{z_M}q_i(z_i)log(p(X,Z))dz_1dz_2...dz_M =z1z2...zMqi(zi)log(p(X,Z))dz1dz2...dzM
    关键的地方来了,我们这里除了第 Z j Z_j Zj个隐变量讲其他项的都积分掉,这样就可以留下含有 Z j Z_j Zj项的式子,这样我们后面就可以通过CAVI(坐标上升法)来对每个参数进行迭代更新,
    = ∫ 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 =\int_{z_j}q_j(z_j)[\int_{z_1}\int_{z_2}...\int_{z_M}q_i(z_i)log(p(X,Z))dz_1dz_2...dz_M]d_j =zjqj(zj)[z1z2...zMqi(zi)log(p(X,Z))dz1dz2...dzM]dj

    = ∫ z j q j ( z j ) E ∏ i ≠ j M q i ( z i ) [ l o g p ( X , Z ) ] d z j =\int_{z_j}q_j(z_j)E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(X,Z)]dz_j =zjqj(zj)Ei=jMqi(zi)[logp(X,Z)]dzj

    part 2:

    ∫ 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}^Mlogq(Z)\prod_{i=1}^Mq_i(z_i)dZ=\int_Z \prod_{i=1}^Mq_i(z_i)dZ[logq_1(z_1)+logq_2(z_2)+...+logq_M(z_M)]dZ Zi=1Mlogq(Z)i=1Mqi(zi)dZ=Zi=1Mqi(zi)dZ[logq1(z1)+logq2(z2)+...+logqM(zM)]dZ

    我们如何计算呢?现在我们通过简单的式子来化简出通向公式,现在设定 M = 2 M=2 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 \int_{z_1}\int_{z_2}[logq_1(z_1)+logq_2(z_2)]q_1(z_1)q_2(z_2)dz_1dz_2=\int_{z_1}\int_{z_2}q_1(z_1)q_2(z_2)logq_1(z_1)dz_1dz_2+\int_{z_1}\int_{z_2}q_1(z_1)q_2(z_2)logq_2(z_2)dz_1dz_2 z1z2[logq1(z1)+logq2(z2)]q1(z1)q2(z2)dz1dz2=z1z2q1(z1)q2(z2)logq1(z1)dz1dz2+z1z2q1(z1)q2(z2)logq2(z2)dz1dz2

    = ∫ z 1 q 1 ( z 1 ) l o g q 1 ( z 1 ) ∫ z 2 q 2 ( z 2 ) d z 2 ⏟ 1 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 ⏟ 1 d z 2 =\int_{z_1}q_1(z_1)logq_1(z_1)\underbrace{\int_{z_2}q_2(z_2)dz_2}_1dz_1+\int_{z_2}q_2(z_2)logq_2(z_2)\underbrace{\int_{z_1}q_1(z_1)dz_1}_1dz_2 =z1q1(z1)logq1(z1)1 z2q2(z2)dz2dz1+z2q2(z2)logq2(z2)1 z1q1(z1)dz1dz2

    = ∑ i = 1 2 ∫ z i q i ( z i ) l o g q i ( z i ) d z i =\sum_{i=1}^2\int_{z_i}q_i(z_i)logq_i(z_i)dz_i =i=12ziqi(zi)logqi(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 i ( z i ) d z i \int_Z \sum _{i=1}^Mlogq(Z)\prod_{i=1}^Mq_i(z_i)dZ=\sum_{i=1}^M\int_{z_i}q_i(z_i)logq_i(z_i)dz_i Zi=1Mlogq(Z)i=1Mqi(zi)dZ=i=1Mziqi(zi)logqi(zi)dzi
    因为我们仅仅只关注第 j 项因为第j项是我们需要进行迭代的一项,所以除了j项其余项都为常数
    p a r t 2 = ∫ z j q i ( z i ) l o g q i ( z i ) d z j + C part2=\int_{z_j}q_i(z_i)logq_i(z_i)dz_j+C part2=zjqi(zi)logqi(zi)dzj+C

    为了近一步计算我们将上述 p a r t 1 part 1 part1式子 E ∏ i ≠ j M q i ( z i ) [ l o g p ( X , Z ) ] E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(X,Z)] Ei=jMqi(zi)[logp(X,Z)]表示为
    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) Ei=jMqi(zi)[logp(X,Z)]=logp^(X,zj)
    为什么要这样做呢,目的是为了可以构造出 L ( q ) = − K L L(q)=-KL L(q)=KL后面的式子,求出我们每个 Z j Z_j Zj分布需要逼近的真实的分布,我们可以对上述式子求逆得到伪真实分布 p ^ ( X , z j ) \hat p(X,z_j) p^(X,zj)为什么可以叫做伪真实分布因为它们之间只是相差了一个常数项
    p ^ ( X , z j ) = e x p E ∏ i ≠ j M q i ( z i ) [ l o g p ( X , Z ) ] d z j \hat p(X,z_j)=exp^{E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(X,Z)]dz_j} p^(X,zj)=expEi=jMqi(zi)[logp(X,Z)]dzj
    那么 p a r t 1 part 1 part1的式子就可以写做
    = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) d z j =\int_{z_j}q_j(z_j)log\hat p(X,z_j)dz_j =zjqj(zj)logp^(X,zj)dzj
    这样我们就可以求得最终的 L ( q ) L(q) L(q)的表达式
    L ( q j ) = p a r t 1 − p a r t 2 = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) d z j − ∫ z j q i ( z j ) l o g q i ( z j ) d z j + C L(q_j)=part1-part2=\int_{z_j}q_j(z_j)log\hat p(X,z_j)dz_j-\int_{z_j}q_i(z_j)logq_i(z_j)dz_j+C L(qj)=part1part2=zjqj(zj)logp^(X,zj)dzjzjqi(zj)logqi(zj)dzj+C

    = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) q i ( z j ) d z j + C = − K L =\int_{z_j}q_j(z_j)log\frac{\hat p(X,z_j)}{q_i(z_j)}dz_j+C=-KL =zjqj(zj)logqi(zj)p^(X,zj)dzj+C=KL

    = ∫ z j q j ( z j ) l o g p ^ ( X , z j ) d z j + C =\int_{z_j}q_j(z_j)log\hat p(X,z_j)dz_j+C =zjqj(zj)logp^(X,zj)dzj+C

    因此最后我们要求解 a r g m a x q ( z ) L ( q j ) argmax_{q(z)}L(q_j) argmaxq(z)L(qj)就是求解等价于 a r g m i n q ( z ) K L ( q j ∣ ∣ p ^ ( x , z j ) ) argmin_{q(z)}KL(q_j||\hat p(x,z_j)) argminq(z)KL(qjp^(x,zj)) ,有kl散度的定义我们可以知道只有当 q j q_j qj等于 p ^ ( x , z j ) \hat p(x,z_j) p^(x,zj)时可以达到最优解,对此我们就可以得到每个隐变量的迭代更新的式子
    q i ( z i ) = e x p 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} qi(zi)=expEi=jMqi(zi)[logp^(X,Z)]dzj

    l o g q i ( z i ) = E ∏ i ≠ j M q i ( z i ) [ l o g p ^ ( X , Z ) ] d z j logq_i(z_i) =E_{\prod_{i\neq j}^Mq_i(z_i)}[log\hat p(X,Z)]dz_j logqi(zi)=Ei=jMqi(zi)[logp^(X,Z)]dzj

    下面以一个业务例子来实践这个变分推断的方法。

    1.3一个业务的例子

    首先,于是我们根据业务知识,知道用户产生时长增量记录的过程为:

    假设在我们的app中总用户数为k,并且在app的数据库中记录了用户每日使用时长的增长量,假设我们没有任何关于用户的唯一id,能观测到的只有增量值: [-6.04231708, -1.64784446, …, 1.63898137, -4.29063685, -0.87892713] ,我们需要做的是为每个用户赋予一个用户id,并且在未来时刻给定某个用户使用时长增量,将这个时长增量归属到其用户id上,如此便可以建立每个用户的使用时长记录,以便在商业上分析用户行为。

    • 某个用户 c k c_k ck登录系统
    • 用户产生一条使用时长增量记录 x i x_i xi

    然后,我们将这个过程建模为数学问题:假设登录到系统上的用户为 k ′ k' k的真实分布是均匀分布的,并且概率都为 1 k \frac 1k k1并且用户的 k ′ k' k的增量为一个随机变量,其符合均值为 u k u_k uk标准差为1的分布特别注意的是 σ \sigma σ是一个人工设定的超参数,为领域专家根据先验知识调整的。数学化的表述如下:

    μ k \mu_k μk代表的是我的观测数据 x i x_i xi所属的分布的均值
    μ k ∼ N ( 0 , σ 2 )         k = 1 , . . . . K \mu_k \sim N(0,\sigma^2)\ \ \ \ \ \ \ k=1,....K μkN(0,σ2)       k=1,....K
    我们可以写出 u k u_k uk的概率密度函数
    p ( u k ) = 1 2 π σ 2 e − u k 2 2 σ 2 p(u_k)=\frac {1}{\sqrt {2\pi\sigma^2}}e^{-\frac {u_k^2}{2\sigma^2}} p(uk)=2πσ2 1e2σ2uk2
    c i c_i ci服从类别分布
    c i ∼ C a t e g o r i c a l ( 1 k , 1 k , . . . 1 k )          i = 1 , . . . . . , n c_i\sim Categorical(\frac 1k,\frac 1k,...\frac 1k)\ \ \ \ \ \ \ \ i=1,.....,n ciCategorical(k1,k1,...k1)        i=1,.....,n
    p ( c i ) p(c_i) p(ci)的概率密度函数如下:
    p ( c i ) = 1 k p(c_i) = \frac {1}{k} p(ci)=k1
    c i c_i ci代表的是第i条观测数据 x i x_i xi是来自于哪个分布,例如:当K=6时 c i = [ 0 , 0 , 1 , 0 , 0 , 0 ] ci=[0,0,1,0,0,0] ci=[0,0,1,0,0,0]的向量,代表第i条数据 x i x_i xi属于第3个分布
    x i ∣ c i ∼ N ( c i , μ , 1 )          i = 1 , . . . . , n x_i|c_i \sim N(c_i,\mu,1)\ \ \ \ \ \ \ \ i=1,....,n xiciN(ci,μ,1)        i=1,....,n

    值得注意的是由于我们的假设 p ( μ k ) p(\mu_k) p(μk) p ( c i ) p(c_i) p(ci)是相互独立的先验概率,后面我们需要通过一个我们定义的 q ( z ) q(z) q(z)分布去拟合这些真实的分布 p ( z ∣ x ) p(z|x) p(zx)注意这里是给定x条件的z的分布,这样的目的是我们可以把原先的先验分布转化成后验分布,那么去拟合后验分布有什么好处呢,就举一个简单的例子,对于判断给定的变量x是来自哪个分布的 u k u_k uk如果按照先验分布去拟合,最后得到的结果就是对于每个变量x来自于每个 u k u_k uk的概率都是一样的,这显然是毫无意义的,我们的目的就是为了让模型可以帮助我们把变量x服从哪个分布来区分出来,那我们就需要依靠现有的数据集X来作为我的条件求解z的后验分布,不断更新z的值从而能够使模型能够区分给定x是来自于哪个分布

    根据上述我们设定的这些数据的真实分布我们可以利用这些分布来生成一些伪造的真实数据,我们可以用python代码写出整个数据产生的过程:

    def gen_data(sigma, k, n):
        #获取u
        u = np.random.normal(0, sigma, k)
        x = []
        c = []
        for i in range(n):
            ci = random.choice(range(k))
            c.append(ci)
            u = u_k[ci]
            x.append(np.random.normal(u, 1))
        return x, u_k, c
    
    x, u, c = gen_data(sigma,k,n)
    

    我们使用这个函数产生 ( σ \sigma σ=10, k=2)实验室数据,采样得到的

    x:[3.91063798840766, 17.707494246717758, 5.1750776782449845, 16.97945369198913, 5.386555860818202, 16.627103391787628, 5.043095807216062, 17.35238536362031, 18.639211648953882, 15.400741385911331]

    u u u:[16.93029991 4.53146332]
    x所属分布class:[1, 0, 1, 0, 1, 0, 1, 0, 0, 0](因为这里k为2故列表的范围只能是0和1,分别代表两个分布,例如class[0]代表第一个数据x[0]服从分布1)

    以下的通用公式都会通过这个例子来进行解释

    数据x分布如下图:

    在这里插入图片描述

    于是我们的目标是根据数据x,去计算得出u,然后未来有数据x′到来时查看数据与 u i ∈ k u_{i\in k} uik的距离,选择距离最近的$ i=argmin_{i} dis(u_{i \in k}, x’)$赋予该条数据作为其用户id即可。

    接下来我们来求我们需要求的隐变量 u k , c i u_k,c_i uk,ci所服从的分布对应的参数的值,这样当我们求解得出这些分布的参数后,我们就可以通过这些分布参数来求解这些隐变量最有可能的取值。从而推测出这些隐变量的值,对于上述隐变量我们需要求[ φ 1 , 0 , . . . , φ 10 , 0 , φ 1 , 1 , . . . , φ 10 , 1 , m 0 , s 0 , m 1 , s 1 \varphi_{1,0},...,\varphi_{10,0},\varphi_{1,1},...,\varphi_{10,1},m_0,s_0,m_1,s_1 φ1,0,...,φ10,0,φ1,1,...,φ10,1,m0,s0,m1,s1]总共24个参数

    为了求解第三节中的问题,根据平均场变分推断的思路,我们先假设隐变量 u k u_k uk的分布满足均值为 m k m_k mk方差为 s k s_k sk而隐变量 c i c_i ci由参数 φ i \varphi_i φi决定, 参数也是k维向量,每一维度指定了 c i c_i ci对应维度为1的概率,即:
    q ( c i = k ; φ i ) = φ i k q(c_i=k;\varphi_i)=\varphi_{ik} q(ci=k;φi)=φik

    φ i k \varphi_{ik} φik代表的是属于该分布的概率,对应的因为我的c是满足分类分布 c i k c_{ik} cik的取值范围只能是0或1, , q ( c i = 2 ; φ i ) = φ i 2 , q ( c i = 1 ; φ i ) = φ i 1 ,q(c_i=2;\varphi_i)=\varphi_{i2},q(c_i=1;\varphi_i)=\varphi_{i1} q(ci=2;φi)=φi2q(ci=1;φi)=φi1

    先求解 q ( c i ; φ i ) q(c_i;\varphi_i) q(ci;φi)

    有上述证明的 l o g q j ∗ ( z j ) ∝ E ∏ i ≠ j M q i ( z i ) [ l o g p ( z , x ) ] logq^*_j(z_j) \propto E_{\prod_{i\neq j}^Mq_i(z_i)}[logp(z,x)] logqj(zj)Ei=jMqi(zi)[logp(z,x)](只有通过使用平均随机场时才可以用这个公式,

    这里我们回到本例例子,求 q ∗ ( c i ; φ i ) q^*(c_i;\varphi_i) q(ci;φi),带入公式得
    l o g q ∗ ( c i ; φ i ) ∝ E ∏ j ≠ i M q j ( z j ) [ l o g p ( c , u , x ) ] logq^*(c_i;\varphi_i)\propto E_{\prod_{j\neq i}^Mq_j(z_j)}[log p(c,u,x)] logq(ci;φi)Ej=iMqj(zj)[logp(c,u,x)]
    这里我们的 q j ( z j ) q_j(z_j) qj(zj)代表 q 1 ( c 1 ) , q 2 ( c 2 ) , . . . . q 10 ( c 10 ) , q 11 ( u 1 ) q 12 ( u 2 ) q_1(c_1),q_2(c_2),....q_{10}(c_{10}),q_{11}(u_1)q_{12}(u_2) q1(c1),q2(c2),....q10(c10),q11(u1)q12(u2)共计12个z
    E ∏ j ≠ i M q j ( z j ) [ l o g p ( c , u , x ) ] = E q − c i [ l o g [ p ( μ ) p ( c ) p ( x ∣ μ , c ) ] ] E_{\prod_{j\neq i}^Mq_j(z_j)}[log p(c,u,x)] = E_{q-c_i}[log[p(\mu)p(c)p(x|\mu,c)]] Ej=iMqj(zj)[logp(c,u,x)]=Eqci[log[p(μ)p(c)p(xμ,c)]]

    = E q − c i [ l o g [ p ( μ ) p ( c i ) p ( c − i ) p ( x i ∣ μ , c i ) p ( x − i ∣ μ , c − i ) ] ] =E_{q-c_i}[log[p(\mu)p(c_i)p(c_{-i})p(x_i|\mu,c_i)p(x_{-i}|\mu,c_{-i})]] =Eqci[log[p(μ)p(ci)p(ci)p(xiμ,ci)p(xiμ,ci)]]

    = E q − c i [ l o g p ( x i ∣ μ , c i ) ] + E q − c i [ l o g p ( μ ) ] + E q − c i [ l o g p ( c i ) ] + E q − c i [ l o g p ( c − i ) p ( x − i ∣ μ , c − i ) ] =E_{q-c_i}[logp(x_i|\mu,c_i)]+E_{q-c_i}[logp(\mu)]+E_{q-c_i}[logp(c_i)]+E_{q-c_i}[logp(c_{-i})p(x_{-i}|\mu,c_{-i})] =Eqci[logp(xiμ,ci)]+Eqci[logp(μ)]+Eqci[logp(ci)]+Eqci[logp(ci)p(xiμ,ci)]

    = E q − c i [ l o g p ( x i ∣ μ , c i ) ] + E q − c i [ l o g p ( μ ) ] + l o g p ( c i ) + E q − c i [ l o g p ( c − i ) p ( x − i ∣ μ , c − i ) ] =E_{q-c_i}[logp(x_i|\mu,c_i)]+E_{q-c_i}[logp(\mu)]+logp(c_i)+E_{q-c_i}[logp(c_{-i})p(x_{-i}|\mu,c_{-i})] =Eqci[logp(xiμ,ci)]+Eqci[logp(μ)]+logp(ci)+Eqci[logp(ci)p(xiμ,ci)]

    从上述推导中,仅仅只有 E q − c i [ l o g p ( x i ∣ μ , c i ) ] E_{q-c_i}[logp(x_i|\mu,c_i)] Eqci[logp(xiμ,ci)] l o g p ( c i ) logp(c_i) logp(ci)是依赖于 c i c_i ci的项,其余项都可以提出为常数项,因此我们就可以更新我们的正比公式
    l o g q ∗ ( c i ; φ i ) ∝ E q − c i [ l o g p ( x i ∣ μ , c i ) ] + l o g p ( c i ) logq^*(c_i;\varphi_i)\propto E_{q-c_i}[logp(x_i|\mu,c_i)]+logp(c_i) logq(ci;φi)Eqci[logp(xiμ,ci)]+logp(ci)
    通过先验,我们可以得到
    l o g p ( c i ) = − l o g K logp(c_i) = -logK logp(ci)=logK
    又因为有
    p ( x i ∣ μ , c i ) = ∏ k = 1 K p ( x i ∣ μ k ) c i k p(x_i|\mu,c_i) = \prod_{k=1}^Kp(x_i|\mu_k)^{c_{ik}} p(xiμ,ci)=k=1Kp(xiμk)cik

    w h e r e               p ( x i ∣ u k ) = 1 2 π e − ( x i − u k ) 2 2 where\ \ \ \ \ \ \ \ \ \ \ \ \ p(x_i|u_k)=\frac {1}{\sqrt{2\pi}}e^{-\frac {{(x_i-u_k)}^2}{2}} where             p(xiuk)=2π 1e2(xiuk)2

    上述公式是将给定所有的 μ \mu μ的条件下拆解成每个 μ k \mu_k μk乘积的形式, c i k c_{ik} cik的取值为0和1代表选择的意思

    针对上述例子的第一个变量 x 1 x_1 x1此公式又可以写成
    p ( x 1 ∣ μ , c 1 ) = p ( x 1 ∣ μ 1 ) c 11 p ( x 1 ∣ μ 2 ) c 12 p(x_1|\mu,c_1) = p(x_1|\mu_1)^{c_{11}}p(x_1|\mu_2)^{c_{12}} p(x1μ,c1)=p(x1μ1)c11p(x1μ2)c12
    对于 E q − c i [ l o g p ( x i ∣ μ , c i ) ] E_{q-c_i}[logp(x_i|\mu,c_i)] Eqci[logp(xiμ,ci)]我们有
    E q − c i [ l o g p ( x i ∣ μ , c i ) ] = ∑ k = 1 K c i k E q − c i [ p ( x i ∣ μ k ) ] E_{q-c_i}[logp(x_i|\mu,c_i)] = \sum_{k=1}^Kc_{ik}E_{q-c_i}[p(x_i|\mu_k)] Eqci[logp(xiμ,ci)]=k=1KcikEqci[p(xiμk)]
    因为 E q − c i [ p ( x i ∣ μ k ) ] E_{q-c_i}[p(x_i|\mu_k)] Eqci[p(xiμk)]中只含有 u k u_k uk项因此除去 u k u_k uk项的其余项的期望为常数,得到以下的式子
    E q − c i [ l o g p ( x i ∣ μ , c i ) ] = ∑ k = 1 K c i k E q − c i [ p ( x i ∣ μ k ) ] = ∑ k = 1 K c i k E q ( c 1 , c 2... c i − 1 , c i + 1 , . . . c n , u 1 , . . . u k − 1 , u k + 1 , . . . u K ) [ p ( x i ∣ μ k ) ] + ∑ k = 1 K c i k E q ( u k ; m k , s k 2 ) [ l o g p ( x i ∣ μ k ) ] E_{q-c_i}[logp(x_i|\mu,c_i)] =\sum_{k=1}^Kc_{ik}E_{q-c_i}[p(x_i|\mu_k)]=\sum_{k=1}^Kc_{ik}E_{q(c1,c2...c_{i-1},c_{i+1},...c_{n},u_1,...u_{k-1},u_{k+1},...u_K)}[p(x_i|\mu_k)]+ \sum_{k=1}^Kc_{ik}E_{q(u_k;m_k,s_k^2)}[logp(x_i|\mu_k)] Eqci[logp(xiμ,ci)]=k=1KcikEqci[p(xiμk)]=k=1KcikEq(c1,c2...ci1,ci+1,...cn,u1,...uk1,uk+1,...uK)[p(xiμk)]+k=1KcikEq(uk;