• 正文
  • 相关推荐
申请入驻 产业图谱

世界模型 | Fast-WAM 深度解析:世界动作模型真的需要推理时的未来想象吗?

09/15 15:07
302
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

转载自公众号:敢敢AUTOHUB

1. 引言:从 VLA 到 WAM 的范式跃迁

在具身智能领域,如何让机器人理解物理世界并做出合理决策,一直是核心难题。过去两年,视觉-语言-动作模型(VLA)凭借大规模预训练和端到端推理的优势,成为机器人控制的主流范式。然而,VLA 本质上是一种"看图出动作"的条件生成模型——它基于当前观测直接预测动作序列,却缺乏对未来世界状态的显式建模能力。这意味着机器人在执行复杂长程任务时,难以预判动作的后果,也无法基于"如果我这样做,世界会怎么变"来做出更优决策。

世界动作模型(World Action Model, WAM)的出现正是为了弥补这一缺陷。WAM 的核心思想是:将视频预测(world model)与动作预测(action model)联合建模,让机器人不仅能感知当前状态,还能"想象"未来世界的演化,并据此规划动作。从 2024 年底到 2025 年初,一批优秀的 WAM 工作集中涌现——包括 Motus、Cosmos Policy、LingBot-VA、DreamZero 等——它们在仿真基准和真机实验上展现出超越传统 VLA 的性能,首次让学术界和工业界大范围意识到:WAM 可能拥有比 VLA 更强的潜力。

然而,一个根本性的问题始终悬而未决:WAM 到底为什么 work?是因为推理时模型"看到了"自己想象的未来画面(test-time imagination),还是因为训练时视频预测任务提供的密集监督信号(training-time co-training)帮助模型学到了更好的表征?Fast-WAM 正是为了回答这个问题而诞生的工作。

2. 现有 WAM 的统一范式:Imagine-then-Execute

要理解 Fast-WAM 的贡献,首先需要厘清当前 WAM 的主流做法。尽管各工作的具体实现细节不同,但它们的核心范式高度一致:

训练阶段:将 future video prediction 和 future action prediction 联合建模。模型同时学习"世界接下来会怎么变"和"机器人接下来该怎么做"。

推理阶段:模型先生成未来视频(imagination),然后基于这些想象的画面来输出动作。这就是所谓的 Imagine-then-Execute 范式。

这种范式在直觉上很合理:先"想一想"未来会怎样,再决定怎么做。但它也带来一个隐含的假设——推理时的 future imagination 是 WAM 性能的关键来源。Fast-WAM 团队对此提出了质疑。

3. 核心假设:训练时的 Co-training 才是真正的功臣

Fast-WAM 的作者观察到,future video prediction 在训练和推理时扮演着两个截然不同的角色:

角色一(训练时):video prediction 为模型 backbone 提供了极其密集的监督信号。这些监督与未来动作和环境演化高度相关,迫使 backbone 学习到对控制有价值的视觉表征——物体运动轨迹、接触关系、空间变化等。这本质上是一种 proxy task(代理任务)。

角色二(推理时):video prediction 为 action expert 提供了 guidance——action expert 基于想象的未来画面来决策,相当于一个 latent IDM(逆动力学模型)。

现有 WAM 普遍采用 Imagine-then-Execute 的推理方式,暗示了角色二的重要性。但作者提出了一个大胆的猜想:角色一(training-time co-training)才是 WAM work 的主要原因,而角色二(test-time imagination)可能是多余的。

这个猜想并非凭空而来,而是有先例可循。回顾 Pi-0.5 相对于 Pi-0 的进化:Pi-0.5 引入了 VLM backbone 的 co-training(包括 VQA 数据和自回归 discrete action token),但推理时并不要求模型先预测 discrete action token 再让 action expert 基于这些 token 做 flow matching。这说明 co-training 的核心价值在于改善 backbone 表征,而非为推理提供中间结果。Fast-WAM 将同样的逻辑推广到 video prediction 领域:video co-training 可能只是一个更好的 proxy task,而非推理时的必要环节。

