Files
2026-05-16 17:16:51 +08:00

8.1 KiB
Raw Permalink Blame History

title, draft, tags
title draft tags
2-SD-StableDiffusion false
Stable-Diffusion
扩散模型
生成模型
深度学习

Stable Diffusion 全链路深度解析:从潜空间到语义生成

一、 整体架构总览:降维打击与模态融合

Stable Diffusion 的核心思想是将扩散过程从高维的像素空间 (Pixel Space) 转移到低维的潜空间 (Latent Space)。这种做法不仅大幅降低了计算成本,还通过解耦“感知压缩”与“语义生成”,提高了生成质量。

整个训练通路可以抽象为:

  1. 感知压缩器 (VAE):负责将图像 x 压缩为隐向量 $z$,或将 z 反推回图像。

  2. 语义编码器 (CLIP):负责将文本提示词 y 映射为 U-Net 能理解的特征向量。

  3. 生成引擎 (U-Net):在潜空间中进行条件扩散过程,学习预测噪声。


二、 组件一VAE——空间的感知压缩

VAE 在 SD 中充当“空间翻译官”。它通过自编码结构学习图像的低维表示。

1. 数学定义与映射

  • 编码器 $\mathcal{E}$:将图像 x \in \mathbb{R}^{H \times W \times 3} 映射到潜空间 $z = \mathcal{E}(x)$。在 SD 中,$z \in \mathbb{R}^{h \times w \times c}$,下采样倍数通常为 8即 $h = H/8$)。

  • 解码器 $\mathcal{D}$:将潜变量映射回像素空间 $\hat{x} = \mathcal{D}(z)$。

2. 训练目标(变分下界与正则化)

VAE 的训练不仅仅是 MSE 损失,它包含了一个正则化项以确保潜空间 z 具有良好的分布特性:

L_{VAE} = \|x - \mathcal{D}(\mathcal{E}(x))\|^2 + \lambda \cdot D_{KL}(q_\phi(z|x) \| \mathcal{N}(0, I))
  • KL 正则化:确保 z 接近标准正态分布,防止潜空间出现过于稀疏的“空洞”,这对后续扩散模型的采样至关重要。

  • 感知损失 (Perceptual Loss):在 SD 的 VAE 训练中,还会加入 LPIPS 或 GAN Loss 来保证重建图像的视觉清晰度(而非仅仅是像素对齐)。


三、 组件二CLIP——语义的桥梁

为了实现“文生图”我们需要一个能同时理解图像和文本的模型。OpenAI 的 CLIP (Contrastive Language-Image Pre-training) 提供了这一能力。

1. 对比学习推导

CLIP 通过大规模对(图像 I_i, 文本 $T_i$)进行训练。其核心是学习两个编码器:f_{img} 和 $f_{txt}$。

训练目标是最大化对角线上的相似度:

\text{Loss}_{\text{CLIP}} = -\sum_{i=1}^N \log \frac{\exp(\cos(f_{img}(I_i), f_{txt}(T_i)) / \tau)}{\sum_{j=1}^N \exp(\cos(f_{img}(I_i), f_{txt}(T_j)) / \tau)}

直觉解释:这一损失函数的核心思想是"匹配的对应该更相似"。对于每个样本 $i$,我们希望图像编码 f_{img}(I_i) 与其对应文本编码 f_{txt}(T_i) 的余弦相似度越高越好,同时与所有不匹配的文本编码 $f_{txt}(T_j)$(其中 $j \neq i$)的相似度越低越好。

  • \tau 是温度参数,控制 softmax 的锐度
  • \cos(\cdot, \cdot) 是余弦相似度函数
  • 分母是对所有文本的相似度求和,体现对比学习的"对比"特性

2. 在 SD 中的应用

在 Stable Diffusion 推理时,我们冻结 CLIP 的 Text Encoder通常是 ViT-L/14 的一部分)。文本 y 经过 CLIP 后得到特征矩阵 $C \in \mathbb{R}^{L \times d_{\text{clip}}}$L 为 token 长度,通常为 $77 \times 768$),这个矩阵将作为 Conditioning 注入 U-Net。

CLIP 的核心作用

  1. 语义对齐:将文本中的抽象语义(如"一只在睡觉的猫")映射到图像特征空间
  2. 零样本迁移:预训练好的 CLIP 可以理解任意文本描述,无须针对特定类别微调
  3. 条件信息提取CLIP 提取的文本特征 C 包含丰富的语义信息,可引导 U-Net 生成对应的视觉内容

四、 组件三U-Net 与 Cross-Attention 核心逻辑

SD 使用的 U-Net 是一个带有空间变压器 (Spatial Transformer) 的增强版本,它是实现噪声预测的主体。

