想象你经营一家老照片修复工作室。顾客拿来的照片已经被噪声破坏成一团雪花点,AI 要做的事,就是一步步把雪花点擦掉,最终还原出清晰画面。以前,工作室的主干是一位叫 U-Net 的老牌师傅:他擅长把照片缩小、分层、再逐级放大,是典型的流水线专家。而 DiT(Diffusion Transformer)做了一次大胆的人事调整——把老牌 U-Net 换成通用性极强的 Transformer 大平台。 照片先被切成统一大小的拼图块,送进一个能让每块拼图彼此对话的开放大厅;大厅中央的“条件调度员”根据修复进度和照片类别,不断微调每个拼图块的亮度、对比度。拼图块越大,模型越省力但细节容易粗糙;拼图块越小、模型越宽越深,修复效果往往越好,但算力消耗也飞速上涨。DiT 这篇工作最重要的贡献,就是证明了只要喂够数据和算力,Transformer 完全可以替代 U-Net 成为扩散模型的新引擎,甚至表现更出色。

岗位关联

掌握 DiT 的架构设计与缩放规律,你就能理解为什么当前图像/视频生成模型纷纷从 U-Net 转向 Transformer,这也是读懂 Sora、Stable Diffusion 3 等后续工作的关键一步。

目录
  1. 可视化演示
  2. 架构演进:从 U-Net 到 DiT
  3. 图像分块:Patchify
  4. DiT 结构:让 Patch 彼此对话
  5. 条件调制:AdaLN-Zero
  6. 条件生成:类别引导
  7. 缩放策略:规模定律
  8. 对比效果:Transformer 骨干的价值
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示DiT用Transformer替代U-Net的设计:4个DiT Block内部结构(AdaLN-Zero→MSA→AdaLN-Zero→MLP),条件注入(timestep+class→MLP→modulation),以及DiT与U-Net架构对比和缩放曲线(FID vs 模型大小)。

本节配有交互动效(进入视口后自动加载,约 3KB)。

DiT Block与AdaLN-Zero t/c 条件注入:时间步t与类别c经MLP融合 AdaLN-Zero:自适应LayerNorm,初始化为零确保训练稳定 MSA+MLP:多头自注意力与前馈网络的标准化组合 x_out = α·x + γ·(Attn(LN(x)) + β) AdaLN-Zero通过可学习缩放实现条件注入。

架构演进:从 U-Net 到 DiT

老照片修复工作室曾经有一套非常成熟的流水线:U-Net 像一批资深修复师,先把照片缩小到不同尺度分别观察,再逐步放大补细节,同时还开辟了几条“捷径”,把早期看到的结构信息直接传给后期,保证大轮廓不丢失。这套设计非常精巧,但它有一个问题:每个环节都要专门定制,想扩大规模时,卷积层、跳跃连接、通道数都要重新调,扩展性不够灵活。

DiT 的出现,相当于把这条分工细致的流水线换成了一个开放广场。广场上每个人都能看到其他人,不需要预先规定谁和谁相邻。DiT 保留了扩散模型“逐步去噪”的整体流程,只是把负责去噪的骨干网络从 U-Net 换成了 Transformer。Transformer 不假设图像有固定的空间网格,而是把图像看成一组可以互相通信的 Token,这让模型更容易通过增加深度和宽度来扩展能力。

扩散模型的训练可以这样理解:我们把干净照片 \(x_0\) 一点点加噪声,得到中间状态 \(x_t\)。这个过程可以用一个非常简洁的公式描述:

\[

\displaystyle q(\mathbf{x}_t \mid \mathbf{x}_0) = \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\,\boldsymbol{\varepsilon}

\]

1. 含噪结果:\(\mathbf{x}_t\) 是第 \(t\) 步加噪后的图像,由干净图像 \(\mathbf{x}_0\) 和随机噪声共同生成。

\[

\mathbf{x}_t = \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\,\boldsymbol{\varepsilon}

\]

2. 原图保留系数:\(\sqrt{\bar{\alpha}_t}\) 控制原图信号还剩多少,越早期的步骤这个值越大,画面越清晰。

\[

\sqrt{\bar{\alpha}_t} \in [0, 1]

\]

