Zephan

Back

长视频生成中的 Self-Forcing 路线:从 CausVid 到 Causal ForcingBlur image

引子#

这篇文章把 CausVid、Self-Forcing、Self-Forcing++ 和 Causal Forcing 四篇工作串在一起看。它们不是各自独立的点子,而是一条非常清晰的技术演化路线——从双向视频扩散模型出发,逐步走到可实时、可交互的 few-step autoregressive diffusion。

  • CausVid(CVPR 2025):首次比较清晰地定义了实时、可交互视频生成任务,并给出了原始的 few-step AR diffusion 路线。
  • Self-Forcing:在 CausVid 基础上改进 DMD 训练,重点缓解 exposure bias。
  • Self-Forcing++:在 Self-Forcing 基础上进一步突破 teacher 时长限制,支持更长视频生成。
  • Causal Forcing:在 Self-Forcing 路线上进一步改进 ODE initialization,主要处理 architectural gap。

如果只看当前范式,可以粗略理解为两条主轴:Causal Forcing 侧重 Teacher Forcing + ODE,Self-Forcing 则侧重 DMD。但两者的底层目标是一致的:把双向模型的质量迁移到 AR 范式中。

为什么要走 AR 路线?#

在正式看每篇论文之前,有个前置问题需要想清楚:实时视频生成为什么更偏向 AR,而不是 bidirectional?

从我个人的理解来看,核心的直觉很简单:bidirectional attention 模型必须看到完整的时间段后才能统一去噪,天然就没办法流式输出。而 AR 模型可以逐帧或逐 chunk 地生成,首帧延迟可以做到非常低。更具体一点:

  • 实时性:bidirectional 模型必须等到整段视频的所有帧都就位才能开始去噪,首帧延迟直接卡在那里;AR 模型可以流式输出,第一帧出来就能开始播放。
  • 可交互性:bidirectional 模型通常在固定条件下完成整段去噪,没有办法中途切换条件,也难以响应实时反馈;AR 模型天然适合在线交互——每生成一帧就可以接受新的条件输入。这也是 Self-Forcing 论文中特别强调的一点:像 Rolling Diffusion 这类”渐进噪声调度”的方案虽然也声称支持流式生成,但由于未来帧已经被部分预生成,实时注入的用户控制信号没办法立即影响后续帧,响应性受限。
  • 长视频扩展性:分钟级视频下,bidirectional attention 的计算和显存开销是 O(n2)O(n^2) 级别的;AR 模型更容易结合 KV cache、历史压缩等机制控制长度增长带来的成本。

但 AR 的代价也很明显:exposure bias 和误差累积。训练时模型看到的总是真实帧,推理时只能看自己生成的帧,一旦某一帧出了偏差,后面的帧只能在这个偏差上继续。此外,当前 AR 模型的生成质量通常仍弱于 bidirectional model。

因此,这一系列工作的核心,就是想把双向视频扩散模型的质量,尽量迁移到可流式、可交互的 AR 生成范式中。值得一提的是,现在工业界和学术界的很多方案也基本沿着这条路线推进,例如混元 HY-WorldPlay、夸克 LiveAvatar、智谱 RealVideo、GAIR LiveTalk、京东 OmniForcing 等等。

CausVid:证明这条路线可行#

问题定义#

现有的高质量视频扩散模型(如 Sora、CogVideoX)虽然效果很好,但有两个直接问题:

  1. 使用 bidirectional attention,必须看到全部帧后才能生成其中任意一帧。
  2. 需要 50+ 步去噪,推理速度很慢。

一个自然的问题是:能否把预训练双向视频扩散模型的知识蒸馏到一个更快的 causal + few-step 模型中?

CausVid 给出的答案是肯定的。它基于一个类 CogVideoX 架构的 bidirectional DiT 作为 teacher,通过蒸馏得到的 causal student 能做到单卡 9.4 FPS 的实时流式生成,首帧延迟仅 1.3s。作为对比:CogVideoX 生成同样长度的视频需要约 219s 的首帧等待。在 VBench-Long 排行榜上,CausVid 拿到了 84.27 的总分,在所有经过官方验证的视频生成模型中位列第一。

