Kaelem

视频扩散模型的序列性缺口:为什么更多去噪步数不等于更会推演世界

·21 min read
Video DiffusionWorld ModelsMechanistic EvaluationSerial ComputationarXiv

一个球撞到第二个球,第二个球再撞到第三个球。

这听起来不像什么高级智能测试。没有语言,没有语义,没有遮挡关系,也没有复杂视觉纹理。只要知道初始位置和速度,后面的运动就是确定的。甚至对人来说,这个场景的难点也很朴素:你得先算第一次碰撞,再用碰撞后的速度去算第二次,再算第三次。

但正是这个朴素,给视频生成模型挖出了一个很深的坑。

今天的视频扩散模型可以生成非常漂亮的片段。它们看起来像在理解世界:人物在走,物体在动,镜头在推进。于是我们自然会问:如果这些模型真要成为“世界模拟器”,它们能不能沿着一条因果链,把事件一个接一个推下去?

UC Berkeley 的这篇论文把问题压到最小:五个小球在一个方盒里无摩擦运动,碰墙反弹,球与球之间做完全弹性碰撞。模型看到最开始的 5 帧,要生成后面的整段视频。画面分辨率只有 128×128,视觉上几乎没有噪声;模拟器是确定性的,所以每个初始条件只有一个正确未来。

结果很反直觉:标准的双向视频扩散模型,视频越长、碰撞链越长,局部物理一致性越差。更关键的是,把去噪步数从 10 加到 200,也没有补上这个缺口。

论文把这个现象叫做 seriality gap,序列性缺口。

序列性缺口

先不要急着说“物理理解”,先看计算顺序

我们先把一个容易混淆的直觉拆开。

视频更长,当然更难。因为要预测更多帧,误差会累积,画面也更容易漂。但这篇论文关心的不是“长视频”本身,而是长视频里有没有一串必须按顺序解决的事件。

单个球在盒子里弹来弹去,其实不太需要逐帧模拟。只要知道它的位置和速度,未来任何时刻的位置都可以直接算出来。中间每一帧发生了什么,不是必须先知道的东西。论文把它作为长度匹配的非串行对照:同样从 25 帧拉到 49 帧,但只有一个球,没有球与球碰撞。

五个球就不一样了。第一次球球碰撞会改变两个球的速度;这个新速度决定下一次碰撞何时发生;下一次碰撞又会改写后面的状态。这里没有一个简单的“跳到第 49 帧”的捷径。你必须沿着事件链往前走。

这就是“串行性”:不是时间轴长,而是后一步的输入必须等前一步算完。

论文的设计非常干净。它合成不同长度的视频,在五球设置里用过滤条件保证预测区间内的球球碰撞密度不低,因此帧数 f 增大时,最低碰撞事件数也随之增加。模型都在 Wan2.1 的 VAE 潜空间上训练,架构是 DiT 风格的视频扩散;默认评估用 50 个去噪步。所有模型训练 200,000 次迭代,batch size 64,AdamW,学习率 2×10⁻⁴,EMA 0.9999;作者报告总训练量约 300 个 A100-80GB GPU-days。

也就是说,这不是随便跑一个玩具模型得出的偶然现象。论文花了相当大的计算预算,只是为了把“漂亮视频”和“正确推演”分开。

第一层证据:双向扩散拿到更多总算力,却更不会沿链推

直觉上,双向扩散应该占便宜。

它不是一帧一帧生成,而是把未来帧作为一个整体反复去噪。每一次 backbone 调用都能看到整段未来的噪声版本。视频越长,时空 token 越多,时间注意力的计算量大约按 O(f²) 增长。换句话说,49 帧视频比 25 帧视频给了模型更多总计算。

如果问题只是“算力不够”,长视频不应该退化得这么明显。

但表格 1 给出的数字很直接。在五球设置、30 层、d_model=768 的双向模型中,局部 rollout-5 误差 Δx(5) 从 f=25 的 0.799 上升到 f=49 的 1.055。更大的 d_model=1536 也一样,从 0.670 上升到 0.883。这里的 Δx(5) 不是全局轨迹误差,而是一个更局部的物理一致性指标:从生成的某一帧往回看 5 帧,抽出球的位置和速度,用真实模拟器滚动 5 步,再看和模型生成帧差多少。它刻意避免把长程漂移全算到模型头上。

自回归版本的曲线则平很多。同样在五球设置下,d_model=1536 的自回归模型 Δx(5) 在 f=25 是 0.613,到 f=49 是 0.607,几乎没有变坏。d_model=768 的自回归从 0.664 到 0.739,仍明显低于同规模双向模型的 1.055。

