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 属于第三派,核心贡献有三:
- 解耦的 WAM 框架:动作模型与视频模型分家,各自保持自己的分布结构,泛化更好。
- 不对称注意力掩码:强制视频与动作 token 之间"单向可见",实现"联合训练、解耦推理",训练推理保持一致。
- 全面 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:
- 当前观测的 latent token($V_{cur}$,$z_t$)
- 未来观测的加噪 token($V_{fut}$,$z_{t+1:t+N}$,仅训练存在)
- 动作的加噪 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/-1e9或torch.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):
- 极端 corner case 的可靠性仍需验证(世界建模天生依赖数据)。
- 严重依赖预训练 VGE;虽然推理时绕过视频生成,但训练时 VGE 的参与仍然算力密集。
- VAE 下采样率显著影响"训练效率 vs 表示质量"的平衡。
- 仅单目输入 → 长时程规划可能有轻微偏移,多视角世界建模留作 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——性能与效率,一把钥匙同开两扇门。