更值得注意的是人类偏好评估的结果:CausVid 的 4-step causal student 甚至在帧级质量上超过了它自己的 50-step bidirectional teacher。这是一个有点反直觉的结论——蒸馏出来的”小模型”比”大模型”在某些维度上更好。代价是什么呢?output diversity 下降了(reverse KL 的天然局限),以及轻微的 temporal flickering 增多。

Block-wise Causal Attention#

CausVid 的架构设计是一个很务实的折衷:把视频切成若干 chunk,chunk 内使用双向注意力保证局部一致性,chunk 间使用因果掩码保证时序性。底层使用 3D VAE 做时空压缩——每 16 帧视频被编码成 5 帧 latent,也就是说每个 chunk 包含 5 个 latent frames。

Mi,j={1,j/ki/k0,otherwiseM_{i,j} = \begin{cases} 1, & \lfloor j/k \rfloor \le \lfloor i/k \rfloor \\ 0, & \text{otherwise} \end{cases}

含义是:当前 chunk 只能看到自己以及过去的 chunk,不能看到未来 chunk。

Block-wise Causal Attention 示意图

这个设计的直觉是:纯逐帧 causal 太激进了,每帧之间的信息交互太少,质量会明显下降;但完全 bidirectional 又无法流式输出。chunk 级的因果掩码是一个比较好的折衷点——在一个短窗口内保留足够的双向信息交互,同时在窗口之间保持时序因果性。训练时使用 FlexAttention 来高效实现 block-wise causal mask。

Asymmetric DMD Distillation#

CausVid 的训练大致分两步。

第一步:Student Initialization(ODE 轨迹蒸馏)

目的是缓解 causal student 和 bidirectional teacher 之间的架构差异。做法是先用 ODE trajectory 对 student 做一个轻量初始化:

  1. 从标准高斯分布采样噪声输入。
  2. 使用预训练双向 teacher 结合 ODE 求解器(DDIM),模拟反向扩散过程,得到从 TT00 的 ODE 轨迹。
  3. 选取与 student 实际使用时间步匹配的子集(如 [999, 748, 502, 247] 四个时间步),用 MSE 训练 student。

这一步其实就是让 student 先学会”大致怎么画”,哪怕它的因果注意力结构和 teacher 不同,至少输出的大致形状能对得上。实际操作中只需要 1000 个 ODE pairs,3000 次迭代就够了。

这里有一个很自然的后续疑问:拿 bidirectional teacher 的 ODE 轨迹来教 causal student,这两者的轨迹真的是对等的吗? 这个问题在后续的 Causal Forcing 中被正式提出并解决。

第二步:Asymmetric Distillation(DMD Loss)

初始化之后,再使用 bidirectional teacher 通过 DMD loss 训练 causal student。DMD(Distribution Matching Distillation)的核心思想是通过 reverse KL 散度来最小化 student 输出分布和 teacher 数据分布之间的差距。其梯度可以表示为两个 score function 的差:

ϕLEt,ϵ[(sdata(Ψ(Gϕ,ϵ,t),t)sgen,ξ(Ψ(Gϕ,ϵ,t),t))Gϕϕ]\nabla_\phi \mathcal{L} \approx \mathbb{E}_{t,\epsilon} \left[ (s_{\text{data}}(\Psi(G_\phi, \epsilon, t), t) - s_{\text{gen},\xi}(\Psi(G_\phi, \epsilon, t), t)) \frac{\partial G_\phi}{\partial \phi} \right]

其中 sdatas_{\text{data}} 是预训练 teacher 提供的数据分布 score(冻结),sgen,ξs_{\text{gen},\xi} 是在线训练的 student 输出分布 score。

CausVid 算法流程图

算法流程可以理解为:

  1. 先让 student 模型 GϕG_\phi 快速生成一段视频。
  2. 对这段视频重新加噪。
  3. s_gen 去拟合这批”student 自己生成的假视频”的分布,这部分对应标准去噪损失。
  4. s_gen 已经能刻画 student 当前输出分布后,再结合 s_data 的指导,通过 DMD loss 把梯度传回 student,让 student 往真实数据分布靠近。

这里的 Asymmetric 体现在 teacher 和 student 的架构不对称:teacher 是 bidirectional 的,student 是 causal 的。这种 asymmetric distillation 的关键优势在于:DMD 的分布匹配是在输出分布层面进行的,不要求 teacher 和 student 的推理轨迹一致——trajectory 匹配才需要结构一致。这也是为什么 CausVid 和 Self-Forcing 的 DMD 阶段可以继续使用 bidirectional teacher,而 ODE 阶段不行(这一点在 Causal Forcing 中被进一步剖析)。

整个训练在 64 张 H100 上大约需要 2 天。

推理优化:KV Cache#

推理时 CausVid 可以使用 KV cache 进一步加速生成。因为是因果注意力,过去 chunk 的 KV 可以被缓存下来,后续 chunk 的生成不需要重新计算历史部分的注意力。而且一个有意思的实现细节是:由于推理时每次只处理一个 chunk,block-wise causal 注意力退化成普通的 full attention(当前 chunk 可以 attend 自身所有 token + KV cache 中的所有历史 token),因此可以直接使用高度优化的 bidirectional attention kernel,无需特殊的 mask 实现。

KV Cache 推理优化示意

Zero-shot 应用#

CausVid 的 AR 架构还天然支持几个 zero-shot 应用,这是 bidirectional 模型很难做到的:

  • 流式 Video-to-Video Translation:类似 SDEdit,对输入视频帧注入噪声到时间步 t1t_1,然后一步去噪并根据文本条件编辑。逐帧流式处理即可。
  • Image-to-Video:把初始图像复制为第一个 chunk,模型自动向后续帧延伸动态内容。
  • Dynamic Prompting:在流式生成过程中实时切换文本条件,视频内容会即时响应。

特别是 Video-to-Video,CausVid 在没有任何专门微调的情况下就超过了专门为此任务设计的 StreamV2V,原因在于底层视频 prior 更强。

Self-Forcing:让训练和推理真正对齐#

核心问题:Exposure Bias#

CausVid 虽然证明了这条路线的可行性,但 Self-Forcing 的作者指出了它的一个根本性缺陷——

CausVid suffers from a critical flaw that its training outputs (generated via DF) do not come from the distribution the model produces at inference time, therefore the DMD loss is matching the wrong distribution.

这段话说的很直接:CausVid 在训练时使用 Diffusion Forcing 方式生成的输出,和推理时的实际输出分布是不同的。DMD loss 匹配的是一个”错误的分布”。

不管是 Teacher Forcing 还是 Diffusion Forcing,问题本质上都一样:训练时模型看到的 context 来自真实数据(ground truth),推理时却只能看自己生成的结果。这个 gap 会导致误差逐帧累积,生成的视频越往后越偏。从论文的消融实验来看,CausVid 的主要退化表现是颜色过饱和(over-saturation),随着帧数增加越来越严重。

Teacher Forcing vs Diffusion Forcing vs Self-Forcing

三种训练方式的区别一目了然:

  • Teacher Forcing:基于 GT 上下文,对最后一帧训练。高效并行实现可以用 block sparse attention mask 让所有帧同时训练。
  • Diffusion Forcing:基于带噪上下文训练,每帧有独立噪声调度。推理时上下文帧是干净的、当前帧是带噪的,这属于DF训练分布的一个”特例”,理论上被覆盖了——但实际上覆盖得不够。
  • Self-Forcing:基于模型自己去噪得到的干净上下文训练。训练和推理的上下文分布完全一致。

Self-Forcing 的回答非常直觉:训练时就让模型看自己生成的帧,不给它偷看真实帧。这个思路在 RNN 时代就有前辈探索过(Professor Forcing、SeqGAN 等),但在视频扩散的场景下实现起来要复杂得多——因为每一帧本身就需要多步迭代去噪。

实现细节#

Self-Forcing 基于 Wan2.1-T2V-1.3B(Flow Matching 框架),生成 5s 视频,16 FPS,分辨率 832×480。使用 4-step 扩散,时间步均匀选取为 [1000, 750, 500, 250]

Self-Forcing 训练和推理流程

Self-Forcing Training#

训练时,模型需要自己一帧一帧往下生成,并把之前自己生成的特征在训练过程中写入 KV cache。这是 Self-Forcing 与此前所有方法的关键区别——KV caching 不再是推理时才用的加速手段,而是训练算法的核心组成部分。

这里面临一个直接的工程问题:如果对整个生成链条求导,显存会直接爆掉。Self-Forcing 的解决方案很聪明:每次只在一个随机选中的去噪步上保留梯度

具体流程:

  1. 初始化空的视频输出列表 X_θ 和空的 KV Cache
  2. 从总去噪步数 11TT 中,随机采样一个步数 ss
  3. 对每一帧执行自回归生成:
    • 先把当前帧初始化为纯高斯噪声 xtTix^i_{t_T}
    • TT 递减到 ss 执行去噪。
    • j>sj > s 时,关闭梯度,只当成前向滚动过程。
    • j=sj = s 时,开启梯度,得到这一帧的预测 x^0i\hat{x}^i_0,加入 X_θ
    • 然后再次关闭梯度,提取当前帧 KV 特征并写入缓存,供下一帧使用。
  4. 当所有帧都生成完后,拿整段 X_θ 与真实视频计算全局分布匹配损失。

为什么只在第 ss 步保留梯度? 假设有 10 帧视频、4 步去噪,如果全部求导,需要保留 40 次网络前向的计算图,显存基本不可接受。Self-Forcing 的关键洞察是:截断过去帧以及当前帧非 ss 步的梯度流,只把这些结果当作常量写入 KV cache。这样训练代价接近传统方法,但模型看到的上下文已经是”自己滚出来的上下文”——这才是真正对齐 train-test distribution 的关键。

Holistic Distribution Matching Loss#

这里还有一个容易被忽略的理论要点:Self-Forcing 匹配的是完整视频序列的分布 D(pdata(x1:N)pθ(x1:N))D(p_{\text{data}}(x^{1:N}) \| p_\theta(x^{1:N})),而不是 TF/DF 那样的逐帧条件分布 E{x<i}pdataDKL(pdata(xix<i)pθ(xix<i))\mathbb{E}_{\{x^{<i}\} \sim p_{\text{data}}} D_{KL}(p_{\text{data}}(x^i|x^{<i}) \| p_\theta(x^i|x^{<i}))。这两者的本质差异在于:TF/DF 的 context {x<i}\{x^{<i}\} 始终来自数据分布 pdatap_{\text{data}},while Self-Forcing 的 context 来自模型自身的分布 pθp_\theta

论文提供了三种分布匹配目标的实现:

  • DMD:最小化 reverse KL 散度 Et[DKL(pθ,tpdata,t)]\mathbb{E}_t[D_{KL}(p_{\theta,t} \| p_{\text{data},t})]。实现是 data-free 的——不需要任何视频训练数据。
  • SiD(Score Identity Distillation):通过 Fisher 散度 Et,pθ,t[logpθ,tlogpdata,t2]\mathbb{E}_{t,p_{\theta,t}}[\|\nabla\log p_{\theta,t} - \nabla\log p_{\text{data},t}\|^2] 做分布匹配。同样 data-free。
  • GAN(R3GAN):用 relativistic GAN loss + R1/R2 正则化。这个需要真实视频数据来训练 discriminator。

三种目标的结果差异不大,表明 Self-Forcing 的核心贡献在训练范式本身,而不是特定的 loss 选择。其中 DMD/SiD 的 data-free 特性意味着:你可以在不拥有任何视频数据的情况下,把一个预训练的视频扩散模型转换成一个自回归模型——这在数据受限的场景下非常有价值。

训练效率:反直觉的发现#

一个直觉上的顾虑是:Self-Forcing 需要串行 rollout,这不是和 Transformer 的并行训练范式相矛盾吗?效率怎么保证?

论文给出了一个反直觉的实验结论:Self-Forcing 的训练效率实际上优于 Teacher Forcing 和 Diffusion Forcing。原因有两个:

  1. 虽然帧间是串行的,但每一帧/chunk 内的所有 token 仍然是并行处理的,GPU 利用率依然很高。
  2. TF/DF 需要复杂的 block-wise causal attention mask,必须使用 FlexAttention 这样的特殊 kernel;而 Self-Forcing 在训练时始终使用 full attention(因为每次只处理一帧+KV cache),可以直接用 FlashAttention-3,效率更高。

具体数字:每个 DMD 实验在 64 张 H100 上只需要约 1.5 小时就能收敛。SiD/GAN 需要 2-3 小时。这个训练成本是非常可控的——它是一个 post-training 阶段,不需要大量的梯度更新。

论文的 Discussion 部分对此做了一个更宏大的概括,我觉得很有启发性:

We advocate a new paradigm of parallel pre-training and sequential post-training that combines the best of both worlds. While this paradigm shift is gaining momentum in language modeling through reinforcement learning, our work represents the first step towards this direction for the video domain.

这与 LLM 领域 DeepSeek 等工作推动的”预训练并行 + RL 后训练串行”的范式转变不谋而合。

性能数据#

Self-Forcing 在 VBench 上取得了所有对比模型中的最高分,同时实现了:

  • Chunk-wise:17 FPS throughput,sub-second 首帧延迟
  • Frame-wise:0.45s 首帧延迟(最低延迟)

在 user study 中,Self-Forcing chunk-wise 模型被一致地 prefer over Wan2.1(它的初始化底座)、CausVid、SkyReels-V2 和 MAGI-1。相比 Wan2.1 和 SkyReels-V2,Self-Forcing 在延迟上快了约 150-400 倍。

推理:Autoregressive Inference with Rolling KV Cache#

推理过程与训练高度一致,只是去掉了梯度控制,并额外引入 Rolling KV Cache 来支持长视频外推。

  1. 给定缓存容量上限 LL,初始化 X_θKV Cache
  2. 对每一帧执行完整去噪(从 TT 递减到 11),完成后写入 X_θ 并提取 KV 特征。
  3. 如果缓存已满,就先弹出最老的一帧特征,再写入新的 KV。
  4. 循环结束后返回整段视频。

Rolling KV Cache 滑动窗口

Rolling KV Cache 本质上就是一个滑动窗口:生成第 100 帧时,模型可能只保留第 80 到 99 帧的上下文。它的时间复杂度优势值得单独说一下:

  • Bidirectional attention + 滑动窗口:需要对每个新帧重新计算注意力矩阵,复杂度 O(TL2)O(TL^2)TT 是去噪步数,LL 是窗口大小)
  • Causal attention + KV 重计算(CausVid 的做法):需要对重叠帧重算 KV,复杂度 O(L2+TL)O(L^2 + TL)
  • Rolling KV Cache:固定大小缓存,仅做 FIFO 替换,复杂度 O(TL)O(TL)

