Reward Forcing: Efficient Streaming Video Generation with Rewarded Distribution Matching Distillation

论文定位

这篇论文解决的是实时流式长视频生成中的两个耦合问题:一是 autoregressive / causal video diffusion 为了省计算只能保留有限滑动窗口,长期上下文被丢掉后会出现 quality drift;二是现有 sink-token 做法虽然能稳定注意力,但过度依赖最初几帧,生成到后段时容易复制初始帧、运动变僵硬。Reward Forcing 的主张是:不要只把大 teacher 蒸馏成一个快的 causal student,还要让 student 在蒸馏时偏向高动态质量区域,并在推理时把被窗口挤出的历史信息压缩进可持续更新的 sink state。

  • 任务:将 bidirectional video diffusion teacher 蒸馏成 few-step autoregressive student,用于 5 秒到约 1 分钟的 streaming text-to-video,并支持实时 prompt interaction。
  • 核心模块:EMA-Sink 负责 KV-cache 中历史状态压缩;Re-DMD(Rewarded Distribution Matching Distillation)负责用 VideoAlign motion-quality reward 对 DMD 梯度加权。
  • 主要结论:在单张 H100 上达到 23.1 FPS;短视频 VBench total 84.13、quality 84.84;长视频 VBench Long total 81.41,动态分数和 Qwen3-VL 主观评分均优于关键 streaming baseline。
  • 代码搜索:已找到开源实现 https://github.com/JaydenLyh/Reward-Forcing,本笔记使用 main@4317f5a0d29d

Figure 1 解读:teaser 把论文的完整目标压缩成三件事:bidirectional teacher 被蒸馏成 few-step autoregressive student;生成可以以 23.1 FPS 实时流式输出;相比 vanilla DMD,Re-DMD 把匹配目标推向更高 reward 的动态视频区域,所以作者强调 object motion dynamics 和 scene navigation dynamics 的提升。

1. Motivation(研究动机)

现有大规模 video DiT 在短视频上已经能生成复杂运动,但它们通常采用 bidirectional attention / simultaneous denoising:一次性处理整段视频,所有帧之间可以互相看见。这种范式在离线短片生成中有效,但与 interactive world simulation、online game-like navigation、实时人机交互不匹配,因为用户希望视频像流一样持续输出,并且 prompt 可以中途改变。流式场景的关键约束不是“最终整段视频质量最高”,而是每个时间片都要在低延迟下生成,同时不能让误差沿时间轴持续累积。

CausVid、Self Forcing、LongLive 等 autoregressive distillation 方向把慢速 teacher 转换成 causal student:当前帧或当前 latent chunk 只依赖过去窗口,配合 KV cache 可以避免重复计算历史帧。这类方法的瓶颈是长程信息如何保存。纯 sliding window 会直接丢弃窗口外历史,导致模型越生成越缺少全局上下文;attention sink 会固定保留初始 tokens,以缓解窗口截断造成的注意力失效,但这又引入新的偏置:后续帧持续依赖开头几帧,模型倾向于把最初画面复制到后面,运动幅度下降,镜头推进和物体动作变弱。

论文把这个现象概括为 streaming video generation 的中心矛盾:低延迟要求局部窗口,长视频质量要求全局历史,高动态视频又不能被静态初始帧绑架。如果只优化速度,生成会 drift;如果只靠固定 sink 稳定历史,动态会停滞;如果用普通 DMD 蒸馏 teacher,fake distribution 与 real distribution 的匹配对所有样本区域一视同仁,不会特别鼓励“更会动”的样本。因此作者需要同时改推理状态管理和蒸馏目标。

Reward Forcing 的动机并不等同于一般的 video RLHF。它没有在训练时直接做复杂的 policy optimization,也不是只在推理时用 reward reranking;它把 reward 融入 distribution matching distillation,使 student 在从 teacher 学习分布时更重视 motion-quality reward 高的样本区域。这样做的预期收益是:保留 DMD 的高保真蒸馏优势,同时用 reward 改变“匹配哪里”的优先级,让有限步 autoregressive student 在低步数、低延迟下仍保持更强动态。

2. Idea(核心思想)

核心 insight 可以用一句话概括:把长视频历史压缩成持续更新的 EMA sink state,并把 DMD 的均匀分布匹配改成 reward-weighted 分布匹配,让实时 student 既不遗忘远端历史,也不被初始帧锁死。

