Self-Forcing++: Towards Minute-Scale High-Quality Video Generation

Authors: Justin Cui, Jie Wu, Ming Li, Tao Yang, Xiaojie Li, Rui Wang, Andrew Bai, Yuanhao Ban, Cho-Jui Hsieh Affiliations: UCLA, ByteDance Seed, University of Central Florida GitHub: guandeh17/Self-Forcing

1. Motivation (研究动机)

现有自回归长视频生成方法面临两层 train-inference mismatch,导致超出训练时长后质量急剧下降:

  • Temporal mismatch(时间维度不对齐):训练时 student 只生成 ≤5 秒的短片(teacher 的最大能力),推理时需要生成远超 5 秒的长视频。Self-Forcing 虽然部分缓解了 CausVid 的 over-exposure 问题,但仍然被 teacher 的 5 秒极限所束缚
  • Supervision mismatch(监督维度不对齐):训练时 teacher 对每一帧都提供密集监督,student 几乎不接触误差;推理时 student 必须在自身不完美的输出上持续 rollout,误差不断复合。表现为 motion stagnation(运动停滞)、scene freezing(场景冻结)、catastrophic fidelity loss(质量崩溃)
  • 关键观察:虽然长 rollout 质量退化,但视频往往保留了结构连贯性——错误主要是可恢复的退化(如运动停滞、曝光异常),而非结构崩溃。这说明自回归机制本身没坏,teacher 具有从退化视频中纠正错误的能力

此外,论文发现 VBench 评估长视频存在 bias——它倾向于给 over-exposed 和退化的帧更高的 Image Quality 和 Aesthetic 分数,导致评估不可靠。

Figure 1 解读:左侧展示 Self-Forcing++ 生成的 4 分钟视频截帧(每分钟一组),画面在整个 4 分钟内保持高质量和动态运动。右上角雷达图对比各方法在 CLIP Score、Temporal Quality、Overall Consistency 等维度的表现——Self-Forcing++ 全面领先。右下角动态度曲线显示其他方法(CausVid、MAGI-1、SkyReels-V2、Self-Forcing)的 Dynamic Degree 在 20-40 秒后急剧下降(运动停滞),而 Self-Forcing++ 在 100 秒内始终保持高动态度。

2. Idea (核心思想)

Self-Forcing++ 的核心 insight:短时长 teacher 虽然不能直接生成长视频,但它拥有从退化视频中纠正错误的知识——利用这种纠错能力来训练 student 应对长 rollout 中的误差累积

具体做法极其简洁(三个组件):

  1. Backward Noise Initialization:不从随机噪声起步,而是将 student 自身 rollout 的退化输出重新加噪作为起点,确保 DMD 训练的 trajectory 保留了历史上下文
  2. Extended DMD:将 DMD 的监督范围从固定 5 秒窗口扩展到 student rollout 的任意位置——在 的长 rollout 中均匀采样窗口进行蒸馏
  3. GRPO with Optical Flow Reward:用光流幅度作为 reward 信号,通过 Group Relative Policy Optimization 微调 student,抑制滑动窗口带来的突变和运动不连续

与 LongLive 等方法的根本区别:不需要 attention sink、frame sink 或特殊的 KV cache 管理,只需简单地扩展训练时的 rollout 长度和 DMD 采样范围。

3. Method (方法)

3.1 整体框架

Figure 2 解读:对比三种方法的训练流程。左(CausVid):用真实数据训练,固定训练时长,推理时用 overlapping frame 做自回归解码——存在严重的 train-inference mismatch。中(Self-Forcing):student self-rollout + backward noise initialization,但 DMD 监督仍限制在固定 5 秒窗口内,推理超出 5 秒后质量崩溃。右(Self-Forcing++,本文):student self-rollout 到 (如 100 秒),用 rolling KV cache 保持上下文,然后在长 rollout 的任意位置均匀采样 帧窗口进行 Extended DMD。底部时间线:CausVid 和 Self-Forcing 都存在 mismatch(红色叉),Self-Forcing++ 实现了完全的 train-inference alignment(绿色勾)。

Self-Forcing++ 基于 Wan2.1-T2V-1.3B,通过三步训练:

  • Stage 0 (Init):ODE 初始化 + Self-Forcing 短视频蒸馏(继承 Self-Forcing 基线)
  • Stage 1 (Extended DMD):长 rollout + Backward Noise Init + Extended DMD 扩展训练
  • Stage 2 (GRPO, 可选):用光流 reward 微调,提升长程平滑性

3.2 Backward Noise Initialization

短视频蒸馏中,student 从随机噪声 起步预测 ,teacher 直接在同一噪声上提供监督。但长视频中,每个新 chunk 的起始状态不是随机噪声,而是前一个 chunk 的自回归延续。如果训练时从随机噪声起步,就割裂了与历史上下文的依赖关系。

解决方案:将 student 自身 rollout 的干净输出 按 diffusion noise schedule 重新加噪:

这保证了:(a) 噪声 trajectory 保留了 student 的历史生成轨迹,(b) teacher 评估的是在正确上下文下的分布差异。

def backward_noise_initialization(student_clean_frames, noise_schedule, noise):
    """Re-inject noise into student's clean rollout to create training trajectories."""
    # student_clean_frames: (N, C, H, W) - student's self-generated clean frames
    # noise_schedule: {sigma_t} for each diffusion timestep
    # noise: epsilon ~ N(0, I)
 
    x_t = {}
    for t in noise_schedule.timesteps:
        sigma_t = noise_schedule.sigma(t)
        # Linear interpolation between clean frame and noise
        x_t[t] = (1 - sigma_t) * student_clean_frames + sigma_t * noise
 
    return x_t  # noisy trajectories for DMD training

3.3 Extended Distribution Matching Distillation

Self-Forcing 将 DMD 限制在前 帧(≤5 秒)。Self-Forcing++ 将 student rollout 扩展到 帧,然后均匀采样窗口位置进行蒸馏:

其中 从 student 长 rollout 的 中均匀采样, 是 teacher 能可靠监督的窗口大小(通常 )。

核心 insight:teacher 虽然只能生成 5 秒视频,但它在海量训练数据上学到了视频的分布。任何 5 秒片段都可以视为长视频边缘分布的一个样本。因此 teacher 可以在 student 长 rollout 的任意位置提供可靠监督。

def extended_dmd_training_step(student, teacher, cache_size, rollout_length, window_size):
    """One training step of Self-Forcing++ with extended DMD."""
    # Step 1: Student self-rollout to N >> T frames with rolling KV cache
    V = student.rollout(length=rollout_length, cache_size=cache_size)  # N clean frames
 
    # Step 2: Uniformly sample a window position from the long rollout
    i = random.randint(0, rollout_length - window_size)  # uniform sampling
    W = V[i : i + window_size]  # K-frame window
 
    # Step 3: Backward noise initialization on the sampled window
    t = sample_timestep(noise_schedule)
    x_t = backward_noise_init(W, t)  # re-inject noise
 
    # Step 4: Compute DMD loss (student vs teacher distributions)
    L_DMD = dmd_loss(
        student_output=student(x_t, t),
        teacher_output=teacher(x_t, t),
    )
 
    # Step 5: Update student
    L_DMD.backward()
    optimizer.step()

源码参考:推理代码与 Self-Forcing 相同。训练代码尚未发布。

Rolling KV Cache:训练时使用与推理完全相同的 rolling KV cache——student rollout 时维护固定大小的 cache,每生成一个 chunk 就更新 cache。不需要 CausVid 的 overlapping frame 重计算,也不需要 Self-Forcing 的 latent frame masking。

3.4 Improving Long-Term Smoothness via GRPO

滑动窗口 + sparse attention 可能导致窗口边界处的突变(abrupt scene transitions)。Self-Forcing++ 使用 Group Relative Policy Optimization (GRPO) 进行后处理微调:

  • Reward: 光流幅度(optical flow magnitude)作为 temporal smoothness 的代理指标
  • Policy: student 生成器 ,其 log probability 通过 diffusion noise prediction 计算
  • Importance weight:
def grpo_update(student, student_old, generated_video):
    """GRPO fine-tuning with optical flow reward."""
    # Compute optical flow reward between consecutive frames
    R = optical_flow_reward(generated_video)  # scalar reward
 
    # Compute importance weights (policy ratio)
    for t, i in all_timesteps_and_frames:
        rho = student.log_prob(a_t_i, s_t_i) / student_old.log_prob(a_t_i, s_t_i)
 
    # GRPO objective (clipped policy gradient)
    L_GRPO = -E[min(rho * advantage, clip(rho, 1-eps, 1+eps) * advantage)]
 
    L_GRPO.backward()
    optimizer.step()

3.5 Visual Stability 评估指标

Figure 3 解读:左图展示 VBench 的 Image Quality 偏差——退化的后期帧(77.13 分)反而比正常早期帧(69.03 分)得分更高。右图展示 Aesthetic Quality 偏差——over-exposed 帧(64.01 分)比正常曝光帧(50.88 分)得分更高。这说明 VBench 对长视频评估不可靠。Self-Forcing++ 提出 Visual Stability 指标:使用 Gemini-2.5-Pro 评估 over-exposure 和 error accumulation,输出 0-100 分。

3.6 Training Budget Scaling

Figure 6 解读:横轴为训练预算(1x-25x),纵轴为视频时长(0-255 秒)。左列(Self-Forcing 和 ODE 初始化)只能生成低质量短片。随着训练预算增加,Self-Forcing++ 的视频质量和可达时长同步提升:4x 时保持语义一致性,8x 时生成详细背景,20x 时生产高保真 50+ 秒视频,25x 时生成 255 秒视频且质量损失极小。这是首次展示训练计算可以直接兑换为视频时长的 scaling property。

3.7 代码-论文映射

