什么是 DiT(Diffusion Transformer)?它和 Sora 有什么关系?
简化版
DiT(Diffusion Transformer) 就是把扩散模型里的 U-Net 换成 Transformer:先把(潜空间的)图像切成一个个 patch,当作 token 序列,用 Transformer 做去噪,条件(时间步、类别/文本)通过 adaLN-zero(自适应层归一化 + 零初始化) 注入。它的最大价值是可扩展性——像大语言模型一样,加参数、加数据、加算力,效果稳定提升,符合 Scaling Law。Sora 正是 DiT 思想在视频上的延伸:把视频在时空上切成 spacetime patches(时空块),用 Transformer 扩散统一建模不同时长、分辨率、宽高比的视频,SD3 等新一代图像模型也转向了 DiT 架构。
详细版
DiT 的核心改动
- 图像 → token 序列:在潜空间把
z(如 32×32×4)切成 patch,每个 patch 线性投影成一个 token,加位置编码,得到一串 token。 - Transformer 去噪:用标准 Transformer block(自注意力 + FFN)处理这串 token,预测每个 patch 的噪声。
- 条件注入用 adaLN-zero:把时间步 t、类别/文本条件编码后,生成 LayerNorm 的缩放/偏移参数(以及残差的缩放门控),且零初始化,让每个 block 初始等价于恒等映射,训练稳定。
为什么重要:可扩展性
- U-Net 结构复杂、带各种归纳偏置,难以像 Transformer 那样干净地放大。
- DiT 证明:去掉 U-Net 的归纳偏置、纯用 Transformer,随着算力/参数增加,生成质量(FID)稳定下降,即扩散也有清晰的 Scaling Law。这为「用一套可扩展架构统一图像/视频生成」铺平了路。
Sora 的关键点
- 时空 patch(spacetime patches):把视频看成时间×空间的三维数据,切成时空块当 token,Transformer 统一处理。
- 潜空间压缩:先用视频压缩网络把视频压到时空潜表示,再在潜空间做扩散(Latent Diffusion 思想的视频版)。
- 原生支持可变时长/分辨率/宽高比:token 序列长度灵活,可训练不同规格的视频,还能做变长生成。
- 规模化:DiT + 海量视频数据 + 大算力,涌现出较强的「世界一致性」和物理直觉(虽仍有限)。
完整版教学
一、动机:为什么要把 U-Net 换掉
U-Net 在扩散里很成功,但它有「结构负担」:多尺度下采样、跳连、卷积 + 若干注意力,是一个手工设计、归纳偏置很重的架构。这带来两个问题:
- 不好扩展:把 U-Net 放大到几十亿参数时,结构里的各种设计选择(在哪加注意力、通道怎么涨)都要重调,缺乏 Transformer 那种「照着一个 block 堆下去就行」的干净可扩展性。
- 难以统一多模态:语言、图像、视频若都用 Transformer,就能共享一套工程、经验和 Scaling 规律。
DiT(Peebles & Xie, 2022)的问题是:能不能像 ViT 之于图像分类那样,用纯 Transformer 做扩散去噪,并且证明它可扩展? 答案是能,而且效果更好。
二、DiT 怎么把图像变成 token
沿用 ViT 的 patch 化思路,但作用在潜空间(省算力):
- VAE 把图像压成潜表示
z(如 256×256 图 → 32×32×4 潜图)。 - 把
z切成 p×p 的 patch(如 2×2),每个 patch 展平后线性投影成一个 D 维 token。 - 加位置编码,得到 token 序列,长度 = (32/2)² = 256。
- 送入 L 层 Transformer block,输出每个 token 的噪声预测,再拼回潜图形状。
patch 大小 p 是关键旋钮:p 越小 → token 越多 → 计算越贵但越精细。
三、adaLN-zero:DiT 注入条件的巧思
DiT 处理的条件是「时间步 t + 类别/文本」,这类全局条件用 adaLN(adaptive LayerNorm) 注入最合适:
- 把条件编码成向量,用一个小 MLP 回归出每个 Transformer block 里 LayerNorm 的缩放 γ 和偏移 β,以及自注意力/FFN 残差前的缩放门控 α。
- 特征先 LayerNorm,再
γ·x + β调制,残差乘 α。条件由此调制每一层的行为。
为什么加 “zero”:把回归 α 的那一层零初始化,使训练开始时 α=0,每个 block 的残差支路贡献为 0,整个 DiT 初始就是恒等映射。这和 ControlNet 的零卷积、扩散训练的稳定性哲学一脉相承——从”不破坏”的状态平滑开始学。论文实测 adaLN-zero 明显优于「相加」「交叉注意力」等其他条件注入方式。
把三处「零初始化」串起来记:DiT 的 adaLN-zero、ControlNet 的零卷积、扩散残差常用的零初始化——都是「让新模块开局零影响、再让梯度把它慢慢养大」,这是稳定训练大生成模型的通用招式。
四、DiT 最重要的结论:扩散也遵循 Scaling Law
DiT 论文系统地改变模型规模(层数、宽度、patch 大小),发现:模型的计算量(Gflops)越大,生成质量(FID)越好,关系平滑可预测。 这意味着扩散生成和大语言模型一样,可以靠「加规模」稳定提升,不必依赖巧妙的结构微调。这个结论的战略意义极大——它告诉工业界:想要更强的生成模型,堆 DiT + 数据 + 算力就行,路径清晰。SD3、PixArt、Sora 都是这条路线的产物。
五、Sora:把 DiT 搬到视频
Sora 是 DiT 思路在视频上的规模化延伸,几个要点:
- 视频潜空间压缩:先训一个视频压缩网络,把视频在空间和时间上同时压缩成时空潜表示,扩散在这个潜空间进行(Latent Diffusion 的视频版)。
- 时空 patch(spacetime patches):把时空潜表示切成三维块,每块当一个 token。这样图像(单帧)不过是「一帧的视频」,Sora 用同一套 token 化统一了图像和视频。
- 可变时长/分辨率/宽高比:token 序列长度可变,于是能在原生尺寸上训练和生成,而不必都缩放成固定方图——这被认为是 Sora 画质和构图更自然的原因之一。
- 规模化涌现:DiT + 海量视频 + 大算力,Sora 展现出较强的时空一致性、镜头连贯和一定的物理/世界直觉(但仍会违反物理、出现穿模等错误,说明它是数据驱动的近似,而非真正的物理引擎)。
六、面试拆解算例
扩散题最好用一次加噪和去噪的小推演讲清楚。假设训练图像像素归一化后是 x0,第 500 个时间步的噪声强度很高,模型看到的是混合样本 xt,目标通常是预测噪声 epsilon。如果预测噪声误差很小,就能从 xt 反推出更接近干净图像的估计;如果误差在早期步骤积累,后面细节会一起漂。
xt = sqrt(alpha_bar_t) * x0 + sqrt(1 - alpha_bar_t) * epsilon
model(xt, t, condition) -> predicted_epsilon
x0_hat = (xt - sqrt(1 - alpha_bar_t) * predicted_epsilon) / sqrt(alpha_bar_t)
| 维度 | 训练阶段 | 采样阶段 | 面试要点 |
|---|---|---|---|
| 输入 | 干净图 + 随机噪声 | 随机噪声或潜变量 | 起点不同 |
| 目标 | 学会预测噪声/速度 | 逐步还原样本 | 目标一致 |
| 条件 | 文本、边缘、姿态等 | CFG/ControlNet 引导 | 控制方向 |
| 代价 | 大量图像训练 | 多步迭代推理 | 速度质量权衡 |
干净图 x0 -> 加噪 xt -> 模型估计噪声 -> 反推 x0_hat -> 下一步更清晰
| | | |
训练目标 时间步 t 条件控制 误差累积
所以回答「什么是 DiT(Diffusion Transformer)?它和 Sora 有什么关系?」时,不要停在“从噪声生成图片”。要说明训练时为什么要加噪、模型到底预测什么、采样器怎样反推、条件信号如何改变方向,以及少步采样为什么会牺牲一部分稳定性。
七、常见误区与追问
- 误区:DiT 是全新的扩散理论。 不是,扩散的数学(加噪、预测噪声、采样)完全不变,DiT 只是把去噪网络从 U-Net 换成 Transformer。
- 误区:Sora 是”世界模型/物理引擎”。 它是数据驱动的生成模型,有一定世界一致性但会犯物理错误,不等于真的理解物理。
- 追问:DiT 相比 U-Net 的主要优势? 可扩展性强(清晰的 Scaling Law)、结构统一简洁、易于放大和跨模态复用。
- 追问:adaLN-zero 为什么比交叉注意力好(在 DiT 里)? 对「时间步+类别」这种全局条件,adaLN 调制更高效稳定;零初始化保证训练平滑。(文生图里对文本这种序列条件仍常配合交叉注意力/更长 token 拼接。)
- 追问:Sora 怎么支持不同时长和分辨率? 时空 patch 让序列长度可变,可在原生尺寸上训练与生成。
- 追问:DiT 的计算瓶颈? 自注意力对 token 数是 O(N²),视频 token 极多,故需潜空间压缩、较大 patch、以及高效注意力来控成本。
八、加强记忆
DiT 记「patch 化 + Transformer 去噪 + adaLN-zero + 可扩展」:把潜图切成 patch 当 token,用纯 Transformer 预测噪声,时间/类别条件经零初始化的自适应 LayerNorm 注入,最大贡献是证明了扩散也有干净的 Scaling Law——加规模就变强。 Sora 则是它的视频版:用时空 patch 统一图像与视频、在压缩潜空间做扩散、原生支持可变时长分辨率,靠 DiT+大数据+大算力规模化。简要说钉死关系:DiT = 用 Transformer 做扩散去噪的可扩展架构;Sora = 把 DiT 用时空 patch 搬到视频并规模化。