卷4 · 生成模型
4.5 DiT 与 Flow Matching:生成模型的现代化
展开本章目录与同卷章节
1. DiT:把 U-Net 换成 Transformer2. Flow Matching:训练目标的最简化3. 实操:在 diffusers 里摸到两者4. 自测题5. 动手作业案例 · 数值:一条直线上的速度与欧拉步6. 延伸资源同卷章节4.1 生成模型地图:五大家族一张图4.2 DDPM 原理与从零实现4.3 采样器与 Classifier-Free Guidance4.4 Latent Diffusion 与 Stable Diffusion:生成模型工程学4.5 DiT 与 Flow Matching:生成模型的现代化4.6 可控生成:ControlNet、IP-Adapter 与风格 LoRA4.7 视频生成:Sora 范式与开源阵营4.8 统一模型之争:Chameleon、Transfusion、Janus4.9 前沿瞭望:扩散语言模型本章目标:讲清当前最先进文生图/视频生成(SD3/FLUX/可灵/Sora 类)的两个共同底座——DiT 架构与 Flow Matching 训练目标。学完标准:能解释”扩散也可以是 Transformer”和”直线搬运为什么又简单又好”,并把 DDPM→Flow 的演化线完整串起来(卷4 的收官钥匙)。
1. DiT:把 U-Net 换成 Transformer
DiT(Peebles & Xie, 2023)做的事情简单到一句话:潜码 patch 化成 token 序列,用标准 Transformer(ViT 骨架)当去噪器。64×64×4 的潜码按 2×2 patch 切成 1024 个 token——从此生成模型和 LLM 共享同一套架构与工程栈(FlashAttention、FSDP、scaling law 全部平移可用)。
条件注入的关键设计:adaLN-Zero——t 和类别/文本条件不拼进输入,而是回归出每个 block 里 norm 层的 scale/shift/gate 参数(调制式注入,4.4 埋过线);gate 初始化为零,每个 block 从”恒等”出发——和 LoRA 的 B 置零(2.6)、Flamingo 的零门控(3.3)同一个哲学第三次出现:新模块不破坏预训练行为。
为什么 Transformer 赢了:
- scaling 表现更好——同等算力下 DiT 的 FID 随模型增大稳定下降(论文的 scaling 曲线是它中选 Sora 架构的直接原因);
- 与多模态天然兼容——文本/图像/视频都是 token,一套架构吃所有模态(Sora 的 spacetime patch:把时空块统一 token 化);
- 工程复利——LLM 侧的一切加速/分布式技术直接搬过来。
U-Net 没有死(小模型/端侧仍用它),但前沿大模型全面 Transformer 化。FLUX/SD3 的 MMDiT 更进一步:文本和图像各有一条数据流(各自的 QKV),在 attention 内部拼接交互——专为”两种模态地位对等”设计的双流结构。
2. Flow Matching:训练目标的最简化
DDPM 的装备清单:β schedule、ᾱ 闭式表、 ancestral 链、各种修正(cosine schedule、v-pred…)。Flow Matching(Lipman et al., 2023,及同期的 Rectified Flow)把这一切换成一条直线:
路径定义:数据 和噪声 之间走直线插值:
学习目标:网络 预测这条直线上的速度:
采样:从噪声 出发解 ODE ,欧拉法走 N 步到 。
为什么好:
- 无 schedule 无超参——没有 β 表、没有噪声约定,训练就一个 MSE;
- 路径直 → 采样快——DDPM 的概率流轨迹弯曲(要小步走),直线轨迹欧拉法十几步就走完。Rectified Flow 的 Reflow 还能把轨迹进一步拉直(走向 1-step 生成的理论通道);
- 理论干净——它就是连续归一化流(CNF)的免模拟训练法,likelihood 可算。
和 DDPM 的关系(卷4 收官的一笔画):两者同属”构造一条噪声↔数据的插值路径 + 学沿路径的速度/去噪方向”的大家族——DDPM 选了”马尔可夫加噪的弯曲路径”,Flow 选了”直线”。ε-pred、v-pred、velocity 本是同一种”方向场”在不同路径参数化下的名字(4.2 §5 的伏笔在此收线)。数学上殊途同归,工程上直线更省步数——这就是 SD3/FLUX 全面转向 Flow Matching 的全部理由。
3. 实操:在 diffusers 里摸到两者
# FLUX / SD3 管线:架构与目标都是新一代
from diffusers import FluxPipeline
pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell",
torch_dtype=torch.bfloat16).to("cuda")
img = pipe("a cyberpunk street food stall in Chengdu, night, neon",
num_inference_steps=4, guidance_scale=0.0).images[0] # schnell:4 步蒸馏
对照观察:SD1.5(U-Net+DDPM,25 步+CFG=50 次前向)vs FLUX-schnell(DiT+Flow 蒸馏,4 步 0 CFG)——架构现代化+目标简化+蒸馏的三重红利就摆在两张图的耗时里。学术开源:RectifiedFlow、flow-matching(Meta)库有完整训练代码,MNIST 级复现作业见下。
4. 自测题
- DiT 怎么处理潜码?条件怎么注入?(2×2 patch → 1024 token;adaLN-Zero 调制 norm 参数,gate 零初始化)
- “零初始化哲学”三连是哪三处?(Flamingo 门控 / LoRA B 置零 / DiT adaLN-Zero——新模块从恒等出发)
- Flow Matching 的训练对是什么?loss 是什么?(;速度场 MSE)
- 直线路径为什么采样快?(欧拉法对直线积分误差小——十几步即可;弯曲路径需要小步)
- MMDiT 的”双流”设计为哪个问题而生?(文本与图像模态地位对等、各自保有自己的表示流再交互)
- 一句话总结 DDPM→Flow 的演化?(同一家族内:把”路径”从弯曲的马尔可夫加噪换成直线插值,训练更简、采样更省步)
5. 动手作业
- 用 Meta
flow_matching库(或手写 30 行)在 MNIST 上训练一个 rectified flow,对比你 4.2 的 DDPM:同预算训练下 10 步采样的质量差——亲手验证”直线更快”; - 画出同一样本在 DDPM 与 RF 下的 ODE 轨迹(取 3 个中间点投影到二维)——亲眼看”弯 vs 直”;
- 跑 FLUX-schnell 4 步 vs SD1.5 25 步,统计两张卡上的耗时与显存,写一段”现代化红利”笔记;
- 挑战:读 Reflow 论文 §1,解释”把 (x1, x0) 配对重训一遍为什么能进一步拉直轨迹、通向 1-step 生成”。
案例 · 数值:一条直线上的速度与欧拉步
案例:为什么直线路径两步就到家
一维情形:数据 ,噪声 。路径 。
解析速度:,沿整条路径是常数——“直线”的数学含义。
训练目标演示:任取 → ;网络要从 预测出 0.8(DDPM 里这个角色是 ε,这里换成速度,任务同构)。
两步欧拉采样验证:从 出发、步长 0.5: → ✓ 两步精确到家。
对照:DDPM 的弯曲路径同样两步欧拉会差得很远(曲率让每步都引入偏差)——4.5 正文”直线省步数”的定量演示,也是 SD3/FLUX 能十几步出图的数学原因。
6. 延伸资源
- DiT 论文(Scalable Diffusion Models with Transformers)——重点看 scaling 曲线
- Rectified Flow / Flow Matching 论文——二选一精读(数学几乎同构)
- SD3 论文(Rectified Flow 版)——工业界如何选路径与采样器的完整实验记录
