变分自编码器(Variational Autoencoder, VAE)

结合了自编码器概率生成模型的深度学习框架,主要用于生成新数据和学习数据的低维潜在表示。

一 VAE概念 

VAE的目标是学习数据的潜在概率分布,而非像传统的自编码器(AE)进行简单的数据压缩。

通过引入变分推断(Variational Inference),VAE能够生成与原始数据分布一致的新样本。

1.1变分推断(Variational Inference, VI)

一种用于近似复杂概率模型后验分布的机器学习方法。在贝叶斯模型中,目标是计算后验分布 $p(z | x)$.

$x$ :观测数据  

$z$:隐变量

后验分布的表达式为:

$ p(z | x) = \frac{p(x | z) p(z)}{p(x)} $

变分推断的核心:通过找到简单分布 $q(z)$ (称为变分分布),最小化其与真实后验 $p(z | x)$ 的KL散度(KL散度量化了一个概率分布 P 相对于另一个分布 Q 的“差异”或“信息损失”。):

$ q^* = \arg\min_{q \in \mathcal{Q}} \text{KL}(q(z) \parallel p(z | x)) $

生成模型:VAE属于隐变量模型(Latent Variable Model),假设数据由潜在变量 $z$ 生成,即$x = f(z)$,其中  服从特定的先$z$验分布。

二 结构组成

2.1编码器(Encoder)

作用:将输入数据 $x$ 映射到潜在空间,输出潜在变量 $z$ 的分布参数(均值和方差)。

输出:均向量 $\mu$ 和方差的对数值 $\log \sigma^2$,即  $q(z|x) \sim \mathcal{N}(\mu, \sigma^2 I)$ 。

2.2解码器(Decoder)

作用:从潜在变量 $z$  重构原始数据 $x$ ,即学习生成 $p(x|z)$

输出:重构数据 $x'$ ,通常通过伯努利或高斯分布建模。

三 变分推断与损失函数

VAE通过最大化证据下界(Evidence Lower Bound, ELBO)进行优化。ELBO由以下两部分组成:

3.1 重构损失(Reconstruction Loss)

衡量解码器重构数据的能力,等价于交叉熵(用于衡量两个概率分布之间的差异,同时也是机器学习中最常用的损失函数之一)或均方误差(MSE)。

$ \mathcal{L}_{\text{recon}} = \mathbb{E}_{z \sim q(z|x)} \left[ \log p(x|z) \right] $

3.2 KL散度(KL Divergence)

强制潜在分布   接近标准正态先验分布 $p(z)$ ,保证潜在空间的连$q(z|x)$续性。

$ \mathcal{L}_{\text{KL}} = \text{KL} \left( q(z|x) \parallel p(z) \right) $

对于高斯分布,KL散度可解析计算为:

$ \mathcal{L}_{\text{KL}} = -\frac{1}{2} \sum_{i} \left( 1 + \log \sigma_i^2 - \mu_i^2 - \sigma_i^2 \right) $

总损失函数:

$ \mathcal{L} = \mathcal{L}_{\text{recon}} + \mathcal{L}_{\text{KL}} $

四 重参数化技巧(Reparameterization Trick)

直接从分布 $\mathcal{N}(\mu, \sigma^2)$ 采样 $z$ 会导致不可导,无法反向传播。

解决方案:将采样过程分解为确定性和随机性部分:

$ z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) $

其中 $\epsilon$ 是独立噪声,确保梯度可传至编码器。

五 训练过程

输入数据 $x$ 通过编码器生成 $\mu$$\log \sigma^2$

通过重参数化采样 $z$,输入解码器生成重构数据 $x'$

计算重构损失和KL散度,反向传播优化网络参数。

六 优缺点

优点:

(1)可生成新数据,潜在空间具有连续性(插值生成平滑过渡样本)。

(2)显式建模概率分布,支持概率推断。

缺点:

(1)生成结果可能较模糊(因假设输出为高斯分布,而真实数据分布复杂)。

(2)训练难度较高,需平衡重构损失与KL散度。

 七 应用场景

图像生成(如人脸、手写数字)、数据降维与特征提取、数据去噪与补全、半监督学习

代码示例:

import torch
import torch.nn as nn

class 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 * std

    def 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,但其拥有更高的概率解释性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值