第7章:生成模型
2. 变分自编码器(VAE)
基本概念
变分自编码器(Variational Autoencoder, VAE)是一种结合了深度学习和概率图模型的生成模型。与传统的自编码器不同,VAE通过学习数据的潜在分布来生成新的数据样本。
核心思想
- 概率编码器:将输入数据映射到潜在空间的概率分布(通常是高斯分布)。
- 概率解码器:从潜在空间采样并重构输入数据。
- 变分推断:通过最大化证据下界(ELBO)来近似真实的后验分布。
数学模型
VAE的目标函数由两部分组成:
- 重构损失(Reconstruction Loss):衡量解码器重构输入数据的能力,通常使用交叉熵或均方误差。
- KL散度(KL Divergence):衡量编码器输出的潜在分布与先验分布(通常是标准正态分布)的差异。
数学表达式为: [ \mathcal{L}(\theta, \phi) = \mathbb{E}{q\phi(z|x)}[\log p_\theta(x|z)] - \beta \cdot D_{KL}(q_\phi(z|x) || p(z)) ] 其中:
- ( \theta ) 是解码器参数,( \phi ) 是编码器参数。
- ( \beta ) 是调节KL散度权重的超参数(在β-VAE中使用)。
训练过程
- 编码阶段:输入数据通过编码器生成潜在分布的均值(( \mu ))和方差(( \sigma^2 ))。
- 重参数化技巧(Reparameterization Trick):从 ( \mathcal{N}(\mu, \sigma^2) ) 中采样时,通过 ( z = \mu + \sigma \cdot \epsilon )(( \epsilon \sim \mathcal{N}(0,1) ))实现梯度可导。
- 解码阶段:采样后的潜在变量通过解码器重构输入数据。
优缺点
优点
- 能够生成连续且多样化的数据。
- 潜在空间具有可解释性,支持插值和语义操作。
- 通过KL散度约束,避免过拟合。
缺点
- 生成样本可能模糊(尤其是图像),因为模型优化的是概率分布而非像素级细节。
- 训练过程需要平衡重构损失和KL散度。
变体与扩展
- β-VAE:通过调整 ( \beta ) 值控制潜在空间的正则化强度,常用于解耦表示学习。
- Conditional VAE (C-VAE):引入条件信息(如类别标签)指导生成过程。
- VQ-VAE:结合向量量化的离散潜在表示,提升生成质量。
应用场景
- 图像生成(如人脸、手写数字)。
- 数据去噪与补全。
- 异常检测(低概率样本视为异常)。
代码示例(PyTorch伪代码)
class VAE(nn.Module):
def __init__(self):
super().__init__()
# 编码器
self.encoder = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 64),
)
self.fc_mu = nn.Linear(64, 20)
self.fc_var = nn.Linear(64, 20)
# 解码器
self.decoder = nn.Sequential(
nn.Linear(20, 64),
nn.ReLU(),
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)
def reparameterize(self, mu, logvar):
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
return mu + eps * std
def forward(self, x):
h = self.encoder(x)
mu, logvar = self.fc_mu(h), self.fc_var(h)
z = self.reparameterize(mu, logvar)
return self.decoder(z), mu, logvar
参考文献
- Kingma, D. P., & Welling, M. (2014). Auto-Encoding Variational Bayes. arXiv:1312.6114.
- Higgins, I., et al. (2017). β-VAE: Learning Basic Visual Concepts with a Constrained Variational Framework. ICLR.
