--- title: 2-SD-StableDiffusion draft: false tags: - 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)引导下,从高斯分布向特定语义分布的映射。** ---