想象你走进一间古老的雕塑工作室。大理石毛坯堆在墙角,每一块都布满噪点般的石纹,看不出任何形状。一位雕塑家走过来,并不急着动刀,而是先绕圈端详,手里握着客户递来的图纸——上面写着“一个穿红裙的女孩在樱花树下转身”。然后他深吸一口气,第一刀落在毛坯上。接下来的几十刀、几百刀,他每一刀都只凿掉一点点石料,边凿边退后观察整体轮廓,再回到细节,甚至闭上眼睛回想上一刀的位置、预判下一刀的走向。几个小时过去,一尊栩栩如生的雕像从混沌中浮现,衣褶的弧度、转身时裙摆的摆动,全都符合你脑中“真实世界”的直觉。 Sora生成视频,干的正是这件“从毛坯到雕像”的事。它手里的“大理石毛坯”,是一团完全随机的噪声像素;它手中的“凿子”,是一个名为 DiT(Diffusion Transformer)的神经网络;那张“客户图纸”,就是一句文本提示;而“绕圈端详”、“回想上一刀”、“预判下一刀”这些动作,对应着模型里的空间注意力、时间注意力和物理世界模拟。本文要讲的,就是这位“数字雕塑家”的工作台全貌:它如何把噪声一步步雕刻成连贯、清晰、符合物理直觉的长视频。

岗位关联

对 AIGC 从业者而言,理解 DiT 视频模型等于拿到了 Sora 级视频生成引擎的认知地图——无论是做模型部署、提示词工程还是效果优化,你都能准确说出“这刀该往哪儿凿、为什么这么凿”。

目录
  1. 可视化演示
  2. 视频生成原理
  3. DiT核心优势
  4. 时空注意力
  5. 长视频生成
  6. 物理世界模拟
  7. 训练推理优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示DiT模型核心流程:视频Patch化编码、扩散去噪生成过程与时空注意力机制,点击切换三种模式。

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

Patch化:视频块化编码 视频帧被切分为时空块 每块编码为Token序列 N = T*H*W / (t*h*w) 块数=总时空体积除以块大小

视频生成原理

走进那间雕塑工作室,你最先看到的是毛坯堆。每一块大理石都布满灰色噪点般的纹理,隐隐约约能看出一点“人形”的端倪,却完全不成作品。雕塑家告诉你一个秘密:他其实是从“成品”反向练功的——先把一尊完成的雕像录下来,再一遍遍用砂纸打磨、覆盖石膏、泼上颜料,直到它变成一块看不出形状的毛坯;练多了,他闭着眼也能从毛坯里“猜”出当初那个人形。这个过程,就是扩散模型的全部精神内核。

在技术世界里,这块“毛坯”就是一段加满噪声的视频。扩散模型有一个“前向过程”:从一段干净的真实视频出发,在几百个时间步里逐步注入高斯噪声,每走一步画面就更模糊、更“雪花”,直到最后完全变成一坨随机噪点。模型要学的,是它的“反向过程”:给定一个带噪的视频和时间步编号,猜出这一步被加进去的噪声,然后把它减掉,一步一步倒退着把视频“凿”出来。Sora 生成视频,本质上就是从一个纯噪声张量出发,反向执行几百次这个“凿刻”动作。

但视频和图片有个关键差异:视频有“多帧关联”。雕塑家不会只盯着某一帧画面下刀,他还记得上一帧裙摆的风向、预判下一帧转身的角度。所以 DiT 在去噪时,输入的不是一张图,而是几十帧拼接成的一个“时空立方体”,让所有帧在同一个模型里互相参考。扩散模型为这个过程提供数学框架,每一步该加多少噪、该减多少噪,都由下面这个公式说了算。

在反向去噪时,网络的目标是尽量还原“刚被加进去的那把噪声”。训练过程可以看成让雕塑家反复练习“看到毛坯猜凿痕”:给他看加噪后的画面、时间步和文本提示,让他输出刚才被加入的噪声,再和真实噪声做对比。误差越小,说明他下刀越准。

