Self Forcing: Bridging the Train-Test Gap in Autoregressive Video Diffusion

Paper: arXiv:2506.08009 Code: guandeh17/Self-Forcing Code reference: main @ 33593df3 (2025-09-12) Project: self-forcing.github.io

1. Motivation (研究动机)

这篇论文要解决的核心问题不是“如何再训练一个更大的视频扩散模型”,而是“如何让自回归视频扩散模型在训练时就经历推理时会遇到的自身误差”。视频生成里有两条路线长期互补但彼此冲突。第一条路线是双向视频扩散模型。典型例子包括 Wan2.1、SkyReels-V2、MAGI-1 这类 DiT/扩散系统。它们通常一次性对整段视频做去噪。双向注意力允许未来帧影响过去帧。这种设计有利于全局一致性和视觉质量。但它要求未来帧在生成当前帧时已经可见。因此它天然不适合真正的流式生成。如果用户希望模型边看边生成、边交互边响应,双向模型的“整段视频一次性出结果”会带来很高首帧延迟。第二条路线是自回归视频生成。自回归模型按帧或按块顺序生成。这种因果结构更接近真实时间媒体。

它可以在未来帧尚不存在时先输出当前帧。它也更适合交互式内容创作、游戏世界模拟、机器人学习和长视频外推。问题在于,传统自回归模型常依赖离散 tokenizer 或 VQ 表示。这些表示会损失细节,使 AR 模型难以达到现代连续扩散模型的视觉质量。于是近期工作尝试把扩散模型改造成自回归模型。Teacher Forcing(TF)训练模型在干净的 ground-truth 上下文上预测下一帧。Diffusion Forcing(DF)训练模型在带不同噪声水平的上下文上去噪当前帧。两者看起来都把扩散和自回归结合起来了。但它们都没有根治 exposure bias。训练时上下文来自真实数据分布。推理时上下文来自模型自己已经生成的帧。

只要模型早期输出有轻微偏差,后续帧就会在偏移后的分布上继续条件化。这种误差会随自回归展开积累。论文把这个问题重新表述为训练-测试分布差距。不是单帧去噪能力不足。也不是简单地把上下文加噪就能解决。真正的差距在于:训练看到的是“真实上下文”,推理看到的是“模型自生成上下文”。

如果训练时不让模型接触自己的输出,它永远不会学习如何在自己的误差上继续生成。 这一点对视频尤其关键。 图像生成只需要一次采样完成。 短视频可以靠整段并行去噪隐藏问题。 但长视频、实时视频和世界模型会强迫模型持续展开。 一旦存在 train-test gap,几秒后的质量、饱和度、身份一致性和运动连贯性都会变差。 本文的动机因此很直接。 它希望保留扩散模型的连续视觉质量。 它希望保留自回归模型的低延迟和可外推性。 它还希望训练过程本身就匹配推理过程。 这就是 Self Forcing 的出发点。 它不是把真实历史帧喂给模型。 它也不是只在推理时用技巧修补误差。 它在训练中执行 autoregressive self-rollout,让模型基于自己刚生成的历史继续生成。 因此模型在训练阶段就暴露于推理阶段的分布。 这也是为什么论文标题强调“Bridging the Train-Test Gap”。

2. Idea (核心思想)

一句话概括:Self Forcing 把自回归视频扩散模型的训练过程改成推理过程的镜像。普通 TF 的训练条件是: 这里历史帧 来自真实视频。DF 的训练条件更复杂,因为上下文帧会带不同噪声水平。但上下文仍然来自真实视频的扰动版本。Self Forcing 改成: 这里历史帧 是模型自己生成的。训练时,模型先生成前面的帧。然后把这些生成结果作为 KV cache 中的历史上下文。再继续生成后续帧。这使训练轨迹和推理轨迹共享同一种条件分布。