第一层思想是 EMA-Sink。传统 sink tokens 保留的是开头帧,信息稳定但过静态;Reward Forcing 仍然保留固定大小的 sink 区域,但当滑动窗口前移、旧 token 被挤出时,不是直接丢掉,也不是把初始 token 永远不动,而是将被 evict 的 KV 以指数滑动平均写回 sink。这样 sink 不再代表“最早几帧”,而代表“历史压缩状态”:近处历史权重更高,远处历史以衰减方式保留。该设计不会扩大 attention window,也不会引入额外 teacher inference,因此符合实时约束。

第二层思想是 Re-DMD。DMD 的目标是让 fake distribution 对齐 real / teacher distribution,但视频任务中“真实分布”内部也有不同质量区域:有些样本更动态、更符合流式世界模拟需要,有些样本虽然保真但运动不足。Reward Forcing 用 VideoAlign 的 motion-quality 分数作为 reward,将 DMD 梯度乘上 reward-derived weight。论文公式写成 ,开源代码中对应 torch.exp(beta * reward['MQ']);配置 beta: 2.0 等价于论文选择 的 reward 强度。

第三层思想是两者配合。EMA-Sink 主要解决 inference-time / architecture-time 的历史信息瓶颈,避免长视频 drift;Re-DMD 主要解决 training-time objective 的动态性偏置,避免 student 学到一个“稳定但不动”的分布。实验中的 ablation 正好印证这种互补性:去掉 Re-DMD 时 dynamic score 从 64.06 降到 43.75,去掉 EMA 时 dynamic score 进一步到 35.15,说明仅有状态管理或仅有 reward 蒸馏都不足以同时兼顾动态和一致性。

Figure 2 解读:这张图对比三种历史处理方式。Window Attention 只保留最近窗口,历史断裂;Sliding Window + fixed attention sink 保留初始 token,稳定但会复制开头;EMA-Sink 把被窗口淘汰的历史 token 用 EMA 写入 sink,使 sink 表示全历史压缩态而不是静态初始帧。

3. Method(方法)

3.1 Streaming formulation 与 causal student

论文从 autoregressive denoising 的角度描述流式生成。给定噪声调度 ,第 帧在 denoising step 的 noisy latent 是 ,模型只能使用之前窗口内的 clean frames 。student 先估计 denoised frame,再通过 forward diffusion operator 加回较低噪声,得到下一步 noisy state: 当窗口从 前进到 时,最旧的 被移出即时上下文。如果直接丢弃,模型会形成 information bottleneck;如果固定保留初始 sink,后续帧会把初始状态当作过强锚点。EMA-Sink 的目标是在不扩大局部 attention 成本的前提下,把“被移出的历史”压缩进一个小状态。

3.2 EMA-Sink:把 evicted KV 写回全局压缩状态

EMA-Sink 在 KV-cache 中维护压缩状态 。当窗口淘汰第 帧时,其 key-value pair 被写入 sink: 之后 attention 使用的 key/value 是 sink state 与本地窗口拼接: 直觉上, 控制历史压缩的“惯性”: 越高,sink 更稳定、远端历史保留更多; 越低,近期被淘汰 token 的影响更大,但可能带来更高 drift。论文表 3 显示 的 motion smoothness 是 98.96、drift 是 2.52; 的 smoothness 更高到 99.09,但 drift 增加到 3.23。开源配置中 ema_weight: 0.99 与这个选择一致。

从实现看,wan/modules/causal_model.pyCausalWanSelfAttention.incremental_update 执行的正是 updated = alpha * current + (1 - alpha) * newforward 在 KV cache 超出容量时计算 evicted_k/evicted_v,若 evicted token 数量等于 sink token 数,就调用 incremental_update 并把结果写回 cache 前部;随后用 torch.cat([sink_k, k_segment])torch.cat([sink_v, v_segment]) 形成 attention 的全局上下文。这里的实现细节很重要:它不是简单复用第一帧,而是让 sink 区域不断吸收被窗口挤出的历史。

Figure 3 解读:pipeline 图把训练和推理统一在 KV-cache 流程里。当前 stream 的 noisy tokens 产生新的 KV,窗口满后 evicted tokens 用 EMA 更新 sink;训练时 student 生成的 hallucinated tokens 被 decode 成视频,由 reward function 评分,reward 再用于加权 teacher gradient / distribution matching gradient。

3.3 Re-DMD:用 reward 改写 distribution matching 的目标区域