但直接使用 Rolling KV Cache 会出现一个比较微妙的问题:闪烁。根因是第一潜在帧和后续帧的统计属性不同——第一帧只编码图像本身,不经过时间压缩(由 3D VAE 的特性决定);而在 rolling 场景里,随着生成继续进行,最早那一帧最终会被移出可见上下文。如果训练时始终默认”第一帧一直可见”,推理时就会出现分布失配。

对应的处理思路也很直接:训练时就限制注意力窗口,让模型在对后部块去噪时看不到最早的块,主动模拟长视频生成时”首帧已经被滚出缓存”的条件。这样训练分布才更接近真实推理分布。这其实也是 Self-Forcing 核心思想的一个自然延伸——不光帧本身要用自己生成的,上下文的可见范围也要和推理时一致。

值得注意的是,Self-Forcing 坦诚承认:虽然在训练长度内(5s)不存在 error accumulation,但超出训练长度后质量仍会退化。这正是 Self-Forcing++ 要解决的问题。

Self-Forcing++:突破 Teacher 时长限制#

问题:短 Teacher 教不出长 Student#

Self-Forcing 解决了 exposure bias,但还有一个更深层的问题:所有基于短视频 teacher(例如 5s)蒸馏的方法,在生成长度超过 teacher 可处理范围后都会明显退化

