Paper Guide · Embodied Video Models

LingBot-Video:视频生成模型如何变成具身世界模拟器

从 Single-Stream DiT、Sparse MoE、结构化数据、奖励后训练到开源推理代码的一次完整拆解。

Mixture-of-Experts Video Pretraining T2V · TI2V · A2V Qwen3-VL · Wan2.1-VAE · Diffusers/SGLang

解读 by Xinkai Wang(王薪恺) · 上海创智学院 · 2026

原论文:LingBot-Video: Scaling Mixture-of-Experts Video Pretraining for Embodied Intelligence · 图表版权归原作者;本文解读版权归 Xinkai Wang(王薪恺)所有。

00 · 先抓住主线

  • 问题:通用视频模型擅长“好看”和“文本对齐”,但具身智能更需要从当前观察推演未来状态,尤其是接触、遮挡、物体保持、机器人动作和物理合理性。
  • 架构:LingBot-Video 用 single-stream diffusion transformer 统一 T2I/T2V/TI2V,把视觉 latent patch 与 Qwen3-VL 条件 token 拼成一条序列,再用 Multi-Modal 3D RoPE 区分文本和视频坐标。
  • 扩展:Sparse MoE 替换 FFN 分支,用 128 个细粒度专家、top-8 路由和 shared experts 做容量-计算解耦;30B-A3B 模型能接近 3B dense 的推理成本,却获得更强容量。
  • 数据:论文真正的工程量在数据系统:profiling engine、world-knowledge graph、dense JSON captions、rewriter、五阶段 curriculum,以及 70,000+ 小时具身相关视频。
  • 训练:后训练不是一个 reward model 打天下,而是六类 reward、GRPO、RealNFT、A2V action-conditioned world model 和 distillation 组合起来,把视频生成往物理推演拉。

01 · 问题从哪里来:视频模型不只是会画,还要会推演

如果只把 LingBot-Video 看成“一个 MoE 视频生成模型”,其实会漏掉它最核心的野心。它想回答的问题是:当机器人看到桌面、机械臂和目标物体后,模型能不能预测接下来几秒物理世界会怎样变化?

传统 T2V 模型的优化目标大多围绕美观、文本相关性和时序一致性。这些指标对内容创作足够重要,但对具身智能还不够。机器人更关心的是:苹果被夹起时会不会穿模?杯子被碰到后是否还保持存在?手指、夹爪、物体接触点是否合理?第一帧给定的场景外观是否能在未来帧中稳定延续?

LingBot-Video teaser with qualitative generation examples
论文 teaser:作者把 general video generation 与 embodied world simulation 放在同一版面,机器人、第一视角、操作、导航和物理过程反复出现,文章重心也从画面质感转向动作和世界状态的延续。
图里线索

这组 teaser 给出的不是单纯 showcase,而是一套评价轴:动作、交互、机器人形态和第一视角不断出现,模型能力的目标也从“prompt 到漂亮视频”转向“当前世界状态到未来视觉状态”。

Architecture

单流 DiT 最大化 token 交互和计算复用,MoE 提供大容量但控制 active FLOPs。

Data

结构化 profiling 与知识图谱让采样从“质量过滤”升级到“分布诊断”。

Training

六类 reward、GRPO、RealNFT 把偏好从视觉质量推向动作、速度、物理和任务完成。

Embodiment

A2V 把 prompt 驱动视频改成 action-conditioned rollout,更接近世界模型用法。

这篇论文的主线不是“MoE 让参数变大”,而是“如何把视频生成模型重新组织成具身智能可用的视觉世界模拟器”。

02 · 单流 DiT:把文本、图像、视频条件放进同一条序列

LingBot-Video 的 base generator 是 task-unified single-stream diffusion transformer。输入图像或视频先经 Wan2.1-VAE 压成 latent,条件部分由 Qwen3-VL-4B 提取 embedding;随后视觉 patch token 与条件 token 投到同一 hidden size,拼成一条 joint sequence。

LingBot-Video single-stream DiT architecture
架构图:视觉 latent patch 与 multimodal condition token 进入同一 transformer stack。attention 分支使用 QK-Norm 与 Multi-Modal 3D RoPE;FFN 分支可替换为 Sparse MoE,并用 AdaLN-Single 的 timestep modulation 控制残差。
图里线索

图里真正关键的是“单流”和“只替换 FFN”。单流意味着文本和视频 token 每层都可互相注意;只替换 FFN 意味着 MoE 不改变 attention 主干,而是在 token-wise feed-forward 位置做 conditional computation。

统一 T2I / T2V / TI2V 的方式

论文把图像看作 T=1 的特殊视频,T2V 是无首帧条件的视频生成,TI2V 则把第一帧作为视觉条件。这样做的好处是任务不需要分叉成多个模型,也不需要为每种任务单独设计 encoder。代价是模型必须在一条序列里区分“条件 token”和“目标视觉 token”。

