张芷铭的个人博客

VAE(Variational Autoencoder)通过编码器-解码器架构学习数据潜在分布,结合概率图模型与深度学习实现生成能力。

定义与核心思想

VAE 是一种生成模型,核心思想是将高维数据映射到低维潜在空间,构建概率生成模型。与传统自编码器不同,VAE 在潜在空间引入概率分布约束(如高斯分布),支持连续采样和新样本生成。

核心公式

$$\text{ELBO} = \mathbb{E}{z \sim q(z|x)}[\log p(x|z)] - D{KL}(q(z|x) \parallel p(z))$$

  • 重构损失:衡量生成数据与原始输入的相似性
  • KL 散度:约束潜在分布接近先验分布(标准正态分布)

发展历程

模型年份贡献
原始 VAE2013首次将变分推断与神经网络结合
VQ-VAE2017引入向量量化,提升生成质量
Beta-VAE2017超参数 β 调节 KL 散度权重,增强解耦
VAE-GAN2016结合对抗训练,解决生成模糊问题
VQ-GAN2021引入 Transformer 自回归先验

核心原理

编码器-解码器架构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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  # 重参数技巧

重参数化技巧

通过 $\epsilon \sim \mathcal{N}(0,I)$ 实现可微采样:

$$z = \mu + \sigma \odot \epsilon$$

解决随机节点无法反向传播的难题。

应用场景

场景案例技术优势
图像生成MNIST/CelebA潜在空间插值平滑
医学影像COVID-19 CT 检测分布外样本识别
分子生成药物分子设计化学空间探索

实践经验

  1. 潜在空间维度:MNIST 选择 20 维,ImageNet 选择 512 维
  2. KL 散度平衡:退火训练逐步增加 KL 权重,避免模式坍缩
  3. 多模态融合:DALL-E 结合 VQ-VAE 与 Transformer 实现跨模态生成

参考文献

Comments