根源可以概括为两层失配:

  • 时序失配:训练时只生成 5s,推理时却要生成 100s,长度分布完全不同。
  • 监督失配:训练时 teacher 对每帧都有密集监督;推理超过 teacher 的”可管辖范围”后,student 只能裸奔。

这里有一个关键观察:student 在生成 100s 视频时,质量虽然会逐渐下降,但通常不是立刻完全崩掉,而是运动慢慢停滞、细节逐步退化。这说明误差是可纠正的,而不是不可逆的。这一点给了 Self-Forcing++ 的优化空间。

三件事#

Self-Forcing++ 方法总览

1. 反向噪声初始化#

普通 DMD 训练从随机噪声开始,但在 100s 生成场景里,这个噪声与前面已有内容没有时序关联,等于缺失历史上下文。Self-Forcing++ 的做法是:

  1. 先用 rolling KV cache 做一次长程自回归 rollout,得到 NN 帧视频(N5sN \gg 5s)。
  2. 对 rollout 得到的”已退化视频”重新按扩散时间表注入噪声,构造带有时序上下文的噪声起点
  3. 在这个含噪状态上同时让 teacher 和 student 预测分布,再计算 KL 散度。
xt=(1σt)x0+σtϵx_t = (1 - \sigma_t)x_0 + \sigma_t\epsilon