到这里你已明白:扩散模型不是“无中生有”地画视频,而是从噪声毛坯里一点一点“还原”出视频。每一刀都不神秘,神秘的是那几百刀如何被组织得井井有条——这就要请出我们的雕塑家主角:DiT。

q(xt∣xt−1)=N(xt; 1−βt xt−1, βtI)q(x_t \mid x_{t-1}) = \mathcal{N}\left(x_t;\ \sqrt{1 - \beta_t}\, x_{t-1},\ \beta_t \mathbf{I}\right)
  1. 期望求平均$\mathbb{E}_{t,\epsilon}$ 表示对所有随机时间步和所有采样噪声取平均。相当于要求雕塑家不只是擅长某一刀,而是在“毛坯还很完整”和“毛坯已面目全非”的每个阶段都下得了刀。
    Et,ϵ [⋅]=1T∑t=1T∫p(ϵ) (⋅) dϵ\displaystyle \mathbb{E}_{t,\epsilon}\,[\cdot] = \frac{1}{T}\sum_{t=1}^{T}\int p(\epsilon)\,(\cdot)\,d\epsilon
  2. 真实噪声$\epsilon$ 是前向加噪时实际注入的噪声,相当于“标准答案凿痕”。它由随机数生成器直接采样得到,无法从画面上直接看出来。
    ϵ∼N(0,I)\displaystyle \epsilon \sim \mathcal{N}(0, \mathbf{I})
  3. 模型预测$\epsilon_\theta(x_t, t, c)$ 是 DiT 模型在看过带噪画面 $x_t$、时间步 $t$ 和文本条件 $c$ 之后,预测出来的噪声。雕塑家手里拿着图纸($c$),心里记着进度($t$),眼睛盯着毛坯($x_t$),给出他的判断。
    ϵθ:(xt,t,c)↦ϵ\displaystyle \epsilon_\theta: (x_t, t, c) \mapsto \epsilon
  4. 平方距离$\|\epsilon - \epsilon_\theta\|^2$ 是预测与真实噪声的平方差,衡量“猜得准不准”。这个值越小,反向去噪的每一步就越扎实,最终视频也就越清晰。
    ∥ϵ−ϵθ(xt,t,c)∥2\displaystyle \left\|\epsilon - \epsilon_\theta(x_t, t, c)\right\|^2

DiT核心优势

老匠人的工作室里,工具有一套:锤子、凿子、锉刀,每一件都有专门用途,但换个活儿就得重新磨刀。传统视频生成模型常用的 U-Net 就像这套老工具:它在“去噪”这件事上经验丰富,可一旦想让模型变大、数据变多,结构就捉襟见肘,改造起来像给老凿子焊接延长杆,别扭又脆弱。而 DiT 把整间工作室重构成了现代流水线:所有工具都标准化,随时可以加装新工位。

DiT 的全称是 Diffusion Transformer,它用 Transformer 架构取代了昔日扩散模型的骨架 U-Net。第一项关键升级叫“Patch 化输入”:视频画面不再被当作一整块像素网格,而是被切成一个个小方块——比如 2×2 像素一块——每一块被映射成一个 token,相当于把一块大理石毛坯先划成整齐的方格,每个方格上都贴好标签。Transformer 最擅长的就是处理这种“一串带标签的方块”,所以视频帧变成了它最熟悉的“词语序列”。

第二项优势是“可扩展性”。Transformer 的层数、注意力头数、隐藏维度都可以按算力预算平滑放大,数据和参数越多,效果越好;而 U-Net 的结构一旦放大就容易失稳。这就像一个标准化工作室,客户越多、订单越复杂,只需增加同样的工位就能消化,不必重造工具。第三项是“文本条件融合”:提示词可以被编码成向量,通过交叉注意力直接注入每一层 Transformer——雕塑家手里的图纸,随时可以修改,不需要重新学习基本功。

这些优势汇成一句话:DiT 把“凿石头”这件手艺活,变成了“标准化流水线”。每一层 Transformer block 都是同一个工位:看一遍所有方块(全局注意力),想一想自己的方块和其他方块的关系,再更新一下自己的特征。千千万万个这样的工位堆叠起来,雕塑家的刀法就从“凭感觉”进化成了“有章法”。