论文概念源码/参考说明
ODE 初始化Self-Forcing继承 Self-Forcing 的初始化流程
Self-Forcing 基线训练Self-ForcingDMD + rolling KV cache
Backward Noise Init论文 Eq. 1, Algorithm 1 line 5对 student rollout 重新加噪
Extended DMD论文 Eq. 2, Algorithm 1 lines 3-6均匀采样长 rollout 中的窗口
Rolling KV Cache推理代码同 Self-Forcing训练和推理完全一致
GRPO + 光流 reward论文 Section 3.3, Algorithm 1 line 9可选的后处理微调
Visual Stability 指标论文 Section 3.4Gemini-2.5-Pro 评估

4. Experimental Setup (实验设置)

  • 基础模型: Wan2.1-T2V-1.3B(16 FPS,832×480)
  • 训练流程: ODE Init → Self-Forcing → Self-Forcing++(Extended DMD)→ GRPO(可选)
  • Rollout 长度: 帧,从 50s 扩展到 100s(论文实验),scaling 到 255s(4min15s)
  • Window 大小: (teacher 的 5 秒窗口)
  • 吞吐量: 17.0 FPS(与 Self-Forcing 相同,推理代码不变)
  • Baselines: NOVA (0.6B), Pyramid Flow (2B), MAGI-1 (4.5B), SkyReels-V2 (1.3B), CausVid (1.3B), Self-Forcing (1.3B), LTX-Video (1.9B), Wan2.1 (1.3B)
  • 评估设置:
    • 短视频: VBench 标准 946 prompts × 16 dimensions
    • 长视频: 128 prompts(MovieGen),50s/75s/100s 三个时长
    • 指标: Text Alignment, Temporal Quality, Dynamic Degree, Visual Stability (新), Framewise Quality
  • 训练预算: 1x = 生成 5s 视频所需的计算量;论文测试 1x-25x

5. Experimental Results (实验结果)

短视频(5s, VBench)

ModelParamsFPS↑Total↑Quality↑Semantic↑
LTX-Video1.9B8.9880.0082.3070.79
Wan2.11.3B0.7884.6785.6980.60
NOVA0.6B0.8880.1280.3979.05
Pyramid Flow2B6.781.7284.7469.62
CausVid1.3B17.082.4683.6177.84
Self-Forcing1.3B17.083.0083.7180.14
Self-Forcing++1.3B17.083.1183.7980.37
  • 短视频上 Self-Forcing++ 与 Self-Forcing 持平(83.11 vs 83.00),说明长视频训练不损害短视频质量

长视频(50s/75s/100s)

50s:

ModelText Align↑Temporal Quality↑Dynamic Degree↑Visual Stability↑Framewise Quality
CausVid25.2589.3437.3540.4761.56
Self-Forcing24.7788.1734.3540.1261.06
SkyReels-V223.7388.7839.1551.2554.13
MAGI-126.0488.3428.4951.2554.20
Ours26.3791.0355.3690.9460.82

75s:

ModelText Align↑Temporal Quality↑Dynamic Degree↑Visual Stability↑Framewise Quality
NOVA23.3786.3231.2434.0631.53
MAGI-124.9587.8924.8243.2852.04
SkyReels-V222.7088.9939.8955.4751.55
CausVid24.7689.1435.8239.8460.96
Self-Forcing23.3987.7929.1535.0060.02
Ours26.3191.0055.6286.1060.67

100s:

ModelText Align↑Temporal Quality↑Dynamic Degree↑Visual Stability↑Framewise Quality
CausVid24.4189.0634.6039.2161.01
Self-Forcing22.0087.3926.4132.0358.25
SkyReels-V222.0588.8038.7556.7250.48
Ours26.0490.8754.1284.2260.66

关键发现:

  • Dynamic Degree:Self-Forcing++ 在 100s 时仍达 54.12,而 Self-Forcing 仅 26.41(运动停滞),CausVid 34.60
  • Visual Stability: 90.94(50s)和 84.22(100s),远超所有 baselines(最高 56.72)
  • Text Alignment: 100s 时 26.04,超越 CausVid(+6.67%)和 Self-Forcing(+18.36%)

消融实验

Attention Window Size(Table 3, Visual Stability on 50s):

CausVidSelf-ForcingAttn-15Attn-12Attn-9Ours
40.4740.1244.6942.1952.5090.94
  • 缩小 attention window(Attn-9)有一定帮助(52.50 vs 40.12),但远不如 Self-Forcing++(90.94)
  • Extended DMD 是主要贡献,window 大小只是辅助手段

GRPO 效果(Figure 5):

  • 无 GRPO:光流曲线存在尖锐峰值(窗口边界处的突变),variance≈24.52(Figure 5 中标注)
  • 有 GRPO:光流曲线平滑,variance≈20.82(Figure 5 中标注),峰值被有效抑制

Training Budget Scaling

  • 1x:只能生成低质量短片
  • 4x:保持语义一致性
  • 8x:详细背景 + 准确主体
  • 20x:50+ 秒高保真视频
  • 25x:255 秒(4min15s)视频,利用了 99.9% 的 position embedding 容量