这个设计其实挺巧妙的:它利用了 student 自己的退化输出作为噪声初始化的锚点,而不是完全无关的高斯噪声。这样 teacher 和 student 面对的起点是一致的,监督信号更有针对性。

2. Sliding Window Supervision#

teacher 虽然只能处理 5s 左右的视频片段,但可以在 student 的长 rollout 上随机采一个 teacher 能理解的短窗口,让 teacher 对这个窗口打分。

这里的直觉很自然:teacher 未必会生成 100s 视频,但它已经学会了”什么样的 5s 片段是好视频”。如果一段 100s 视频整体质量高,那么从中任意截取一个 5s 窗口,也应该大概率被 teacher 判为高质量。

θLextendedDMD=EtEz[θKL(pθ,tS(z)ptT(z))]\nabla_\theta \mathcal{L}_{\mathrm{extended}}^{\mathrm{DMD}} = \mathbb{E}_t \mathbb{E}_z \left[ \nabla_\theta \mathrm{KL}\left(p_{\theta,t}^{S}(z) \,\|\, p_t^{T}(z)\right) \right] EtEiUnif{1,,NK+1}[(sT ⁣(Φ(Gθ(zi),t),t)sθS ⁣(Φ(Gθ(zi),t),t))dGθ(zi)dθ  dzi]\approx - \mathbb{E}_t \mathbb{E}_{i \sim \mathrm{Unif}\{1,\dots,N-K+1\}} \left[ \int \left( s^{T}\!\left(\Phi(G_\theta(z_i), t), t\right) - s_{\theta}^{S}\!\left(\Phi(G_\theta(z_i), t), t\right) \right) \frac{dG_\theta(z_i)}{d\theta} \; dz_i \right]