模块 论文设计 代码对应点
视觉压缩 Wan2.1-VAE,空间约 8 倍压缩,时间约 4 倍压缩。 pipeline_lingbot_video.py 中 latent shape 由 vae_scale_factor_spatial 与 temporal scale 决定。
条件编码 Qwen3-VL-4B 把 prompt / image 条件变成 condition embedding。 encode_prompt 应用 chat template、image/video token,再裁掉前缀。
联合序列 视觉 patch 和 text condition 投影到同一维度后拼接。 LingBotVideoTransformer3DModel.forwardjoint = torch.cat([x, text], dim=1)
位置编码 condition token 走 temporal-only 坐标,video token 走 (t,h,w) 坐标。 make_joint_position_ids 让 video 时间轴从 text_len + 1 开始。
代码锚点transformer_lingbot_video.py
def make_joint_position_ids(text_len, grid_t, grid_h, grid_w, device):
    tt = torch.arange(grid_t, device=device) + (text_len + 1)
    hh = torch.arange(grid_h, device=device)
    ww = torch.arange(grid_w, device=device)
    grid = torch.stack(torch.meshgrid(tt, hh, ww, indexing="ij"), dim=-1).flatten(0, 2)

    text_t = torch.arange(text_len, device=device) + 1
    zeros = torch.zeros_like(text_t)
    text_pos = torch.stack([text_t, zeros, zeros], dim=-1)
    return torch.cat([grid, text_pos], dim=0)

这段代码是 Multi-Modal 3D RoPE 的落点:文本 token 只占时间轴,视觉 token 的时间坐标从文本之后开始。它解决的是“同一 attention 空间里,文本和视频不要位置混淆”的问题。

为什么坚持 single-stream

双流架构通常让文本/条件和视频 latent 分开处理,再在某些层交互。LingBot-Video 的选择更像 decoder-only LLM:先投影到同一维度,再全层共享 attention 和 FFN。论文给出的理由有三层:

  • 交互密度更高:每层都能做跨模态 attention,不只在 cross-attention 层交换信息。
  • 算子更规整:大 GEMM、FlashAttention varlen、sequence parallel 更容易统一处理。
  • 任务更统一:T2I/T2V/TI2V 不需要 task-specific path,训练 mixture 更直接。

一句话理解 single-stream DiT

它不是“文本指导视频”的旁路结构,而是把文本条件也放进视频 token 的同一个 transformer 世界里,让每一层都能学习条件、画面、时间和空间之间的关系。

03 · MoE:给复杂物理世界更大容量,但不让每个 token 都付全价

视频世界的分布太杂:手、脸、机械臂、液体、刚体、第一视角、运动模糊、镜头移动、低噪声细节修复、高噪声布局生成。这些子问题如果全塞进一个 dense FFN,容易出现任务干扰。MoE 的直觉是让每个 token 在 FFN 分支里选择少数专家,保留总容量,同时控制 active compute。

\[ \mathrm{MoE}(x) = E_{\mathrm{shared}}(x) + \sum_{j\in \mathrm{TopK}(x)} g_j(x)\,E_j(x) \]

每个 token 只走 top-K routed experts,但模型总参数随 expert pool 增大。

论文里的 MoE recipe

LingBot-Video 采用 DeepSeekMoE 风格的细粒度专家划分:shared experts 保留通用物理/空间先验,routed experts 捕捉更细的视觉、动作、噪声段和任务差异。关键设置是 E=128、每 token top-8 路由、active parameter 约 1.4B 或 3B,最大探索到 120B total / 11B active。

128 默认 routed expert 数。论文认为 64 到 128 收益明显,128 到 256 边际收益变小。
top-8 细粒度 128/top-8 优于更粗的 64/top-4,即便后者 active 参数更高。
30B-A3B 30B 总参数、约 3B active 参数,是开源包重点释放的 MoE 推理模型。
Router 的关键不对称selection 用 bias,gating 用原始 score
logits = F.linear(tokens.float(), self.weight.float())
scores = logits.sigmoid()
scores_for_choice = scores + self.e_score_correction_bias.unsqueeze(0)

top_indices = self._group_limited_topk(scores_for_choice)
top_scores = scores.gather(1, top_indices)
top_scores = top_scores / (top_scores.sum(dim=-1, keepdim=True) + 1e-20)
top_scores = top_scores * self.route_scale

这段实现里有个很细的设计:e_score_correction_bias 只参与选择专家,不参与最终 gate weight。bias 更像负载均衡的调度提示,真正给专家输出加权时仍用原始 affinity;这样既能缓解专家负载不均,又不会把负载修正直接混进表示强度。

e_score_correction_bias 到底是不是训练参数

在开源推理代码里,它是 persistent buffer,不是 nn.Parameter,不会通过反向传播跟着 loss 更新。论文训练阶段提到的更新更像路由层外部的负载校正:如果某个专家拿到的 token 比平均值多,就降低它的选择 bias;如果太少,就抬高一点。可以把它理解成 router 的“排队调度权重”,不是专家本身的语义能力。

\[ b_j \leftarrow b_j - \eta\,\operatorname{sign}(n_j-\bar n), \qquad \mathrm{choice}_j \propto s_j + b_j \]

选择专家看 \(s_j+b_j\),最终加权仍看原始 score \(s_j\)。

为什么视频 MoE 比语言 MoE 更容易踩坑