3. 噪声强度系数:\(\sqrt{1 - \bar{\alpha}_t}\) 控制噪声影响有多大,\(t\) 越大,这个值越接近 1,画面越接近纯噪声。

\[

\sqrt{1 - \bar{\alpha}_t} \in [0, 1]

\]

如果把扩散生成比作一层层刮掉灰尘,U-Net 是经验丰富但结构固定的老工匠,而 DiT 则是一台可以随时加装模块的现代化设备。DiT 不改变“刮灰尘”的流程,只负责把“刮灰尘”的大脑换得更聪明、更可扩展。

图像分块:Patchify

进入 Transformer 的开放广场之前,我们得先把照片裁成统一大小的拼图块。如果整张图直接塞给 Transformer,它会因为数据量太大而无法处理;如果只塞一个像素,它又看不到足够丰富的语义。于是 DiT 采用了 ViT 的经典做法:Patchify。

Patchify 很像把一张大幅照片裁成一叠小方块。每个小方块被“压平”并映射成一个向量,也就是 Transformer 世界里的 Token。为了让模型知道谁在左上角、谁在右下角,每个 Token 还会额外加上位置编码。这样,原本像素之间的强局部关系,就被转换成序列中 Token 之间的全局关系。

假设图像进入 DiT 前的特征图高度为 \(H\)、宽度为 \(W\),每个 Patch 的大小是 \(p\),那么 Patch 的总数也就是 Token 序列长度为:

\[

\displaystyle N = \left\lceil \frac{H}{p} \right\rceil \times \left\lceil \frac{W}{p} \right\rceil

\]

1. 行方向块数:高度 \(H\) 除以每个 Patch 的高度 \(p\),向上取整得到每一列能放几个 Patch。

\[

\left\lceil \frac{H}{p} \right\rceil

\]

2. 列方向块数:宽度 \(W\) 除以 Patch 的宽度 \(p\),向上取整得到每一行能放几个 Patch。

\[

\left\lceil \frac{W}{p} \right\rceil

\]

3. 序列总长:把行块数和列块数相乘,就得到送入 Transformer 的 Token 数量。

\[

N = \left\lceil \frac{H}{p} \right\rceil \times \left\lceil \frac{W}{p} \right\rceil

\]

Patchify 是 DiT 与 U-Net 最大的分水岭之一。U-Net 天然把图像当作“有上下左右关系的像素网格”,而 DiT 把图像当作“一组顺序可以被打乱但需位置编码提示的拼图”。拼图切得越小,模型越能关注细节,但要处理的 Token 也越多,计算量会快速增长。

DiT 结构:让 Patch 彼此对话

在 DiT 的 Transformer Block 里,每个拼图块不再只是被局部卷积核扫过,而是进入一个开放大厅:所有拼图块同时发言,每块都能听到其他所有块的声音。这种“所有人对话所有人”的机制叫做自注意力(Self-Attention)。

自注意力会为每个 Token 生成三个角色:Query(我要找什么)、Key(我有什么)、Value(我能提供什么)。Token 之间通过 Query 和 Key 的匹配程度决定应该关注谁,再用对应的 Value 聚合信息。公式如下:

\[

\displaystyle \operatorname{Attention}(\mathbf{Q},\mathbf{K},\mathbf{V}) = \operatorname{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^{\top}}{\sqrt{d_k}}\right)\mathbf{V}

\]

1. 相关度打分:用 Query 矩阵 \(\mathbf{Q}\) 和 Key 矩阵 \(\mathbf{K}\) 做点积,得到每两个 Token 之间的相关分数。

\[

\mathbf{Q}\mathbf{K}^{\top}

\]

2. 缩放稳定:除以 \(\sqrt{d_k}\),避免维度变大后点积数值过大,导致 softmax 进入饱和区。

\[

\frac{\mathbf{Q}\mathbf{K}^{\top}}{\sqrt{d_k}}

\]

3. 加权聚合:softmax 把分数变成非负且和为 1 的权重,再乘上 Value 矩阵 \(\mathbf{V}\),完成信息融合。

\[

\operatorname{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^{\top}}{\sqrt{d_k}}\right)\mathbf{V}