其中:

  • Gθ(z)G_\theta(z) 表示 student generator 在 latent zz 条件下得到的 rollout
  • Φ(,t)\Phi(\cdot, t) 表示在时间步 tt 的加噪变换
  • rollout 总长度是 NN,teacher 能处理的窗口长度是 KK
  • 从整段 rollout 中均匀采样一个起始位置 iUnif{1,,NK+1}i \sim \mathrm{Unif}\{1, \dots, N-K+1\},再截取一个长度为 KK 的窗口

因此,extended DMD 本质上是在长 rollout 上随机抽取一个 teacher 可理解的短窗口,并最小化该窗口内 student 分布与 teacher 分布之间的平均 KL 散度。这个方案的优雅之处在于,它完全没有修改 teacher 本身——只通过采样策略的调整,就把 teacher 的局部判别能力延伸到长视频场景。

3. Rolling KV Cache + GRPO#

Self-Forcing++ 在训练和推理都使用 rolling KV cache,彻底消除 train-test 不匹配。在此基础上,还引入了 GRPO(Group Relative Policy Optimization),用光流(optical flow)大小作为奖励,优化长期时序平滑性,抑制场景突变:

rewardt=magnitude(opticalflow(framet,framet+1))\text{reward}_t = -|\text{magnitude}(\text{opticalflow}(\text{frame}_t, \text{frame}_{t+1}))|
  • 光流越平滑(变化越稳定),奖励越高。
  • 用相对奖励(而非绝对奖励)避免 reward hacking。

