Causal World Modeling for Robot Control
Paper: arXiv:2601.21998 Code: robbyant/lingbot-va Code reference:
main@58c2ae5(2026-04-29)
1. Summary(总结)
这篇论文提出 LingBot-VA,目标不是把机器人控制继续做成一个“从当前图像直接回归动作”的 VLA 反应器,而是把机器人策略重新表述为一个带动作因果链的 video-action world model:模型先在潜空间中预测视觉世界会如何变化,再用逆动力学从“当前状态 → 期望下一状态”的视觉转移中解码动作。论文的核心判断是,视频世界模型和视觉语言预训练一样,可以成为机器人学习的基础能力;区别在于前者提供的是“如果我这样动,环境会怎样变”的因果想象能力。
LingBot-VA 的主要贡献可以压缩为三点:第一,使用自回归扩散/flow matching 在连续潜空间中交替建模视频 token 与动作 token,并通过 causal mask 与 KV cache 保持长程记忆;第二,使用双流 Mixture-of-Transformers (MoT),让从 Wan2.2-5B 初始化的视频流保留强视觉生成能力,同时让较窄动作流专门处理低维控制;第三,在部署侧引入闭环 rollout、partial denoising、KV cache 和异步推理,使模型在真实机器人执行当前动作时并行预测下一段动作,降低自回归视频生成的控制延迟。
这篇论文应归入 Physical AI / VLA & World-Action Models。它不是普通视频生成论文,因为评价目标是机器人控制成功率、进度分数、低样本 post-training 和跨配置泛化;也不是纯 VLA imitation learning,因为动作不是单独作为语言模型的输出头,而是和视觉未来共同进入一个因果自回归序列。它和 World Model 方向有明显交集,但主要贡献落在机器人策略执行,因此放在 Physical AI 更合适。
Figure 1 解读:图 1 把论文的整体叙事串起来:左侧是大规模视频和机器人动作数据上的预训练,中间是仿真与真实任务评测,右侧展示模型还能做视觉动力学预测、逆动力学推断、低样本适应和长程记忆测试。它强调 LingBot-VA 不是只给 VLA 加一个动作 head,而是把“看见未来”和“由未来反推动作”绑定成同一条因果链。
与典型的 reactive VLA 相比,LingBot-VA 解决的失败模式更具体。直接学习 会把视觉语义、物理动力学和运动控制都塞进同一个监督信号中;如果训练分布覆盖不够,模型容易在新物体、新位姿或长任务里退化为模式匹配。另一方面,已有视频世界模型常常是一次生成长序列,或在 chunk 内使用双向注意力;前者无法插入真实反馈,后者在机器人部署中等价于“预测当前时看到了未来”,与实际闭环控制的时间结构不一致。
论文的简洁思想是:把策略拆成 visual dynamics 与 inverse dynamics。世界模型先学 或在潜空间中学 ;动作模型再学 ,即推断哪一个动作会导致期望的视觉变化。这样,视频数据中的物理先验可以主要服务于视觉动态预测,而动作数据则用于把视觉变化落到机器人关节、末端执行器和夹爪控制上。
2. Problem & Core Idea(问题与核心思想)
论文把问题设定为部分可观测的序贯操控:每个时刻机器人接收视觉观测 ,执行动作 ,动作改变物理世界并产生 。传统 VLA 直接学习动作分布,这在短任务或强覆盖数据中有效,但对长程任务有三个结构性缺陷。第一,策略必须从一个动作监督信号中同时学视觉理解、动力学和控制,因此样本效率差。第二,动作序列若是开环生成,执行过程中无法用真实观测修正漂移。第三,chunk-based diffusion 如果在片段内部双向注意,会破坏因果顺序,导致训练时可见的上下文和真实部署时可见的信息不一致。
LingBot-VA 的核心新意不是“多预测一个视频”,而是用未来视觉 token 作为动作推断的中间变量。直觉上,人类做操控时经常先形成“物体接下来应该移动到哪里”的视觉预期,再选择手部动作;论文把这个过程参数化为两个互相耦合的流:视觉流负责预测未来 latent video,动作流负责在同一序列中从视觉转移解码 action。这样的好处是,视频流可以继承大规模视频模型的物理先验,动作流则不必承担完整视觉生成容量。
更重要的是,自回归形式使模型有持久记忆。每一步只依赖过去的观察和动作,KV cache 保存历史 key/value,新的 chunk 可以继续访问前文,而不是像独立视频 chunk 那样每段重新开始。这一点对机器人长任务尤其关键:擦盘子要记住已经擦了几次,找盒子要记住先前打开过哪个盒子,做早餐要在多个子目标之间维持顺序。
论文中的因果性有两层含义。第一是 attention mask 层面的因果性:token 只能看见时间上早于自己的视频/动作 token。第二是部署层面的因果性:模型预测一小段未来后,机器人执行动作并接收真实观测,再把真实观测编码回 latent,更新上下文,而不是长期相信自己的想象。前者让训练目标不泄漏未来,后者让推理过程能抵消真实世界扰动。
3. Method(方法)
3.1 总体框架与形式化
论文的两阶段思想可以写成: 实际模型在视频 VAE 的 latent space 中工作,视觉状态记为 。对一个 chunk,视频世界模型学习: 动作解码器再条件于当前与预测的视觉状态、历史动作和语言指令推断动作: 这里 是任务语言指令。这个分解把“世界会怎样变”与“机器人应怎样动”拆开,但又在同一自回归序列中联合优化,因此不是完全解耦的 planner/controller。
Figure 2 解读:图 2 是最关键的架构图。左边语言指令和观察图像进入视频潜空间;中间双流 MoT 让 video model 先用 flow matching 预测未来 latent frames,再让 action model 基于预测视觉转移输出动作;右边展示输出动作和生成视频以 chunk 形式交替推进。图里最重要的设计是 video stream 与 action stream 并不是一个 shared head,而是在每层中保留不同宽度和不同参数,再通过 cross-modal attention 交互。
3.2 Flow matching、视频动力学损失与逆动力学损失
LingBot-VA 采用 conditional flow matching。给定噪声 和目标 token ,flow time 上的中间点一般写成 ,模型预测速度场 。视频 token 的动力学损失可以概括为: 动作 token 的逆动力学损失为: 总目标是 。论文实验中 inverse dynamics loss weight 。训练时使用 teacher forcing:上下文使用真实历史 token,预测后续 token;与普通生成不同,机器人部署时本来就会不断拿到真实观测,所以这个训练形式和闭环控制比较匹配。
Figure 3 解读:Figure 3 展示 teacher forcing 下的 causal attention mask。它不是让同一 chunk 内的所有 frame/action 互相可见,而是严格按时间序列开放注意力。这样做的意义是:训练时模型不能用未来观测作弊,推理时也可以自然接 KV cache,把新 token 拼接到过去上下文后继续生成。
3.3 双流 Mixture-of-Transformers 与动作表示
架构上,视频流初始化自 Wan2.2-5B,动作流与视频流同深度但显著更窄,记为 。论文认为低维动作分布比视觉数据简单,不需要同等宽度。动作 stream 的初始化不是随机初始化,而是按动作维度对视频权重插值,并乘上 保持输出方差;这缓解了动作 token 初始分布和视频 token 差异过大导致的联合注意力不稳定。
视频帧有时间冗余,所以论文用 做时间下采样;每个视频 frame 对应连续 个动作,形成类似 的交错序列。动作表示采用统一双臂接口:每只手臂包含 7 维末端位姿(XYZ + quaternion)、最多 7 维关节角和 1 维夹爪;双臂共 维。如果某个机器人自由度更少,缺失维度用 0 pad。
3.4 Noisy History、KV cache 与异步闭环
推理瓶颈主要来自视频 token:它们数量多,而且需要多个 denoising step。论文的 Noisy History Augmentation 在训练时以 0.5 概率把历史视频 latent 替换为 partially noised latent: 这让 action decoder 学会从半去噪的视频状态中提取动作相关信息。部署时就不必把每个未来视频 token 从 完整积分到 ,可以在较早 flow step 停止视频生成,同时仍让动作分支完整生成动作。
Figure 4 解读:Figure 4 对比同步、naive async 和 FDM-grounded async。同步方案必须等模型算完下一段视频/动作再执行,控制延迟高;naive async 虽然把执行和预测并行,但下一段预测可能基于过期视觉状态;FDM-grounded async 在执行当前动作时,用最近真实反馈和当前动作做 forward dynamics grounding,再缓存这个被真实观测校正过的预测,从而减少 stale prediction 带来的闭环漂移。
伪代码(按论文和公开代码合并理解):
# Training: wan_va/train.py::Trainer + wan_va/modules/model.py::WanTransformer3DModel.forward_train
for batch in MultiLatentLeRobotDataset:
latent_dict = add_flow_noise(batch.latents, noisy_cond_prob=0.5)
action_dict = add_flow_noise(batch.actions, action_mask=batch.actions_mask)
input_dict = {
"latent_dict": latent_dict,
"action_dict": action_dict,
"chunk_size": random_int(1, 4),
"window_size": random_int(4, 64),
}
latent_pred, action_pred = transformer.forward_train(input_dict)
video_loss = weighted_mse(latent_pred, latent_dict.targets)
action_loss = masked_weighted_mse(action_pred, action_dict.targets, actions_mask)
(video_loss + action_loss).backward()# Chunk inference: wan_va/wan_va_server.py::VA_Server._infer
encode current observation into latent_cond
initialize video noise and action noise for the next frame_chunk
for t in video_scheduler.timesteps:
video_noise_pred = transformer(latent_res, action_mode=False, update_cache=last_step)
update latent sample with FlowMatchScheduler.step
for t in action_scheduler.timesteps:
action_noise_pred = transformer(action_res, action_mode=True, update_cache=last_step)
update actions with action FlowMatchScheduler.step
mask invalid action channels, de-normalize quantile-normalized actions, return action chunk# Closed-loop KV cache idea: paper Algorithm 1/2 + code _compute_kv_cache
z0 = encode(o0)
cache = {z0}
while task_not_done:
predict partially denoised future video chunk from cache
decode action chunk conditioned on predicted visual transition
execute actions while collecting real observations
encode real observations and update cache
if async:
clear stale predicted cache and ground next prediction with latest feedback3.5 公开代码映射与可复现性检查
公开仓库已经包含 post-training、inference server、LeRobot latent dataset 读取、模型定义和配置。它不是一个完整复现论文全部预训练数据清洗与真实机器人异步部署的端到端包;特别是代码里没有搜索到字面 FDM / Forward Dynamics 命名,FDM-grounded async 更多体现在论文算法描述和 server 侧 cache/feedback 相关逻辑中。代码中能直接确认的是:partial noisy history 由 Trainer._prepare_input_dict() 对 latent 设置 noisy_cond_prob=0.5;模型 cache 由 WanTransformer3DModel.create_empty_cache() 和 WanAttention 的 cache 方法维护;server 的 _infer() 分别使用 video/action 的 FlowMatchScheduler 迭代生成 latent 与 action。
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| 双流 video-action diffusion transformer / MoT | wan_va/modules/model.py | WanTransformer3DModel, WanTransformerBlock, WanAttention |
| Causal mask、chunk/window attention、teacher forcing | wan_va/modules/model.py | FlexAttnFunc.init_mask, _get_mask_mod, forward_train |
| Flow matching 加噪、video/action 目标构造 | wan_va/train.py | Trainer._add_noise, Trainer._prepare_input_dict |
| 视频损失与动作损失 | wan_va/train.py | Trainer.compute_loss, Trainer._train_step |
| LeRobot latent/action 数据对齐 | wan_va/dataset/lerobot_latent_dataset.py | LatentLeRobotDataset.__getitem__, _action_post_process |
| 推理 server、video/action denoising、动作反归一化 | wan_va/wan_va_server.py | VA_Server._infer, preprocess_action, postprocess_action |
| KV cache / feedback cache | wan_va/wan_va_server.py, wan_va/modules/model.py | VA_Server._compute_kv_cache, WanTransformer3DModel.create_empty_cache |
| 训练启动脚本 | script/run_va_posttrain.sh | CONFIG_NAME=robotwin_train/libero_train, torch.distributed.run |
代码配置中可核对的训练/推理数字如下。RoboTwin post-train 配置 wan_va/configs/va_robotwin_train_cfg.py 设置 learning rate 1e-5、weight decay 0.1、warmup steps 10、batch size 1、gradient accumulation 1、num steps 50000,与论文 RoboTwin 50K steps 一致。
LIBERO 代码配置 wan_va/configs/va_libero_train_cfg.py 是 learning rate 1e-5、gradient accumulation 10、num steps 5000;论文正文写 LIBERO finetune 4K steps,因此这里应记录为当前代码与论文报告数字存在轻微版本差异。
RoboTwin 推理配置 va_robotwin_cfg.py 使用 height 256、width 320、action_dim 30、action_per_frame 16、frame_chunk_size 2、attn_window 72、video denoising steps 25、action denoising steps 50、SNR shift 5.0、action SNR shift 1.0。
LIBERO 推理配置 va_libero_cfg.py 使用 height/width 128、frame_chunk_size 4、action_per_frame 4、video steps 20、action steps 50、action SNR shift 0.05。
4. Experiments(实验)
4.1 训练数据与设置
论文聚合六类机器人数据源:Agibot、RoboMind、InternData-A1、OXE/OpenVLA subset、UMI Data(排除 DexUMI)和 RoboCOIN,总量约 16K hours。所有数据按数据集做 90%/10% train/validation split,用统一 30 维 action interface 对齐跨具身数据。预训练用 1.4T tokens,AdamW peak LR 、weight decay 0.01、cosine schedule + linear warmup、bfloat16 mixed precision、gradient clipping 2.0、text dropout 0.1、inverse dynamics loss weight ,video/action 都用 uniform SNR sampler。
Post-training 设置分几类。论文通用描述是 50 demonstrations 已足够适配新机器人,默认 reduced LR 训练 3K steps,或用 训练 1K steps 作为更快但略弱的替代。真实机器人六个任务只采集 50 real-world demos,论文写 finetune 500 steps、LR 、sequence length 150,000。RoboTwin 2.0 中,50 个任务每个 clean scene 50 demos,加 heavily randomized scenes 每任务 500 demos,总计 clean 2,500 + randomized 25,000,视频从 50Hz 降到 12.5Hz,动作保持 50Hz,训练 50K steps、LR 。LIBERO 四个 suite 每个 10 tasks、每任务 50 demos,报告三随机种子,每个 suite 每个 seed 500 trials,总计 1,500 trials。
4.2 真实机器人部署
Figure 5 解读:Figure 5 汇总六个真实任务,覆盖长程任务(Make Breakfast、Unpack Delivery)、精细操作(Insert Tubes、Pick Screws)和可变形/铰接对象(Fold Clothes、Fold Pants)。主图想表达的是 LingBot-VA 在 success rate 和 progress score 两个指标上整体优于强基线 ,尤其在长程任务和需要连续记忆的任务中优势明显。
Figure 6 解读:Figure 6 把六个真实任务拆成可评分的步骤。这个图很重要,因为论文不是只看最终成功/失败,而是引入 progress score:每个中间步骤成功得 1,需要重试得 0.5,失败得 0;只有所有步骤完成才算 success。这样能区分“完全失败”和“完成大部分步骤但最后失败”的策略差异。
Appendix 的逐 trial 表给出更细的数字。Make Breakfast 上 LingBot-VA 的 progress score / success rate 为 97.0% / 75.0%, 为 73.0% / 70.0%;Pick Screws 为 82.5% / 70.0% vs 74.0% / 50.0%;Unpack Delivery 为 84.5% / 65.0% vs 73.0% / 25.0%;Insert Tubes 为 85.8% / 40.0% vs 79.2% / 30.0%;Fold Pants 为 76.7% / 70.0% vs 30.0% / 30.0%。Fold Clothes 的 appendix 表显示 LingBot-VA success rate 35.0% 高于 baseline 30.0%,但 progress score 48.8% 低于 baseline 62.9%;这和正文“both metrics”式概述有张力,读者复现实验时应优先核对原始 trial 表和 Figure 5 的作图口径。
4.3 仿真结果:RoboTwin 2.0 与 LIBERO
RoboTwin 2.0 结果按任务 horizon 分组。Average 50 Tasks 上,LingBot-VA 达到 92.93% Easy 和 91.55% Hard;第二强 Motus 为 88.7% Easy 和 87.0% Hard, 为 82.7% Easy 和 76.8% Hard。更关键的是 Horizon=3 的长程任务:LingBot-VA 为 93.22% Easy / 93.28% Hard,相对第二名提升 +8.2% / +9.1%。这支持论文关于自回归记忆的主张:任务越长,能持续访问历史上下文和真实反馈的优势越明显。
LIBERO 上,LingBot-VA 的 Spatial/Object/Goal/Long/Avg 为 98.5±0.3 / 99.6±0.3 / 97.2±0.2 / 98.5±0.5 / 98.5。对比 X-VLA 的 98.2 / 98.6 / 97.8 / 97.6 / 98.1,LingBot-VA 在 Object、Long 和 Avg 上领先,在 Goal 上略低。这里的结论不是“所有子项压倒性领先”,而是总体平均和长程 suite 的强表现说明 world-action modeling 没有牺牲传统 imitation benchmark 性能。
4.4 消融、样本效率、记忆与泛化
Figure 7 解读:Figure 7 对比不同 action network 初始化的训练动态。论文认为随机初始化动作流会让动作 token 输出分布与视频 token 差异过大,破坏联合注意力,导致优化不稳;用视频权重插值并按维度缩放能让训练初期的视频/动作分布更接近,因此 loss 曲线更平稳。
消融表中,RoboTwin Easy 全任务 baseline LingBot-VA 为 92.9,FDM-grounded Async 为 90.4,Naive Async 为 74.3,WAN 初始化为 80.6。Horizon=3 上差距更大:baseline 93.2,FDM-grounded Async 85.6,Naive Async 32.9,WAN 67.6。这说明异步并行本身不是免费午餐:如果只异步而不处理 stale prediction,长程任务会严重崩溃;如果不用机器人视频-动作预训练、只拿通用 WAN 初始化,post-training 也显著不足。
Figure 8 解读:Figure 8 评估低样本适应。10 demonstrations 时,LingBot-VA 在 Make Breakfast progress score 上比 高 15.6%,在 RoboTwin 2.0 Easy 上高 10.3%。这正是 world model 的价值:它从视频预训练中获得物理动态先验,post-training 不必从少量演示中重新学习“物体如何移动”。
Figure 9 解读:Figure 9 专门测试 temporal memory。Wipe Plate 要求机器人记住已经擦了几次,Search Box 要求机器人记住哪个盒子已经被打开、哪个盒子可能含目标。相比只看当前图像的 reactive policy,自回归 KV cache 提供了更自然的任务历史存储位置。
Figure 10 解读:Figure 10 展示新物体形状、纹理与空间位置变化下的泛化。论文的解释是,视频预测迫使模型学习 object-agnostic physical priors,而不只是把训练集中某个物体和某个动作模板绑定起来。
5. Limitations & Reading Notes(局限与启发)
这篇论文最强的地方是把 robot policy、video world model 和 causal autoregressive deployment 放在了同一个可执行框架中。它不像很多“视频生成辅助机器人”的工作那样只把视频当作规划可视化,而是让视频 latent 直接参与 inverse dynamics;也不像一些纯 VLA 工作只在语言/视觉 backbone 后接动作 diffusion head,而是给 action stream 独立参数和独立 flow scheduler。对后续研究而言,这提示一个方向:动作模型不必总是寄生在 VLM 上,未来视觉状态本身可以成为动作监督的中间变量。
但局限也很清楚。第一,算力和系统复杂度高。视频 latent 生成、动作 flow matching、KV cache、partial denoising 和异步执行都比普通 diffusion policy 更难部署;如果真实机器人控制频率高,任何 cache miss、视频编码延迟或多相机同步问题都会影响闭环。第二,公开代码目前更像 post-training/inference release,而不是完整复现论文全部预训练和真实机器人异步系统的 release;FDM-grounded async 在论文里很关键,但当前仓库没有显式 FDM 命名,读代码时需要把 _infer()、_compute_kv_cache()、video_exec_step 和 cache 清理逻辑与论文算法对照,不能假设所有论文模块都有一一对应的函数。
第三,实验结论需要按任务类型细读。RoboTwin 长程任务与 LIBERO-Long 的提升非常符合论文主张,但 LIBERO-Goal 不是最高,Fold Clothes appendix 表也显示 progress score 未必优于 baseline。这并不推翻方法,但说明“world modeling 更好”不是无条件成立;它最可能在需要长程记忆、真实反馈、物理动态预测和低样本适应的场景中收益最大,而在某些短程或步骤评分口径下优势会变小。
第四,世界模型预测的是视觉 latent,不等价于显式物理模型或可解释因果图。论文标题中的 “causal” 主要指时间因果和动作-视觉转移的因果顺序,而不是结构因果模型意义上的干预图学习。它能通过自回归 mask 避免未来泄漏,也能通过闭环观测纠偏,但如果任务需要接触力、隐含状态或安全约束,单纯视觉 latent 仍可能漏掉关键变量。
对实践者的启发是:如果要在自己的机器人系统中复用 LingBot-VA,优先检查三件事。第一,动作接口是否能映射到 30 维或类似统一表示,以及 quantile normalization 是否有可靠统计;第二,控制频率是否允许视频/action 双 scheduler 的推理延迟,是否需要类似 partial denoising 或异步 pipeline;第三,目标任务是否真的需要 long-horizon memory 与 visual dynamics。如果只是短程 pick-and-place,复杂 world model 的收益可能抵不过工程成本;如果是多步骤、软物体、需要搜索或计数的任务,这类 video-action world model 才更可能体现结构优势。