时空注意力

雕塑家最厉害的本事,不是单看某一块石头下刀,而是能同时处理两种“看”:一种是盯着眼前几厘米的局部纹理,判断这一刀的深浅——这是“空间注意力”;另一种是退后几步,把动作从头到尾串起来看,确认裙摆的摆动是连贯的、转身没有卡顿——这是“时间注意力”。两种眼光交替使用,作品才既有细节又整体流畅。

在 DiT 里,这两种眼光被统一成同一种数学操作:注意力机制。视频被 Patch 化后,每一帧的每个小方块都成为一个 token。空间注意力让“同一帧内”的所有方块互相交换信息——比如红色裙摆的方块去注意到旁边樱花瓣的方块,确保颜色和轮廓协调;时间注意力则让“不同帧之间”的对应方块互相联系——比如第 3 帧里的球,去“看”第 2 帧和第 4 帧里的球在哪里,从而保证运动轨迹连贯。Sora 的时空注意力可以并行处理这两种关系,还能根据需要把时间维度做特殊掩码来模拟帧率变化。

注意力机制的具体运算像一场“投票大会”:每个方块都举手问“我应该参考谁”(查询 Q),其他方块亮出身份牌(键 K),大家根据匹配程度投票,最后按票数加权汇总别人的信息(值 V)。票数越高的方块,对当前刀法的影响越大。

DiT 还设计了“随机掩码”训练:训练时故意遮住部分帧或部分方块,让模型从可见的部分去预测被遮住的内容。这相当于让雕塑家蒙上眼睛摸一块毛坯,凭手感猜出整尊雕像的全貌——这项训练让 Sora 在推理时能灵活处理不同帧率、不同时长的视频,也为长视频生成打下了基础。

Attention(Q,K,V)=softmax(QK⊤dk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) V
  1. 查询与键的匹配$QK^\top$ 计算“当前方块”和“其他方块”之间的相似度。$Q$ 是查询矩阵,代表“我要找什么”;$K$ 是键矩阵,代表“我能提供什么”。两者点积越大,说明越该互相参考。
    Scoreij= qi⋅kj dk\displaystyle \text{Score}_{ij} = \frac{\,q_i \cdot k_j\,}{\sqrt{d_k}}
  2. 缩放系数除以 $\sqrt{d_k}$ 是为了防止向量维度很大时点积数值过大,让后续 softmax 过于“极端”。就像雕塑工作室里灯光太强会晃眼,调暗一点才能看清所有细节。
    1dk,dk=键向量的维度\displaystyle \frac{1}{\sqrt{d_k}},\quad d_k = \text{键向量的维度}
  3. 归一化权重$\text{softmax}$ 把相似度分数变成一组和为 1 的权重,相当于把所有方块的“参考意见”标准化成投票占比。
    softmax(z)i=ezi∑jezj\displaystyle \text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}
  4. 加权汇总$V$ 是值矩阵,存储每个方块的实际内容。权重乘上内容再求和,得到当前方块更新后的特征。雕塑家综合所有“参考意见”后,才落下这一刀。
    outputi=∑jsoftmax(QK⊤dk)ijVj\displaystyle \text{output}_i = \sum_j \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)_{ij} V_j

长视频生成

雕一尊 30 厘米的小雕像只需要几小时,但雕一面百米长的浮雕墙呢?难点不在于某一块雕得不好,而在于第 1 米的马和最后一米的马必须是同一匹——姿态、纹路、风格全然连贯。视频也是如此:生成几十帧容易,生成几分钟的长视频难,难就难在“越来越长的时序一致性”。

Sora 解决这个问题的第一招叫“时间轴压缩模拟”。视频在进入 DiT 之前,会先经过一个视频压缩网络,把高分辨率的像素空间压缩成一个更紧凑的“语义空间”,在里面建模时间跨度。这相当于雕塑家先在纸上画出一整面墙的缩略草图,在草图上统一规划构图,再上墙细雕——缩略图上的一厘米,对应墙体上的一米。第二招是“滑动窗口续写”:生成完前一段后,把这一段末尾的几帧作为下一段的起点,继续向后生成。像接力跑一样,每一棒都从上一棒的最后一米开始跑,保证节奏不脱节。