这也是一个值得注意的信号:强化学习的技巧正在越来越多地被引入到视频生成的训练流程中。GRPO 原本是在 LLM 对齐中广泛使用的方法,这里被自然地迁移到了视频生成的时序平滑性优化上。

在 100s 长视频生成上,Self-Forcing++ 相比 baseline 的提升尤其明显。它的核心不是简单地”把 rollout 拉长”,而是把 teacher 的局部监督能力重新包装成适用于长视频的训练信号

Causal Forcing:重新审视 ODE Initialization#

被忽视的问题#

前面的工作——CausVid 和 Self-Forcing——都花了大量精力在 DMD 训练阶段,但 Causal Forcing 的核心观点是:大家过度关注 DMD 部分,却忽略了 student initialization 本身就有问题

具体来说,ODE 初始化阶段不应该直接拿 bidirectional diffusion teacher 来教 few-step causal student。原因很直觉:bidirectional teacher 在生成 ODE 轨迹时,每一个时间步的预测都基于所有帧的信息;而 causal student 只能看到过去的帧。这两者的轨迹在语义上就不对等——用前者的轨迹去监督后者,等于要求 student 在只看到部分信息的情况下复现看到全部信息时的输出。

Causal Forcing 的 FAQ 里有一个非常清晰的解释,回答了”为什么 ODE 阶段必须用 AR teacher,而 DMD 阶段可以用 bidirectional teacher”:

ODE/CD requires the student and teacher to follow the same trajectory, so their structures must be matched; an AR student cannot be trajectory-aligned with a bidirectional teacher. DMD only requires the student to match the teacher’s final distribution, not the generation trajectory, so a bidirectional teacher is fine.

换言之:轨迹对齐需要结构匹配,分布对齐不需要。这也是为什么 ODE 初始化必须修正,而 DMD 阶段可以继续使用更强的 bidirectional teacher。

方法:三阶段训练#

Causal Forcing 与 Self-Forcing 的关键差异

Causal Forcing 的训练流程可以拆成三步:

  1. Stage 1(AR Diffusion Teacher):先用 teacher forcing 训练一个多步生成的自回归扩散模型。这一步得到了一个原生的 AR diffusion teacher。具体实现很直接——在预训练的 Wan2.1 上加 causal attention mask,用标准去噪损失微调。建议训练不少于 2K 步,5-10K 步效果更好。
  2. Stage 2(Causal ODE Distillation):用 Stage 1 得到的 AR diffusion teacher 构造 causal ODE 数据,再训练 few-step AR student。因为 teacher 本身就是 causal 的,生成的 ODE 轨迹与 student 的实际使用场景更匹配。论文还提供了一个替代方案:Consistency Distillation(CD),可以跳过生成 ODE paired data 的步骤,直接蒸馏。
  3. Stage 3(Self-Forcing DMD):以 Stage 2 的模型作为初始化,再继续训练 Self-Forcing 风格的 DMD。注意这里的 DMD teacher 仍然使用 bidirectional 模型,因为 DMD 只需要分布匹配而非轨迹匹配。

一个非常有意思的实践细节是训练步数的敏感性:Causal Forcing 建议 DMD 阶段 frame-wise 训练 500 步,chunk-wise 只需 100-200 步。超过 1K 步会降低 dynamic degree。这说明 DMD 训练有一个微妙的”甜蜜点”——train 太长反而会让模型输出变得静态。有了更好的 ODE 初始化,DMD 只需要做非常少量的微调,减少了过训练导致运动退化的风险。

自然支持 Image-to-Video#