这不是视觉质量完全崩了。IoU 仍在 0.69 到 0.73 左右。模型生成的球看起来还是球,画面也许还“像真的”。出问题的是状态一致性:球会穿过去,会一分为二,会合并,会换颜色身份。它不是不会画,而是没有把状态链条守住。

总算力不是串行算力

最重要的对照来自单球实验。把球数改成 n=1,去掉球球碰撞,视频仍然可以同样长。此时 f=49、d_model=768 的双向模型 Δx(5) 是 0.246,自回归是 0.220,差距很小;而同样 f=49 的五球版本里,双向是 1.055,自回归是 0.739。

这一步排除了一个很常见的解释:不是因为视频长,所以双向模型必然差;而是因为视频长带来了更长的依赖事件链。

第二层证据:把生成顺序变得更串行,误差就降下来

如果问题真是串行计算缺失,那一个自然干预是:不要一次联合去噪所有未来帧,而是把未来切成块,让模型按时间块往前生成。

论文用同一个 backbone 做了 block-autoregressive 变体。Block-11 近似双向:一大块一起 denoise。Block-3、Block-2 更串行。Block-1 就接近自回归。模型容量没有换,只是 attention mask 和生成因式分解变了。

f=49、五球、d_model=1536 时,双向模型 Δx(5)=0.883;Block-3 降到 0.716;Block-2 降到 0.620;自回归是 0.607。d_model=768 也一样:双向 1.055,Block-3 0.762,Block-2 0.708,自回归 0.739。

这组数字很有解释力。它不是说“自回归架构更大”或者“训练更好”,而是在同一类模型里,把推理顺序往真实因果顺序靠近,局部物理误差就下降。

我们可以把它理解成一种计算分配问题。双向扩散把大量计算铺在整个时空张量上,每一步都很宽,但每一步内部的层数是固定的。自回归把计算拆成许多时间块,每生成一块,下一块都能条件在已经生成出的更近状态上。它牺牲并行性,换来随视频长度增长的串行深度。

对碰撞链来说,这正好是需要的资源。

第三个反直觉结果:去噪步数不是这种串行深度

到这里,一个熟悉扩散模型的人会提出反驳:扩散本来就是迭代的。一次去噪不够,那多去几次不就行了?

论文专门测试了这个解释。对双向模型,把去噪步数 T 设为 10、20、50、100、200,跨不同视频长度评估。

结果是:有一点提升,但很快平台化,而且不解决长链退化。f=49、d_model=1536、30 层双向模型的 Δx(5) 分别是 0.991、0.931、0.883、0.889、0.916。T 从 10 到 50 有改善;但从 50 到 100 没有继续变好,到 200 甚至略差。f=25 的对应数字是 0.690、0.667、0.670、0.679、0.689,同样说明 50 步以后基本没有稳定收益。

如果去噪迭代真在扮演“逐步模拟器”,我们应该看到长视频尤其受益:链越长,多给步数越应该补上。实际没有。

去噪步数没有补上链式推理

这就是论文最有价值的地方。它没有停在“视频模型物理不好”这种泛泛结论,而是区分了三种看起来都叫“更多计算”的东西:更长时空张量带来的并行总算力、更多去噪步数、以及能沿事件链增长的串行计算。前两者不等价于第三者。

为什么去噪迭代没有变成推理迭代

论文第四节给了一个漂亮的理论解释。

先看确定性视频预测。假设最初几帧已经让我们完全观测到系统状态。对弹球来说,两帧就足以推断位置和速度;论文评估时给 5 帧条件。于是未来不是一个分布里的许多可能,而是一个唯一轨迹。

扩散模型在做什么?它学习的是在某个噪声水平下,噪声样本应该往哪里移动,才能回到数据分布。一般情况下,数据分布很复杂,score 没有简单闭式解;反向过程需要数值积分,很多步一点点走回去。

但如果条件 u 已经唯一决定了目标 w₀(u),情况就特殊了。加高斯噪声后,带噪样本 w_t 的条件分布只是围绕这个唯一目标的一团高斯。精确 score 会直接指向那个唯一目标。论文写出的式子是:

w₀(u) = (σ(t)² s(w_t | u,t) + w_t) / sqrt(1 - σ(t)²)

意思很朴素:如果 score network 真的算出了精确 score,那么一次网络评估就包含了恢复干净未来所需的信息。你不需要沿着 100 个去噪步“想”100 次;真正的预测工作已经压在这一次 backbone 计算里了。

确定性未来只需要一次精确指向

这引出了命题 4.1:如果一个带 TC⁰ backbone 的 NCSN 扩散模型能用精确 score 解决视频预测,那么对应的状态预测问题也在 TC⁰ 里。TC⁰ 可以粗略理解为常数深度、可高度并行的阈值电路类别。多球碰撞则和经典 billiard-ball computation 共享弹性碰撞原语,而这类状态预测与 P-complete 的串行计算相关;在常见复杂性假设下,它不应该被固定深度并行电路高效解决。

