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章:生成模型

变分自编码器(VAE)

1. 基本概念

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

  • 核心思想:VAE假设数据是由某个潜在变量(latent variable)生成的,并通过变分推断(variational inference)来学习潜在变量的分布。
  • 关键组件:
    • 编码器(Encoder):将输入数据映射到潜在空间的分布参数(均值和方差)。
    • 解码器(Decoder):从潜在空间采样并重构输入数据。
    • 重参数化技巧(Reparameterization Trick):使梯度可以通过随机采样的节点反向传播。

2. 数学原理

VAE的优化目标是最小化证据下界(ELBO, Evidence Lower Bound),其公式为:

L(θ,ϕ;x)=Eqϕ(z∣x)[log⁡pθ(x∣z)]−DKL(qϕ(z∣x)∣∣p(z))\mathcal{L}(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z)) L(θ,ϕ;x)=Eqϕ​(z∣x)​[logpθ​(x∣z)]−DKL​(qϕ​(z∣x)∣∣p(z))

其中:

  • 第一项是重构损失,衡量解码器生成的数据与原始数据的相似度。
  • 第二项是KL散度,约束编码器输出的分布与先验分布(通常为标准正态分布)的接近程度。

3. 模型架构

  1. 编码器网络:
    • 输入:原始数据(如图像、文本)。
    • 输出:潜在变量的均值(μ\muμ)和方差(σ2\sigma^2σ2)。
  2. 采样与重参数化:
    • 从标准正态分布采样噪声 ϵ∼N(0,1)\epsilon \sim \mathcal{N}(0, 1)ϵ∼N(0,1)。
    • 计算潜在变量 z=μ+σ⊙ϵz = \mu + \sigma \odot \epsilonz=μ+σ⊙ϵ。
  3. 解码器网络:
    • 输入:潜在变量 zzz。
    • 输出:重构的数据或生成的新数据。

4. 优势与特点

  • 生成能力:可以生成连续且多样化的数据样本。
  • 潜在空间结构:潜在变量具有明确的概率意义,支持插值和语义操作。
  • 端到端训练:通过重参数化技巧实现梯度反向传播。

5. 应用场景

  • 图像生成:如生成人脸、手写数字等。
  • 数据补全:修复缺失或损坏的数据(如图像去噪)。
  • 异常检测:通过重构误差识别异常样本。

6. 代码示例(PyTorch)

import torch
import torch.nn as nn
import torch.nn.functional as F

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, 256),
            nn.ReLU(),
        )
        self.fc_mu = nn.Linear(256, latent_dim)
        self.fc_var = nn.Linear(256, latent_dim)
        
        # 解码器
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, 256),
            nn.ReLU(),
            nn.Linear(256, 512),
            nn.ReLU(),
            nn.Linear(512, input_dim),
            nn.Sigmoid()
        )
    
    def encode(self, x):
        h = self.encoder(x)
        return self.fc_mu(h), self.fc_var(h)
    
    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5 * logvar)
        eps = torch.randn_like(std)
        return mu + eps * std
    
    def decode(self, z):
        return self.decoder(z)
    
    def forward(self, x):
        mu, logvar = self.encode(x)
        z = self.reparameterize(mu, logvar)
        return self.decode(z), mu, logvar

# 损失函数
def loss_function(recon_x, x, mu, logvar):
    BCE = F.binary_cross_entropy(recon_x, x, reduction='sum')
    KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
    return BCE + KLD

7. 扩展阅读

  • 改进模型:
    • β\betaβ-VAE:通过调整KL散度的权重控制生成多样性与 disentanglement。
    • VQ-VAE:结合向量量化的离散潜在空间。
  • 与其他生成模型的对比:
    • 相比GAN,VAE生成样本可能更模糊但训练更稳定。
    • 相比扩散模型,VAE的计算效率更高。

注:VAE是生成模型中的重要方法,理解其概率背景和实现细节对掌握生成式AI至关重要。

Last Updated:: 5/20/25, 7:33 PM