第三招是时序一致性设计:时间注意力层会专门维护“跨帧”的约束,确保同一个物体在不同帧里保持相同的形态与位置关系。配合“缓存复用”——把前面已经生成好的语义特征缓存下来,作为后续窗口的全局记忆——长视频的每个片段都能“记得”前面的内容。这就像雕塑家随身带着一面墙的整体照片,每雕一段就拿出来对照,防止越雕越偏。

当然,这些手段也不是万能的。视频越长,误差越容易累积,就像接力跑最后一棒即使尽力,也难免带上前面几棒的疲惫。这也是当前长视频生成仍会偶尔出现物体变形、场景突变的根本原因。但“缩放构图 + 接力续写 + 全局对照”这套组合拳,已经让 Sora 能从几秒延伸到几分钟,朝着“真正的电影级长镜头”逼近。

物理世界模拟

那位资深雕塑家为什么能雕出衣褶自然下垂、转身时重心稳健的雕像?因为他没有随身带物理课本,更没有在每一刀前计算重力公式。他只是雕过几千件作品,肌肉和眼睛都记住了“布料在重力下会垂成什么弧线”“奔跑时裙摆会滞后于身体”——这种知识不在纸上,而在经验里。

Sora 的物理世界模拟,同样是“从数据里长出来的直觉”。DiT 在训练时看过海量真实视频,在这些视频的帧与帧之间,物体的位置变化隐含着运动规律:苹果下落、水滴飞溅、汽车转弯、头发飘动。模型并不显式地写任何物理方程,而是把规律编码进几十亿个参数中。推理时,它只是“顺着直觉”预测每一步的噪声,却意外地让生成的内容符合大多数物理常识——这是第一层:隐式物理知识。第二层是物体运动轨迹:空间注意力保证了物体形状的完整性,时间注意力保证了运动路径的平滑性,两者合力,一个球在空中飞过的轨迹就能形成一条自然的抛物线。

更令人惊讶的是“多机位一致性”:当你从正面看一座雕像,再绕到侧面、背面,看到的应该是同一尊雕像。Sora 生成同一场景的不同机位视角时,也能保持主角外貌、服装、场景布局一致,仿佛有一个隐形的“三维原模”存在。这背后的原理,仍然是时空注意力在海量多视角视频中学到的三维几何先验。

但必须泼一盆冷水:这种“物理直觉”只是统计规律,不是真正的物理引擎。雕塑家也会有失手的时候——比如把咖啡杯漏水的方向画反,或者让人的手穿过墙壁。Sora 偶尔会生成违背重力的物体、突然出现的肢体,正是因为它的“物理知识”是学来的经验,而非牛顿定律的直接计算。理解这一点,你在使用和评估视频生成工具时,就不会对它抱有不切实际的期待。

训练推理优化

一间工作室若要高效运转,光有优秀的雕塑家还不够,还要有流畅的工序:石材进货(数据准备)、粗坯切割(压缩编码)、雕刻精修(模型训练)、抛光交付(推理采样)、质量验收(效果评估)。DiT 视频模型的生产线,同样有一整套工程化的优化手段。

第一个环节是“视频压缩编码”。原始视频的像素数据量太大,Direct 训练之前,Sora 会先用一个 VAE(变分自编码器)把视频压缩到低维潜在空间,DiT 在这个紧凑空间里做去噪,最后再由解码器把潜在表示还原为高清视频。这个思路也体现在我们的 Python 演示中:8×8 的视频先被 Patch 化,再在高维 token 空间里做注意力。第二个环节是“条件控制”:除了文本提示,DiT 还可以接受图像、视频片段、相机运动轨迹等多种条件作为“图纸”,让创作者更精确地控制构图和运镜。