\]

真正实用的 DiT Block 会使用多头注意力:把特征拆成几个子空间,每个头关注不同类型的关系,最后拼接起来。每个 Block 还会接一个前馈网络,对每个 Token 独立做非线性变换,并用残差连接把输入重新加到输出上。整体结构非常规整,像一栋每层结构都相同的办公楼,方便工程上堆叠更多楼层。

条件调制:AdaLN-Zero

老照片修复师不能闷头乱修,他需要知道两件事:现在是修复到第几步了?这张照片属于什么类型?Diffusion 模型也一样,DiT 必须把“当前噪声程度”和“类别标签”注入网络。DiT 使用的注射器叫 AdaLN-Zero。

AdaLN 的全称是 Adaptive Layer Normalization,也就是自适应层归一化。普通 LayerNorm 会把特征统一拉到一个标准范围,而 AdaLN 会根据条件 \(c\) 动态调整每个 Token 的缩放和偏移。AdaLN-Zero 中的 “Zero” 更是关键:每个残差分支的输出层初始化为零,让每个 Block 一开始什么都不做,相当于恒等映射。

\[

\displaystyle \mathbf{h}' = (1 + \gamma(\mathbf{c})) \odot \operatorname{LayerNorm}(\mathbf{h}) + \beta(\mathbf{c})

\]

1. 归一化:对输入特征 \(\mathbf{h}\) 做 LayerNorm,把每个 Token 的特征向量拉成均值为 0、方差为 1 的分布。

\[

\operatorname{LayerNorm}(\mathbf{h})

\]

2. 条件缩放:\(\gamma(\mathbf{c})\) 是由条件 \(c\) 生成的缩放向量,先加 1 再逐元素乘到归一化结果上。

\[

(1 + \gamma(\mathbf{c})) \odot \operatorname{LayerNorm}(\mathbf{h})

\]

3. 条件偏移:\(\beta(\mathbf{c})\) 是由条件 \(c\) 生成的偏移向量,用来让特征按条件平移到合适位置。

\[

\mathbf{h}' = (1 + \gamma(\mathbf{c})) \odot \operatorname{LayerNorm}(\mathbf{h}) + \beta(\mathbf{c})

\]

AdaLN-Zero 让 DiT 的训练非常稳定。DiT 论文实验表明,它比直接把条件拼进序列、或者用 Cross-Attention 注入条件的方式都更高效。它像一个聪明的调味师:先让菜品保持原味,再逐步根据顾客要求加盐加辣。

条件生成:类别引导

顾客来修复照片时往往会说:“这是一张风景照”或“这是一张人物照”。DiT 把这种类别提示编码成一个向量,作为条件加入模型。训练时,模型有时会看到类别条件 \(y\),有时会故意看不到条件,从而同时学会“有条件生成”和“无条件生成”。

真正采样时,为了得到更符合类别提示的结果,DiT 会把两条路线的预测噪声做外推,这就是无分类器引导(Classifier-Free Guidance)。公式中 \(w\) 是引导强度:

\[

\displaystyle \hat{\boldsymbol{\varepsilon}}_\theta = (1 + w)\,\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,t,y) - w\,\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,\varnothing)

\]

1. 条件预测:\(\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,t,y)\) 表示看到类别 \(y\) 时模型预测的噪声。

\[

\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,t,y)

\]

2. 无条件预测:\(\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,\varnothing)\) 表示不提供类别时模型预测的噪声。

\[

\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,\varnothing)

\]

3. 加权外推:用 \(1+w\) 放大有条件预测,再减去 \(w\) 倍无条件预测,得到最终更强烈的条件信号。

\[

\hat{\boldsymbol{\varepsilon}}_\theta = (1 + w)\,\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,t,y) - w\,\boldsymbol{\varepsilon}_\theta(\mathbf{x}_t,\varnothing)

\]

在 DiT 中,类别标签和时间步会一起生成条件向量 \(c\),再通过 AdaLN-Zero 注入每一个 Block。这样模型既能知道“现在该修复到什么程度”,也能知道“我该生成哪一类照片”,两者共同控制生成方向。

缩放策略:规模定律

