Metis:不对称注意力解锁联合训练与解耦推理

Metis:不对称注意力解锁联合训练与解耦推理

论文全名Metis: A Generalizable and Efficient World-Action Model for Autonomous Driving and Urban Navigation arXiv:2606.15869v1(2026-06-14) 代码github.com/LogosRoboticsGroup/Metis 机构:复旦大学、上海创新研究院、香港大学、同济大学、理想汽车、华中科技大学、帝国理工、萨里大学 一句话:训练时让视频和动作互相学习,推理时让动作专家独立飞奔——用一把"不对称的注意力钥匙",同时打开性能与效率两扇门。


一、故事的起点:一个"想得太慢"和一个"想得太乱"的世界

想象你是一辆自动驾驶汽车的大脑。要决定"要不要右转",你不能只盯着此刻的画面,还得在脑海里预演接下来几秒:路口会不会窜出行人?对向车速多少?先"想象"未来,再规划轨迹——这就是**世界动作模型(World Action Model, WAM)**的核心思路。它把"动作生成"和"未来预测"揉进同一个框架,比只会应激反应的 VLA(视觉-语言-动作)模型更懂物理世界。

但当时的 WAM 有两个致命伤,论文开篇就点破:

  • 太慢:VLA 增强派必须先自回归地把未来画面一帧帧"脑补"出来,才能动手规划。想象很丰富,反应很迟钝。
  • 太乱:视频生成派把视频和动作紧耦合在一起,高维的视觉表示会去干扰低维的动作空间,轨迹规划反而变差。

Metis 的哲学一句话概括:动作才是目的,视频理解只是手段。既然推理时最终只要动作,那就训练时让二者共同学习、推理时把视频这根拐杖直接扔掉。


二、三大门派的对决(引言)

论文把当时的 WAM 设计分成三大流派,像武林三大门派:

门派 做法 比喻 痛点
(a) VLA 增强派 给 VLM 加"未来预测 token",先自回归生成未来画面再出动作 司机先闭眼脑补前方 5 秒再开车 自回归视频 → 延迟高
(b) 视频生成派 在视频生成模型上嫁接动作头,视频与动作共享特征 视频剪辑师兼职开车 紧耦合 → 分布干扰
(c) Metis(本文) 不对称注意力掩码解耦二者,推理无需生成视频 训练时看老师做题,考试时自己独立作答 ——

Metis 属于第三派,核心贡献有三:

  1. 解耦的 WAM 框架:动作模型与视频模型分家,各自保持自己的分布结构,泛化更好。
  2. 不对称注意力掩码:强制视频与动作 token 之间"单向可见",实现"联合训练、解耦推理",训练推理保持一致。
  3. 全面 SOTA:NAVSIM(navhard / navtest)自动驾驶基准 + CityWalker 城市导航基准双双领先,零样本真机部署验证泛化性。

三、方法:Metis 的"解耦"魔法

3.1 问题形式化:把未来从推理里"请出去"

传统 WAM 训练时联合建模动作和未来观测:

$$p_\theta(a_{t:t+H},\; v_{t+1:t+N} \mid o_t, l)$$

推理时要么联合去噪同时生成动作和未来帧,要么先生成未来帧再反推动作(inverse dynamics)。两种都逃不开对高维未来观测 $v_{t+1:t+N}$ 的采样/递归去噪,这就是延迟的根源。

Metis 改成解耦推理范式:未来帧只在训练时作监督信号,推理只靠当前观测。

$$a_{t:t+H} \sim p_\theta\big(a_{t:t+H} \mid z(o_t, l)\big)$$

其中 $z(o_t,l)$ 是 backbone 对当前观测的一次前向编码。推理时一次前向拿到当前上下文,直接出轨迹,未来帧从此缺席。

3.2 整体架构:Mixture-of-Transformers(MoT)