第三个环节是“采样加速”。完整的扩散过程通常需要几百步反向去噪,每步都是一次完整的 Transformer 前向计算,慢得让人着急。业界常用蒸馏、少步采样等技术,把推理步数从几百步压缩到几十步甚至几步。这就像雕塑家把几百次小幅修整合并成几次大刀阔斧的切削,速度提上去了,但需要足够的训练来保证刀刀精准。第四个环节是“评估指标”:如何判断一段生成视频好不好?需要综合时序连贯性、物理合理性、文本对齐度、画面清晰度等维度——既看自动指标,也离不开人工眼检验收。

于是整条生产线闭环了:压缩减轻负担、DiT 保证质量、加速换取速度、评估守住底线。Sora 之所以能惊艳世界,不是因为某一个环节石破天惊,而是这条“数字雕塑流水线”的每一个工位都做到了极致协同。理解了这条流水线,你再去读任何视频生成模型的论文,都会发现它们只是在某一两个工位上做了新的改进。

AI 应用场景

AI分镜师:从脚本到动态分镜

阶段:内容生成与创意实现

解决的问题:传统影视分镜需要导演、画师逐帧手绘,一部 40 秒广告的分镜可能要耗费两周和上万元成本;改一次脚本,所有画面重画。DiT 视频模型让创作者输入一句提示词就能得到一段动态参考视频,把“画分镜”变成“写提示词”,且改台词只需改文本、重新生成。

具体案例:某广告公司为汽车新品设计分镜,团队用 Sora 类工具输入“银色轿车在沙漠公路急转弯,扬尘,夕阳”,20 分钟内生成 6 个候选镜头的动态分镜,导演选定后直接进入实拍策划,整个预演周期从 2 周缩短到 3 天。

短视频平台的内容工厂

阶段:规模化内容生产

解决的问题:MCN 机构每天需要发布数十条不同机位的短视频,人工拍摄成本高、出片慢。DiT 视频模型的多机位一致性能力,让同一段内容可以自动生成多个视角的画面(正面、侧面、俯拍),再配合文本条件控制,批量产出“同剧情、多机位”的素材库。

具体案例:一家知识科普 MCN 用 DiT 生成“数字人讲师”在演播室、户外、实验室三个场景的讲解视频,每次只改文本提示和场景描述,3 小时产出一周的内容储备,人工仅负责审核与剪辑。

影视预演中的物理校验

阶段:工业级设计验证

解决的问题:灾难片、科幻片中的复杂物理场面(楼宇倒塌、洪水冲击、飞船翻滚)在实拍前需要反复验证合理性,传统做法依赖昂贵的三维物理仿真。DiT 视频模型虽然不掌握显式物理公式,但其隐式物理知识可以快速生成“看起来物理正确”的预演视频,帮助导演在预算投入前判断场面是否可信。

具体案例:某特效公司为一部科幻短剧预演“空间站仓体在失重中翻滚”的场景,用 DiT 生成 10 秒预演,发现翻滚轴与舱体结构不一致,于是修改提示词加入“沿长轴螺旋翻滚”,快速迭代出 3 版物理效果,确认后才交给三维团队精修。

Python 演示