视频 token 数远大于文本,而且 diffusion 每个 denoising step 都要重复处理整段 latent。router 如果造成跨卡通信过多、专家负载极不均、token restore 开销过大,理论上的 sparse 优势很容易被工程开销吃掉。代码里能看到三类工程处理:

  • group-limited routing:先选 expert group,再在 group 内 top-K,减少分布式通信压力。
  • grouped experts:torch._grouped_mm、Triton pack/restore 或 SGLang fused experts 执行专家矩阵乘。
  • FP32 sensitive path:norm、router、time modulation、scale-shift 等模块在 .to() 里保持 fp32,降低混精不稳定风险。

开源 30B-A3B 配置里是 128 个 routed experts、4 个 group、每 token 选 top-8 experts,并额外保留 1 个 shared expert。换成路由流程就是:先把 128 个专家切成 4 组,每组 32 个;router 先挑出分数较高的 2 个组,再只在这 64 个候选专家里选 top-8。这样做牺牲了一点全局自由度,但能明显压住 dispatch 和跨卡通信。

Grouped experts 的执行形态pack -> grouped GEMM -> restore
# 1. 按专家把 token route 打包成连续块
packed_tokens, expert_offsets = reorder_tokens_triton_pack(tokens, top_indices)

# 2. 每个专家各有一套 FFN 权重,但用 grouped GEMM 合并执行
hidden = silu(grouped_mm(packed_tokens, w1)) * grouped_mm(packed_tokens, w3)
expert_out = grouped_mm(hidden, w2)

# 3. 按原 token 顺序还原,并乘以 router gate weight 做加权求和
output = restore_tokens_triton(expert_out, top_indices, top_scores)

torch._grouped_mm 可以把“很多个小专家矩阵乘”拼成一次 grouped matmul,减少 Python 循环和 kernel launch。Triton pack/restore 解决的是 token 顺序问题:专家喜欢连续内存,原序列喜欢按 token 排列,pack 和 restore 就是在这两种布局之间搬运。SGLang fused experts 则把 SwiGLU 的 w1/w3/w2 路径进一步融合,FP8 版本再用量化换速度,所以文档才会提醒它可能带来细微生成差异。

MoE 不是免费午餐

MoE 省的是“每个 token 激活全部 FFN 参数”的成本,但会新增 router、token reorder、expert dispatch、跨卡通信和 load balance 问题。LingBot-Video 的贡献不只是用了 MoE,而是围绕视频长序列把这些细节都工程化了。

04 · Scaling 与 Refiner:容量、延迟和高分辨率怎么一起兼顾

论文的 scaling 实验想证明两件事:第一,在相近 active compute 下,MoE 总容量能显著降低训练/验证 loss;第二,当序列长度上到 1M token 时,MoE 推理延迟仍能接近 active dense 模型,而不是被路由开销击穿。

Dense 1.3B versus MoE 13B-A1.4B training and validation losses
Dense 1.3B 与 MoE 13B-A1.4B:active compute 接近,但 sparse 总容量更高,训练和验证 loss 都更低。
MoE to dense inference latency ratio
推理速度比:1M token 下 MoE 30B-A3B 对 Dense 3B 接近 0.97x,对 Dense 6B/14B/30B 分别约 1.50x/2.59x/3.18x。
图里线索

MoE 的价值不是“同等参数更快”,而是“同等 active compute 下装下更多知识”。当对手是 active 等价的 Dense 3B,它不一定更快;当对手是同等总容量 dense 模型,延迟优势才显著。

Dense and sparse compute scaling curves
跨 compute 对比:MoE 30B-A3B 接近 Dense 14B 的训练曲线,说明 sparse capacity 能部分替代 dense compute。
MoE scaling curves from 13B to 120B
MoE 13B/30B/60B/120B early-stage scaling:更大 sparse model 在对齐步数下持续降低 loss。

Refiner:从 480p 的世界推演到 1080p 的细节恢复

直接生成 1080p 视频太贵,LingBot-Video 采用 cascaded design:base model 先在 480p 生成全局语义、布局和运动,refiner 再提升到 1080p。它不是从纯高斯噪声开始,而是从退化的低分辨率 latent 附近出发,只在 t ≤ τ 的局部轨迹上做 conditional rectified flow。

Refiner improves faces, textures, and text rendering
Refiner 示例:base 负责动作和构图,refiner 专注人脸、纹理、文字和局部 artifact。论文训练时采样 τ ~ Uniform(0.85, 0.95),推理中示例使用 τ_inf = 0.85

代码里,refiner 的路径在 runner.py 中比较清楚:先读 base 输出视频,resize 到 refiner 目标分辨率,用 VAE 编成 x_up,加噪到阈值时间,再调用 refiner pipeline。TI2V 情况下还会把原始首帧 clean latent 注入,避免高分辨率阶段漂移首帧外观。

Refiner 的初始 latentutils.py / runner.py
# x_up 是 base 视频放大后再经 VAE 编码得到的 latent
initial_latent = (1.0 - t_thresh) * x_up + t_thresh * noise

# 默认参数
refiner_steps = 8
t_thresh = 0.85
refiner_sigma_tail_steps = 2