核心直觉是:与其让模型在完美历史上学习,不如让它在自己会制造的历史上学习。这和语言模型里的 scheduled sampling / RL 后训练有相似精神。但视频扩散的难点更高。因为每个时间步内部还有多步去噪链。如果直接对完整自回归扩散过程反传,显存和计算会爆炸。Self Forcing 因此由三个配套设计组成。第一是 few-step diffusion。论文使用 4-step 扩散来把每个 AR 条件分布压缩到很短的去噪链。这让训练时真实执行自回归展开变得可行。第二是 stochastic gradient truncation。训练时不对完整去噪链和完整历史展开全部反传。代码里会随机选择每个块的 exit denoising step。

在未选中的去噪步骤上使用 torch.no_grad()。只有被选中的后段步骤保留梯度。同时只保留最后 21 帧作为分布匹配损失的主要作用窗口。这让训练仍然看到了自回归轨迹,但梯度成本被截断。第三是 holistic distribution matching loss。

模型不是只优化单帧 denoising MSE。它对最终生成的视频片段做整体分布匹配。论文实现了 DMD、SiD 和 GAN 三类目标。DMD/SiD 版本可以 data-free:不需要真实视频数据,只用预训练视频扩散模型提供 score / critic 信号。GAN 版本则使用 14B base model 生成的 70k 视频作为训练数据。这个设计把监督对象从“当前帧是否能在真实上下文中去噪”改成“模型自展开后得到的整段视频分布是否像真实视频”。因此 Self Forcing 的核心不是某一个损失函数。它是一个训练范式。只要能对完整生成序列做分布匹配,就可以放进这个范式。论文也强调它支持 chunk-wise AR 和 frame-wise AR。

Chunk-wise 版本每次生成 3 个 latent frames。Frame-wise 版本每次生成单帧,首帧延迟更低。为了支持长视频,Self Forcing 还加入 rolling KV cache。普通双向滑动窗口不能复用 KV。已有因果扩散模型虽然能缓存,但窗口移动时仍要重算重叠帧 KV。Self Forcing 的 rolling KV cache 直接淘汰最旧 KV、追加最新 KV。这把长视频外推的复杂度降到更接近流式解码。所以本文的核心思想可以拆成两层。训练层:用 self-rollout 缩小 train-test gap。系统层:用 KV cache / rolling cache 让 AR 扩散真正低延迟。

3. Method (方法)

3.1 自回归视频扩散的形式化

给定视频帧序列: 自回归分解写成: 每个条件分布 由扩散模型建模。 也就是从高斯噪声开始,逐步去噪得到当前帧或当前块。 在 chunk-wise 场景中,论文为了符号简洁仍把一个 chunk 记作一个“frame”。 这点很重要。 因为实验中的 chunk-wise Self Forcing 实际每次生成 3 个 latent frames。 AR 扩散模型的推理过程包含两个嵌套循环。 外层循环沿视频时间前进。 内层循环对当前帧/块执行扩散去噪。 传统 TF/DF 训练会把所有帧并行放进模型。 它们用注意力掩码或不同噪声等级模拟因果约束。 但这种训练仍没有真正执行“模型先生成历史,再条件化后续”的过程。 Self Forcing 的关键改动就是把这个过程搬到训练里。

3.2 三种训练范式的差异

图 1 对比了 TF、DF 和 Self Forcing。

Teacher Forcing 的上下文是 clean ground-truth。 因此训练分布是 。 推理分布却是 。 两者不一致。 Diffusion Forcing 把上下文帧设置到不同噪声水平。 它覆盖了“当前帧 noisy、上下文帧 clean/noisy”的若干组合。 但上下文本质上仍来自数据样本。 当推理中上下文来自模型自己时,DF 仍会遇到误差累积。 Self Forcing 在训练中直接执行 self-rollout。 第 个帧/块的输入上下文是前 个模型输出。 最终得到的是一个完整的模型样本 。 然后对这个完整样本施加分布匹配目标。 这使条件分布的乘积更接近模型真正推理时的联合分布。

3.3 Self-rollout 训练流程

训练时的高层流程如下。 先从文本 prompt 得到条件 embedding。 再采样当前视频片段的初始噪声。 模型按照 AR 顺序生成一段视频 latent。 每生成一个帧/块,就把它作为后续帧/块的历史上下文。 历史上下文通过 KV cache 存储。