python96 行
import torchimport torch.nn as nnimport math T, H, W = 4, 8, 8  # 4帧8x8的迷你视频 def make_video(seed):    """生成一个亮点在画面中做圆周运动的4帧视频,当作干净样本"""    v = torch.zeros(T, 1, H, W)    for t in range(T):        y = int(3 * math.sin(seed + t * 0.8) + 4)        x = int(3 * math.cos(seed + t * 0.8) + 4)        y = max(1, min(H - 2, y))        x = max(1, min(W - 2, x))        v[t, 0, y - 1:y + 2, x - 1:x + 2] = 1.0    return v class PatchEmbed(nn.Module):    """把视频帧切成2x2的patch,转成token序列"""    def __init__(self, hidden=16):        super().__init__()        self.proj = nn.Conv2d(1, hidden, 2, 2)     def forward(self, x):        B, T = x.shape[:2]        tokens = self.proj(x.flatten(0, 1))        return tokens.flatten(2).transpose(1, 2)  # (B*T, 16, hidden) class TimeEmbed(nn.Module):    """把去噪时间步t编码成向量,让模型知道当前凿到哪一刀"""    def __init__(self, hidden=16):        super().__init__()        self.mlp = nn.Sequential(nn.Linear(1, hidden), nn.SiLU(), nn.Linear(hidden, hidden))     def forward(self, t):        return self.mlp(t.unsqueeze(-1).float()) class VidDiTBlock(nn.Module):    """时空注意力块:先做时间注意力(帧间),再做空间注意力(帧内)"""    def __init__(self, dim=16, heads=2):        super().__init__()        self.attn_t = nn.MultiheadAttention(dim, heads, batch_first=True)        self.attn_s = nn.MultiheadAttention(dim, heads, batch_first=True)        self.norm = nn.LayerNorm(dim)        self.ff = nn.Sequential(nn.Linear(dim, dim * 2), nn.GELU(), nn.Linear(dim * 2, dim))     def forward(self, tok, te):        B, T, S, D = tok.shape        t_in = tok.permute(0, 2, 1, 3).reshape(B * S, T, D)        t_out, _ = self.attn_t(t_in, t_in, t_in)        tok = t_out.reshape(B, S, T, D).permute(0, 2, 1, 3)        s_in = tok.reshape(B * T, S, D)        s_out, _ = self.attn_s(s_in, s_in, s_in)        tok = s_out.reshape(B, T, S, D)        return tok + self.ff(self.norm(tok + te.unsqueeze(1))) class MiniDiT(nn.Module):    """极简DiT:patch嵌入 + 时空注意力块 + 预测噪声"""    def __init__(self):        super().__init__()        self.patch = PatchEmbed()        self.time = TimeEmbed()        self.blocks = nn.ModuleList([VidDiTBlock() for _ in range(2)])        self.fc = nn.Linear(16 * 16, H * W)     def forward(self, video, t):        B, T = video.shape[:2]        tok = self.patch(video).reshape(B, T, 16, 16)        te = self.time(t)        for blk in self.blocks:            tok = blk(tok, te)        out = self.fc(tok.reshape(B, T, -1))        return out.view(B, T, 1, H, W) model = MiniDiT()opt = torch.optim.Adam(model.parameters(), lr=1e-3) for step in range(300):    v = make_video((step * 0.7) % 6.28)    eps = torch.randn_like(v)    tt = torch.randint(0, 100, (1,)).float()    alpha = 1 - tt / 100    v_noisy = alpha * v + (1 - alpha) * eps    pred = model(v_noisy, tt)    loss = ((pred - eps) ** 2).mean()    opt.zero_grad()    loss.backward()    opt.step()    if step % 100 == 0:        print(f"step {step}: loss={loss.item():.3f}") v_demo = make_video(1.0)eps = torch.randn_like(v_demo)v_clean = 0.2 * v_demo + 0.8 * epsv_recon = (v_clean - 0.8 * model(v_clean, torch.tensor([80.0]))) / 0.2print("去噪重建误差:", ((v_recon - v_demo) ** 2).mean().item())
目的:用 70 行实现一个玩具版 DiT——含 Patch 嵌入、时间步嵌入、时空注意力块,训练它从加噪的 4 帧迷你视频中学会“预测噪声”,最后演示反向去噪重建,直观复现 Sora 的 DiT 工作流。
  1. tokens = self.proj(x.flatten(0, 1))把 4 帧视频并成一叠统一卷积,每个 2×2 patch 变成一个 token,这是“Patch 化输入”。
  2. t_in = tok.permute(0, 2, 1, 3).reshape(B * S, T, D)把“帧”变成序列维度,让同一空间位置的 patch 跨帧互看,对应“时间注意力”。
  3. s_in = tok.reshape(B * T, S, D)回到帧内,让同一帧里不同 patch 互相注意,对应“空间注意力”。
  4. tok + self.ff(self.norm(tok + te.unsqueeze(1)))残差连接 + 前馈网络,每一层都保留原有信息,只更新“该调整的部分”。
  5. alpha = 1 - tt / 100时间步越大,加噪系数越大、保真系数越小,模拟前向加噪“毛坯越来越糊”。
  6. loss = ((pred - eps) ** 2).mean()模型输出与真实噪声的均方误差,就是正文里的扩散损失。
  7. v_recon = (v_clean - 0.8 * model(v_clean, torch.tensor([80.0]))) / 0.2推理时减去预测噪声再除以保真系数,从带噪画面还原干净视频。