这解释了 refiner 为什么不是普通超分插值:它先把已经有结构的 x_up 推到一个中高噪声状态,再让单独训练的 refiner DiT 沿着低噪声轨迹往回修。

\[ \hat v_\theta = f_\theta(x_t,t,c), \qquad x_{t-\Delta t}=\operatorname{SchedulerStep}(x_t,\hat v_\theta) \]

compute_refiner_sigmas 还会根据 t_thresh 重写 scheduler 的时间表。默认 refiner_steps=8 先生成一条完整 schedule,随后扔掉高于 0.85 的噪声点,在开头插入 0.85,最后补两个低噪声 tail step。默认设置下通常仍是 8 次 denoise;如果改 t_threshrefiner_sigma_tail_steps,实际循环次数就会跟着最后的 sigma 列表变化。

\[ \sigma_{\mathrm{refiner}} \approx [0.85,\;0.833,\;0.750,\;0.642,\;0.500,\;0.300,\;0.200,\;0.100] \]

05 · 数据系统:这篇论文真正厚的地方

如果说架构决定上限,那么数据决定模型到底学到哪种世界。LingBot-Video 的数据部分不是简单地“收更多视频”,而是建立了一个可诊断、可重采样、可重写 prompt 的数据闭环。

Data Profiling Engine pipeline
Data Profiling Engine:每个样本被投影到结构、语义、运动、相机/电影属性、质量/美学信号五个维度。后续过滤、采样、captioning 都围绕这些 profile 进行。
图里线索

profiling 的核心不是“给样本打标签”,而是让训练集变成可查询的数据库。模型在哪些语义节点 loss 高、哪些动作稀缺、哪些物理交互不够,都能回到 profile 上重新采样。

World-Knowledge Topological Graph
World-Knowledge Topological Graph:语义树包含 50,000 个叶子概念、1,000 个中间类别,再经 LLM-assisted Discover-Classify-Consolidate 合并成 25 个顶层视觉组;动作树覆盖数百个 canonical action nodes。

Dense structured captions:把视频监督写成可执行的描述

训练时,模型不是吃短 prompt,而是吃密集 JSON caption。图片 caption 描述整体、镜头、实体、位置、纹理、关系和世界知识;视频 caption 再加全局事件、相机运动和每个元素的 timestamped actions;VLA 与 egocentric 数据则把机械臂、夹爪、佩戴者双手当作 prominent elements 来写动作。

caption 结构的简化形态真实 schema 更长,重点是时间和实体对齐
{
  "comprehensive_description": "... scene, subjects, camera motion ...",
  "camera": {
    "shot_size": "medium-wide",
    "shot_angle": "high-angle",
    "light_quality": "hard daylight"
  },
  "prominent_elements": [
    {
      "name": "robotic gripper",
      "location": "upper right",
      "actions": [
        {"time": "[0.0s, 1.2s]", "description": "moves downward toward the apple"},
        {"time": "[1.2s, 2.4s]", "description": "closes around the apple and lifts it"}
      ]
    }
  ]
}

这里的好处是 reward 和 rewriter 都能复用同一种结构。比如 text-video alignment reward 可以把 caption 里的实体、动作和时间窗口转成 temporal VQA;推理时 rewriter 也把用户短 prompt 映射回训练时见过的 JSON 格式,从而缩小 train-inference prompt gap。

Caption Rewriter:不是润色 prompt,而是把用户语言映射回训练分布

开源代码里的 rewriter/rewriter_core.py 很能说明这点。它分两步:第一步 Expand,用基础模型把用户短 prompt 扩成较紧凑的动作中心描述;第二步 Map,用 LoRA 版本把描述映射成结构化 JSON。作者特意限制第一步不要 hallucinate 过多低层属性,第二步再做 bounded completion。

两阶段 rewriterrewriter_core.py
detailed = backend.generate(step1_expand(prompt, duration), image, use_lora=False)
raw = backend.generate(step2_map(detailed, duration), image, use_lora=True)
return {"mode": mode, "detailed": detailed, "json": parse_json(raw)}
Five-stage data curriculum
五阶段数据课程:从 192p image-only,到低分辨率视频引入,再到 480p 多任务和挑战重采样,最后只保留极少量高质量 1080p 视频训练 refiner。
阶段 训练重点 为什么这样排
Stage 1 192p image-only,建立单帧视觉先验。 先让 DiT 和 MoE router 在稳定静态任务上启动。
Stage 2 192p image + video,引入 70,000+ 小时具身相关视频。 开始学习时序、镜头运动、动作和机器人/第一视角数据。
Stage 3 480p,T2V + TI2V 多任务。 让模型学会首帧保持和未来帧预测。
Stage 4 480p challenge-focused rebalancing。 用知识图谱和训练反馈加强长尾动作、操作、物理接触。
Stage 5 1080p 高质量视频子集,远低于原始视频池 1%。 专门训练 refiner 的细节恢复能力。

06 · 后训练:把“好看”往“真实、可控、可执行”拉

预训练给模型基础世界先验,但要让它少犯“慢动作、穿模、手部崩坏、动作缺失、物体凭空消失”这类错误,仅靠 diffusion loss 不够。LingBot-Video 在后训练里组合了 multi-aspect rewards、GRPO、RealNFT、A2V 和 distillation。