普通 DMD 优化的是 fake 与 real 分布的 KL-like matching: Reward Forcing 先给出 reward-regularized 目标: 由此得到 reward-tilted target distribution: 最终 Re-DMD 把 DMD 的 log ratio 乘上 reward 权重: 论文实际训练用 VideoAlign 的 motion quality 作为 reward,而不是用 Qwen3-VL 作为训练 reward;Qwen3-VL-235B-A22B-Instruct 出现在 appendix 的长视频评价中。代码也验证了这一点:videoalign/inference.py::VideoVLMRewardInference.reward_from_frames 返回 VQ/MQ/TA/Overallmodel/re_dmd.py::compute_rewarded_distribution_matching_lossreward['MQ'],然后用 torch.exp(beta * reward['MQ']) 乘到 MSE-form DMD target 上。由于代码 exponent 是 beta * MQ,而论文公式是 ,所以配置里的 beta: 2.0 对应论文实验里的

3.4 训练与推理伪代码(基于开源实现)

# EMA-Sink in wan/modules/causal_model.py::CausalWanSelfAttention.forward
for each streaming chunk:
    q, k, v = project_current_tokens(x)
    append k, v into kv_cache local region
    if local window overflows:
        evicted_k, evicted_v = cache tokens after sink and before retained local window
        roll retained local tokens forward
        if evicted token count equals sink token count:
            sink_k = kv_cache.k[:, :total_sink_tokens]
            sink_v = kv_cache.v[:, :total_sink_tokens]
            sink_k = alpha * sink_k + (1 - alpha) * evicted_k
            sink_v = alpha * sink_v + (1 - alpha) * evicted_v
            write sink_k, sink_v back to the front of kv_cache
    attention_k = concat(sink_k, retained_local_k)
    attention_v = concat(sink_v, retained_local_v)
    return causal_attention(q, attention_k, attention_v)
# Re-DMD in model/re_dmd.py::ReDMD.compute_rewarded_distribution_matching_loss
pred_latents, pixels = unroll_generator_with_reward_forcing_pipeline()
videos = 255.0 * pixels
reward = VideoVLMRewardInference.reward_from_frames([videos[0]], [prompt], use_norm=True)
noisy_latent = scheduler.add_noise(pred_latents, noise, sampled_timestep)
grad = real_score(noisy_latent) - fake_score(noisy_latent)
weighted_target = (pred_latents - grad).detach()
loss = 0.5 * exp(beta * reward['MQ']) * mse(pred_latents, weighted_target)
return loss

3.5 Code reference 与 paper-code 对照

Code reference: main @ 4317f5a0d29d (checked out 2026-05-19)

Paper ConceptSource FileKey Class/Function
EMA-Sink 更新规则与 KV-cache 滚动wan/modules/causal_model.pyCausalWanSelfAttention.incremental_update, CausalWanSelfAttention.forward
Re-DMD / rewarded DMD lossmodel/re_dmd.pyReDMD.compute_rewarded_distribution_matching_loss, ReDMD.generator_loss
Video reward inferencevideoalign/inference.pyVideoVLMRewardInference.reward_from_frames
训练配置与超参configs/reward_forcing.yamldenoising_step_list, distribution_loss: rewardeddmd, trainer: rewarded_distillation, model_kwargs.local_attn_size, sink_size
流式训练 pipelinepipeline/reward_forcing_training.pyRewardForcingTrainingPipeline
推理入口inference.py--num_output_frames, --use_ema, CausalDiffusionInferencePipeline

Paper-code gap audit:论文 §3.3 公式使用 ,论文实验 §4 选择 ;代码 model/re_dmd.py 使用 torch.exp(beta * reward['MQ']),配置 configs/reward_forcing.yaml 设为 beta: 2.0。这不是数值冲突,而是参数化方向相反:代码中的 beta=2.0 实现了公式里的 。EMA-Sink 的 paper 公式与代码 incremental_updatealpha * current + (1 - alpha) * new 一致;开源配置 ema_weight: 0.99local_attn_size: 9sink_size: 3 与论文实验设置一致。

4. Experimental Setup(实验设置)

模型基座是 Wan2.1-T2V-1.3B,目标分辨率为 832 × 480,短视频生成长度为 5 秒。训练首先使用从 base model 采样的 16k ODE solution pairs,并按照 CausVid 的方式初始化 causal attention masking。训练 prompt 来自 filtered and LLM-augmented VidProM。蒸馏阶段采用 chunk-wise denoising,每个 chunk 为 3 latent frames,denoising steps 固定为 [1000, 750, 500, 250],attention window size 为 9。论文报告训练 600 steps,使用 64 张 H200 GPU,总 batch size 64,约 3 小时。优化器为 AdamW,generator 学习率 2.0e-6,fake score 学习率 4.0e-7,generator 每 5 steps 更新一次,并相应调整 fake score。