4. Fast-WAM 架构设计:极简结构服务于严格解耦

为了公平验证上述假设,作者设计了一个极简的 Fast-WAM 架构。这里的设计哲学不是追求 SOTA 性能,而是构建一个可控实验平台,使得各个 component 的效果能被清晰解耦。

4.1 整体架构:Video DiT + Action DiT + MoT

Fast-WAM 的核心结构包含三个模块:

1. Video DiT(视频扩散 Transformer):基于 Wan2.2 5B 预训练模型,负责处理视频 latent tokens

2. Action DiT(动作扩散 Transformer):独立的轻量 Transformer,负责处理动作 tokens

3. MoT(Mixture of Tokens):混合注意力层,协调两个专家之间的信息交互

这三个模块在训练时通过联合优化(joint optimization)共同学习,但通过精心设计的 attention mask 控制信息流向。

4.2 MoT 混合注意力的实现

MoT 是 Fast-WAM 的核心连接件。它将 Video DiT 和 Action DiT 的 tokens 拼接后做联合注意力计算,但通过 attention mask 严格控制哪些 tokens 之间可以交互。以下是 MoT 的核心前向传播逻辑(摘自源码 src/fastwam/models/wan22/mot.py):

class MoT(nn.Module):
    def forward(self, embeds_all, attention_mask, freqs_all, context_all, t_mod_all):
        tokens_all = {k: v for k, v in embeds_all.items()}

        for layer_idx in range(self.num_layers):
            q_chunks, k_chunks, v_chunks = [], [], []
            cached = {}

            # 1. 每个专家独立计算 Q/K/V
            for name in self.expert_order:  # ["video", "action"]
                expert = self.mixtures[name]
                block = expert.blocks[layer_idx]
                q, k, v, residual_x, gate_msa, shift_mlp, scale_mlp, gate_mlp, _ = 
                    self._build_expert_attention_io(expert, block, tokens_all[name],
                                                   freqs_all[name], t_mod_all[name])
                q_chunks.append(q)
                k_chunks.append(k)
                v_chunks.append(v)
                cached[name] = {...}  # 缓存 post-block 所需的中间变量

            # 2. 拼接所有 tokens 做混合注意力
            q_cat = torch.cat(q_chunks, dim=1)
            k_cat = torch.cat(k_chunks, dim=1)
            v_cat = torch.cat(v_chunks, dim=1)
            mixed = self._mixed_attention(q_cat, k_cat, v_cat, attention_mask)

            # 3. 分割输出,每个专家独立做 post-block(FFN + cross-attn)
            start = 0
            for name, seq_len in zip(self.expert_order, seq_lens):
                mixed_slice = mixed[:, start:start+seq_len, :]
                tokens_all[name] = self._apply_expert_post_block(...)
                start += seq_len

        return tokens_all

关键设计点在于:虽然 Q/K/V 被拼接在一起做全局注意力计算,但 attention_mask 精确控制了信息的可见性。这使得同一个架构可以通过不同的 mask 配置,模拟出多种 WAM 变体。

5. Attention Mask:解耦实验的核心武器

Fast-WAM 最巧妙的设计在于通过 attention mask 实现了多种变体的统一框架。以下是核心的 mask 构建函数(摘自 src/fastwam/models/wan22/fastwam.py):

@torch.no_grad()
def _build_mot_attention_mask(self, video_seq_len, action_seq_len,
                               video_tokens_per_frame, device):
    total_seq_len = video_seq_len + action_seq_len
    mask = torch.zeros((total_seq_len, total_seq_len), dtype=torch.bool, device=device)

    # video tokens 之间:first-frame causal mask
    mask[:video_seq_len, :video_seq_len] = 
        self.video_expert.build_video_to_video_mask(...)

    # action tokens 之间:全可见(self-attention)
    mask[video_seq_len:, video_seq_len:] = True

    # action tokens 只能看到第一帧的 video tokens(不看 future video)
    first_frame_tokens = min(video_tokens_per_frame, video_seq_len)
    mask[video_seq_len:, :first_frame_tokens] = True

    return mask