为了避免"异质任务分布互相打架",Metis 用 MoT 把任务拆成两个专属专家:

  • VGE(Video Generation Expert,视频生成专家)Wan2.2-5B 为骨干,继承其预训练权重(视频/物理先验),并复用它的 video VAE(视觉编码)和 T5 文本编码器(语言条件)。负责捕捉时空动态,约 5B 参数。
  • AE(Action Expert,动作专家) 一个 diffusion transformer,层深与 VGE 完全相同,但隐藏维度缩小到 $d_a=1024$,约 1B 参数。整体模型约 6B
⚠️ 易错点(本轮讨论纠正)

AE 只是沿用 Wan 的 DiT 结构和层深,并不加载 Wan2.2 的预训练权重(维度都对不上),而是从头训练。只有 VGE 继承 Wan2.2-5B 权重、并复用它的 VAE 与 T5。

为什么层深必须相同? 因为 VGE 和 AE 要逐层配对做跨专家注意力交互。深度不对齐,就没法在每一层让视频 token 和动作 token 坐到同一张桌子上"对话"了。

模型输入被组织成三类 token:

  1. 当前观测的 latent token($V_{cur}$,$z_t$)
  2. 未来观测的加噪 token($V_{fut}$,$z_{t+1:t+N}$,仅训练存在)
  3. 动作的加噪 token($A$,即加噪 waypoints)

所有 token 先通过 cross-attention 关注语言/ego 条件,再经各专家独立的投影进入共享潜在空间,交互由结构化注意力调控,最后各专家用自己的 FFN 和输出头做各自的预测。

3.3 灵魂设计:不对称注意力掩码

这是全文最"神来之笔"的地方。序列布局为 [ V_cur | V_fut | A ],掩码规则(对应论文 Figure 3):

Query 来自 \ Key/Value 来自 $V_{cur}$(当前观测) $V_{fut}$(未来视频) $A$(动作)
$V_{fut}$(视频专家) ✅ 可见 ✅ 可见 可见(视频看得到动作)
$A$(动作专家) ✅ 可见 屏蔽(唯一必要约束) ✅ 可见

一句话:未来视频能 attend 到未来动作,反方向被封死;动作只被允许 attend 当前观测和它自己

为什么这样设计?

  • 视频看得到动作 → VGE 能根据"这辆车打算怎么走",生成物理上更合理的未来演化。
  • 动作看不到未来视频 → 保护低维动作空间不被高维视觉生成的噪声污染,这正是解决"分布干扰"的命门。

这个单向信息流带来两个好处一次到手:训练时两个专家联合优化,VGE 的预测能力隐式参与动作精修;推理时整条视频生成分支可以被完全绕过,实现实时效率。

3.4 训练目标:联合 Flow Matching

VGE 和 AE 在同一个 flow matching 框架下联合优化。

⚠️ 方向约定(本轮讨论纠正)

严格按论文公式 (5)(6),$s=0$ 是纯噪声、$s=1$ 是真实数据,与常见的另一种坐标方向相反。二者数学等价,但既然对着论文实现,全篇统一用论文的约定。

动作损失(公式 5)——监督动作速度场:

$$\mathcal{L}_{act} = \mathbb{E}\left[\big\|\, u_\theta(a^{(s)}_{t:t+H}, s \mid o_t, l) - \dot a_{t:t+H} \,\big\|^2\right]$$

其中 $a^{(s)}_{t:t+H} = (1-s)\epsilon + s\,a_{t:t+H}$,$\epsilon \sim \mathcal N(0,I)$,速度场目标 $\dot a_{t:t+H} = a_{t:t+H} - \epsilon$。

视频损失(公式 6)——监督未来视频速度场,注意它的条件里显式带了预测的动作 $\hat a_{t:t+H}$

$$\mathcal{L}_{video} = \mathbb{E}\left[\big\|\, u_\phi(z^{(s)}_{t+1:t+H}, s \mid o_t, \hat a_{t:t+H}, l) - \dot z_{t+1:t+H} \,\big\|^2\right]$$

这一处"$\hat a$ 出现在视频损失的条件里",正是"视频能看到动作"的数学落地。

总损失