开源配置与论文主设置基本对应:configs/reward_forcing.yamlreal_name 是 Wan2.1-T2V-14B、fake_name 是 Wan2.1-T2V-1.3B,说明 teacher / real score 侧用更强模型而 student 是 1.3B;denoising_step_list 为 1000/750/500/250;num_train_timestep 为 1000;timestep_shiftmodel_kwargs.timestep_shift 都是 5.0;guidance_scale 为 3.0;distribution_lossrewardeddmdtrainerrewarded_distillationgradient_accumulation_steps 为 8,单卡 batch_size 为 1,配合 8 卡/多机配置可得到论文总 batch size。

评价分成短视频、长视频、消融和用户研究。短视频使用 946 个官方 VBench prompts,并跟随 Self Forcing 用 Qwen/Qwen2.5-7B-Instruct 进行 prompt rewrite;每个 prompt 采样 5 个 seeds。短视频 baseline 包括 LTX-Video、Wan-2.1、SkyReels-V2、MAGI-1、NOVA、Pyramid Flow、CausVid、Self Forcing、LongLive、Rolling Forcing。长视频评价关注约 1 分钟范围,包含 VBench Long、quality drift 和 Qwen3-VL 打分。用户研究使用 4-point Likert scale,指标是 long-range temporal consistency、dynamic complexity、overall preference。

Figure 4 解读:qualitative1 聚焦长视频动态复杂度。作者用多帧横向对比说明 Reward Forcing 在长时间生成中仍保留明显 camera / object motion,而部分 baseline 在后段运动幅度减弱,或出现 text alignment 下降。

Figure 5 解读:qualitative2 聚焦 long-range temporal consistency。它补充 Figure 4 的另一侧证据:Reward Forcing 不只是“动得更多”,还要在长 horizon 内保持主体、背景和视觉质量一致,否则 reward 强化动态会变成无约束的抖动或漂移。

5. Experimental Results(实验结果)

5.1 短视频 VBench 与速度

短视频主表中,Reward Forcing 使用 1.3B 参数,速度 23.1 FPS,VBench total 84.13、quality 84.84、semantic 81.32。对比关键 streaming / autoregressive baseline:SkyReels-V2 是 0.49 FPS / total 82.67 / quality 84.70 / semantic 74.53;CausVid 是 17.0 FPS / total 82.88;Self Forcing 是 17.0 FPS / total 83.80 / semantic 80.64;LongLive 是 20.7 FPS / total 83.22 / semantic 81.37;Rolling Forcing 是 17.5 FPS / total 81.22。因此论文的主要 claim 是:在比已有 streaming baseline 更快的同时,total score 也最高。

需要注意 Wan-2.1 在表中 quality 85.30、total 84.26,略高于 Reward Forcing 的 total,但速度只有 0.78 FPS,且不是同一实时 streaming 约束。Reward Forcing 的贡献不是在所有离线 video generation 模型上绝对最高,而是在 1.3B streaming student 的低延迟条件下实现最好的质量/速度折中。

5.2 长视频结果

长视频表中,Reward Forcing 的 VBench Long total 是 81.41,高于 CausVid 77.78、Self Forcing 79.34、LongLive 79.53。在动态维度上,Reward Forcing 的 dynamic score 是 66.95,显著高于 CausVid 27.55、Self Forcing 54.94、LongLive 35.54。它的 imaging quality 是 70.06,也高于 CausVid 67.77、Self Forcing 67.61、LongLive 69.91。Drift 指标越低越好,Reward Forcing 是 2.505,略优于 LongLive 2.531,明显优于 Self Forcing 5.075

Qwen3-VL 评价进一步支持长视频主观质量:Reward Forcing 的 visual / dynamic / text scores 分别为 4.82 / 4.18 / 4.04;LongLive 是 4.79 / 3.81 / 3.98;CausVid 是 4.66 / 3.16 / 3.32;Self Forcing 是 3.89 / 3.44 / 3.11。这里最关键的是 dynamic score:Reward Forcing 相比 LongLive 提升 0.37,说明 EMA-Sink 没有牺牲动态性,Re-DMD 确实把 student 推向更会动的区域。

5.3 Ablation:EMA-Sink 与 Re-DMD 的互补性

消融表的 improvement block 给出最直接证据。完整模型 background 95.07、motion smoothness 98.82、dynamic 64.06、quality 70.57、drift 2.51。去掉 Re-DMD 后,background 95.85 和 smoothness 98.91 反而略高,quality 71.42 也高,但 dynamic 下降到 43.75。这说明 vanilla DMD 能学到稳定和清晰,但不主动追求动态。去掉 EMA 后,dynamic 进一步降到 35.15,smoothness 98.64,drift 2.65;去掉整个 sink 后 drift 恶化到 5.08,quality 降到 69.92。因此 EMA-Sink 主要影响 long-horizon stability 和历史利用,Re-DMD 主要影响动态性。