多奖励:不用一个总分掩盖失败模式

视频后训练最怕 reward 太粗。一个总分可能觉得视频“还不错”,但它可能同时有手指错位、目标物体消失、动作没发生。论文把 reward 拆成六类,每类盯一种失败模式,再在组内做归一化后合成 advantage。

Reward 主要惩罚什么 为什么与具身相关
Vision quality 模糊、低清、artifact、整体视觉质量差。 保证基础可观察性,否则物理判断没有意义。
Text-video alignment 动作漏掉、实体错、时间顺序错。 用 temporal VQA 按实体和时间窗口验证动作。
Dynamic degree 视频像静态图片,运动不足。 机器人和物体交互必须真的发生状态变化。
Motion coherence 不自然慢动作、速度感错。 物理 rollout 需要接近真实 24fps 运动节奏。
Human-motion consistency 手、脸、肢体数量、透明身体、人体拓扑错误。 人机交互和第一视角场景高度依赖手部/人体合理性。
Physical plausibility 穿透、消失、无因运动、材料/刚体行为不合理。 这是从视频生成走向世界模型最核心的 reward。
\[ \hat A^{(i)} = \sum_r w_r \frac{R_r(x_0^{(i)},c)-\mu_r}{\sigma_r+\delta} \]

\(\mu_r\)、\(\sigma_r\) 在同一个 prompt 的 rollout group 内按 reward 类型分别统计。

这个公式的重点是“分别归一化”。视觉质量 reward、动作对齐 reward、物理合理性 reward 的尺度不一样,如果直接相加,数值范围大的 reward 会支配训练。分别标准化后,模型看到的是“这一条样本在同组里相对好多少”,而不是某个 reward 原始分数有多大。

GRPO:只让一个 denoising step 随机,解决 credit assignment

普通视频 diffusion RL 的难点是轨迹长、token 多、reward 贵。如果每个 denoising step 都随机,再把整条轨迹的 reward 回传到所有 step,credit assignment 会很模糊。LingBot-Video 采用 group-shared single-step exploration:同一个 prompt 的一组 rollout 只在同一个采样步 k 注入随机性,其他步走确定性 ODE。这样组内差异更容易归因到那个 step。

\[ c \rightarrow \{x_0^{(1)},\ldots,x_0^{(G)}\}, \qquad k\sim \mathrm{Uniform}\{0,\ldots,N/2\} \]

同一个 prompt 生成 \(G\) 个 rollout,只在 \(t_k\to t_{k+1}\) 注入随机性,其他 denoising step 保持 deterministic ODE。

CPS 负责在第 k 步注入随机性,但又不破坏原本的噪声 schedule。模型在时间 \(t_i\) 预测 velocity \(\hat v_\theta\),先得到 clean latent 和 noise latent 的估计:

\[ \hat{x}_0 = x_{t_i}-t_i\hat{v}_\theta, \qquad \hat{\epsilon}=x_{t_i}+(1-t_i)\hat{v}_\theta \]

然后从 t_i 走到 t_{i+1}

\[ \begin{aligned} x_{t_{i+1}} &= \mu_\theta+s_i\epsilon,\\ \mu_\theta &= (1-t_{i+1})\hat{x}_0 + \sqrt{t_{i+1}^2-s_i^2}\,\hat{\epsilon},\\ s_i &= t_{i+1}\sin(\eta\pi/2) \end{aligned} \]

论文实验取 \(\eta=0.7\)。

这组公式的直觉是:CPS 加了新噪声 ε,但总噪声系数仍等于 schedule 里要求的 t_{i+1}。因此 reward 看到的是正常干净的视频样本,不是被过量随机性污染的坏轨迹。对应的 transition log-likelihood 可以写成:

\[ \log \pi_\theta(x_{t_{i+1}}\mid x_{t_i}) \propto -\left\|x_{t_{i+1}}-\mu_\theta\right\|_2^2 \]

不同 timestep 的梯度强度并不一样,论文再加一个 timestep-balanced weight。它先估计第 k 步的 transition gain:

\[ \begin{aligned} \kappa_k &= 2s_k \left| \frac{\partial\mu_\theta}{\partial\hat v_\theta} \right|,\\ \frac{\partial\mu_\theta}{\partial\hat v_\theta} &= (1-t_k)t_{k+1}\cos(\eta\pi/2) - t_k(1-t_{k+1}),\\ \lambda_k &= \frac{\kappa_k^{-1}}{\frac{1}{N}\sum_{j=0}^{N-1}\kappa_j^{-1}} \end{aligned} \]

最后的 GRPO 目标就是用组内 advantage 去推高好样本那一步的 transition probability:

\[ \mathcal{L}_{\mathrm{GRPO}}(\theta) = -\mathbb{E} \left[ \lambda_k\hat A^{(i)} \log\pi_\theta(x_{t_{k+1}}^{(i)}\mid x_{t_k}^{(i)}) \right] \]

论文这里的取舍很激进:strictly on-policy、每批 rollout 只消费一次、不使用 KL penalty、不使用 reference model,并且 fine-tune 全部模型参数。它省掉了语言 RLHF 里常见的 importance ratio 和 reference KL,但代价是对 rollout/reward/training 的工程同步要求很高。

