变分自编码器(Variational Autoencoder, VAE)
结合了自编码器和概率生成模型的深度学习框架,主要用于生成新数据和学习数据的低维潜在表示。
一 VAE概念
VAE的目标是学习数据的潜在概率分布,而非像传统的自编码器(AE)进行简单的数据压缩。
通过引入变分推断(Variational Inference),VAE能够生成与原始数据分布一致的新样本。
1.1变分推断(Variational Inference, VI)
一种用于近似复杂概率模型后验分布的机器学习方法。在贝叶斯模型中,目标是计算后验分布 .
:观测数据
:隐变量
后验分布的表达式为:
变分推断的核心:通过找到简单分布 (称为变分分布),最小化其与真实后验
的KL散度(KL散度量化了一个概率分布 P 相对于另一个分布 Q 的“差异”或“信息损失”。):
生成模型:VAE属于隐变量模型(Latent Variable Model),假设数据由潜在变量 生成,即
,其中 服从特定的先
验分布。
二 结构组成
2.1编码器(Encoder)
作用:将输入数据 映射到潜在空间,输出潜在变量
的分布参数(均值和方差)。
输出:均向量 和方差的对数值
,即
。
2.2解码器(Decoder)
作用:从潜在变量 重构原始数据
,即学习生成
。
输出:重构数据 ,通常通过伯努利或高斯分布建模。
三 变分推断与损失函数
VAE通过最大化证据下界(Evidence Lower Bound, ELBO)进行优化。ELBO由以下两部分组成:
3.1 重构损失(Reconstruction Loss)
衡量解码器重构数据的能力,等价于交叉熵(用于衡量两个概率分布之间的差异,同时也是机器学习中最常用的损失函数之一)或均方误差(MSE)。
3.2 KL散度(KL Divergence)
强制潜在分布 接近标准正态先验分布 ,保证潜在空间的连
续性。
对于高斯分布,KL散度可解析计算为:
总损失函数:
四 重参数化技巧(Reparameterization Trick)
直接从分布 采样
会导致不可导,无法反向传播。
解决方案:将采样过程分解为确定性和随机性部分:
其中 是独立噪声,确保梯度可传至编码器。
五 训练过程
输入数据 通过编码器生成
和
。
通过重参数化采样 ,输入解码器生成重构数据
。
计算重构损失和KL散度,反向传播优化网络参数。
六 优缺点
优点:
(1)可生成新数据,潜在空间具有连续性(插值生成平滑过渡样本)。
(2)显式建模概率分布,支持概率推断。
缺点:
(1)生成结果可能较模糊(因假设输出为高斯分布,而真实数据分布复杂)。
(2)训练难度较高,需平衡重构损失与KL散度。
七 应用场景
图像生成(如人脸、手写数字)、数据降维与特征提取、数据去噪与补全、半监督学习
代码示例:
import torch
import torch.nn as nnclass VAE(nn.Module):def __init__(self, input_dim, latent_dim):super(VAE, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(input_dim, 512),nn.ReLU(),nn.Linear(512, 2 * latent_dim) # 输出mu和log_var)# 解码器self.decoder = nn.Sequential(nn.Linear(latent_dim, 512),nn.ReLU(),nn.Linear(512, input_dim),nn.Sigmoid())def reparameterize(self, mu, log_var):std = torch.exp(0.5 * log_var)eps = torch.randn_like(std)return mu + eps * stddef forward(self, x):h = self.encoder(x)mu, log_var = torch.chunk(h, 2, dim=-1)z = self.reparameterize(mu, log_var)x_recon = self.decoder(z)return x_recon, mu, log_var
VAE通过结合自编码器与变分推断,实现了对数据潜在分布的建模与生成。其核心在于通过KL散度约束潜在空间,并利用重参数化技巧解决梯度传递问题。
生成质量上弱于GAN,但其拥有更高的概率解释性和稳定性。