这段代码揭示了 Fast-WAM 的核心约束:action tokens 在训练时被显式禁止看到 future video tokens。它们只能看到当前帧(第一帧)的视觉信息和自身的动作序列。这意味着即使训练过程中 video prediction 和 action prediction 是联合优化的,action expert 也无法依赖"想象的未来"来做决策。

基于这个统一框架,作者通过修改 mask 配置实现了三种对比变体:

变体 Mask 配置 对应的已有工作 核心特征
Fast-WAM-Joint action 可看 future video (joint denoise) Motus, DreamZero 推理时 video+action 联合去噪
Fast-WAM-IDM action 先看 clean future video (causal) LingBot-VA 推理时先生成视频再生成动作
Fast-WAM action 不看 future video 本文提出 推理时跳过视频生成
Fast-WAM-no-cotrain 同上,但去掉 video loss 消融基线 验证 co-training 的作用

6. 训练流程:联合 Flow Matching 的双流去噪

Fast-WAM 的训练基于 Continuous Flow Matching,对视频和动作分别施加独立的噪声调度,然后联合优化。以下是训练损失的核心计算流程(摘自 training_loss 方法):

def training_loss(self, sample, tiled=False):
    inputs = self.build_inputs(sample, tiled=tiled)
    input_latents = inputs["input_latents"]   # VAE 编码后的视频 latent
    action = inputs["action"]                  # 归一化后的动作序列

    # --- 视频流:添加噪声并计算目标 ---
    noise_video = torch.randn_like(input_latents)
    timestep_video = self.train_video_scheduler.sample_training_t(...)
    latents = self.train_video_scheduler.add_noise(input_latents, noise_video, timestep_video)
    target_video = self.train_video_scheduler.training_target(input_latents, noise_video, timestep_video)

    # --- 动作流:独立的噪声调度 ---
    noise_action = torch.randn_like(action)
    timestep_action = self.train_action_scheduler.sample_training_t(...)
    noisy_action = self.train_action_scheduler.add_noise(action, noise_action, timestep_action)
    target_action = self.train_action_scheduler.training_target(action, noise_action, timestep_action)

    # --- 两个专家分别做 pre-processing ---
    video_pre = self.video_expert.pre_dit(x=latents, timestep=timestep_video, ...)
    action_pre = self.action_expert.pre_dit(action_tokens=noisy_action, timestep=timestep_action, ...)

    # --- MoT 联合前向:通过 attention mask 控制交互 ---
    tokens_out = self.mot(
        embeds_all={"video": video_pre["tokens"], "action": action_pre["tokens"]},
        attention_mask=self._build_mot_attention_mask(...),
        ...
    )

    # --- 分别计算两个流的预测和损失 ---
    pred_video = self.video_expert.post_dit(tokens_out["video"], video_pre)
    pred_action = self.action_expert.post_dit(tokens_out["action"], action_pre)

    loss_video = weighted_mse(pred_video, target_video)
    loss_action = weighted_mse(pred_action, target_action)
    loss_total = lambda_video * loss_video + lambda_action * loss_action

    return loss_total, {"loss_video": ..., "loss_action": ...}

几个值得注意的设计细节:

1. 独立的噪声时间步:video 和 action 使用各自独立采样的 timestep,这意味着在同一个训练 step 中,两者可能处于去噪过程的不同阶段。

2. 第一帧锁定latents[:, :, 0:1] = first_frame_latents 确保第一帧始终是"干净的"(无噪声),作为条件输入。

3. 可配置的损失权重loss_lambda_video 和 loss_lambda_action 允许灵活调整两个任务的相对重要性。当 loss_lambda_video = 0 时,即退化为 Fast-WAM-no-cotrain 变体。

7. 推理流程:跳过视频生成的 Action-Only 推理

