变分推理ELBO详解

本文介绍了先验概率和后验概率的基本概念,重点阐述了如何通过ELBO(证据下界)近似后验概率,包括利用贝叶斯定理和KL散度计算。变分推理的核心是通过参数化的概率函数逼近真实后验,以处理复杂模型中的隐变量问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一. 基础知识

1. 先验概率&后验概率

二. ELBO详解

1. 求取后验概率的概率论基本方法(ELBO出现的原因)

通过贝叶斯定理求后验概率

求联合概率p(x,z)替代后验概率

二. 通过ELMO近似后验概率

1. 设一个z的先验概率分布函数来近似后验概率

 2.利用KL散度计算所设概率函数和后验概率的相似度

 3. 计算ELBO 

三. 结论


一. 基础知识

1. 先验概率&后验概率

x的先验概率分布:已知样本x的真实分布概率。可以理解为观测到的图片样本。

后验概率分布: 在真实样本概率分布的条件下的隐变量z的概率分布。可以理解为所观测到图片的类别等无法直接观测获得的隐藏变量。

二. ELBO详解

1. 求取后验概率的概率论基本方法(ELBO出现的原因)

通过贝叶斯定理求后验概率

但是因为p(x)作为边缘概率因为是联合概率积分且很难直接计算所以非常的棘手

求联合概率p(x,z)替代后验概率

        因为联合概率正比于后验概率(k = p(x), p(x)作为先验概率是常数)所以可以大致推导出后验概率的趋势。

但是由于实际上还是存在较大差异所以并不能用联合概率来替代后验概率

2. 通过ELMO近似后验概率

1. 设一个z的先验概率分布函数来近似后验概率

 2.利用KL散度计算所设概率函数和后验概率的相似度

 ELBO: 这里log p(x)是常数,也就是越接近到下界(elbo)的时候所设函数q越接近后验概率

 3. 计算ELBO 

        可以直接通过求导来计算出最大化ELBO因为最终参数只有\theta, 这里的例子较为简单,但是实际情况是无法计算出解析解的。

三. 结论

1. 变分推理(elbo)就是将一个可以计算可以参数化的概率函数去近似真实的后验概率

2.  推理可以理解为通过一个被观测对象来推理相关隐变量后验概率密度分布的隐变量图模型

3. 隐变量可以理解为观测变量的属性或者特征,可以通过隐变量来提升模型对可观测变量的理解

### DDPM模型中的ELBO含义及其应用 #### ELBO推理中的角色 在自编码器(VAE)框架内,置信下界(Evidence Lower Bound, ELBO),也被称为下界(variational lower bound)[^2]。对于扩散概率模型(Diffusion Probabilistic Models, DPMs),特别是DDPM (Denoising Diffusion Probabilistic Models),同样依赖于这一原则来进行有效的训练。 #### ELBO的具体表达形式 具体来说,在VAE中,ELBO可以被定义为数据对数似然的一个可计算的下限,其目标是在最大化该下限时最小化重构误差并保持潜在空间的良好布特性。对于DDPM而言,虽然架构不同,但优化的目标依然是通过调整模型参数使得ELBO尽可能大,从而间接提高生成样本的质量。 #### 应用于DDPM 在DDPM中,ELBO体现为前向过程(forward process)和反向过程(reverse process)之间的差异度量。前向过程中加入噪声逐步破坏输入图像;而在反向过程中,则是从纯噪声开始尝试恢复原始信号。为了实现这一点,DDPM采用了一种特殊的损失函数设计——去噪得匹配(denoising score matching),这实际上就是针对特定时间步长t下的ELBO近似估计[^1]。 ```python def compute_elbo_loss(x_start, model_output, t): """ 计算给定时刻t处的ELBO损失. 参数: x_start: 初始干净图像 model_output: 模型预测的结果 t: 当前的时间索引 返回: elbo_loss: 对应时间点上的ELBO损失值 """ noise = torch.randn_like(x_start) sqrt_alpha_cumprod_t = extract(sqrt_alphas_cumprod, t, x_start.shape) sqrt_one_minus_alpha_cumprod_t = extract( sqrt_one_minus_alphas_cumprod, t, x_start.shape ) noisy_image = sqrt_alpha_cumprod_t * x_start + sqrt_one_minus_alpha_cumprod_t * noise predicted_noise = model_output(noisy_image, t) elbo_loss = F.mse_loss(predicted_noise, noise) return elbo_loss ``` 此代码片段展示了如何基于DDPM理论框架构建一个简单的ELBO损失计算器。这里`model_output`代表经过训练后的神经网络输出,而`t`则是当前处理阶段对应的时间戳。最终返回的是MSE(mean squared error)作为衡量标准之一来评估模型性能的好坏程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值