DiT 论文最吸引人的地方,是它系统地研究了“模型变大之后会发生什么”。DiT 给出的答案是:在扩散模型里,Transformer 骨干拥有非常漂亮的缩放曲线——只要算力增加,生成质量就会稳定提高。

为什么 DiT 能做到这一点?因为它把模型能力拆成了几个清晰可控的方向:模型宽度(隐藏维度)、模型深度(Block 数量)、Patch 大小。DiT 通常会先让 VAE 把 256x256 的原图压缩成 32x32 的潜空间特征图,再在这个特征图上做 Patchify。假设潜空间边长为 32,Patch 大小为 \(p\),那么 Token 数为:

\[

\displaystyle N = \left(\frac{32}{p}\right)^2

\]

1. 单边块数:潜空间边长 32 除以 Patch 大小 \(p\),得到每边有多少个 Patch。

\[

\frac{32}{p}

\]

2. 二维网格:因为潜空间是正方形,所以 Token 数是单边块数的平方。

\[

\left(\frac{32}{p}\right)^2

\]

3. 代入观察:\(p=8\) 时只有 16 个 Token,\(p=2\) 时则有 256 个 Token,计算量随 Token 数平方级上涨。

\[

N = \left(\frac{32}{2}\right)^2 = 256

\]

DiT 的实验清晰展示了一条趋势:无论增大模型宽度、增加 Block 深度,还是减小 Patch 大小,只要总计算量 GFLOPs 上升,FID 指标就会下降,也就是生成质量更好。这说明 DiT 是“吃算力”的架构,也说明它具备良好的可扩展性。

对比效果:Transformer 骨干的价值

U-Net 像一位经验丰富的本地工匠,非常擅长在小数据集上用卷积的局部归纳偏置快速出活。但它的网络结构高度定制,想把模型从几千万参数扩展到几十亿参数,需要大量手工调整。DiT 则像一支具备标准流程的现代团队,结构简单统一,只要增加 Block 和宽度,就能平滑扩大容量。

DiT 的每个 Block 可以写成下面这种简洁形式:

