Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第7章:生成模型

第7章:生成模型

2. 变分自编码器(VAE)

基本概念

变分自编码器(Variational Autoencoder, VAE)是一种结合了深度学习和概率图模型的生成模型。与传统的自编码器不同,VAE通过学习数据的潜在分布来生成新的数据样本。

核心思想

  1. 概率编码器:将输入数据映射到潜在空间的概率分布(通常是高斯分布)。
  2. 概率解码器:从潜在空间采样并重构输入数据。
  3. 变分推断:通过最大化证据下界(ELBO)来近似真实的后验分布。

数学模型

VAE的目标函数由两部分组成:

  1. 重构损失(Reconstruction Loss):衡量解码器重构输入数据的能力,通常使用交叉熵或均方误差。
  2. 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中使用)。

训练过程

  1. 编码阶段:输入数据通过编码器生成潜在分布的均值(( \mu ))和方差(( \sigma^2 ))。
  2. 重参数化技巧(Reparameterization Trick):从 ( \mathcal{N}(\mu, \sigma^2) ) 中采样时,通过 ( z = \mu + \sigma \cdot \epsilon )(( \epsilon \sim \mathcal{N}(0,1) ))实现梯度可导。
  3. 解码阶段:采样后的潜在变量通过解码器重构输入数据。

优缺点

优点

  • 能够生成连续且多样化的数据。
  • 潜在空间具有可解释性,支持插值和语义操作。
  • 通过KL散度约束,避免过拟合。

缺点

  • 生成样本可能模糊(尤其是图像),因为模型优化的是概率分布而非像素级细节。
  • 训练过程需要平衡重构损失和KL散度。

变体与扩展

  1. β-VAE:通过调整 ( \beta ) 值控制潜在空间的正则化强度,常用于解耦表示学习。
  2. Conditional VAE (C-VAE):引入条件信息(如类别标签)指导生成过程。
  3. 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.
Last Updated:: 6/17/25, 10:13 AM