RealNFT:用真实视频当 chosen,生成视频当 rejected

只靠 reward model 会有 reward hacking 风险。RealNFT 的做法是构造真实视频与当前模型生成视频的偏好对:真实 latent 是 chosen,生成 latent 是 rejected,二者加同一个噪声到同一个 timestep。优化时使用 active policy、EMA old policy、implicit positive/negative branches,并用 frozen base 做 KL 正则,避免策略漂移太远。

\[ x_t^w=(1-t)x_0^w+t\epsilon, \qquad x_t^\ell=(1-t)x_0^\ell+t\epsilon \]

\(x_0^w\) 是真实视频 chosen latent,\(x_0^\ell\) 是模型生成的 rejected latent。

这里的 w 可以理解成 win/chosen,l 是 lose/rejected。两边用同一个 timestep 和同一个 noise,模型比较的是“同等扰动下,真实视频和生成视频应该往哪个 velocity 方向回去”。这样不需要把整条 denoising trajectory 存下来反传,训练负担比轨迹级 RL 小很多。

\[ \begin{aligned} \hat v_{\mathrm{pos}} &= \beta\hat v_\theta+(1-\beta)\hat v_{\mathrm{old}},\\ \hat v_{\mathrm{neg}} &= (1+\beta)\hat v_{\mathrm{old}}-\beta\hat v_\theta \end{aligned} \]

\(\hat v_{\mathrm{old}}\) 来自 \(\theta\) 的 EMA copy。

v_pos 是“往当前模型方向靠”的正分支,v_neg 是“从当前模型方向反推开”的负分支。真实视频用正分支拟合,生成视频则用负分支压制。论文把 DiffusionNFT 的 per-sample loss 写成:

\[ \mathcal{L}_{\mathrm{NFT}}(r) = r\left\|\hat v_{\mathrm{pos}}-v\right\|_2^2 + (1-r)\left\|\hat v_{\mathrm{neg}}-v\right\|_2^2, \qquad v=\epsilon-x_0 \]

在 LingBot-Video 的 pairwise setting 里,真实视频取 r=1,生成视频为了避免额外 reward model 开销直接取 r=0。再用 frozen base model 做一个防漂移项:

\[ \begin{aligned} \mathcal{L}_{\mathrm{chosen}} &= \left\|\hat v_{\mathrm{pos}}^w-v^w\right\|_2^2,\\ \mathcal{L}_{\mathrm{reject}} &= \left\|\hat v_{\mathrm{neg}}^\ell-v^\ell\right\|_2^2,\\ \mathcal{L}_{\mathrm{KL}} &= \frac{1}{2} \left( \left\|\hat v_\theta^w-\hat v_{\mathrm{ref}}^w\right\|_2^2 + \left\|\hat v_\theta^\ell-\hat v_{\mathrm{ref}}^\ell\right\|_2^2 \right),\\ \mathcal{L}_{\mathrm{RealNFT}} &= \mathcal{L}_{\mathrm{chosen}} + \mathcal{L}_{\mathrm{reject}} + \lambda_{\mathrm{KL}}\mathcal{L}_{\mathrm{KL}} \end{aligned} \]
General quality improvements after post-training
后训练前后 general quality 对比:手、肢体、文字、结构形变等问题被明显缓解。
Embodied scenario improvements after post-training
后训练前后 embodied scenarios 对比:夹爪、物体、接触、释放、重复物体等物理错误减少。

A2V:从 prompt 描述未来,变成 action 驱动未来

Action-to-Video 是这篇论文最接近“world model”的部分。普通 T2V/TI2V 里,prompt 已经描述了未来发生什么;A2V 则只让 prompt 描述初始状态,未来由机器人 action sequence 驱动。这才更像机器人规划中的 imagined rollout。

Action-conditioned world model architecture
A2V/ACWM 架构:动作先转成 relative actions,flatten 后经 ActionEmbedder 得到 action latents;在初始状态前 prepend zero action,使动作 latent 与视觉 latent 时间对齐,再注入 transformer blocks。

A2V 的关键不是多塞一个 action token,而是把监督目标改掉。caption 只写初始世界状态,后续视觉变化必须由动作序列解释;如果 prompt 泄露“接下来机械臂会把苹果放进盒子”,模型仍然可能只是在做文本到视频,而不是动作条件 rollout。

\[ a_{\mathrm{raw}} \rightarrow a_{\mathrm{relative}} \rightarrow \operatorname{Flatten} \rightarrow \operatorname{ActionEmbedder} \rightarrow z_a \] \[ [z_0,z_1,\ldots,z_T] \quad\leftrightarrow\quad [a_0=\mathbf{0},a_1,\ldots,a_T] \]

论文还提到 ActionEmbedder 最后一层采用 zero initialization。这个细节很重要:刚开始训练时,动作分支几乎不扰动已经预训练好的视频 backbone;随着后训练进行,模型再逐步学会把 action residual 注入 transformer blocks。训练上,论文使用 Fourier GR-1 后训练数据,8k steps、global batch size 64、learning rate 1e-5,并同时优化 ActionEmbedder 和完整 transformer,而不是只训一个轻量动作头。