$$\mathcal{L} = \mathcal{L}_{act} + \lambda\,\mathcal{L}_{video}, \qquad \lambda = 1$$

四、深挖细节:几个把人绕进去的问题

这一节把 raw 讨论纪要里那些"追问到底"的问题梳理成最终结论。

4.1 MoT 到底"混合"了什么?——不是共享 K/V 权重

⚠️ 纠正一个措辞

早期讨论里说"共享 K/V",不够精确。

MoT 的真相是:VGE 和 AE 各自拥有独立的 Q、K、V 投影权重和独立的 FFN。所谓"联合注意力",是把两条流的 token 序列拼接(concat)在一起做一次 self-attention,但每个 token 的 Q/K/V 都由它自己专家的投影矩阵算出。

Q_v, K_v, V_v = X_v · W_{Q/K/V}^{VGE}     # 视频流, 用 VGE 的投影
Q_a, K_a, V_a = X_a · W_{Q/K/V}^{AE}      # 动作流, 用 AE 的投影
[X_v', X_a'] = Attention(concat(Q), concat(K), concat(V), mask=M)

“混合"体现在两处:注意力处两条流拼接交互(共享 latent space),但投影和 FFN 各自独立(保各自分布纯净)。这就是 MoT 相比普通 MoE 的特点——按模态分专家,而非按 token 稀疏路由。

4.2 梯度是怎么"单向"流动的?——掩码一石二鸟

这是最精妙的地方:掩码 $M_{av}=-\infty$ 在前向阻断信息流的同时,反向自动阻断梯度流,不需要任何 stop_gradient,纯靠链式法则实现。

前向时,动作输出对未来视频 token 的 softmax 权重精确为 0,于是 $\text{Attn}_a$ 的值与 $K_v, V_v$ 完全无关。反向时,链式法则在这里乘以 0,梯度自然消失。

梯度 流入 VGE 权重 流入 AE 权重
$\partial\mathcal{L}_{video}$ $W_{FFN}^{VGE}$、$W_{Q/K/V}^{VGE}$ $W_{K/V}^{AE}$(跨流:因为 VGE 的 Query attend 了 AE 的 K/V)
$\partial\mathcal{L}_{act}$ 无(掩码封死) $W_{FFN}^{AE}$、$W_{Q/K/V}^{AE}$

深层意义

  • AE 的 K/V 权重同时被 $\mathcal{L}_{act}$(直接)和 $\mathcal{L}_{video}$(间接、跨流)训练 → 逼着 AE 的 Key/Value 表示学会"对视频生成也有用"的特征,从而隐式编码了对未来场景动态的理解。这就是"隐式世界知识"传递的确切通道。
  • VGE 的 K/V 权重只被 $\mathcal{L}_{video}$ 训练 → 视觉生成分布保持纯净。
  • FFN 完全独立 → 两路分布互不污染。

4.3 为什么 mask 用 $-\infty$ 屏蔽,而不是 0?

这是很多人(包括讨论里)的直觉盲区:“我一直以为 0 是屏蔽、1 是不屏蔽。”

关键在于 mask 加在 softmax 之前的 logit 上

$$\text{Attn}(Q,K,V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d}} + M\right)V$$
  • $M_{ij}=0$:logit 不变,权重照常非零 → 其实是不屏蔽
  • $M_{ij}=-\infty$:$e^{-\infty}=0$,该位置权重精确为 0,对应 V 完全不参与 → 这才是真正的屏蔽

所以规则是反的:0 = 不屏蔽,$-\infty$ = 屏蔽

那"0 屏蔽、1 不屏蔽"的印象哪来的?那是 HuggingFace 的 padding mask 用户接口约定1=保留, 0=pad),但库内部会把它转成加法 mask (1 - mask) * (-inf) 再送进 softmax。两套命名作用的层不同:

约定 作用层 屏蔽值 允许值
HuggingFace 布尔 mask softmax 外部,框架转换 0 1
PyTorch 加法 attn_mask 直接加到 logit $-\infty$ / -1e9 0
Metis 不对称掩码 直接加到 logit $-\infty$ 0