当一段生成完成后,对整段生成视频计算分布匹配损失。 这一步更新的是生成器 。 如果使用 DMD/SiD,还会调用 frozen 或 trainable 的 score network / critic network。 如果使用 GAN,还会训练判别器。 可以把 Self Forcing 看作以下伪代码。

for each training iteration:
    sample text prompts
    sample Gaussian latent noise
    initialize empty KV cache
    for each autoregressive block:
        denoise current block with causal generator
        condition on cached self-generated history
        append clean block to generated video
        update KV cache using generated block
    compute video-level distribution matching loss
    update generator parameters

这个流程和推理最大的差别只在于梯度处理。 推理不需要梯度。 训练需要梯度,但不能对所有中间状态无限反传。

3.4 Few-step diffusion 与随机梯度截断

如果每个帧/块仍使用 50 步扩散,那么 self-rollout 训练几乎不可承受。论文采用 few-step diffusion。实验配置中使用 4 个 denoising steps。Released code 的 configs/self_forcing_dmd.yaml 中对应: denoising_step_list: [1000, 750, 500, 250] 同时 warp_denoising_step: true 会把这些值映射到 scheduler 的实际 timestep。这解释了为什么 note 里不能只写“4-step”。真正的实现还包含 timestep warp 和 Flow Matching scheduler。

随机梯度截断对应 released code 的 pipeline/self_forcing_training.pygenerate_and_sync_list() 会为每个 block 采样一个 exit index。如果 same_step_across_blocks: true,所有 block 共享同一个 exit step。last_step_only: false 表示默认不是总在最后一步反传,而是随机选择。在未到 exit step 之前,代码在 torch.no_grad() 下调用 generator。到达 exit step 后,才保留 generator 前向的梯度。

这对应论文里“随机采样一个去噪步并只对该步之后/该步附近反传”的思想。代码还把自展开得到的视频裁成最后 21 帧。model/base.py 中如果生成超过 21 帧,会把前面部分通过 VAE decode/encode 转成新的首帧 latent。然后拼接最后 20 帧。这样分布匹配主要作用在固定长度 21-frame 窗口上。gradient_mask 会屏蔽第一个 chunk。原因是第一个 chunk 可能包含 image latent / 起始上下文,不应把同样的梯度逻辑直接施加到它上面。这个实现细节对复现实验很关键。它说明 Self Forcing 不是“完整 BPTT through video”。

它更像“真实 self-rollout + 局部随机梯度 + 视频级分布匹配”。

3.5 训练时 KV caching

论文强调,已有 AR 扩散训练通常仍以并行方式实现。 所有帧一次性进入 Transformer。 模型通过 block-sparse causal mask 保证当前帧不看未来。 这种做法训练效率高,但仍与推理路径不完全一致。 Self Forcing 训练时像推理一样逐帧/逐块执行。 每次只处理当前帧/块。 之前帧的 key/value 存在 KV cache 中。 代码中的 SelfForcingTrainingPipeline._initialize_kv_cache() 为每个 transformer block 初始化缓存。 缓存张量包含 kvglobal_end_indexlocal_end_index。 在 inference_with_trajectory() 的每个 AR block 中,generator 都接收 kv_cache=self.kv_cache1。 当前 block 去噪完成后,代码又用 timestep 0 或 context noise 更新 cache。 这使训练中 cache 的状态和推理中 cache 的状态一致。 这种做法的一个好处是可以复用标准 FlashAttention 路径。 另一个好处是历史帧不需要重复计算。 这也是它能接近实时流式生成的系统基础。

3.6 Holistic Distribution Matching Loss

Self-rollout 产生的是完整视频片段,而不是单个去噪目标。因此论文在整体视频级别匹配分布: 为了稳定训练,论文并不直接在 clean video distribution 上匹配。它把生成分布和真实分布都经过 forward diffusion 加噪。然后匹配 。论文展示了三种可替换目标。DMD 最小化 reverse KL 的 score-difference 近似。