Fast-WAM 最重要的工程贡献之一是 infer_action 方法——它完全跳过了 future video generation,只利用第一帧的视觉信息做动作推理。这带来了显著的延迟降低。

@torch.no_grad()
def infer_action(self, prompt, input_image, action_horizon, ...):
    # 1. 编码第一帧为 latent
    first_frame_latents = self._encode_input_image_latents_tensor(input_image)

    # 2. Video expert 只处理第一帧(timestep=0,无噪声)
    timestep_video = torch.zeros(...)  # t=0 表示"干净"的状态
    video_pre = self.video_expert.pre_dit(x=first_frame_latents, timestep=timestep_video, ...)

    # 3. 预计算并缓存 video 的 K/V(只需一次)
    video_kv_cache = self.mot.prefill_video_cache(
        video_tokens=video_pre["tokens"],
        video_freqs=video_pre["freqs"],
        video_t_mod=video_pre["t_mod"],
        video_attention_mask=attention_mask[:video_seq_len, :video_seq_len],
        ...
    )

    # 4. Action 的多步去噪循环(复用 video KV cache)
    for step_t, step_delta in zip(infer_timesteps, infer_deltas):
        pred_action = self._predict_action_noise_with_cache(
            latents_action=latents_action,
            timestep_action=step_t,
            video_kv_cache=video_kv_cache,  # 缓存复用
            attention_mask=attention_mask,
            video_seq_len=video_seq_len,
            ...
        )
        latents_action = self.infer_action_scheduler.step(pred_action, step_delta, latents_action)

    return {"action": latents_action[0]}

这段推理逻辑的核心洞察是:

• Video expert 只需对第一帧做一次 forward pass,生成 KV cache

• Action expert 在多步去噪过程中复用这个 cache,无需反复运行 video branch

• Attention mask 保证 action tokens 只看第一帧 video tokens,与训练时的约束完全一致

与此对比,传统的 Imagine-then-Execute 推理需要先完整运行视频去噪(通常 20-50 步),再运行动作去噪,计算量几乎翻倍。

7.1 与 InfinityStar 等快速视频生成模型的区别

读到这里,一个自然的疑问是:如果推理时视频生成太慢是问题所在,那么使用更快的视频生成方案(比如字节跳动的 InfinityStar)是否就能解决?答案是否定的——因为 Fast-WAM 的结论指向一个更根本的层面。

InfinityStar 是一种统一时空自回归视频生成框架(NeurIPS 2025 Oral),它用离散 token 的 next-token prediction 替代了 diffusion 的多步去噪,将视频生成速度提升了约 10 倍。从工程角度看,它确实大幅缓解了 diffusion 视频模型的延迟问题。但 Fast-WAM 的实验表明,问题的本质不是"视频生成太慢",而是"推理时的视频生成本身就不必要"

两者解决的是不同层次的问题:

对比维度 InfinityStar Fast-WAM
核心目标 加速视频生成(用 AR 替代 Diffusion) 证明推理时根本不需要生成视频
方法论 离散时空 token 自回归 Attention Mask 解耦 + KV Cache
推理时是否生成视频 是(只是更快) 否(完全跳过)
延迟改善来源 减少生成步数(从 50 步到约 5 步 AR) 彻底移除视频生成分支
对 WAM 的启示 可作为更快的 video backbone 证明 video backbone 的价值在训练而非推理

换言之,即使未来有人把 Fast-WAM 的 Video DiT(基于 Wan2.2 的 diffusion 模型)替换为 InfinityStar 风格的 AR 视频模型来做 co-training,Fast-WAM 的核心结论依然成立:推理时不需要真的"走一遍"视频生成过程,只要训练时视频预测任务提供了足够的监督信号,action expert 就能从 backbone 学到的表征中直接 decode 出动作。

不过,InfinityStar 的 AR 架构对 WAM 领域仍有潜在价值:它的离散 token 天然适合作为 proxy task 的训练目标(类似 Pi-0.5 中的 discrete action token co-training),未来或许可以探索用"预测离散视频 token"替代"预测连续 video latent"作为 co-training objective,在保持监督信号密度的同时进一步简化训练流水线。