A2V qualitative comparison on DreamDojo
A2V 评测示例:论文展示其在 EgoDex/DreamDojo-HV 上相比 DreamDojo 更能保持物体、遵循动作和物理约束。

为什么后训练系统必须单独做

论文的基础设施章节给了一个很实际的解释:视频 RL 的中间状态不是文本 token,而是高维 video latent trajectory。单个训练样本约 100K tokens,中间 latent 和 per-step sampling statistics 可以到 GB 级别;30B MoE 还要做权重同步和专家并行。这也是为什么它把 rollout、reward evaluation、training 拆成不同执行角色,并用 service-oriented reward layer 处理多种 reward model、服务端解码和 batch 请求。

rollout workers: 生成视频和关键 transition
reward services: 解码视频,运行 VQA / HPS / motion / physics rewards
training workers: 接收 transition-level data,计算 GRPO 或 RealNFT loss,更新模型

07 · 评测证据:强项集中在 TI2V、机器人和物理延续

LingBot-Video 的评测分三层:内部 benchmark、公共 benchmark 和人评。理解这些结果时,最好不要只看平均分,而要看它在哪些任务上最强。

T2V general quality internal benchmark
T2V general quality:LingBot-Video 排在开源模型前列,但不是所有维度第一。
T2V embodied domain internal benchmark
T2V embodied domain:即便没有首帧条件,具身相关场景仍优于 Cosmos 等开源基线。
TI2V general quality internal benchmark
TI2V general quality:首帧条件让模型更好保持外观和时序延续。
TI2V embodied domain internal benchmark
TI2V embodied domain:这是论文最有说服力的设置,因为机器人通常有当前观测帧。

RBench 与 Physics-IQ Verified

RBench 专门测机器人中心交互,包含 650 个 text-image prompts:250 个任务场景和 400 个 embodiment-specific 场景。LingBot-Video 平均分 0.620,超过 Cosmos3 Super 的 0.581,也超过多个开源基线;闭源 Wan 2.6 在部分子项仍很强,但平均分略低于 LingBot-Video。

RBench average score bar chart
RBench 平均分:LingBot-Video 在开源模型中领先,甚至略高于表中的 Wan 2.6 闭源平均。
Physics-IQ Verified I2V results
Physics-IQ Verified I2V:LingBot-Video 得分 40.4,略高于 Cosmos3 的 39.5。
模型 RBench Avg. Manip. Long-hor. Quadruped Humanoid
LingBot-Video 0.620 0.578 0.634 0.758 0.689
Cosmos3 Super 0.581 0.487 0.591 0.739 0.691
Wan 2.2 A14B 0.507 0.381 0.501 0.690 0.648
HunyuanVideo 1.5 0.460 0.442 0.438 0.634 0.595

Physics-IQ Verified 更像“真实物理延续”测试:它基于 66 个受控物理实验,覆盖固体、流体、热、光学、磁学。论文评的是 I2V,即给一帧 switch frame 预测后续运动。这和 LingBot-Video 的 TI2V 强项非常一致。

人评:T2V 接近强开源,TI2V 优势更稳定

Good-Same-Bad user study for T2V
T2V GSB:对 Wan2.2 5B、LongCat、Wan2.2 A14B、LTX-2.3 等 Good 率高于 Bad;对 Cosmos/Hunyuan 更接近。
Good-Same-Bad user study for TI2V
TI2V GSB:对所有开源基线 Good 率高于 Bad,但仍落后部分更强商业模型。

怎么读这些结果

这篇论文最强的证据链不是“通用 T2V 全面第一”,而是“在首帧条件、机器人交互、物理延续这些更接近具身使用方式的任务上更强”。这也和它的数据、caption、reward、A2V 设计是同一个方向。

TI2V qualitative cases
TI2V qualitative cases:每行是一个生成视频的关键帧序列,主要呈现首帧保持、动作推进、主体漂移和接触关系稳定性。

08 · 开源代码怎么落地:从 prompt 到视频的推理链路

lingbot-video 目录把运行模型需要的推理工程拆得比较清楚:structured prompt、pipeline、I2V 首帧约束、MoE backend、FSDP inference、SGLang fallback、refiner 串联。

Prompt用户短 prompt 或首帧 + prompt。
RewriterExpand 再 Map,输出 {"caption", "duration"}
PipelineQwen3-VL 编码条件,准备 latent 与 timesteps。
DiT/MoEsingle-stream transformer 逐步预测 velocity。
Refiner可选 480p 到 1080p,再保存 mp4。

runner 入口:为什么 README 强调 prompt_json

docs/zh/dit_inference.md 里明确提醒:DiT 推理不直接吃原始自然语言 prompt,必须先用 rewriter 生成结构化 JSON,再通过 --prompt_json 传入。这与论文训练时使用 dense structured captions 是一致的。

典型推理命令README / docs 中的运行逻辑
python rewriter/inference.py \
  --prompt "a robotic arm picks up an apple from a table" \
  --mode t2v --duration 5 --output prompt.json

python rewriter/auto_negative.py \
  --mode t2v --prompt_json prompt.json --output negative.json

