1. 变分视角下的扩散模型演进
在生成模型领域,变分自编码器(VAEs)和扩散模型(DDPMs)代表着两种重要的技术路线。2013年提出的VAEs通过编码器-解码器架构学习数据分布的潜在表示,而2020年兴起的DDPMs则通过逐步加噪和去噪的过程实现高质量生成。看似不同的两种方法,实际上在数学框架上存在深刻的联系。
1.1 从VAEs到分层VAEs的演进
传统VAEs的核心是优化证据下界(ELBO):
ELBO = E[log p(x|z)] - KL(q(z|x) || p(z))其中第一项是重建损失,第二项是潜在空间的正则化。这种架构存在两个主要局限:一是潜在空间结构简单(通常假设为各向同性高斯分布),二是单阶段编码可能丢失细粒度信息。
分层VAEs通过引入多级潜在变量解决了这些问题:
z = {z1, z2, ..., zL} p(z) = p(zL)∏ p(zl|z>l) q(z|x) = q(z1|x)∏ q(zl|z<l)这种分层结构可以逐步抽象特征,但训练难度显著增加,需要精心设计各层的分布形式和相关强度。
实际应用中发现:当层级超过5层时,模型容易出现后验崩塌(posterior collapse),即q(z|x)退化为先验p(z)。解决方法包括使用更强的解码器或调整KL项的权重。
1.2 扩散模型作为无限层VAEs
将扩散过程视为编码,逆向过程视为解码,DDPMs可以理解为一种特殊的分层VAEs:
- 时间步扩展为连续无限多步(对应无限层级)
- 每步的转移核q(xt|xt-1)固定为已知的加噪过程(对应编码器)
- 逆向过程pθ(xt-1|xt)学习去噪(对应解码器)
这种视角下,扩散模型的ELBO可以表示为:
ELBO = E[log p(x0|x1)] - ∑ KL(q(xt-1|xt,x0) || pθ(xt-1|xt))其中第一项是最终的重建项,求和项是各时间步的预测误差。
1.3 关键数学联系:重参数化技巧
VAEs和DDPMs都依赖重参数化实现可微采样:
- VAEs中:
z = μ + σ⊙ε, ε∼N(0,I)- DDPMs中:
xt = √αt x0 + √(1-αt)ε, ε∼N(0,I)这种相似性使得两种模型都可以通过标准反向传播进行训练。不同的是,DDPMs的αt序列通常是预设的噪声调度(noise schedule),而非学习得到。
2. 扩散模型核心算法解析
2.1 前向扩散过程
前向过程将数据x0逐步转换为x1,...,xT,每步应用马尔可夫转移核:
q(xt|xt-1) = N(xt; √(1-βt)xt-1, βtI)其中βt是噪声调度参数。通过重参数化,可以直接从x0计算任意时刻的xt:
xt = √αt x0 + √(1-αt)ε, αt=∏(1-βs)这个闭式解是扩散模型高效训练的关键。
噪声调度实践:常用线性调度(βt从1e-4到0.02)或余弦调度。后者在高分辨率图像生成中表现更好,因为保留了更多低频信息。
2.2 逆向生成过程
逆向过程通过神经网络学习条件分布:
pθ(xt-1|xt) = N(xt-1; μθ(xt,t), Σθ(xt,t))实际训练中,通常预测噪声εθ(xt,t)而非直接预测均值,因为:
- 数值稳定性更好
- 与UNet架构的适配性更强
- 便于实现Classifier-Free Guidance
逆向过程的均值计算为:
μθ(xt,t) = 1/√αt (xt - (1-αt)/√(1-αt) εθ)2.3 训练目标简化
原始ELBO可以简化为:
Lsimple = Ex0,ε,t[||ε - εθ(xt,t)||^2]这种去噪得分匹配目标在实践中表现更好,因为它:
- 避免了KL散度的复杂计算
- 对预测误差更敏感
- 与人类感知对齐(去噪质量直观可见)
3. 实现细节与优化技巧
3.1 网络架构设计
典型DDPM使用UNet架构,关键改进包括:
- 时间步嵌入:将t通过正弦编码后注入各层
- 注意力机制:在特征图上应用自注意力
- 多尺度特征:跳跃连接保持细节信息
class TimeEmbedding(nn.Module): def __init__(self, dim): super().__init__() self.dim = dim inv_freq = torch.exp(-torch.arange(0, dim, 2) * math.log(10000) / dim) self.register_buffer('inv_freq', inv_freq) def forward(self, t): pos_enc = t[:, None] * self.inv_freq[None, :] return torch.cat([torch.sin(pos_enc), torch.cos(pos_enc)], dim=-1)3.2 采样加速技术
原始DDPM需要1000步采样,常用加速方法:
- DDIM(确定性采样):
xt-1 = √αt-1 (xt - √(1-αt)εθ)/√αt + √(1-αt-1)εθ仅需50-100步即可获得优质结果。
知识蒸馏: 训练学生网络直接预测多步去噪过程
隐空间扩散: 在VAE的潜在空间中应用扩散(如Stable Diffusion)
3.3 条件生成控制
- Classifier Guidance:
εθ(xt|y) = εθ(xt) + s·∇xt log p(y|xt)需要额外训练分类器。
- Classifier-Free Guidance:
εθ(xt|y) = (1+w)εθ(xt|y) - wεθ(xt)仅需训练条件和非条件模型。
指导强度w通常设为7.5,过高会导致样本多样性下降。
4. 实际应用中的挑战与解决方案
4.1 训练不稳定性问题
现象:损失震荡或突然发散 解决方法:
- 梯度裁剪(阈值设为1.0)
- 学习率预热(前5000步线性增加)
- EMA参数平滑(β=0.9999)
4.2 生成质量不一致
现象:部分样本质量明显下降 解决方法:
- 噪声调度调整(改用cosine调度)
- 增加模型容量(通道数×1.5)
- 测试时增强(TTA):对同一噪声输入多次采样取平均
4.3 计算资源优化
- 混合精度训练:
scaler = GradScaler() with autocast(): loss = model(x0, t, noise) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()- 激活检查点:
model.set_grad_checkpointing(True)- 分布式训练策略:
- 数据并行:batch_size=256时效果最佳
- 模型并行:适用于>1B参数的模型
5. 前沿扩展方向
5.1 潜在扩散模型(LDMs)
将扩散过程应用于VAE的潜在空间:
- 先训练VAE压缩数据到潜在空间
- 在潜在空间训练扩散模型
- 显著降低计算成本(如Stable Diffusion在64×64潜在空间操作)
5.2 多模态扩散
统一框架处理图像、文本、音频:
- 跨模态注意力机制
- 共享的扩散时间步
- 条件交叉生成(如文生图)
5.3 扩散模型与向量场模型
关键区别:
- 扩散模型:基于得分匹配,显式建模噪声
- 向量场模型:直接学习数据流形上的向量场
- 后者在理论上更通用,但训练难度更大
实际选择建议:
- 需要高质量生成:选扩散模型
- 需要快速采样:选向量场模型
- 需要精确密度估计:选扩散模型