Sora 之所以能生成连贯且清晰的长视频,核心在于它没有沿用传统扩散模型常用的 U-Net 主干网络,而是选择了基于 Transformer 的 Diffusion Transformer(DiT)架构。这一选择让视频生成模型可以像语言模型处理文本 token 一样处理视频 patch,从而获得更好的扩展性和长距离建模能力。理解 DiT 的运作方式,需要从扩散过程、视频的 token 化、条件注入以及训练目标几个层面逐步拆解。

从 U-Net 到 Transformer:扩散模型的主干网络演进
早期的扩散模型如 DDPM、Stable Diffusion 普遍采用 U-Net 作为去噪网络。U-Net 依靠卷积层和跳跃连接,在图像生成任务上表现稳定,因为卷积天然带有局部归纳偏置,适合捕捉像素邻域关系。但当把扩散模型迁移到视频生成时,U-Net 的局限性开始显现。视频包含时间维度的动态变化,长距离的时空依赖很难通过堆叠卷积来高效捕捉,而且卷积操作对序列长度不敏感,不利于模型在更大规模数据上扩展。
Transformer 则完全不同。它没有卷积的局部假设,完全依赖自注意力机制计算序列中任意两个位置之间的关联。DiT 将视频在潜在空间中的表示切分成若干 patch,每个 patch 对应一个 token,然后让 Transformer 在这些 token 上做全局交互。这样一来,模型可以同时关注到远距离的空间区域和相隔多帧的时间片段,非常适合视频这种高维时序数据。Sora 选择 DiT 作为核心,正是因为 Transformer 在参数规模扩大后性能提升比 U-Net 更稳定,也更接近语言模型的技术栈。
此外,DiT 还把扩散模型的去噪过程与 Transformer 的序列建模能力结合起来。去噪网络的输入是带噪声的潜在表示,输出是对噪声的预测。Transformer 负责从带噪 token 中提取特征,并通过条件信息控制去噪方向。这种设计让 DiT 既能享受扩散模型生成多样性的优势,又能利用 Transformer 的灵活性和并行计算效率。
视频的 Patch 化与位置编码
DiT 处理视频的第一步是将高维视频数据压缩到潜在空间。Sora 使用一个预训练的 VAE 编码器,把原始视频帧转换成较低分辨率的潜在表示,这个过程大大降低了计算量。接着,潜在表示被切分成固定大小的 patch,通常空间上按 2 的倍数切块,时间上可以按帧或帧组切块。每一个 patch 经过线性投影变成一个 token 向量,整个视频就变成一个 token 序列。
由于 Transformer 本身没有顺序概念,必须给每个 token 加入位置编码。对于视频来说,位置编码需要同时表达空间位置和时间位置。Sora 的做法是分别学习空间位置编码和时间位置编码,再叠加到 token 上。空间位置编码告诉模型某个 patch 在某一帧内的坐标,时间位置编码告诉模型这个 patch 属于第几帧。这样模型就能区分视频左上角的 patch 和视频中间帧的 patch,避免生成时出现空间错乱或时间顺序颠倒。
位置编码的具体形式可以是可学习的嵌入,也可以是正弦位置编码。可学习嵌入的优点是模型能自适应地学到最合适的表示,但可能会限制推理时的视频长度。Sora 为了支持不同分辨率和时长的视频,采用了更灵活的位置编码策略,允许在推理时外推到训练时未见过的长度。这一点对生成一分钟甚至更长的视频至关重要。
DiT Block 的内部细节:AdaLN 与交叉注意力
DiT 的基本构建块由多头自注意力、交叉注意力和前馈网络组成,但它在归一化方式上做了重要修改。传统 Transformer 使用 LayerNorm 进行归一化,而 DiT 采用自适应层归一化(AdaLN)。AdaLN 的核心思想是根据扩散时间步和条件信息动态生成归一化层的缩放参数和偏移参数,而不是使用固定的可学习参数。
具体来说,时间步 t 和文本提示等条件先通过一个 MLP 生成一组 scale 和 shift 向量,这两个向量会作用到 AdaLN 层上,对输入特征进行仿射变换。这样做的好处是,模型能够根据当前的噪声水平调整每一层的特征分布。比如在去噪早期,噪声较大,模型可能需要更强的特征调节;在去噪后期,噪声较小,调节力度会相应减弱。AdaLN 让 DiT 在不同噪声阶段都有合适的表征能力。
文本提示的注入则通过交叉注意力完成。带噪的 video patch token 作为查询,文本编码器输出的文本 token 作为键和值,自注意力之后的特征会与文本特征进行交叉注意力计算。这样生成过程就能被文本语义引导。Sora 的文本编码器通常基于大规模语言模型,能够理解复杂的动作描述、场景细节和风格要求,再通过交叉注意力把这些信息传递给视频 token。
扩散过程与训练目标
DiT 在潜在空间执行扩散。训练时,先对干净的潜在表示逐步添加高斯噪声,直到完全变成纯噪声。模型的任务是学习逆转这个过程,即从带噪输入中预测出添加的噪声。损失函数通常采用简单的均方误差,目标是让预测噪声尽可能接近真实噪声。训练过程与 DDPM 类似,只是主干网络换成了 Transformer。
推理时从随机噪声开始,逐步去噪。每一步都让模型预测噪声,然后从当前样本中减去它,再经过调度器得到下一步样本。为了提升生成质量,Sora 还使用了无分类器引导技术,在训练时以一定概率丢弃文本条件,推理时同时计算有条件和无条件的噪声预测,再通过插值增强条件的影响力。这种方法能让生成的视频更贴合文本描述,但会增加计算成本。
此外,Sora 还可能使用 v 预测目标或连续时间扩散模型等改进。这些技术让扩散过程更稳定,减少训练时的数值误差。不过核心仍然是 DiT 作为去噪网络,在潜在空间处理 patch token。与像素空间扩散相比,潜在空间扩散大幅减少了显存占用,使得训练高分辨率长视频成为可能。
一个简化的 DiT Block 代码示例
下面用 PyTorch 风格展示一个 DiT 块的核心逻辑,代码做了简化,只保留 AdaLN、自注意力和交叉注意力的关键步骤,实际 Sora 的实现会更复杂,但结构类似。
import torch
import torch.nn as nn
class DiTBlock(nn.Module):
def __init__(self, dim, num_heads, mlp_ratio=4.0):
super().__init__()
self.norm1 = nn.LayerNorm(dim, elementwise_affine=False)
self.attn = nn.MultiheadAttention(dim, num_heads, batch_first=True)
self.norm2 = nn.LayerNorm(dim, elementwise_affine=False)
self.cross_attn = nn.MultiheadAttention(dim, num_heads, batch_first=True)
self.norm3 = nn.LayerNorm(dim, elementwise_affine=False)
self.mlp = nn.Sequential(
nn.Linear(dim, int(dim * mlp_ratio)),
nn.GELU(),
nn.Linear(int(dim * mlp_ratio), dim)
)
self.adaLN_modulation = nn.Sequential(
nn.SiLU(),
nn.Linear(dim, 6 * dim)
)
def forward(self, x, cond, context):
# cond 是时间步和文本条件的组合,context 是文本 token
shift_msa, scale_msa, shift_mlp, scale_mlp, shift_ca, scale_ca = self.adaLN_modulation(cond).chunk(6, dim=-1)
# 自注意力 + AdaLN
x = x + self.attn(self.norm1(x) * (1 + scale_msa) + shift_msa,
self.norm1(x) * (1 + scale_msa) + shift_msa,
self.norm1(x) * (1 + scale_msa) + shift_msa)[0]
# 交叉注意力
x = x + self.cross_attn(self.norm2(x) * (1 + scale_ca) + shift_ca, context, context)[0]
# 前馈网络 + AdaLN
x = x + self.mlp(self.norm3(x) * (1 + scale_mlp) + shift_mlp)
return x
这段代码展示了 AdaLN 如何根据条件动态调整归一化后的特征,以及自注意力和交叉注意力的排布。实际 DiT 通常会堆叠多个这样的 block,同时在输入时加入位置编码,输出时经过线性层预测噪声。Sora 的完整实现还会包含 3D patch 切分、高效注意力机制和分布式训练优化,但整体思路与这个 simplified 版本一致。
为什么 DiT 更适合视频生成
相比 U-Net,DiT 最大的优势在于扩展性和序列建模能力。当模型参数量从几亿增加到几十亿时,Transformer 的性能提升通常比卷积网络更显著。Sora 作为大规模视频生成模型,需要处理海量的视频数据,DiT 这种架构能更好地利用算力和数据。同时,视频天生就是序列数据,patch token 的表示方式让模型可以像处理文本一样处理视频,方便与语言模型、多模态模型统一。
DiT 的另一个优势是并行计算效率高。Transformer 的自注意力可以并行处理所有 token,而卷积 U-Net 在时间维度上往往需要循环或 3D 卷积,计算复杂度较高。虽然自注意力在长序列下的计算量是平方级别,但通过 FlashAttention 等优化手段,Sora 可以在可接受的成本内训练和推理。这也解释了为什么 Sora 能生成较长且一致性的视频。
当然,DiT 也有代价,比如训练不稳定、需要大量数据和正则化等。但整体来看,DiT 为视频生成提供了一条可扩展的路径,Sora 的成功也验证了这条路径的有效性。未来这种架构很可能继续沿用到更高质量、更长时长的视频生成任务中,并与音频、文本等多模态信号进一步融合。