\[

\displaystyle \mathbf{x}_{l+1} = \mathbf{x}_l + \operatorname{Attn}(\mathbf{h}) + \operatorname{FFN}(\mathbf{h}')

\]

1. 恒等主干:\(\mathbf{x}_{l+1}\) 是在上一层特征 \(\mathbf{x}_l\) 的基础上累加得到的,保证信息可以跨层直通。

\[

\mathbf{x}_{l+1} = \mathbf{x}_l + \cdots

\]

2. 注意力分支:\(\operatorname{Attn}(\mathbf{h})\) 是经过 AdaLN 调制后的多头自注意力结果,负责全局信息交换。

\[

\operatorname{Attn}(\mathbf{h})

\]

3. 前馈分支:\(\operatorname{FFN}(\mathbf{h}')\) 是经过第二次调制的 MLP 结果,负责逐 Token 的非线性变换。

\[

\operatorname{FFN}(\mathbf{h}')

\]

正是这种“主干恒等 + 分支注入”的简洁结构,让 DiT 比 U-Net 更容易扩大规模。最终,DiT 在 ImageNet 上的图像生成 FID 刷新了当时的纪录,并验证了 Transformer 在扩散模型中的骨干价值。后来许多知名生成模型都延续了 DiT 的设计思路,可以说 DiT 把扩散模型带入了一个新的架构时代。

AI 应用场景

广告创意素材生成

阶段:模型架构选型与训练

解决的问题:传统 U-Net 扩散模型在面对高分辨率、复杂构图时,需要人工调整大量卷积通道和跳跃连接,扩展性差。DiT 把图像切成 Patch 后交给 Transformer,能够用统一架构完成高质量生成。

具体案例:某广告团队利用 DiT 架构训练了一个场景生成模型,设计师输入“室内书房”和“自然光”等类别标签,系统就能生成多张候选海报背景。过去需要数天拍摄和修图,现在几分钟内即可完成初步创意。

大规模文生视频底座

阶段:预训练与规模化扩展

解决的问题:视频数据比图像更高维,U-Net 难以在超长时空序列上扩展。DiT 将视频看成时空 Patch 序列,用 Transformer 的全局注意力建模帧与帧之间的关系。

具体案例:视频生成团队参考 DiT 思路,把视频切成立体 Patch,再送入 Transformer 进行扩散去噪。随着训练视频量从百万级增加到十亿级,模型生成动作连贯性显著提升,证明了 DiT 架构在“大力出奇迹”路线上的优势。

可控图像编辑

阶段:推理与条件控制

解决的问题:创作者希望生成结果严格服从类别或编辑指令,但又不想在每次调整时重新训练模型。DiT 的 AdaLN-Zero 可以把类别向量、时间步等条件优雅地注入每个 Block。

具体案例:设计师用 DiT 模型做产品图生成,通过修改条件标签,从“白天外景”切换到“夜晚室内”,模型在保持产品主体不变的同时调整光影和背景。整个过程不需要 finetune,只需改变条件向量和引导强度 \(w\)。

Python 演示

python60 行
import numpy as np def softmax(x):    x = x - x.max(axis=-1, keepdims=True)    e = np.exp(x)    return e / e.sum(axis=-1, keepdims=True) class MiniDiTBlock:    def __init__(self, dim=16, heads=4):        self.dim = dim        self.heads = heads        self.head_dim = dim // heads        self.scale = self.head_dim ** -0.5        self.w_q = np.random.randn(dim, dim) * 0.02        self.w_k = np.random.randn(dim, dim) * 0.02        self.w_v = np.random.randn(dim, dim) * 0.02        self.w_o = np.zeros((dim, dim))  # 零初始化残差输出        self.w_ff1 = np.random.randn(dim, dim * 2) * 0.02        self.w_ff2 = np.zeros((dim * 2, dim))  # 零初始化前馈输出        self.w_mod = np.random.randn(dim, dim * 4) * 0.02     def forward(self, x, c):        B, T, D = x.shape        mod = c @ self.w_mod        shift_msa, scale_msa, shift_mlp, scale_mlp = np.split(mod, 4, axis=-1)         def adaln(h, scale, shift):            mu = h.mean(axis=-1, keepdims=True)            var = h.var(axis=-1, keepdims=True)            norm = (h - mu) / np.sqrt(var + 1e-6)            return norm * (1 + scale[:, None, :]) + shift[:, None, :]         h = adaln(x, scale_msa, shift_msa)        Q = h @ self.w_q        K = h @ self.w_k        V = h @ self.w_v        Q = Q.reshape(B, T, self.heads, self.head_dim).transpose(0, 2, 1, 3)        K = K.reshape(B, T, self.heads, self.head_dim).transpose(0, 2, 1, 3)        V = V.reshape(B, T, self.heads, self.head_dim).transpose(0, 2, 1, 3)         attn = softmax((Q @ K.transpose(0, 1, 3, 2)) * self.scale)        out = (attn @ V).transpose(0, 2, 1, 3).reshape(B, T, D)        x = x + out @ self.w_o.T         h2 = adaln(x, scale_mlp, shift_mlp)        x = x + np.maximum(0, h2 @ self.w_ff1) @ self.w_ff2        return x def demo():    np.random.seed(42)    B, T, D = 1, 16, 16    x = np.random.randn(B, T, D)    c = np.random.randn(B, D)    block = MiniDiTBlock(D, 4)    y = block.forward(x, c)    print('输入:', x.shape, '输出:', y.shape)    print('首 Token 输出均值:', round(float(y[0, 0, :].mean()), 4)) if __name__ == '__main__':    demo()
目的:用 NumPy 实现一个微型 DiT Block 前向计算,直观展示 AdaLN-Zero、多头自注意力和残差连接如何协同工作。
  1. self.w_o = np.zeros((dim, dim))零初始化残差输出,对应 AdaLN-Zero 的核心思想:初始阶段不让新增分支干扰主路径。
  2. mod = c @ self.w_mod条件向量 \(c\) 通过线性层生成四组调制信号,包括注意力和前馈网络各自的 scale 与 shift。
  3. shift_msa, scale_msa, shift_mlp, scale_mlp = np.split(mod, 4, axis=-1)把调制向量拆成四份,分别控制注意力层和 MLP 层。
  4. Q = Q.reshape(B, T, self.heads, self.head_dim).transpose(0, 2, 1, 3)把 Token 特征拆成多个头,每个头在独立子空间计算注意力。
  5. attn = softmax((Q @ K.transpose(0, 1, 3, 2)) * self.scale)用缩放点积计算注意力权重,让每个 Patch 决定该关注哪些其他 Patch。
  6. x = x + out @ self.w_o.T残差连接加上注意力输出,保证信息能在深层网络中直接流动。
  7. x = x + np.maximum(0, h2 @ self.w_ff1) @ self.w_ff2MLP 分支同样通过残差方式叠加,完成逐 Token 非线性变换。

常见误区

误区我一直以为 Patch 越小细节越丰富,所以 DiT 应该无脑选择最小 Patch,比如 Patch=2 一定比 Patch=8 好用,最多只是慢一点。

正解Patch 越小,Token 数量迅速增加,而注意力计算量随 Token 数量平方级增长。DiT 论文把 Patch 大小当作一个“计算量-效果”的缩放轴,而不是一个越小越好的绝对指标。在有限算力下,小 Patch 可能训练不动,甚至不如大 Patch 效果好。

为何常见:人们很容易从直觉出发,认为更细的切分能保留更多信息,却忽略了 Token 数量增长带来的非线性计算成本。

误区AdaLN-Zero 名字里有 Zero,我以为它会把输入特征全部置零,让模型从一片空白开始学习。

正解Zero 指的是残差分支的输出层初始化为零,而不是输入被清零。每个 Block 在初始状态下相当于恒等映射,输入是什么、输出还是什么。这样可以避免训练早期梯度不稳定,让模型逐渐学会用条件调制影响特征。

为何常见:望文生义,把 “Zero” 理解成对数据置零,忽视了它其实是针对“分支初始化”的设计。

误区DiT 不就是把 U-Net 的卷积换成 Transformer 吗?架构换皮而已,没什么本质创新。

正解DiT 不只是替换骨干,它还重新设计了图像进入网络的方式:Patchify、位置编码、AdaLN-Zero、无分类器引导等。这些组件共同决定了模型能否高效扩展,也直接影响了后续视频生成模型的设计。

为何常见:只看表面“U-Net → Transformer”的替换,忽略了模型如何把图像结构变成适合 Transformer 的序列,以及如何注入条件信息。

误区卷积有很强的局部归纳偏置,Transformer 没有,所以在图像生成这种像素任务上应该打不过 U-Net。

正解DiT 的实验表明,在充足数据和算力条件下,Transformer 的全局建模能力和良好的可扩展性可以完全弥补缺乏归纳偏置的劣势,甚至取得更低的 FID。

为何常见:这是小数据时代留下的经验。深度学习发展到大规模预训练阶段后,数据和算力往往比归纳偏置更重要。

误区DiT 应该和 ViT 一样,把 256x256 的原始像素直接切成 Patch,所以 Patch=2 意味着 128x128 个 Token,算力非常离谱。

正解DiT 是潜空间扩散模型,会先用 VAE 把 256x256 图像压缩成 32x32 的潜空间特征图,再在特征图上 Patchify。因此 Patch=2 时只有 16x16=256 个 Token,而不是上万个。

为何常见:不知道 DiT 是 latent diffusion 路线,把 Patchify 的输入当成了原始像素图。

面试题

Q1. DiT 中的 Patchify 主要作用是什么?

单选题 · easy

  • A.将图像切块并映射成 Token← 正确答案
  • B.直接将噪声变成清晰图像
  • C.完全去掉所有位置编码
  • D.用卷积替代全部注意力

答案:A。Patchify 把图像切成统一大小的 Patch,并把每个 Patch 映射成 Transformer 能处理的 Token。B 是扩散模型整体目标,C 和 D 与 Patchify 无关。

Q2. AdaLN-Zero 中的 “Zero” 指什么?

单选题 · easy

  • A.将残差分支初始化为零← 正确答案
  • B.将注意力系数全部清零
  • C.将输入图像全部设为纯黑
  • D.将时间步嵌入全部置零

答案:A。“Zero” 指 DiT 每个 Block 的残差分支从零初始化开始,让网络初始阶段接近恒等映射,从而稳定训练。它不是把输入、注意力或条件信息清零。

Q3. Patchify 之后,图像变成什么形式?

单选题 · easy

  • A.图像被切成二维网格补丁
  • B.图像变成一维 Token 序列← 正确答案
  • C.图像变成连续卷积核
  • D.图像变成纯噪声分布

答案:B。Patchify 把 Patch 展平成向量,再拼接成一维 Token 序列输入 Transformer。二维网格补丁是中间步骤,但最终送给注意力计算的是序列形式。

Q4. 扩散前向过程中,含噪图像由干净图像和噪声如何混合?

单选题 · mid

  • A.按系数加权并添加随机噪声← 正确答案
  • B.直接使用随机噪声替换原图
  • C.将图像和噪声做傅里叶混合
  • D.把图像与噪声做通道拼接

答案:A。前向过程保留一部分原图信号,再按强度系数混入随机噪声。B 忽略保留信号,C 和 D 不是扩散前向的标准操作。

Q5. DiT 中自注意力机制的核心作用是?

单选题 · mid

  • A.让每个 Patch 和其他 Patch 交互← 正确答案
  • B.只让相邻 Patch 进行特征交互
  • C.把 Patch 数量随机减少一半
  • D.对 Patch 做局部卷积增强

答案:A。自注意力让序列中任意两个 Token 都能计算相关度并交换信息,是一种全局交互机制,而不是只关注相邻 Patch 的局部卷积。

Q6. 关于 DiT 相比 U-Net 的描述,正确的有哪些?

多选题 · mid

  • A.具备更强模型可扩展能力← 正确答案
  • B.随参数增长效果持续变好← 正确答案
  • C.完全不需要任何位置编码
  • D.适合处理 Patch 序列信息← 正确答案

答案:ABD。DiT 的结构规范、可扩展性强,在算力提升时能稳定带来效果提升,也天然适合 Patch 序列建模。但 Patch 化后必须加入位置编码,否则模型无法感知空间顺序。

Q7. AdaLN-Zero 的调制信号可以由哪些信息生成?

单选题 · mid

  • A.时间步嵌入信号与类别标签← 正确答案
  • B.原始图像像素与高频噪声
  • C.模型梯度模长与学习率
  • D.随机种子与历史生成结果

答案:A。AdaLN-Zero 的条件向量通常由时间步嵌入和类别标签嵌入相加或拼接得到。原始像素、梯度、学习率和随机种子都不是标准条件输入。

Q8. DiT 缩放实验验证了哪条规律?

单选题 · hard

  • A.更大模型与算力带来更低FID← 正确答案
  • B.更大模型并不一定带来收益
  • C.Patch越小生成质量一定越差
  • D.层数增加对效果没有帮助

答案:A。DiT 论文展示了清晰的缩放规律:模型越大、训练算力越高,FID 越低。B 与实验结论相反,C 和 D 都忽略了计算量这个关键变量。

Q9. DiT 的设计中包含以下哪些组件?

多选题 · hard

  • A.Patch Embedding 输入层← 正确答案
  • B.多头自注意力模块← 正确答案
  • C.U-Net 跳跃连接结构
  • D.AdaLN-Zero 调制模块← 正确答案

答案:ABD。DiT 由 Patch Embedding、多头自注意力、前馈网络和 AdaLN-Zero 调制组成。U-Net 的跳跃连接是旧骨干的核心结构,DiT 中并没有延续这一设计。

Q10. 关于 DiT 中位置编码的作用,描述最准确的是?

单选题 · extreme

  • A.位置编码帮助模型感知 Patch 的空间位置← 正确答案
  • B.位置编码只在训练时被使用,推理时删掉
  • C.位置编码会完全破坏模型的全局注意力
  • D.位置编码与 Patch 的排列顺序完全无关

答案:A。Transformer 本身不感知顺序,加入位置编码后才能区分左上角和右下角的 Patch。B 错在推理时同样需要位置编码,C 和 D 与位置编码的设计目的相反。