工程上常用 -1e4/-1e9torch.finfo(dtype).min 代替真 -inf,避免整行被屏蔽时 0/0=NaN,或 bf16 下 -inf+inf=NaN

4.4 为什么不能"先 softmax 再乘 0"来屏蔽?

数学上可以,但会破坏概率分布的归一化

  • 正确(先加 $-\infty$ 再 softmax)[1, 2, 0.5] → [1, -inf, 0.5] → softmax → [0.37, 0, 0.63],权重和 = 1,剩余位置自动重新归一。
  • 错误(先 softmax 再乘 0)[1,2,0.5] → softmax → [0.27, 0.53, 0.20] → ×[1,0,1] → [0.27, 0, 0.20],权重和 = 0.47 ≠ 1,分布缩水。

本质:softmax 的分母 $\sum_k e^{s_k}$ 在计算时已经把被屏蔽位置的 $e^{s_2}$ 算进去了。事后清零分子,分母里那部分永远消不掉。形象说:被屏蔽的位置像一个人"点了满桌菜挤占了别人份额”,事后把菜端走,但占用份额已无法挽回;而 $-\infty$ 相当于这个人根本没来餐厅

输出 $\text{output}=\sum_i w_i V_i$ 的模长会系统性偏小(约 47%),且不同样本 mask 模式不同、偏差程度不同,模型无法用统一缩放系数纠正。若一定要后置,需再补一次重新归一化(weights /= weights.sum()),数学等价但多一次除法且可能 NaN,所以实践中直接用 $-\infty$ 一步到位。

4.5 Flow Matching 的目标为什么和时间步 $s$ 无关?

⚠️ 本轮讨论纠正的一个误解

直觉上以为"target 应该和时间步有关",其实不然

Metis 用的是最朴素的直线插值路径 $x_s=(1-s)\epsilon + s\,x$,它对 $s$ 的导数是常数

$$\frac{dx_s}{ds} = x - \epsilon \quad(\text{与 } s \text{ 无关})$$

这正是 rectified/直线流的精髓——不管问哪个 $s$ 点,网络都要回归同一个方向 $x-\epsilon$。和 $s$ 有关的是网络的输入 $x_s$ 和网络的预测 $u_\theta(x_s,s)$($s$ 通过 AdaLN 喂进网络),而不是回归目标本身。给 target 乘时间系数反而会破坏直线流的定义。

(对照:确实存在"目标随时间步变"的情形,但那是 $\epsilon$-prediction / $v$-prediction 某些参数化,或带 SNR 权重 $w(s)$ 的损失。Metis 不属于这些。)


五、核心伪代码

只把 MoT 不对称注意力联合 Flow Matching 写细;Wan2.2 调用、VAE、文本编码、数据加载一笔带过。约定同 §3.4:$s=0$ 噪声、$s=1$ 数据,速度场 $\dot x = x-\epsilon$。

# ---------- 0. 外部组件(一笔带过) ----------
vae          = load_wan22_vae()          # 视频 VAE, Wan2.2 预训练, 复用
text_encoder = load_wan22_t5()           # T5 文本编码器, Wan2.2 预训练, 复用
ego_encoder  = AgentStateEncoder()

VGE = build_dit(dim=d_v, depth=L); VGE.load_pretrained("Wan2.2-5B")  # 继承权重
AE  = build_dit(dim=d_a, depth=L)        # d_a=1024, ~1B, 同层深, 从头训练(不加载 Wan 权重)


# ---------- 1. 时间步嵌入 + AdaLN ----------
def timestep_feature(s):
    return timestep_mlp(sinusoidal_embed(s))          # s → t_emb, VGE/AE 共享同一个 s

def modulate(x_norm, shift, scale):
    return x_norm * (1 + scale) + shift               # AdaLN 仿射调制
# 每个 block 从 t_emb 产出 self-attn 与 FFN 两组 (shift, scale, gate) —— DiT 的 AdaLN-Zero