8. KV Cache 机制:推理加速的工程细节

prefill_video_cache 和 forward_action_with_video_cache 是 Fast-WAM 推理加速的工程核心。它们的实现体现了对 Transformer 推理优化的深刻理解:

# mot.py 中的 KV cache 预填充
def prefill_video_cache(self, video_tokens, video_freqs, video_t_mod, ...):
    x = video_tokens
    kv_cache = []
    for layer_idx in range(self.num_layers):
        block = self.mixtures["video"].blocks[layer_idx]
        q, k, v, residual_x, ... = self._build_expert_attention_io(...)
        # Video 自注意力
        mixed = self._mixed_attention(q, k, v, video_attention_mask)
        # 更新 tokens 并缓存当前层的 K/V
        x = self._apply_post_with_optional_checkpoint(...)
        kv_cache.append({"k": k, "v": v})
    return kv_cache

# 使用缓存的 action 前向
def forward_action_with_video_cache(self, action_tokens, ..., video_kv_cache, ...):
    x = action_tokens
    for layer_idx in range(self.num_layers):
        q_action, k_action, v_action, ... = self._build_expert_attention_io(...)
        # 拼接缓存的 video K/V 和当前 action K/V
        k_cat = torch.cat([video_kv_cache[layer_idx]["k"], k_action], dim=1)
        v_cat = torch.cat([video_kv_cache[layer_idx]["v"], v_action], dim=1)
        # Action query 同时 attend to video cache 和 action self
        mixed = self._mixed_attention(q_action, k_cat, v_cat, action_attention_mask)
        x = self._apply_post_with_optional_checkpoint(...)
    return x

这种设计让 action 的每步去噪只需要计算 action tokens 的 Q/K/V 并与预缓存的 video K/V 做交叉注意力,避免了重复计算 video branch 的高昂代价。

9. 与相关工作的关键区别

9.1 vs Video Prediction Policy (VPP)

VPP 是两阶段训练:先单独训 video backbone,再 freeze 住训 action expert。Fast-WAM 是端到端联合训练。这种差异类比于:VPP 相当于拿 frozen CLIP/DINO encoder 做 Diffusion Policy(前 VLA 时代做法),而 Fast-WAM 相当于端到端训练的 VLA。后者在训练效率和性能上限上都有明显优势。

此外两者研究的问题不同:VPP 问的是"生成式模型学到的表征是否比 encoder 模型更适合机器人";Fast-WAM 问的是"训练时的 video prediction objective 和推理时的 future imagination,哪个才是 WAM 性能的主要来源"。

9.2 vs Unified Video Action Model (UVA)

UVA 同样提出了训练时用 video prediction 监督、推理时跳过的思路。但区别在于:

    1. UVA 的核心目标是提出一个 unified 结构,而 Fast-WAM 的贡献是严格解耦并验证假设2. UVA 仅在 DP 量级的小模型上实验(小几十倍),而 Fast-WAM 对齐了近期 WAM 工作的 scale(video backbone 对齐 Wan 2.2 5B)

9.3 vs HarmoWAM:泛化与精度的自适应切换

HarmoWAM 指出 Imagine-then-Execute 和 Joint Modeling 各有问题:前者泛化强但接触操作不够精细,后者动作生成连贯但容易被训练分布限制。它引入 predictive expert 和 reactive expert,通过 Process-Adaptive Gating 根据任务阶段动态切换。

与 Fast-WAM 的关键区别在于:Fast-WAM 证明推理时不需要 imagination,结论是"可以全程跳过";HarmoWAM 则认为不同阶段需要不同程度的 imagination——接近阶段用 predictive expert(类似 imagination),接触阶段切到 reactive expert(类似直接反应)。两者互补而非矛盾:Fast-WAM 回答了"imagination 是否必要",HarmoWAM 回答了"如果要用 imagination,什么时候用"。