常见误区

误区DiT 视频模型就是把视频的每一帧拆开,当成图片丢给扩散模型去噪,帧与帧之间没有专门的联系,反正每帧都能生成得挺清晰。

正解如果只把帧当图片,生成结果会像连环画一样每帧都好看、但连起来疯狂闪烁。DiT 之所以是“视频模型”,关键在于它把多帧拼接成时空立方体,并设置了时间注意力——帧间对应位置的 patch 会互相交换信息,强制模型理解运动。我们的 Python 演示中,VidDiTBlock 先做帧间注意力再做帧内注意力,就是这个道理。

为何常见:很多人先接触图像扩散模型,自然把视频理解成“图像 + 时间维度”,忽略了时间维度建模才是视频生成的核心难点。

误区Sora 生成的视频里苹果会下落、水会飞溅,说明它内部像游戏引擎一样装了物理模拟器,懂得牛顿定律。

正解Sora 没有显式物理引擎,它的“物理常识”是海量视频数据里学来的统计先验。它知道“苹果通常在下方”,但不知道“万有引力公式”。所以它偶尔会手穿墙、物体悬空、重力方向突变。它是“凭经验猜”的雕塑家,不是“按公式算”的工程师。

为何常见:因为生成结果在大多数时候符合直觉,人脑天然会给看到的运动配上“因为重力、因为惯性”的解释,于是误以为模型也在做同样的推理。

误区只要把模型参数量、训练数据量无限加大,几分钟的长视频自然就连贯了,不需要特别的架构设计。

正解参数量大是必要条件,但不是充分条件。长视频要连贯,靠的是时间轴压缩模拟(先在低维语义空间规划长程时序)、滑动窗口续写(分段接力)、缓存复用(保留全局记忆)这套工程机制。参数再多,如果没有跨帧约束,第 1000 帧依然会“忘记”第 1 帧的物体长什么样。

为何常见:因为 Transformaer 的“大力出奇迹”叙事深入人心,容易让人忽略视频生成任务里“时序一致性”这个特有的工程瓶颈。

误区输入提示词,点一下生成,Sora 就“唰”地画出了一整段视频,像打字一样瞬间成型。

正解真实过程要经过上百次迭代:从纯噪声出发,每次只预测并去掉一小部分噪声,逐步逼近清晰画面。每迭代一次就是一次完整的模型前向计算,这也是为什么生成一段 10 秒视频要等很久。把几百步压缩到几步,是专门研究“采样加速”的意义所在。

为何常见:产品界面只展示“点击生成”和“最终结果”,中间的过程被隐藏了,用户自然以为是一步到位。

面试题

Q1. 扩散模型生成视频的第一步,是对干净视频做什么?

单选题 · easy

  • A.逐帧加噪直到接近纯噪声← 正确答案
  • B.逐帧放大分辨率到 4K
  • C.逐帧切割成多个小片段
  • D.逐帧提取文本描述信息

答案:A。前向过程逐步注入高斯噪声,让画面从清晰沦为“大理石毛坯”般的噪点;反向过程再一步步去噪还原。放大分辨率、切割片段、提取文本都不是扩散过程的核心操作。

Q2. Sora 生成视频所用的底层模型结构是?

单选题 · easy

  • A.基于 Transformer 的扩散模型← 正确答案
  • B.基于 CNN 的生成对抗网络
  • C.基于 RNN 的循环神经网络
  • D.基于 SVM 的支持向量机

答案:A。Sora 用的是 DiT(Diffusion Transformer),即“扩散 + Transformer”的组合,把去噪过程交给 Transformer 的注意力机制完成。CNN、RNN、SVM 都不是 Sora 的底牌。

Q3. 下列哪些属于 DiT 相比传统 U-Net 的优势?

多选题 · easy

  • A.参数量与数据量可以平滑扩展← 正确答案
  • B.文本提示的融合方式更自然← 正确答案
  • C.结构简单且参数量一定变小
  • D.完全不需要注意力机制帮助