# ---------- 2. 不对称注意力掩码 ----------
def build_asymmetric_mask(n_cur, n_fut, n_act):
    """[ V_cur | V_fut | A ]; 0=可见, -inf=屏蔽(加在 softmax 之前)。"""
    N = n_cur + n_fut + n_act
    M = zeros(N, N)
    act = slice(n_cur + n_fut, N); fut = slice(n_cur, n_cur + n_fut)
    M[act, fut] = -inf        # 唯一必要约束: 动作看不到未来视频; 反向保留(视频看得到动作)
    return M


# ---------- 3. 单个 MoT 层: cross-attn → 联合 self-attn → FFN(全文最核心) ----------
def mot_layer(h_v, h_a, t_emb, text_emb, mask, blk_v, blk_a):
    # (1) 跨注意力到语言/ego(文本作 K/V)
    h_v = h_v + blk_v.cross_attn(q=blk_v.norm_ca(h_v), k=text_emb, v=text_emb)
    h_a = h_a + blk_a.cross_attn(q=blk_a.norm_ca(h_a), k=text_emb, v=text_emb)

    # (2) 时间步 AdaLN(各专家独立投影 t_emb)
    sh_v, sc_v, g_v = blk_v.adaln_sa(t_emb);  x_v = modulate(blk_v.norm_sa(h_v), sh_v, sc_v)
    sh_a, sc_a, g_a = blk_a.adaln_sa(t_emb);  x_a = modulate(blk_a.norm_sa(h_a), sh_a, sc_a)

    # (3) 联合掩码自注意力: 两流独立 QKV 投影, 拼接后一次 attention
    q_v, k_v, v_v = blk_v.qkv(x_v)            # VGE 的 W_Q/K/V
    q_a, k_a, v_a = blk_a.qkv(x_a)            # AE  的 W_Q/K/V
    Q = concat([q_v, q_a]); K = concat([k_v, k_a]); V = concat([v_v, v_a])
    out = softmax(Q @ K.transpose() / sqrt(head_dim) + mask) @ V   # -inf 处权重=0
    out_v, out_a = split(out, [len(h_v), len(h_a)])
    h_v = h_v + g_v * blk_v.o_proj(out_v)
    h_a = h_a + g_a * blk_a.o_proj(out_a)

    # (4) 各自独立 FFN + 各自 AdaLN(分布互不污染)
    sh_v2, sc_v2, g_v2 = blk_v.adaln_ffn(t_emb)
    sh_a2, sc_a2, g_a2 = blk_a.adaln_ffn(t_emb)
    h_v = h_v + g_v2 * blk_v.ffn(modulate(blk_v.norm_ffn(h_v), sh_v2, sc_v2))
    h_a = h_a + g_a2 * blk_a.ffn(modulate(blk_a.norm_ffn(h_a), sh_a2, sc_a2))
    return h_v, h_a
    # M[act,fut]=-inf: 前向阻断信息流, 反向自动阻断梯度流, 无需 stop_gradient


# ---------- 4. 训练前向 ----------
def mot_forward(V_cur, V_fut, A, text_emb, s):
    t_emb = timestep_feature(s)
    h_v = VGE.patch_embed(concat([V_cur, V_fut]));  h_a = AE.patch_embed(A)
    mask = build_asymmetric_mask(len(V_cur), len(V_fut), len(A))
    for blk_v, blk_a in zip(VGE.blocks, AE.blocks):          # 逐层配对
        h_v, h_a = mot_layer(h_v, h_a, t_emb, text_emb, mask, blk_v, blk_a)
    return VGE.head(h_v[len(V_cur):]), AE.head(h_a)          # 视频只取 V_fut 部分