SiD 使用 score identity distillation。GAN 使用 relativistic pairing GAN loss,并带 R1 + R2 正则。对 Self Forcing 来说,损失函数不是唯一贡献。关键是损失作用在 self-rollout 之后的整体视频上。这与 TF/DF 的 frame-wise denoising loss 不同。Released code 中 DMD 对应 model/dmd.py_compute_kl_grad() 会分别调用 fake_scorereal_score

grad = pred_fake_image - pred_real_image 对应 DMD 的 score difference 方向。代码对梯度做 normalization,并用 torch.nan_to_num 处理数值异常。compute_distribution_matching_loss() 会对生成视频加噪,计算 DMD grad,再构造 MSE 形式的 surrogate loss。如果传入 gradient_mask,loss 只在 mask 为真的位置计算。这和前面的随机梯度截断机制衔接起来。

3.7 Rolling KV Cache 长视频外推

长视频生成不能简单依赖固定长度训练窗口。如果使用双向扩散滑动窗口,每个窗口都要重新计算完整注意力。复杂度约为 。其中 是 denoising steps, 是窗口长度。已有因果扩散模型可以缓存 KV。但窗口移动时,重叠帧的 KV 仍会被重新计算。复杂度约为 。Self Forcing 的 rolling KV cache 进一步复用历史。当缓存满了,它弹出最旧 token,对保留 token 左移,然后写入新 token 的 key/value。wan/modules/causal_model.py 中的 cache 逻辑对应这个机制。

代码会跟踪 global_end_indexlocal_end_index。如果 local attention size 有限制,cache 会保留 attention sink,并驱逐超出窗口的旧 token。这样 sliding window 外推时无需重算重叠帧。论文报告 10 秒视频生成中,重算 KV 的方式只有 4.6 FPS。使用训练匹配后的 rolling KV cache 可以维持 16.1 FPS。但 rolling KV 也有训练条件。如果训练时模型总能看到初始帧 latent,外推到超过训练窗口时会产生伪影。

论文 Appendix B 因此比较了 naive baseline 和 local attention window training。后者限制最后 chunk 不能继续依赖第一 chunk。这让模型更适应缓存滚动后的上下文缺失。

3.8 Released code 对论文方法的映射

公开代码仓库为 guandeh17/Self-Forcing。本笔记锚定 main@33593df3。核心入口是 train.pytrain.py 读取用户传入的 config,然后和 configs/default_config.yaml 合并。如果 trainer: score_distillation,入口会创建 ScoreDistillationTrainerScoreDistillationTrainer 根据 distribution_loss 选择 CausVidDMDSiD 类。DMD 主配置是 configs/self_forcing_dmd.yaml

该配置加载 checkpoints/ode_init.pt 作为 generator 初始权重。它使用 real_name: Wan2.1-T2V-14B 作为 real score network。它设置 guidance_scale: 3.0。它设置 lr: 2.0e-06。它设置 lr_critic: 4.0e-07。它设置 batch_size: 1total_batch_size: 64。它设置 ema_weight: 0.99ema_start_step: 200。它设置 image_or_video_shape: [1, 21, 16, 60, 104]

它设置 distribution_loss: dmd。它设置 gradient_checkpointing: true。它设置 num_frame_per_block: 3。默认配置里还有 height: 480width: 832num_frames: 81num_training_frames: 21causal: true。这些数字比 README 默认更可靠,因为它们来自实际训练配置文件。代码与论文需要注意一个小差异。仓库中存在 configs/self_forcing_sid.yaml。但在当前 main@33593df3,该文件仍写着 distribution_loss: dmd

trainer/distillation.py 明确根据 distribution_loss 字段选择 DMDSiD。因此当前 released config 不能直接证明 SiD 结果的完整复现路径。笔记中关于 SiD 的实验数值来自论文表格。笔记中关于 DMD 的训练配置来自 released code。

3.9 方法边界