答案:AB。Transformer 的层数、宽度能随算力平滑扩展,且交叉注意力天然适合文本条件融合,所以 A、B 正确。C 的“一定变小”是误解,DiT 参数往往更大;D 错误,DiT 恰恰以注意力为核心。

Q4. 时空注意力中,“时间注意力”主要建模的是?

单选题 · mid

  • A.同一帧内各图像块的关联
  • B.不同帧之间物体的运动关系← 正确答案
  • C.文本词与画面色彩的关系
  • D.音频节奏与画面剪辑的关系

答案:B。时间注意力让不同帧对应位置的 patch 互相参考,从而保证物体运动连贯、不闪烁。A 是空间注意力做的事,C 是文本条件融合,D 属于音频视频协同的另一个任务。

Q5. 视频 Patch 化中,把画面切成一个个小方块的目的是?

单选题 · mid

  • A.把视觉区域转成语义 token 序列← 正确答案
  • B.让画面色彩总数减少一半
  • C.让视频文件体积自动压缩
  • D.让画面分辨率提升到四倍

答案:A。每个 patch 映射成一个 token,视频就变成 Transformer 熟悉的“词语序列”,可以统一处理时空关系。Patch 化不直接减少色彩、不压缩文件,更不提升分辨率。

Q6. 保持长视频前后连贯的常用手段有哪些?

多选题 · mid

  • A.用滑动窗口续写后续视频帧← 正确答案
  • B.在压缩空间做时间轴建模← 正确答案
  • C.用缓存复用前面的语义特征← 正确答案
  • D.每帧独立生成不做跨帧约束

答案:ABC。滑动窗口让每段从上一段末尾接力,时间轴压缩在低维空间规划长程时序,缓存复用提供全局记忆,三者共同保证连贯性。D 是“拆帧成图”的错误做法,必然导致闪烁。

Q7. 训练时随机掩码一些帧,对 DiT 视频模型的主要作用是?

单选题 · hard

  • A.让模型学会模拟任意帧率的生成← 正确答案
  • B.让模型减少一半隐藏层数量
  • C.让模型只学空间不学时间
  • D.让模型彻底放弃文本的约束

答案:A。随机掩码训练强迫模型从可见帧推测被遮帧,相当于“蒙眼摸毛坯”,让模型学会灵活处理不同帧间隔,推理时就能模拟任意帧率。它不减层、不弃时间、不丢文本。

Q8. DiT 模型在训练时的优化目标,本质上是什么?

单选题 · hard

  • A.预测出被添加的噪声并最小化误差← 正确答案
  • B.预测出视频的下 一帧并最大化相似
  • C.预测出文本的关键词并完成匹配
  • D.预测出图像的边缘并完成锐化

答案:A。扩散模型的训练目标就是让模型预测前向过程注入的噪声,再与真实噪声算均方误差。B 是自回归式视频预测的目标,C、D 分别属于文本模型和图像处理任务,都不是扩散范式。

Q9. 评估一段 DiT 生成视频的质量,应关注哪些维度?

多选题 · extreme

  • A.时序连贯、物体运动是否流畅← 正确答案
  • B.物理规律是否符合真实世界← 正确答案
  • C.生成内容与文本提示是否对齐← 正确答案
  • D.显存占用是否不超过 1GB

答案:ABC。视频质量主要看时序连贯性、物理合理性和文本对齐度,这也是正文提到的评估指标。显存占用属于工程资源约束,与“生成效果好不好”不是一个维度的指标,不应列入质量评估。

Q10. 推理阶段加速 DiT 视频生成的常用方法是?

单选题 · mid

  • A.减少采样步数配合蒸馏加速← 正确答案
  • B.把视频帧数增加到十万帧
  • C.把视频帧率提升到每秒 120 帧
  • D.放弃时间注意力只保留空间

答案:A。扩散模型推理慢就慢在几百步采样,通过蒸馏、少步采样等技术减少步数是主流加速方案。B、C 增加数据量只会更慢,D 为了省算力砍掉时间注意力会严重破坏时序连贯性,得不偿失。