VAE(Variational Autoencoder)通过编码器-解码器架构学习数据潜在分布,结合概率图模型与深度学习实现生成能力。
定义与核心思想
VAE 是一种生成模型,核心思想是将高维数据映射到低维潜在空间,构建概率生成模型。与传统自编码器不同,VAE 在潜在空间引入概率分布约束(如高斯分布),支持连续采样和新样本生成。
核心公式
- 重构损失:衡量生成数据与原始输入的相似性
- KL 散度:约束潜在分布接近先验分布(标准正态分布)
发展历程
| 模型 | 年份 | 贡献 |
|---|---|---|
| 原始 VAE | 2013 | 首次将变分推断与神经网络结合 |
| VQ-VAE | 2017 | 引入向量量化,提升生成质量 |
| Beta-VAE | 2017 | 超参数 β 调节 KL 散度权重,增强解耦 |
| VAE-GAN | 2016 | 结合对抗训练,解决生成模糊问题 |
| VQ-GAN | 2021 | 引入 Transformer 自回归先验 |
核心原理
编码器-解码器架构
class VAE(nn.Module):
def __init__(self, input_dim=784, hidden_dim=400, latent_dim=20):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU()
)
self.fc_mu = nn.Linear(hidden_dim, latent_dim)
self.fc_logvar = nn.Linear(hidden_dim, latent_dim)
self.decoder = nn.Sequential(
nn.Linear(latent_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, input_dim),
nn.Sigmoid()
)
def reparameterize(self, mu, logvar):
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
return mu + eps * std # 重参数技巧重参数化技巧
通过 实现可微采样:
解决随机节点无法反向传播的难题。
应用场景
| 场景 | 案例 | 技术优势 |
|---|---|---|
| 图像生成 | MNIST/CelebA | 潜在空间插值平滑 |
| 医学影像 | COVID-19 CT 检测 | 分布外样本识别 |
| 分子生成 | 药物分子设计 | 化学空间探索 |
实践经验
- 潜在空间维度:MNIST 选择 20 维,ImageNet 选择 512 维
- KL 散度平衡:退火训练逐步增加 KL 权重,避免模式坍缩
- 多模态融合:DALL-E 结合 VQ-VAE 与 Transformer 实现跨模态生成