# ---------- 5. 训练 step(联合 Flow Matching) ----------
def train_step(batch):
    V_cur = patchify(vae.encode(batch.current_frame))        # z_t
    z_fut = patchify(vae.encode(batch.future_frames))        # z_{t+1:t+N} 真值
    a     = batch.waypoints                                  # (x,y,θ)×H 真值
    text_emb = concat([text_encoder(batch.instruction), ego_encoder(batch.ego_state)])

    s = sample_logit_normal()                                # 时间步(Logit-Normal)
    eps_v, eps_a = randn_like(z_fut), randn_like(a)
    V_fut_s = (1 - s) * eps_v + s * z_fut                    # 加噪未来视频
    A_s     = (1 - s) * eps_a + s * a                        # 加噪动作

    v_pred_video, v_pred_act = mot_forward(V_cur, V_fut_s, A_s, text_emb, s)

    target_video = z_fut - eps_v                             # 速度场目标 = 数据 - 噪声
    target_act   = a     - eps_a                             # (与 s 无关, 直线流常数导数)
    loss = mse(v_pred_act, target_act) + 1.0 * mse(v_pred_video, target_video)  # λ=1
    loss.backward(); optimizer.step()
    # L_video 跨流回流到 AE 的 K/V → 逼 AE 编码"对视频也有用"的世界动态 = 隐式先验


# ---------- 6. 推理: 只跑 AE 流, 不生成任何未来帧 ----------
def inference(current_frame, instruction, ego_state, N=10, cfg=1.0):
    V_cur = patchify(vae.encode(current_frame))              # 只编码当前帧
    text_emb = concat([text_encoder(instruction), ego_encoder(ego_state)])
    ctx_cur_kv = VGE.encode_current_and_cache_kv(V_cur)      # VGE 对当前帧跑一次, 缓存 K/V

    A = randn(H, action_dim)                                 # 纯噪声轨迹, s=0
    for i in range(N):                                       # 10 步 Euler
        s = i / N; t_emb = timestep_feature(s)
        h_a = AE.patch_embed(A)
        for blk_a in AE.blocks:                              # A 只 attend [V_cur, 自己], 无 V_fut
            h_a = ae_only_layer(h_a, ctx_cur_kv, t_emb, text_emb, blk_a)
        A = A + (1.0 / N) * AE.head(h_a)                     # x ← x + (1/N)·v
    return A
    # 训练时 A 从不 attend V_fut → 推理删掉整条视频分支, AE 输出逐位不变(非近似)
    # 相比带视频变体约 8× 加速(0.17s vs 1.38s, 论文 Tab.7)

六、实验:全面压测

6.1 配置速览

设置
模型 VGE = Wan2.2-5B;AE $d_a=1024$(~1B);总 ~6B
输入 前视单目摄像头;视频与动作 1:1 时间对齐
动作 horizon NAVSIMv2:8 步(4s@0.5s),$(x,y,\theta)$;CityWalker:5 步,$(x,y)$
分辨率 / epoch NAVSIMv2:640×768 / 60;CityWalker:384×384 / 30;batch 64
推理 10 步去噪,CFG=1.0
优化 AdamW(lr 1e-4,wd 0.01),cosine,混合精度,grad clip 1.0;8× H200

6.2 主结果

  • NAVSIM-v2 navhard(安全攸关闭环):EPDMS 32.2,Stage 1/Stage 2 双双第一,显著超过 LTF(24.4)、DiffusionDrive(27.5)等。相比 VLA 方法,Stage 2 的 DAC 至少高 7.9、DDC 至少高 2.5 → 世界建模在无显式地图监督下提供了更强的"环境约束"归纳偏置。
  • NAVSIM-v2 navtest(12,146 场景,测泛化):EPDMS 89.5(best-of-N=6 达 90.3,追平 Human Agent),且没用多阶段训练/强化学习/额外数据集,比先前 VLA 方法至少高 2.4。在 EP、LK、EC 上尤其亮眼。
  • CityWalker(城市导航):L2 误差和 MAOE 全面领先,Mean L2 0.71m、MAOE 11.8°;在 Turn / Detour / Crowd 等复杂场景优于大规模预训练的 ABot-N0。
  • 真机部署:Unitree Go2 四足机器人,室内白天 + 室外夜间零样本避障导航成功,验证泛化落地能力。

6.3 消融实验(最能说明设计价值)

① 注意力掩码(Table 4 / 8)——三种策略对比:

不对称掩码 > 孤立注意力 > 联合注意力,且困难场景差距更明显。

  • vs 联合注意力(完全耦合):联合方式推理时动作空间被生成噪声大量注入,DAC/EP 明显掉队 → 印证"解耦保护动作空间稳定性"。
  • vs 孤立注意力(完全解耦):孤立方式动作无法利用当前观测视觉上下文,虽 DAC/EP 相当但总分更低 → 印证"需要通过生成专家隐式优化动作专家"。
320×384 DAC(navtest) EP EPDMS(navtest) EPDMS(navhard)
Joint 95.7 81.6 87.4 28.0
Isolated 96.5 82.6 88.3 29.4
Ours 96.9 82.9 88.8 31.6

② 输入分辨率(Table 4):降到 320×384,navtest/navhard EPDMS 分别掉 0.7 / 0.6,DAC、LK 也降 → 高分辨率提供更丰富的空间几何线索。

③ 去噪步数(Table 5/12):1→10 步性能持续提升,困难场景增益更明显;但延迟也随之上升(H200 上 1 步 100ms → 10 步 430ms)。

④ VGE/AE 容量(Table 6/10):更强 VGE(Wan2.2-14B 蒸出的分支 vs Wan2.1-1.3B)在 navhard 上优势明显 → 更强世界模型隐式增强 AE 推理;固定 VGE 增大 AE(0.21B→1.04B)泛化持续提升。

⑤ 是否 co-train(Table 11):只训 AE 已经很强,但加上视频生成联合训练进一步把 PDMS/EPDMS 各提升一截 → 直接证明"不对称掩码让 AE 隐式学到世界动态"。

6.4 推理延迟(Table 7,单张 RTX 4090)

方法 PDMS EPDMS 延迟
Epona 86.2 85.1 0.32s
PWM 87.3 0.57s
PWM (w/ video) 88.1 0.83s
Metis (w/ video) 89.0 89.5 1.38s
Metis(仅动作) 88.9 89.2 0.17s

→ 相比自家带视频变体,约 8× 加速(1.38 / 0.17 ≈ 8.1),且精度几乎不降。


七、结论、局限与影响

结论:Metis 是基于 MoT 的端到端 WAM,靠不对称注意力掩码实现独特的**“联合训练、解耦推理”**范式——训练时联合优化视频生成与动作预测以捕捉世界动态,推理时无需生成显式未来观测即可高效规划。通过解耦低维动作空间与高维视觉生成,保住了动作模型的分布完整性和稳定性,泛化性与效率双双提升。

局限(论文 Appendix G):

  1. 极端 corner case 的可靠性仍需验证(世界建模天生依赖数据)。
  2. 严重依赖预训练 VGE;虽然推理时绕过视频生成,但训练时 VGE 的参与仍然算力密集
  3. VAE 下采样率显著影响"训练效率 vs 表示质量"的平衡。
  4. 仅单目输入 → 长时程规划可能有轻微偏移,多视角世界建模留作 future work。

广泛影响:正面看提升自动驾驶安全与决策效率;风险面是 OOD/corner case 下可能行为不可预测,并对职业司机就业和自动驾驶问责法律框架提出新挑战。


八、一张表看懂 Metis

对比维度 VLA 增强派 视频生成派 Metis
训练 视频 token 监督 紧耦合联合训练 联合训练(VGE+AE)
推理 先生成视频再动作 视频动作同时生成 仅 AE 推理(跳过视频)
延迟 ❌ 高(自回归视频) ⚠️ 中 ✅ 低(约 8× 加速)
泛化 ⚠️ 受 VLM 先验限制 ❌ 分布干扰 ✅ 解耦保稳
参数 不等 不等 ~6B(5B VGE + 1B AE)
基础 各类 VLM 各类视频模型 Wan2.2-5B + Flow Matching

核心记忆点:一条掩码约束 M[action, future_video] = -∞,前向阻断噪声污染、反向仍让世界动态跨流灌入动作专家的 K/V——性能与效率,一把钥匙同开两扇门。