奖励权重 的消融也说明 reward 不能无限放大。 时 dynamic 只有 54.68,奖励太弱; 时 dynamic 激增到 94.53,但 background 降到 92.40、motion smoothness 降到 96.40、quality 降到 68.26、drift 3.13,说明过强 reward 会牺牲图像质量和一致性。论文最终选择 ,即在代码中用 beta=2.0 乘 normalized MQ。

Figure 6 解读:左侧定性 ablation 展示了去掉 Re-DMD 或 EMA-Sink 的后果;右侧曲线把 dynamic score 随训练增长和 attention size / FPS trade-off 可视化。它对应论文最核心的证据链:Re-DMD 让模型随训练获得更强动态,EMA-Sink 在不扩大窗口的情况下保留长程状态。

5.4 Interactive generation 与用户研究

论文展示 Reward Forcing 支持 real-time prompt interaction:用户可以在视频流中途改变 prompt,模型不需要重新生成整段视频,而是在已有视频状态上继续过渡。Figure 7 的意义在于说明 streaming architecture 不只是“生成很长”,还支持交互式世界模拟:prompt change 要能平滑影响后续帧,同时保留前文视觉状态。

Figure 7 解读:interactive 图强调 seamless transition。它验证的是应用层能力:EMA-Sink 保存历史,causal student 继续生成,prompt 更新通过后续 chunk 生效。若历史状态不稳定,会出现 abrupt scene reset;若 reward 只追求动态,会出现语义跳变。图中 claim 是两者都被控制在可接受范围内。

用户研究中,Reward Forcing 在 4-point Likert scale 上取得最高分:Temporal Consistency 3.60282、Dynamic Complexity 3.72113、Overall Preference 3.75493。对应 baseline:CausVid 是 1.81408 / 1.72676 / 1.87324,Self Forcing 是 1.19437 / 1.75493 / 1.27042,LongLive 是 2.78873 / 2.38310 / 2.74648。用户研究与 Qwen3-VL 评价方向一致:Reward Forcing 同时提升一致性、动态复杂度和总体偏好。

Figure 8 解读:supp_userstudy 是用户研究说明界面,定义了 Long-Range Temporal Consistency、Dynamic Complexity、Overall Preference 三个评分维度,以及 1 到 4 的 Likert 标准。它帮助解释为什么论文把“动态复杂度”作为独立维度,而不是只看 VBench total。

6. 局限性与可复现注意点

论文 appendix 明确讨论了 reward function 与 evaluation criteria 的 misalignment。VBench 同时衡量 temporal consistency、motion smoothness、subject consistency、background quality、aesthetics、semantic alignment;而训练 reward 使用 VideoAlign motion quality,更偏向动态和运动流畅度。如果 reward 模型过分强调 temporal coherence 或 motion dynamics,就可能导致某些 VBench 维度提升不成比例,甚至牺牲 aesthetics 或 background consistency。 的消融已经展示这种风险:动态分数极高但背景和质量变差。

另一个限制是 video reward model 本身仍不完美。论文指出现有 reward models 对 long-range temporal dependency、细微 jitter、复杂语义属性的捕捉能力有限,而且训练数据中的主观标注未必覆盖所有质量维度。因此 Reward Forcing 的上限会受 reward model 质量影响。未来方向包括 multi-objective reward modeling、分层 temporal-scale reward、人类反馈闭环、按内容类型自适应的 reward criteria,以及更细粒度的动态质量评估。

复现时应特别注意三点。第一,paper 里的 与代码里的 beta 参数方向相反:论文 对应配置 beta: 2.0,不要误改成 0.5。第二,训练 reward 用的是 VideoAlign MQ,不是 Qwen3-VL;Qwen3-VL 是 evaluation。第三,EMA-Sink 的效率来自固定 attention size:如果为了质量盲目增大 local window,会改变 Figure 6 右侧的 FPS trade-off,不能直接等同于论文报告的 23.1 FPS。

7. 一句话总结

Reward Forcing 的价值在于把实时 streaming video generation 的“状态问题”和“目标问题”一起处理:EMA-Sink 让有限窗口 student 仍能携带长程历史,Re-DMD 让蒸馏目标偏向高动态 reward 区域;实验显示它在 23.1 FPS 的实时约束下,比现有 autoregressive baseline 更能同时保持长视频一致性和运动复杂度。