变分推断中的ELBO(证据下界)

本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com 。
内容可能有不到之处,欢迎交流

未经本人允许禁止转载

变分推断简介

变分推理的目标是近似潜在变量(latent variables)在观测变量(observed variables)下的条件概率。解决该问题,需要使用优化方法。在变分推断中,需要使用到的一个重要理论,是平均场理论,读者可以参考我的另外一篇博客:
https://qianyang-hfut.blog.csdn.net/article/details/86644192

变分推断等价于最小化KL散度。
在这里插入图片描述
其中, q ( z ) q(z) q(z)为近似分布, p ( z ∣ x ) p(z|x) p(zx)所要求的的后验概率分布。这里之所以对 p ( z ∣ x ) p(z|x) p(zx)进行近似,是因为其很难计算,在下一小节将对其进行讨论

KL散度可以表示为:
在这里插入图片描述
其中, Q ( x ) Q(x) Q(x)为要近似的分布, P ( x ∣ D ) P(x|D) P(xD)为参数 x x x的条件概率分布。

这个公式可以继续化简,读者可以参考我的另外一篇博客:
https://qianyang-hfut.blog.csdn.net/article/details/86644192
或者参考:A Tutorial on Variational Bayesian Inference

化简后的结果为:
在这里插入图片描述
其中, l n P ( D ) lnP(D) lnP(D)为log似然, L L L为log似然的下界。使得KL散度最小,相当于最大化 L L L。如下为三者之间的关系:
在这里插入图片描述

ELBO

ELBO,全称为 Evidence Lower Bound,即证据下界。这里的证据指数据或可观测变量的概率密度。

假设 x = x 1 : n x=x_{1:n} x=x1:n表示一系列可观测数据集, z = z 1 : m z=z_{1:m} z=z1:m为一系列隐变量(latent variables)。则可用 p ( z , x ) p(z,x) p(z,x)表示联合概率 p ( z ∣ x ) p(z|x) p(zx)条件概率 p ( x ) p(x) p(x)证据

那么,贝叶斯推理需要求解的就是条件概率,即:
在这里插入图片描述
然而,对很多模型而言,计算 p ( x ) p(x) p(x)是很困难的,即:
在这里插入图片描述
因此,无法直接计算 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)必须优化:
在这里插入图片描述
其中,KL散度可以表示为:
在这里插入图片描述
由于KL散度大于0,进而我们可以求得:
l o g p ( x ) ≥ E [ l o g p ( z ∣ x ) ] − E [ l o g q ( z ) ] logp(x)\geq E\left [ logp(z|x) \right ] - E\left [ logq(z) \right ] logp(x)E[logp(zx)]E[logq(z)]
这里终于知道为什么叫证据下界了吧,即公式的左边的证据的对数形式,右边为其下界。因此,我们有:
在这里插入图片描述
在使用变分推断时,首先需要计算的便是ELBO。从上面的公式可以看到,要计算ELBO,需要写出联合概率密度 p ( z , x ) p(z,x) p(z,x) q ( z ) q(z) q(z)

在写出这两个式子之后,带入ELBO公式,分别求对数。之后,分别求期望。在期望计算完之后,针对具体的变分参数,求偏导,并令偏导为0,即可得到变分参数的更新公式。

在实际公式推导过程中,关键点就在于如何求期望。其计算期望往往需要用到指数分布族的性质,即可以将期望计算转化成求导计算。关于指数分布族的介绍读者可以参考我的另外一篇博客:
https://qianyang-hfut.blog.csdn.net/article/details/87247363

案例

高斯混合模型

第一个案例为,高斯混合模型。详细的介绍可参考我的另外一篇博客,该博客也提供了Python代码:
https://qianyang-hfut.blog.csdn.net/article/details/86694325
其模型的生成过程为:
在这里插入图片描述

LDA

在LDA模型中,需要计算下界:
在这里插入图片描述
其中,
在这里插入图片描述
关于联合概率分布可以表示为:
在这里插入图片描述
基于平均场原理:
在这里插入图片描述
写出这两个式子之后,可以求其期望。这个中间步骤还是很繁琐的。最后,可以得到变分参数的更新公式:
在这里插入图片描述

参考文献

[1] Blei D M, Kucukelbir A, McAuliffe J D. Variational inference: A review for statisticians[J]. Journal of the American Statistical Association, 2017, 112(518): 859-877.
[2]Kurihara K, Welling M, Teh Y W. Collapsed Variational Dirichlet Process Mixture Models[C]//IJCAI. 2007, 7: 2796-2801.

