VAE 中 KL散度 推导过程

本次分享的是个人关于某一主题的手写笔记详情,详细记录了学习过程中的重点和难点,对于理解和复习该主题非常有帮助。

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

### 变分自编码器中的KL损失公式推导 #### 背景介绍 变分自编码器(VAE)旨在通过引入潜在变量 \( z \) 来建模观测数据 \( x \)[^3]。为了实现这一点,VAE 使用了两种主要组件:编码器和解码器。编码器负责将输入数据映射到潜在空间的一个分布上;解码器则尝试从这个潜在空间重建原始输入。 #### KL定义及其作用 在数学表达中,\( D_{\text{KL}}(q_\theta(z|x)\parallel p(z)) \) 表示的是编码器生成的后验分布 \( q_\theta(z|x) \) 和预设先验分布 \( p(z) \) 之间差异的一种量化指标[^1]。通常情况下,\( p(z) \) 设定为标准正态分布 \( N(0, I) \),即均值为零、协方差矩阵为单位阵的标准多维高斯分布。 #### ELBO (Evidence Lower Bound) 定义 对于给定的数据集 \( X=\{x^{(i)}\}_{i=1}^N \),我们希望最大化其对数似然函数 \( \log P(X|\Theta)=\sum_i \log P(x^{(i)}|\Theta) \),但在实际操作中这往往是不可行的。因此,采用了一个下界作为替代目标——ELBO: \[ L(\theta,\phi;X)=\mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)]-\beta D_{\text{KL}}(q_\phi(z|x)||p(z)) \] 这里的第一项代表重构误差,反映了模型再现能力的好坏;第二项则是用来约束潜在向量服从某种特定形式的概率分布,防止过拟合的同时也便于后续采样生成新样本[^2]。 #### KL的具体计算方式 当假设 \( q_\theta(z|x)=N(\mu(x),\sigma^2I) \) 并且 \( p(z)=N(0,I) \) 时,可以得到具体的KL公式如下所示: \[ D_{\text{KL}}(q_\theta(z|x)\parallel p(z))=-\frac{1}{2}\sum_j[1+\log((\sigma_j)^2)-(\mu_j)^2-(\sigma_j)^2] \] 此公式来源于两个多元高斯分布间KL距离的一般表达式简化而来,在这种特殊设定之下变得相对简单易懂[^4]。 ```python import torch.nn.functional as F def kl_divergence(mu, logvar): # Compute the Kullback-Leibler divergence between two Gaussian distributions. kld = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) return kld ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值