Self Forcing 解决的是训练长度内的 exposure bias。 它不能保证无限长外推永远无退化。 项目页也展示了 30 秒 extrapolation 中仍会出现质量下降。 论文的结论更准确地说是:在训练窗口和合理外推范围内,Self Forcing 显著减少误差积累。 另一个边界是训练仍然需要较强算力。 虽然相比想象中的完整 sequential training 更高效,但论文主训练仍使用 64 张 80GB H100。

DMD/SiD 可以 data-free,但不是 compute-free。 此外,Self Forcing 依赖已有强视频扩散模型作为初始化。 它更像后训练范式,而不是从零训练视频 world model 的完整方案。

4. Experimental Setup (实验设置)

实验基座是 Wan2.1-T2V-1.3B。这是一个 Flow Matching 视频模型。目标输出为 5 秒视频。帧率为 16 FPS。分辨率为 832×480。论文先按照 CausVid 的 protocol 做 ODE initialization。ODE pairs 数量为 16k。Prompt 来自过滤并经 LLM 扩展的 VidProM。Self Forcing 后训练使用 4-step diffusion。Chunk-wise AR 每次生成 3 个 latent frames。Frame-wise AR 每次生成 1 帧。DMD 和 SiD 版本不需要真实视频数据。GAN 版本使用 Wan2.1-T2V-14B 生成的 70k 视频作为训练数据。

GAN objective 是 R3GAN / relativistic pairing GAN loss。正则项为 R1 + R2。评估指标包括 VBench 和 user preference study。VBench 被拆成 Total、Quality、Semantic 三类分数。效率评估同时报告 throughput 和 latency。论文特别指出,只报告 FPS 不足以称为 real-time。真正实时需要吞吐超过播放帧率,同时首帧延迟足够低。对比模型包括 LTX-Video、Wan2.1、SkyReels-V2、MAGI-1、CausVid、NOVA 和 Pyramid Flow。

其中 Wan2.1、SkyReels-V2、MAGI-1 是强扩散或 chunk-wise AR baseline。CausVid 是最直接的 causal diffusion baseline。NOVA 和 Pyramid Flow 是其他自回归生成路线。Released code 的训练命令如下。

torchrun --nnodes=8 --nproc_per_node=8 --rdzv_id=5235 \
  --rdzv_backend=c10d \
  --rdzv_endpoint $MASTER_ADDR \
  train.py \
  --config_path configs/self_forcing_dmd.yaml \
  --logdir logs/self_forcing_dmd \
  --disable-wandb

README 写明主训练使用 600 iterations。README 写明该 run 在 64 张 H100 上低于 2 小时。论文 Appendix A 写明 DMD 约 1.5 小时收敛。论文 Appendix A 写明 SiD/GAN 约 2–3 小时。代码 README 还说明,如果实现 gradient accumulation,8 张 H100 上应能在低于 16 小时复现。训练硬件依赖较高。仓库 README 测试环境包括 RTX 4090、A100、H100,以及至少 24GB 显存。推理 checkpoint 可从 Hugging Face gdhe17/Self-Forcing 下载。

公开代码提供 GUI demo 和 CLI inference。CLI DMD 推理配置使用 configs/self_forcing_dmd.yamlcheckpoints/self_forcing_dmd.pt。Prompt 文件示例为 prompts/MovieGenVideoBench_extended.txt。实验图示在本笔记中保留了主要资产。overview.png 对应 Self Forcing 训练流程。attention.svg 对应 TF/DF/SF 的注意力与缓存差异。rolling_kv.svg 对应长视频外推复杂度对比。user_study_result.svg 对应人类偏好实验。

training_efficiency_combined.svg 对应训练效率图。radar.svg 对应 VBench 16 维雷达图。

5. Experimental Results (实验结果)

5.1 主结果:质量和实时性同时成立

论文 Table 1 的核心结论是:chunk-wise Self Forcing 在 VBench 总分最高,同时达到实时吞吐和亚秒级延迟。