论文的逻辑不是“数学证明真实神经网络一定失败”。它的边界很清楚:证明建立在确定性、完全可观测、精确 score、固定深度并行 backbone 等理想化假设上。但这个理想化恰恰解释了实验现象:去噪步数本身不是在训练一个会保存中间推理状态的程序。每一步都在问同一个 backbone:“这个噪声样本该往数据分布哪里走?”它没有被迫把第一次碰撞算完、存下来、再给第二次碰撞用。

换句话说,扩散迭代是采样迭代,不自动等于推理迭代。

深度为什么比宽度更有效

如果缺的是串行计算,另一个补法是让 backbone 自己更深。

论文做了宽度和深度扫描。f=49、五球、双向模型里,d_model=768、20 层的 Δx(5) 是 1.420;同样宽度增到 30 层,降到 1.055;60 层降到 0.950;90 层到 0.881。相比之下,单纯加宽不总是同样有效:30 层下从 d_model=640 到 1536,Δx(5) 从 1.172 降到 0.883;而从 10 层到 30 层的收益更显著,例如 d_model=1536 时从 1.230 降到 0.883。

这不是说宽度没用。宽度当然提升容量。但在这个任务里,深度更像“时间”:更多层给模型更多顺序变换的机会。它仍然不是随视频长度线性增长的自回归时间,但比单纯把每层做宽更接近问题所需的资源。

深度比宽度更像时间

这也解释了为什么视频生成里的“更大模型”不一定自动解决世界模拟。参数更多可以让画面更好、先验更强、局部纹理更稳定;但如果依赖链长度随任务增长,而模型的有效串行深度没有跟着增长,某些错误会以非常基础的形式出现:穿模、身份交换、数量不守恒。

这篇论文证明了什么,又没有证明什么

论文证明得最扎实的是四件事。

第一,在控制过的五球硬球动力学里,标准双向视频扩散的局部物理误差会随帧数、也就是随碰撞链长度上升。表格 1 的 Δx(5) 从 25 帧到 49 帧稳定变坏。

第二,这不是单纯的视频长度问题。单球对照里没有球球碰撞,双向和自回归差距大幅缩小,长视频也更稳定。

第三,更多去噪步数不能关闭缺口。T 从 10 增到 50 有收益,但 100、200 没有持续改善,长视频仍然更难。

第四,改变计算分配会有帮助。自回归、Block-2、Block-3 这种更串行的因式分解降低误差;增加 backbone 深度也比单纯加宽更有效。

它没有证明的是:所有视频扩散模型都不能推理,或者自回归永远是答案。作者也明确说,自回归在这里有用,是因为依赖结构基本沿时间顺序展开。迷宫、拼图、视觉规划等任务的依赖不一定按帧排列;这时逐帧自回归可能并不匹配真正的计算图。需要的也许是搜索、规划、更深的中间状态、或者专门训练迭代步骤去做并保留计算。

另一个边界是确定性。理论部分针对完全可观测的确定性预测。自然视频有随机性、遮挡和多解未来。作者在附录里做了一个 vibrating-wall 变体:每次球撞墙后速度会被 Unif[-6,6] 的随机扰动改变,再只在不含墙碰撞的确定性局部窗口上评估。结果模式仍然相似,但这是初步证据,不是对自然视频的完整证明。

真正的大图景:世界模型不是会生成,而是会续写因果链

这篇论文重要,不是因为它发现“视频模型不会弹球”。弹球只是一个显微镜。

它把一个常被混在一起的问题拆开了:生成模型花了很多 FLOPs,不等于它拥有可随任务增长的串行推理。双向扩散可以在每一步同时看见整段未来,但“同时看见”并不意味着已经按因果顺序算完。去噪步数很多,也不意味着每一步都在积累一个越来越完整的物理状态。

如果我们希望视频模型成为世界模拟器,就不能只问它画得像不像。我们要问:当一个事件改变下一个事件的条件时,模型有没有一种机制,把这种改变可靠地传下去?

这可能是比“更高分辨率”“更长视频”“更多去噪步”更根本的问题。

论文最后给出的积极方向也在这里:未来的迭代生成模型,也许不应该只训练每一步逼近 score,而应该训练中间状态执行并保存有用计算。也就是说,让迭代真的变成推理,而不是只是采样。

这才是序列性缺口背后的提醒:世界不是一张一次性去噪出来的图片。世界是一个事件接着一个事件,把状态不断改写的过程。模型如果要模拟世界,就必须学会在计算上尊重这种顺序。