Causal Forcing 的 frame-wise 模型有一个很自然的附加能力:原生支持 I2V。逻辑很简单——frame-wise 模型的第一帧就是一个条件输入,把它设为用户提供的图像即可。这不需要任何额外训练,是架构设计带来的 free bonus。

效果与生态#

Causal Forcing 号称在同等训练预算和推理效率下,在视觉质量和运动动态性上均显著优于 Self-Forcing。它在单卡 RTX 4090 上就可以实现实时流式视频生成。

更值得关注的是围绕 Causal Forcing 形成的下游生态。多个后续工作直接基于 Causal Forcing 作为 base model 进行扩展:

此外,同样是 Self-Forcing 团队的后续工作 MotionStream(ICLR 2026 Oral)在 Self-Forcing 的基础上加入了运动控制——用户可以通过画轨迹、控制相机或转移运动来实时控制视频生成。MotionStream 在单卡 H100 上达到 29 FPS、0.4s 首帧延迟,并且引入了 attention sink 机制(借鉴自 LLM 的 StreamingLLM)来替代简单的 rolling KV cache,使得固定上下文窗口下的无限长视频生成更加稳定。

小结与思考#

回顾这四篇工作,可以看到一条非常清晰的问题驱动路线:

工作核心贡献解决的问题
CausVidBlock-wise Causal Attention + Asymmetric DMD证明 bidirectional → causal + few-step 蒸馏可行
Self-ForcingSelf-rollout 训练 + 截断梯度消除 exposure bias(train-test gap)
Self-Forcing++反向噪声初始化 + Sliding Window Supervision + GRPO突破 teacher 时长限制
Causal ForcingAR teacher → Causal ODE initialization修正 architectural gap(轨迹 vs. 分布)

每一步都是前一步暴露出来的具体问题的针对性回答,没有多余的技巧堆砌。

AR、Diffusion 与 GAN 的融合#

Self-Forcing 论文的 Discussion 部分有一段话让我印象深刻——它说自回归模型、扩散模型和 GAN 这三种生成范式传统上被视为独立的方向,但实际上它们可以非常自然地组合在一起:

  • AR + Diffusion:通过 chain rule 分解整段视频,再用扩散模型建模每一帧的条件分布。
  • + GAN:整个 AR-diffusion 生成器可以被视为一个 implicit generator,用 GAN 的分布匹配思想来训练。

这种”三位一体”的视角或许才是这条路线的真正理论底色。

开放问题#

从更宏观的角度看,这条路线目前还有几个值得持续关注的方向:

  1. 质量上界:AR 模型的生成质量究竟能不能追上甚至超过 bidirectional 模型?CausVid 的消融实验已经暗示了帧级质量可以反超,但代价是 diversity 下降和 temporal flickering 增多。论文也提到 EM-Distillation、Score Implicit Matching 等可能更好地保留 diversity 的替代方案,值得探索。
  2. 长视频稳定性:Self-Forcing++ 在 100s 级别做了很多改进,但分钟级甚至小时级的视频生成仍然是开放问题。Attention sink、Rolling Forcing、Infinity-RoPE 等后续工作正在挑战这个边界,但 rolling KV cache 丢弃的历史信息是否会导致长程语义不一致,这个问题还没有根本性解答。
  3. RL 在视频生成中的角色:Self-Forcing++ 引入 GRPO 是一个很有意思的信号。类似 LLM 的 RLHF 流程能否更深度地集成到视频生成管线中——比如用人类偏好或视觉质量模型作为奖励信号?Self-Forcing 论文提出的”parallel pre-training + sequential post-training”范式,与 LLM 的发展轨迹惊人地吻合。
  4. 多模态交互:MotionStream 已经展示了运动控制的可能性。当实时 AR 视频生成和语音、文本等多模态输入结合时,系统如何在统一框架下保证各模态之间的时序同步和条件切换?这可能是通往真正交互式世界模型的关键一步。
长视频生成中的 Self-Forcing 路线:从 CausVid 到 Causal Forcing
https://zephand.top/blog/self-forcing
Author Zephan Deng
Published at 2026年4月15日