ModelParamsThroughputLatencyVBench TotalQualitySemantic
LTX-Video1.9B8.98 FPS13.5s80.0082.3070.79
Wan2.11.3B0.78 FPS103s84.2685.3080.09
SkyReels-V21.3B0.49 FPS112s82.6784.7074.53
MAGI-14.5B0.19 FPS282s79.1882.0467.74
CausVid1.3B17.0 FPS0.69s81.2084.0569.80
Self Forcing chunk-wise1.3B17.0 FPS0.69s84.3185.0781.28
NOVA0.6B0.88 FPS4.1s80.1280.3979.05
Pyramid Flow2B6.7 FPS2.5s81.7284.7469.62
Self Forcing frame-wise1.3B8.9 FPS0.45s84.2685.2580.30

Chunk-wise Self Forcing 和 CausVid 的吞吐、延迟相同。 两者都是 17.0 FPS 和 0.69s。 但 Self Forcing 的 VBench Total 从 CausVid 的 81.20 提升到 84.31。 Semantic 从 69.80 提升到 81.28。 这说明差异不是系统缓存技巧,而是训练范式显著改善语义和长期质量。 相比 Wan2.1,Self Forcing 的 VBench Total 略高。 Wan2.1 为 84.26。 Self Forcing chunk-wise 为 84.31。 但 Wan2.1 latency 是 103s。 Self Forcing chunk-wise latency 是 0.69s。 因此论文说它在质量接近/略超强扩散模型的同时,把延迟降到实时级。 Frame-wise Self Forcing 的 latency 更低,为 0.45s。 它的 Total 为 84.26,与 Wan2.1 持平。 Frame-wise 的吞吐为 8.9 FPS,低于 chunk-wise 的 17.0 FPS。 但首帧延迟更低,适合更强调响应速度的交互场景。

5.2 用户偏好实验

用户偏好结果显示 Self Forcing 被稳定偏好于主要 baseline。 论文没有只依赖自动指标。 这是必要的,因为 VBench 总分无法完全捕捉饱和度漂移、局部运动自然性和长程一致性。 用户研究的关键解读是:Self Forcing 不只是“跑得快”,而是视觉质量也足以超过或匹配慢得多的模型。 项目页的 demo 也强调,CausVid 容易出现过饱和和不自然运动。 Self Forcing 通过训练时自展开减少了这种误差累积。

5.3 消融:Self Forcing 优于 TF/DF 后训练

Chunk-wise AR 消融如下。

Chunk-wise ARTotalQualitySemantic
Diffusion Forcing, many-step82.9583.6680.09
Teacher Forcing, many-step83.5884.3480.52
DF + DMD, 4-step82.7683.4979.85
TF + DMD, 4-step82.3282.7380.67
Self Forcing + DMD84.3185.0781.28
Self Forcing + SiD84.0785.5278.24
Self Forcing + GAN83.8885.0679.16

Frame-wise AR 消融如下。

Frame-wise ARTotalQualitySemantic
Diffusion Forcing, many-step77.2479.7267.33
Teacher Forcing, many-step80.3481.3476.34
DF + DMD, 4-step80.5681.0278.71
TF + DMD, 4-step78.1279.6272.11
Self Forcing + DMD84.2685.2580.30
Self Forcing + SiD83.5484.7178.86
Self Forcing + GAN83.2784.5778.08

这些表的关键信息有三点。 第一,Self Forcing 在 DMD、SiD、GAN 三种目标下都有效。 这说明贡献主要来自训练范式,而不是某个单独 loss。 第二,baseline 从 chunk-wise 切到 frame-wise 时退化明显。 例如 many-step DF 从 82.95 掉到 77.24。 TF + DMD 从 82.32 掉到 78.12。

这符合 exposure bias 解释:frame-wise 需要更多 AR unroll steps,所以误差积累更严重。 第三,Self Forcing 在 frame-wise 下仍保持 84 左右。 DMD frame-wise Total 为 84.26。 这说明训练时 self-rollout 对更长 AR 链尤其重要。

5.4 VBench 16 维结果