1. U-Net 结构组成

  • ResNet Blocks:处理潜空间特征图的局部纹理。

  • Spatial Transformer Blocks:包含 Self-Attention 和 Cross-Attention处理全局依赖和外部条件。

2. Cross-Attention 的数学细节

这是文本引导图像生成的关键。在 U-Net 的中间层,潜特征 z_t 被映射为 Query而 CLIP 文本向量 C 被映射为 Key 和 Value。

Q = W_Q \cdot \phi(z_t), \quad K = W_K \cdot C, \quad V = W_V \cdot C \text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^T}{\sqrt{d}} \right) \cdot V
  • 物理意义注意力图Attention Map决定了文本中的哪个单词如“猫”应该对应潜特征图中的哪个空间位置。通过这种方式文本语义被“注入”到了潜空间的去噪过程中。

五、 整体训练通路:全链路数学推导

现在我们将上述组件串联,描述 Stable Diffusion 的训练全过程。

1. 前向扩散(像素到潜空间的退化)

给定训练图像 $x$,先通过 VAE 得到 $z_0 = \mathcal{E}(x)$。

随后根据 DDPM 的加噪公式,在时间步 t 生成带噪潜变量:

z_t = \sqrt{\bar{\alpha}_t} z_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)

2. 预测与损失函数(目标优化)

U-Net 网络 \epsilon_\theta 接收三个输入:带噪潜变量 $z_t$、时间步 $t$、文本条件 $\tau(y)$。

其训练目标是预测注入的噪声 $\epsilon$

\min_\theta \mathcal{L}_{LDM} = \mathbb{E}_{x, y, \epsilon, t} \left[ \left\| \epsilon - \epsilon_\theta(z_t, t, \tau(y)) \right\|_2^2 \right]

详细步骤拆解:

  1. 采样图像 $x$

  2. 编码图像$z_0 = \text{VAE_Encode}(x)$。

  3. 采样时间步$t \in {1, \dots, T}$。

  4. 生成噪声$\epsilon \sim \mathcal{N}(0, I)$。

  5. 前向加噪:计算 $z_t$(利用重参数化技巧)。

  6. 编码文本$c = \text{CLIP_Text_Encode}(y)$。

  7. 前向传播$\hat{\epsilon} = \text{U-Net}(z_t, t, c)$。

  8. 反向传播:更新 U-Net 参数 $\theta$。


六、 推理/采样通路:无分类器引导 (CFG)

在推理时,我们需要从纯噪声 z_T \sim \mathcal{N}(0, I) 开始,逐步迭代到 $z_0$。

1. CFG 的数学推导

为了增强文本的一致性,使用 Classifier-Free Guidance (CFG)。其核心思想是:在无条件和有条件之间进行线性插值,以增强条件信号同时保留一定的多样性。

\tilde{\epsilon}_\theta(z_t, t, c) = \epsilon_\theta(z_t, t, c_{\text{null}}) + s \cdot (\epsilon_\theta(z_t, t, c) - \epsilon_\theta(z_t, t, c_{\text{null}}))
  • 其中 s 是引导强度Guidance Scale通常在 1.0 \sim 10.0 之间
  • c_{\text{null}} 是空字符串的 CLIP 编码(对应无条件生成)
  • s = 1 时,退化为普通条件预测;s 越大,条件引导越强

直觉CFG 本质上是在估计条件梯度 $\nabla_z \log p(c|z)$。方向指向高条件概率的区域。

2. 采样流程

经过 T 步迭代得到 z_0 后,通过 VAE 的解码器还原为图像:

x_{\text{gen}} = \mathcal{D}(z_0)

Algorithm: Stable Diffusion Sampling

  1. 初始化z_T \sim \mathcal{N}(0, I)
  2. 文本编码c = \text{CLIP\_Text\_Encode}(y)
  3. 迭代去噪:对 $t = T, T-1, \dots, 1$
    • 预测噪声:\epsilon = \epsilon_\theta(z_t, t, c)
    • CFG 修正:\tilde{\epsilon} = \epsilon + s \cdot (\epsilon - \epsilon_\theta(z_t, t, c_{\text{null}}))
    • 更新:z_{t-1} = \text{denoise}(z_t, \tilde{\epsilon}, t)
  4. 解码x_{\text{gen}} = \mathcal{D}(z_0)

七、 总结Stable Diffusion 的严谨定义

Stable Diffusion 是一个基于潜空间扩散的生成模型。它利用 VAE 实现感知压缩,解决计算开销问题;利用 CLIP 实现多模态对齐,解决控制问题;利用 U-Net 的 Cross-Attention 机制在低维潜空间内执行受条件的去噪逆过程。其本质是在概率分布的对数梯度Score Function引导下从高斯分布向特定语义分布的映射。