笔记|生成模型(十四):Stable Diffusion 3 架构解析 (MMDiT)
本文为系列第十四篇。在介绍了 Flow Matching
之后,我们来看看它是如何在现代大模型中落地的。Stable Diffusion 3 (SD3)
是 Stability AI 推出的新一代图像生成模型,它不仅采用了 Flow Matching
作为训练目标,还在架构上进行了重大革新,提出了 MMDiT (Multimodal
Diffusion Transformer)。本文将深入解析 SD3 的核心架构。
⬅️ 上一篇:笔记|生成模型(十三):Flow
Matching理论与实现
➡️ 下一篇:笔记|生成模型(十五):Flux
架构解析
从 U-Net 到 DiT 的演进
在 SD 1.5 和 SDXL 时代,扩散模型的主力骨干网络一直是 U-Net。U-Net
通过下采样和上采样结合跳跃连接,在图像特征提取上表现出色。然而,随着模型规模的扩大,U-Net
的扩展性(Scaling Law)遇到了瓶颈。
与此同时,Transformer 在自然语言处理(NLP)领域大放异彩。Peebles 和
Xie 提出的 DiT (Diffusion Transformer) 证明了 ...
笔记|生成模型(十三):Flow Matching理论与实现
论文链接:Flow
Matching for Generative Modeling
⬅️ 上一篇:笔记|生成模型(十二):Normalizing
Flow理论与实现
➡️ 下一篇:笔记|生成模型(十四):Stable
Diffusion 3 架构解析 (MMDiT)
在 Stable Diffusion 3 中,模型是通过 Flow Matching
的方法训练的。从这个方法的名字来看,就知道它和 Flow-based Model
有比较强的关联,因此在正式开始介绍这个方法之前先交代一些 Flow-based
Model 相关的背景知识。
Flow-based Models
Normalizing Flow
Normalizing Flow
是一种基于变换对概率分布进行建模的模型,其通过一系列离散且可逆的变换实现任意分布与先验分布(例如标准高斯分布)之间的相互转换。在
Normalizing Flow
训练完成后,就可以直接从高斯分布中进行采样,并通过逆变换得到原始分布中的样本,实现生成的过程。
从这个角度看,Normalizing Flow 和 Diffusion Model
...
笔记|生成模型(十二):Normalizing Flow理论与实现
⬅️ 上一篇:笔记|生成模型(十一):UIT和DiT架构详解
➡️ 下一篇:笔记|生成模型(十三):Flow
Matching理论与实现
Normalizing
flow(标准化流)是一类对概率分布进行建模的工具,它能完成简单的概率分布(例如高斯分布)和任意复杂分布之间的相互转换,经常被用于
data generation、density estimation、inpainting 等任务中,例如 Stability
AI 提出的 Stable Diffusion
3 中用到的 rectified flow 就是 normalizing flow 的变体之一。
为了便于理解,在正式开始介绍之前先简要说明一下 normalizing flow
的做法。如上图所示,为了将一个高斯分布 \(z_0\) 转换为一个复杂的分布 \(z_K\),normalizing flow 会对初始的分布
\(z_0\)
进行多次可逆的变换,将其逐渐转换为 \(z_K\)。由于每一次变换都是可逆的,从 \(z_K\) 出发也能得到高斯分布 \(z_0\)。这样,我们就实现了复杂分布与高斯分布之间的互相 ...
笔记|生成模型(十一):UIT和DiT架构详解
⬅️ 上一篇:笔记|生成模型(十):Classifier-Free
Guidance 理论与实现
➡️ 下一篇:笔记|生成模型(十二):Normalizing
Flow理论与实现
UIT
论文链接:All are
Worth Words: A ViT Backbone for Diffusion Models
官方实现:baofff/U-ViT
扩散模型自从被提出后,主干网络一直都是各种基于卷积的 UNet
的变体。而在其他领域,Transformer 架构则更加流行,尤其是由于 Transformer
多模态性能和缩放能力都很强,因此把 Transformer
架构用于扩散模型是很值得尝试的。这篇 U-ViT
的工作就是一个不错的尝试。
U-ViT 的设计
在开始具体的介绍之前,可以先看一下 U-ViT
整体的架构。可以看出其有几个主要的特点:
所有的元素,包括 latent、timestep、condition 等都以 token
的形式进行了 embedding;
类似于 UNet,在不同的 Transformer Block
层之间添加了长跳跃连接。
虽然理论上来说 ...
笔记|生成模型(十):Classifier-Free Guidance 理论与实现
论文链接:Classifier-Free Diffusion
Guidance
⬅️ 上一篇:笔记|生成模型(九):Classifier
Guidance 理论与实现
➡️ 下一篇:笔记|生成模型(十一):UIT和DiT架构详解
上一篇文章我们学习了 Classifier
Guidance,这种方法通过引入一个额外的分类器,使用梯度引导的方式成功地实现了条件生成。虽然
Classifier Guidance 可以直接复用训练好的 diffusion
models,不过这种方法的问题是很明显的,首先需要额外训练一个分类器,而且这个分类器不仅仅分类一般的图像,还需要分类加噪后的图像,这会给方法带来比较大的额外开销;其次分类器训练完成后类别就固定下来了,如果希望生成新的类别就需要重新训练分类器。这篇文章学习的
Classifier-Free Guidance 则可以比较好地解决这些问题。
Classifier-Free Guidance
在 Classifier Guidance 中,从条件概率 \(p(\mathbf{x}_t|y)\) 出发,利用贝叶斯公式和
score functi ...
笔记|生成模型(九):Classifier Guidance 理论与实现
转载自:Classifier-Free
Guidance 理论与实现 论文链接:Diffusion Models Beat GANs on
Image Synthesis*
⬅️ 上一篇:笔记|生成模型(八):SDE统一DDPM和SMLD
➡️ 下一篇:笔记|生成模型(十):Classifier-Free
Guidance 理论与实现
在前期的文章中,我们已经学习了 DDPM 和
DDIM。然而,这些方法只能进行无条件生成(Unconditional
Generation),无法对生成结果进行精细化控制。为了实现可控生成,研究人员提出了多种条件生成(Conditional
Generation)方法,其中最经典、最常用的两种是 Classifier Guidance 与
Classifier-Free Guidance。本文将首先介绍第一种方法。
一些工作背景
实际上,Classifier Guidance 是 OpenAI 在论文《Diffusion Models Beat
GANs on Image Synthesis》中提出的核心工作之一。虽然 Improved DDPM
已 ...
笔记|生成模型(八):SDE统一DDPM和SMLD
⬅️ 上一篇:笔记|生成模型(七):Score-Based理论
➡️ 下一篇:笔记|生成模型(九):Classifier
Guidance 理论与实现
随机微分方程简介
首先介绍常微分方程和随机微分方程的基本知识,为后续讨论奠定基础。我们先从一个常微分方程(ODE)例子开始:
\[
\frac{\mathrm{d}x}{\mathrm{d}t}=f(x,t)\quad\mathrm{or}\quad\mathrm{d}x=f(x,t)\mathrm{d}t
\]
其中 \(f(x,t)\) 是关于 \(x\) 和 \(t\) 的函数,描述了 \(x\) 随时间的变化趋势,如下图左侧所示。
直观地讲,\(f(x,t)\)
对应于图中的青色箭头,确定某一时刻的 \(x(t)\) 后,沿着箭头方向可以找到下一时刻的
\(x(t+\Delta
t)\)。这个常微分方程的解析解为:
\[
x(t)=x(0)+\int_0^t f(x,\tau)\mathrm{d}\tau
\]
然而,实际应用中我们使用的 \(f(x,t)\)
通常是比较复杂的函数(如神经网络),求解析解往往不切实际。因此 ...
笔记|生成模型(七):Score-Based理论
⬅️ 上一篇:笔记|生成模型(六):DDIM理论
➡️ 下一篇:笔记|生成模型(八):SDE统一DDPM和SMLD
Score-based 模型理论基础
生成模型通常从某个已有的概率分布中进行采样以生成样本。Score-based
模型的关键在于对概率分布的对数梯度,即 Score Function
的建模。为了学习这个对象,我们需要使用一种称为 score
matching 的技术,这是 Score-based 模型名称的由来。
Score Function
和 Score-based Models:什么是 Score?
核心思考出发点:在生成模型中,我们的目标是让模型学会真实数据的概率分布
\(p(x)\)。如果知道了这个分布,我们就能在概率高的地方采样,生成出逼真的图片。但真实分布极其复杂,直接建模
\(p(x)\)
非常困难(比如需要计算极其复杂的归一化常数 \(Z\))。
能不能换个思路? 我们不直接求概率的具体数值 \(p(x)\),而是求概率增加的方向!
就像你在爬山,你不需要知道整座山的海拔地图(绝对概率),你只需要知道站在当前位置,往哪个方向走最陡峭(梯度),顺着 ...
笔记|生成模型(六):DDIM理论
论文链接:Denoising
Diffusion Implicit Models
⬅️ 上一篇:笔记|生成模型(五):DDPM理论
➡️ 下一篇:笔记|生成模型(七):Score-Based理论
在DDPM理论中我们进行了 DDPM
的理论推导以及给出了核心代码。但 DDPM
有一个非常明显的问题:采样过程很慢。因为 DDPM
的反向过程利用了马尔可夫假设,所以每次都必须在相邻的时间步之间进行去噪,而不能跳过中间步骤。原始论文使用了
1000 个时间步,所以我们在采样时也需要循环 1000
次去噪过程,这个过程是非常慢的。
为了加速 DDPM 的采样过程,DDIM 在不利用马尔可夫假设的情况下推导出了
diffusion 的反向过程,最终可以实现仅采样 20~100 步的情况下达到和 DDPM
采样 1000 步相近的生成效果,也就是提速 10~50 倍。这篇文章将对 DDIM
的理论进行讲解,并实现 DDIM 采样的代码。
DDPM 的反向过程
首先我们回顾一下 DDPM 反向过程的推导,为了推导出 \(q(\mathbf{x}_{t-1}|\mathbf{x}_t)\)
这个条 ...
笔记|生成模型(五):DDPM理论
论文链接:Denoising
Diffusion Probabilistic Models
⬅️ 上一篇:杂谈|写作的目的
➡️ 下一篇:笔记|生成模型(六):DDIM理论
之前我们讨论过,生成模型的目的是:给定从真实分布 \(P(x)\) 中采样的观测数据 \(x\),训练得到一个由参数 \(\theta\) 控制、能够逼近真实分布的模型 \(p_\theta(x)\),这个任务太难了,所以使用变分推断去逼近,即为从一个标准高斯分布出发,经过某种映射或推导得到真实分布。而这个“某种映射”,并不要求一步到位,可以分多步执行。其中一个影响最大的实现方式,就是扩散模型。
DDPM 核心思想:拆沙堡与建沙堡
核心思考出发点:在生成模型(如 GAN 或
VAE)中,我们总是试图让神经网络“一步到位”地从一堆随机噪声中变出一张高清图片。这就像是让一个没有经验的人,瞬间凭空捏造出一座精美的沙堡,难度极高,模型很容易崩溃(比如
GAN 的模式崩溃)。
能不能换个思路?
拆沙堡(前向加噪):我们先拿一座建好的精美沙堡(真实图片),每次从上面拿走一小撮沙子,并随机撒上一把散沙(加高斯噪声)。经过成 ...