Appendix C 的 16 维 VBench 图显示 Self Forcing 在 semantic alignment 上尤其强。 高分维度包括 scene、object class、multiple objects 和 human action。 这与 Table 1 的 Semantic 分数一致。 Self Forcing chunk-wise 的 Semantic 是 81.28。 CausVid 的 Semantic 是 69.80。 SkyReels-V2 的 Semantic 是 74.53。

Frame-wise Self Forcing 的动态程度更高。 但论文也指出,它的 temporal consistency 不如 chunk-wise。 具体表现为 background consistency、motion smoothness 和 temporal flickering 更差。 这给使用者一个取舍。 如果关注低首帧延迟,可以选 frame-wise。 如果关注整体稳定性和吞吐,可以选 chunk-wise。

5.5 Rolling KV cache 与长视频外推

论文报告 10 秒生成时,重算 KV 的方式只有 4.6 FPS。 Naive rolling KV cache 虽然能保持高吞吐,但会出现严重视觉伪影。 加入 local attention window training 后,Self Forcing 能在减少伪影的同时保持 16.1 FPS。 这说明 rolling KV cache 不是单纯的推理优化。 它需要和训练分布配套。 如果训练时模型总看到第一 chunk,测试时突然看不到第一 chunk,就会产生新的 train-test gap。

Self Forcing 的处理方式是让训练窗口也模拟缓存滚动后的可见上下文。 这和整篇论文的主线一致:训练时要尽量模拟测试时。

5.6 训练效率

直觉上,Self Forcing 比 TF/DF 更串行,似乎应该更慢。 论文的 Figure 6 给出相反结论。 在 chunk-wise、few-step、DMD 设置下,Self Forcing 的 per-iteration time 与 TF/DF 接近。 同时它的 VBench 随 wall-clock training time 上升更快。 原因是它虽然做 self-rollout,但仍保留了几个关键效率来源。 第一,4-step diffusion 大幅减少内层去噪长度。

第二,KV cache 让历史帧不重复计算。 第三,随机梯度截断减少反传图长度。 第四,chunk-wise 生成每次处理 3 个 latent frames,保留了一部分并行度。 因此 Self Forcing 不是牺牲训练效率换质量。 它用更接近推理的训练分布提高了每单位训练时间的有效性。

5.7 定性结果与失败模式

定性比较中,CausVid 常出现随时间增强的饱和度和锐化问题。 这类问题很符合 AR error accumulation。 早期输出的分布偏差被后续帧继续放大。 Self Forcing 的视频更自然,运动更平滑,语义保持更好。 但 Self Forcing 仍有外推长度限制。 项目页明确展示了 30 秒滑动窗口外推时仍存在质量下降。

因此它不是无限长视频生成的最终解。 它更像把可用范围从“训练-推理明显错配”推进到“训练窗口内稳定,外推更可控”。

5.8 结论和可复现要点

本文最重要的贡献是提出了“parallel pre-training + sequential post-training”的视频生成范式。预训练阶段仍可用大规模并行扩散模型获得高质量视觉先验。后训练阶段再用 Self Forcing 对齐自回归推理分布。这比从零训练 AR 视频模型更现实。它也比只在推理时修补缓存或上下文噪声更根本。复现时最应确认四件事。第一,是否真的执行 self-rollout,而不是用 ground-truth context 训练。第二,是否用 KV cache 更新训练上下文,而不是只在推理用 cache。

第三,训练配置是否使用 4-step DMD / Flow Matching scheduler / num_frame_per_block: 3。第四,报告的训练数字是否来自 configs/self_forcing_dmd.yamlconfigs/default_config.yaml,而不是 README 概述或默认值。如果只复现单帧 denoising loss,复现不到本文核心。如果只实现 rolling KV cache 但训练时没有模拟缓存滚动后的上下文,也复现不到长视频外推结果。如果只看 FPS 不看 latency,也无法判断是否真正满足实时交互需求。

因此这篇论文对 long-horizon generation / world model 的价值在于:它把“高质量扩散生成”和“因果流式展开”之间的训练错配问题具体化,并给出了一条可执行的后训练路线。