<think>好的,用户想了解变分推断在机器学习中的应用实例和实现方式。首先,我需要回顾一下变分推断的基本概念,确保理解正确。变分推断是一种近似推断方法,通过优化变分分布来逼近真实的后验分布,常用于处理复杂概率模型中的计算难题。 接下来,用户提到的应用场景。根据之前的引用[1]和[2],变分推断在深度生成模型、高斯混合模型、主题模型等方面有应用。需要具体举例,比如变分自编码器(VAE)是典型的应用实例,这里需要解释VAE的基本结构,如何利用变分推断进行训练。 然后是实现方式。通常变分推断的实现步骤包括选择变分分布族、定义ELBO证据下界)、使用梯度下降优化参数。可能需要提到变分推断与EM算法的关系,以及随机梯度下降的应用。此外,现代框架如Pyro或TensorFlow Probability的使用也是实现的一部分,可以引用代码示例。 用户可能对具体算法细节感兴趣,比如如何选择变分族,或者如何处理大规模数据。引用[2]提到扩展到更复杂的模型和提高计算效率,这部分可以结合应用实例中的深度生成模型和分布式计算来展开。 需要注意用户之前的引用中有提到变分推断的优化方法,如自适应变分族设计,这些可以作为实现中的优化策略。同时,理论部分如ELBO的推导可能需要简要说明,但用户主要关注应用和实现,所以保持简洁。 还需要检查是否有遗漏的应用实例,比如在贝叶斯神经网络中的应用,或者推荐系统中的变分推断方法。引用[1]中的变分推断的深度学习化可能涉及这些方面。 最后,确保回答结构清晰,分点列出应用实例和实现步骤,并附上代码示例和相关问题。问题部分需要生成与变分推断应用和实现相关的问题,如优化方法、与其他技术的结合等。</think>以下从应用场景和实现方法两个维度系统解析变分推断在机器学习中的具体应用: ### 一、应用场景 1. **深度生成模型** - 变分自编码器(VAE)通过变分推断学习潜在变量分布,实现数据生成与特征提取。编码器输出变分分布$q_\phi(z|x)$,解码器重构数据$p_\theta(x|z)$,目标函数为: $$ \mathcal{L}(\theta,\phi) = \mathbb{E}_{q_\phi}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x)||p(z)) $$ - 在图像生成领域实现逼真的图片合成[^1] 2. **概率聚类** - 高斯混合模型(GMM)变分推断实现: ```python class VariationalGMM: def __init__(self, n_components): self.alpha = np.ones(n_components) # 狄利克雷先验 self.mu = ... # 高斯分布参数初始化 def fit(self, X): while not converged: # E步更新变分参数 # M步更新模型参数 pass ``` - 可自动确定最优聚类数量[^2] 3. **主题模型** - 潜在狄利克雷分配(LDA)采用变分EM算法,处理文本数据的主题发现: $$ q(\theta,z|\gamma,\phi) = q(\theta|\gamma)\prod_{n} q(z_n|\phi_n) $$ - 在新闻分类、用户兴趣挖掘中广泛应用 ### 二、实现方法 1. **核心算法步骤** - 选择变分分布族:平均场近似/结构化变分 - 构造证据下界(ELBO): $$ \text{ELBO} = \mathbb{E}_q[\log p(x,z)] - \mathbb{E}_q[\log q(z)] $$ - 使用梯度上升法优化变分参数: ```python def elbo(params): mu, sigma = params kl = 0.5 * (tf.reduce_sum(sigma) + tf.reduce_sum(mu**2) - tf.math.log(sigma)) return likelihood - kl tfp.vi.fit_surrogate_posterior(elbo, optimizer=tf.optimizers.Adam(0.1)) ``` 2. **现代实现框架** - Pyro的概率编程实现: ```python def model(data): theta = pyro.sample("theta", dist.Normal(0,1)) with pyro.plate("data", len(data)): return pyro.sample("obs", dist.Bernoulli(theta), obs=data) guide = AutoDiagonalNormal(model) svi = SVI(model, guide, Adam({"lr": 0.01}), Trace_ELBO()) ``` 3. **性能优化策略** - 使用重参数化技巧降低方差 - 混合推断方法:变分推断+MCMC - 分布式变分推断:数据并行+参数服务器架构
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值