9.4 vs RLA-WM:特征空间预测替代像素空间预测

RLA-WM 继续挑战"WAM 必须预测未来 RGB 视频"的假设。它不预测 raw pixels,而是预测 DINO token 的残差变化,压缩为 Residual Latent Action。

与 Fast-WAM 的关系非常紧密:两者都指向同一个结论——video prediction 的价值在于学到好的表征,而非生成逼真的画面。区别在于路径不同:Fast-WAM 保留了完整的像素级 video prediction 作为训练目标,但在推理时跳过;RLA-WM 则从源头改变了预测目标本身,用特征残差替代 RGB,训练和推理时都不生成视频。RLA-WM 可以看作 Fast-WAM 思想的进一步推进——既然推理时不需要视频,那训练时何必非得预测像素?

9.5 vs OA-WAM:对象级世界维护

OA-WAM 解决多物体场景中的目标绑定问题。它把每帧拆成 robot slot 和多个 object slots,每个 slot 再分成 identity address(物体是谁)和 time-varying content(物体状态)。通过 address-only attention 强行将"操作哪个物体"和"物体当前状态"分开。

与 Fast-WAM 的区别在研究维度上:Fast-WAM 关注的是时间维度的问题(训练 vs 推理阶段 video prediction 的作用),OA-WAM 关注的是空间维度的问题(多物体场景中如何维护目标身份)。两者正交且可组合——未来可以在 Fast-WAM 的 MoT 框架中引入 object-addressable slots,让 co-training 的监督信号精确到每个物体的状态变化。

9.6 vs FFDC-WAM(When to Trust Imagination):推理时的自我校验

FFDC-WAM 提出 future-reality verification:如果想象的未来和真实观测一致,就多执行几步;如果现实偏离,就提前重规划。FFDC 是一个轻量 verifier,在 RoboTwin 上减少 69.10% WAM forward passes,执行时间减少 34.02%,真实实验成功率提升 35%。

与 Fast-WAM 的区别在前提假设上:FFDC-WAM 假设推理时仍需要 imagination(它的 verifier 就是在判断 imagination 是否可信),而 Fast-WAM 的结论是根本不需要 imagination。如果 Fast-WAM 的结论在所有场景下都成立,FFDC-WAM 的 verifier 就没有存在必要。但 Fast-WAM 也承认其结论目前仅在有限规模上验证,大规模预训练下可能有不同答案——在那种场景下,FFDC-WAM 的自我校验机制就变得有价值。

9.7 vs DAWN:动作与世界的递归耦合

DAWN 提出 World-Action Interactive Model:世界预测和动作生成不是单向流水线,而应在推理中互相修正。World Predictor 和 World-Conditioned Action Denoiser 递归耦合——预测的世界假设影响动作去噪,去噪后的动作假设又反馈回来更新世界预测。

与 Fast-WAM 的区别是哲学层面的:Fast-WAM 的结论是"推理时 world 对 action 的 guidance 不重要",DAWN 则认为"world 和 action 应该在推理时深度耦合"。两者看似矛盾,实则讨论的交互模式不同——Fast-WAM 讨论的是单向的 world→action guidance(这个不重要),DAWN 讨论的是双向递归修正(world↔action 互相约束)。后者的信息流比前者丰富得多,可能在长程复杂任务中展现出不同的价值。

10.总结

Fast-WAM 是一篇回归科研本质的工作。它没有追求最大、最全、最 work 的工程系统,而是提出了一个精准的科学问题——WAM 的性能究竟来自训练时的 video co-training,还是推理时的 future imagination——并通过严格控制的变体实验给出了清晰的答案。

核心结论可以用一句话概括:训练时让模型"学会想象"比推理时让模型"去做想象"更重要。Video prediction 作为一种 proxy task,其价值在于为 backbone 提供与控制高度相关的密集监督信号,帮助模型学到更好的视觉-动态表征。而推理时是否真的生成未来视频,对最终的控制性能影响甚微。

相关推荐