python scripts/inference.py \
  --task t2v --model_type moe --backend diffusers \
  --prompt_json prompt.json --negative_prompt_json negative.json

TI2V:首帧条件被用两次

pipeline_lingbot_video_i2v.py 的设计很直观:输入图像一方面给 Qwen3-VL 作为视觉条件,另一方面被 VAE 编成 clean latent prefix,然后在 denoising 前后反复通过 _apply_inpainting 写回 latent。这样首帧不仅是语义提示,也是硬约束。

TI2V 首帧锁定pipeline_lingbot_video_i2v.py
cond_latent = self.encode_image_latent(image)
latents = self.prepare_latents(...)
latents = self._apply_inpainting(latents, cond_latent)

for t in timesteps:
    noise_pred = self.transformer(...)
    latents = self.scheduler.step(noise_pred, t, latents).prev_sample
    latents = self._apply_inpainting(latents, cond_latent)

MoE backend:质量优先、速度优先和多卡切分

MoE expert backend 通过环境变量选择:默认 LINGBOT_MOE_EXPERT_BACKEND=grouped_mm,也支持 sglang_tritonsglang_triton_fp8。文档里也说得比较直接:FP8 路径更偏速度,但可能改变相对 grouped MoE 的生成细节;更关注 fidelity 时用默认 grouped experts。

文件 最值得读什么
transformer_lingbot_video.py patchify、joint sequence、3D RoPE、QK-Norm、AdaLN、Sparse MoE router、grouped/SGLang expert backend。
pipeline_lingbot_video.py T2V/T2I pipeline、prompt encoding、latent shape、CFG、scheduler loop、VAE decode。
pipeline_lingbot_video_i2v.py 首帧同时进入 VLM 条件和 clean latent prefix,denoising 中持续 inpainting。
runner.py prompt_json 读取、resolution bucket、frames 计算、base/refiner 串联、多 GPU 参数。
fsdp_inference.py 按 block shard transformer,并保留 fp32 sensitive parameters。
sglang_moe_shim.py SGLang fused experts 与 FP8 quantization shim。
rewriter/ 两阶段 prompt rewrite、LoRA adapter 切换、auto-negative 删除式筛选。

09 · 优缺点与后续研究方向

我认为最强的地方

第一,系统设计很完整。很多视频论文会在“世界模型”这个词上停留得比较抽象,而 LingBot-Video 把数据、caption、reward、A2V 和 serving 都串成了同一个问题:怎样让视频模型学会可控的物理延续。

第二,MoE 与视频长序列的矛盾匹配得很好。视频需要大容量保存复杂世界先验,但每个 denoising step 又极贵;Sparse MoE 正好提供容量-计算解耦。论文也没有只讲概念,而是给了 active-comparable scaling 和 1M token latency。

第三,开源推理代码能看到关键工程选择:router bias 不进入 gate weight、group-limited top-K、TI2V 首帧 latent 锁定、refiner 串联、FSDP inference 与 SGLang/FP8 backend。这些比抽象架构图更能说明模型如何被实际跑起来。

需要保留的疑问

  • 专家是否真的专业化:论文证明 MoE 有效,但没有充分展开 expert routing 的可解释性,比如哪些专家负责机器人、手部、低噪声细节或高噪声布局。
  • reward model 的偏差:六类 reward 很全面,但 VLM/VQA 评估仍可能偏向可见表象,物理 reward 是否能覆盖长时因果仍需更多验证。
  • A2V 泛化边界:8k steps 的 GR-1 后训练展示了方向,但要成为机器人规划中的 reliable simulator,还需要更严格的闭环控制、误差累积和多步规划评测。
  • 开源复现距离:推理代码较完整,但训练数据、profiling、后训练基础设施未完整公开,研究者难以复现最关键的数据/后训练系统。
  • 商业模型对比:人评里 TI2V 对开源优势明显,但对强商业模型仍落后,说明视觉质量和通用偏好并未被完全解决。

后续可以怎么做

一个直接方向是做 MoE interpretability:统计 expert usage 与任务、动作、噪声 timestep、空间区域的关系,看专家是否形成“物理/机器人/手部/纹理/文字”等功能分工。第二个方向是把 A2V 接入真实机器人规划环路,用 action rollout 的预测误差而不是视频相似度来评价。第三个方向是建立更强的 physics-grounded reward,结合可追踪物体状态、接触事件、3D 几何和可微/不可微物理检查,而不只依赖 VLM 判分。

T2V qualitative cases
T2V qualitative cases:通用生成能力仍重要,因为具身视频模型不能只会机器人场景。论文的路线是在保留通用质量的同时,把训练重心向动作、物理和观察延续倾斜。

最后记住这条线

LingBot-Video 的价值不是某个 isolated trick,而是一条连贯的工程链:single-stream DiT 统一任务,Sparse MoE 扩容量,structured data 补动作和物理,multi-reward post-training 修正失败模式,A2V 把视频生成推进到动作条件世界模拟,最后用 refiner 和 serving backend 把模型跑到可用分辨率和速度。

如果只用一句话概括:它试图把“会生成视频的模型”改造成“能在视觉空间里想象未来的模型”。