云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

卷4 · 生成模型

4.5 DiT 与 Flow Matching:生成模型的现代化

约 6 分钟阅读
全书目录

展开本章目录与同卷章节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 赢了:

  1. scaling 表现更好——同等算力下 DiT 的 FID 随模型增大稳定下降(论文的 scaling 曲线是它中选 Sora 架构的直接原因);
  2. 与多模态天然兼容——文本/图像/视频都是 token,一套架构吃所有模态(Sora 的 spacetime patch:把时空块统一 token 化);
  3. 工程复利——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)把这一切换成一条直线:

路径定义:数据 x0x_0 和噪声 ϵ\epsilon 之间走直线插值:

xt=(1−t) x0+t ϵ,t∈[0,1]x_t = (1-t)\, x_0 + t\, \epsilon, \quad t \in [0, 1]

学习目标:网络 vθ(xt,t)v_\theta(x_t, t) 预测这条直线上的速度:

L=∥vθ(xt,t)−(ϵ−x0)∥2L = \| v_\theta(x_t, t) - (\epsilon - x_0) \|^2

采样:从噪声 x1x_1 出发解 ODE dxdt=vθ(xt,t)\frac{dx}{dt} = v_\theta(x_t, t),欧拉法走 N 步到 x0x_0。

为什么好:

  1. 无 schedule 无超参——没有 β 表、没有噪声约定,训练就一个 MSE;
  2. 路径直 → 采样快——DDPM 的概率流轨迹弯曲(要小步走),直线轨迹欧拉法十几步就走完。Rectified Flow 的 Reflow 还能把轨迹进一步拉直(走向 1-step 生成的理论通道);
  3. 理论干净——它就是连续归一化流(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. 自测题

  1. DiT 怎么处理潜码?条件怎么注入?(2×2 patch → 1024 token;adaLN-Zero 调制 norm 参数,gate 零初始化)
  2. “零初始化哲学”三连是哪三处?(Flamingo 门控 / LoRA B 置零 / DiT adaLN-Zero——新模块从恒等出发)
  3. Flow Matching 的训练对是什么?loss 是什么?((xt,t)→ϵ−x0(x_t, t) \to \epsilon - x_0;速度场 MSE)
  4. 直线路径为什么采样快?(欧拉法对直线积分误差小——十几步即可;弯曲路径需要小步)
  5. MMDiT 的”双流”设计为哪个问题而生?(文本与图像模态地位对等、各自保有自己的表示流再交互)
  6. 一句话总结 DDPM→Flow 的演化?(同一家族内:把”路径”从弯曲的马尔可夫加噪换成直线插值,训练更简、采样更省步)

5. 动手作业

  1. 用 Meta flow_matching 库(或手写 30 行)在 MNIST 上训练一个 rectified flow,对比你 4.2 的 DDPM:同预算训练下 10 步采样的质量差——亲手验证”直线更快”;
  2. 画出同一样本在 DDPM 与 RF 下的 ODE 轨迹(取 3 个中间点投影到二维)——亲眼看”弯 vs 直”;
  3. 跑 FLUX-schnell 4 步 vs SD1.5 25 步,统计两张卡上的耗时与显存,写一段”现代化红利”笔记;
  4. 挑战:读 Reflow 论文 §1,解释”把 (x1, x0) 配对重训一遍为什么能进一步拉直轨迹、通向 1-step 生成”。

案例 · 数值:一条直线上的速度与欧拉步

案例:为什么直线路径两步就到家

一维情形:数据 x0=0.2x_0 = 0.2,噪声 ϵ=1.0\epsilon = 1.0。路径 xt=(1−t)×0.2+t×1.0x_t = (1-t)\times 0.2 + t \times 1.0。

解析速度:dxdt=ϵ−x0=0.8\frac{dx}{dt} = \epsilon - x_0 = 0.8,沿整条路径是常数——“直线”的数学含义。

训练目标演示:任取 t=0.25t=0.25 → xt=0.4x_t = 0.4;网络要从 (xt=0.4, t=0.25)(x_t{=}0.4,\ t{=}0.25) 预测出 0.8(DDPM 里这个角色是 ε,这里换成速度,任务同构)。

两步欧拉采样验证:从 x(1)=1.0x(1)=1.0 出发、步长 0.5: x(0.5)=1.0−0.5×0.8=0.6x(0.5) = 1.0 - 0.5\times0.8 = 0.6 → x(0)=0.6−0.5×0.8=0.2x(0) = 0.6 - 0.5\times0.8 = 0.2 ✓ 两步精确到家。

对照:DDPM 的弯曲路径同样两步欧拉会差得很远(曲率让每步都引入偏差)——4.5 正文”直线省步数”的定量演示,也是 SD3/FLUX 能十几步出图的数学原因。

6. 延伸资源

  • DiT 论文(Scalable Diffusion Models with Transformers)——重点看 scaling 曲线
  • Rectified Flow / Flow Matching 论文——二选一精读(数学几乎同构)
  • SD3 论文(Rectified Flow 版)——工业界如何选路径与采样器的完整实验记录