LaWAM 的核心思路可以用一句话概括:不再让世界模型生成未来视频,而是直接预测未来观测在视觉特征空间中的表示,再让动作专家在潜在视觉子目标基础上生成动作。

  • 未来预测:LaWM 不重建 RGB 图像,只用一次前向计算预测未来 DINO 特征,减少了像素生成的冗余和迭代耗时。
  • 动作生成:VLM 先预测潜在动作,LaWM 将潜在动作展开成带空间结构的未来视觉特征,Alternate-DiT 动作专家再结合任务语义与未来变化生成连续动作块。
  • 训练方式:先训练潜在动作模型并保留其前向解码器作为 LaWM,再通过潜在动作蒸馏、未来特征监督和流匹配训练完整 LaWAM。
  • 实际效果:论文报告 LaWAM 在 LIBERO、RoboTwin 和真机任务上的平均成功率分别达到 98.6%、91.22% 和 90.0%,单次动作块推理耗时为 187 ms,相比像素空间 WAM 最多降低 24 倍延迟。

论文地址:LaWAM: Latent World Action Models for Efficient Dynamics-Aware Robot Policies

项目主页:https://rlinf.github.io/LaWAM/

开源地址:https://github.com/RLinf/LaWAM

模型与数据:Hugging Face Collection


1、模型架构

如下图所示,LaWAM 不是简单地在 VLA 旁边挂一个世界模型,而是把世界模型预测的未来视觉特征直接接入动作生成链路。

在这里插入图片描述

整个方法分为两个阶段:

  1. Stage 1:训练 LaWM。给模型当前帧与未来帧,让逆动力学模型从视觉变化中提取潜在动作,再用当前视觉特征和潜在动作预测未来视觉特征。
  2. Stage 2:训练 LaWAM。部署时看不到未来帧,因此改由 VLM 根据当前观测与语言指令预测潜在动作;LaWM 将其解码为未来视觉子目标,动作专家再生成可执行动作块。

1.1、LaWAM、LaWM 和 LAM 的关系

这三个名字容易混淆,可以先把边界说明白。

名称 完整含义 输入 输出 训练/推理中的作用
LAM Latent Action Model 当前与未来视觉特征 潜在动作 + 重建的未来特征 Stage 1 的训练框架
IDM Inverse Dynamics Model 当前与未来视觉特征 潜在动作 z z z 只在训练时提供教师潜在动作
LaWM Latent World Model 当前视觉特征 u u u + 潜在动作 z z z 未来视觉特征 u ~ T \tilde{u}_T u~T LAM 的前向解码器,训练和推理都使用
LaWAM Latent World Action Model 当前观测 + 语言指令 连续动作块 完整的世界动作模型

因此,LaWAM 不是“GR00T + LaWM”的简单拼接。论文说它 follows the Qwen-GR00T architecture,意思是借鉴 Qwen-GR00T 的 VLM 与 Alternate-DiT 动作专家设计;当前开源实现实际使用的是 Qwen3-VL-2B-Instruct + LaWM + Conditional Flow Matching Action Expert

1.2、LaWAM 为什么不生成未来视频

像素空间 WAM 的思路很直接:先生成未来图像或视频,再根据预测结果输出动作。但机器人控制并不一定需要知道未来画面中的每个纹理和光照细节,它更关心:

  • 机械臂将移动到哪里;
  • 物体的位置会如何变化;
  • 抽屉是否被拉开;
  • 毛巾是否朝正确方向折叠。

如果为了这些变化完整生成 RGB 视频,模型会把大量算力花在背景、纹理和光照上,还要承受多步扩散带来的延迟。LaWAM 的做法是把未来状态放到 DINOv3 的特征空间中表示:保留空间结构和语义变化,但不恢复像素。

在这里插入图片描述

论文中 LaWM 只有 230M 参数,完整 LaWAM 为 2.3B;单次动作块预测耗时 187 ms。作为对比,LingBot-VA 在相同统计口径下为 4482 ms。速度提升并不是来自“少做几步视频生成”,而是彻底取消测试时的视频生成,每个动作块只预测一个潜在视觉子目标。

1.3、输入组件

LaWAM 推理时的核心输入包括:

  • 主视角图像:当前时刻的 RGB 观测;
  • 其他视角图像:可选的辅助相机观测;
  • 语言指令:如 “fold the towel”;
  • 潜在动作查询 token:从 VLM 隐藏状态中聚合出潜在动作;
  • 动作查询 token + 高斯噪声:供流匹配动作专家生成连续动作块。

论文实验使用 RGB-only 输入,图像统一缩放到 256 × 256 256\times256 256×256。附录还特别说明,策略训练和评估时没有给动作专家提供本体状态输入,以减少对训练轨迹状态序列的过拟合。源码中虽然保留了 statestate_mask 字段,但 LIBERO、RoboTwin 配置均设置 flow_cfg.use_state: false,与论文描述一致。

1.4、核心模块

  • DINOv3 ViT-B/16:冻结的视觉基础模型,将图像转换为 16 × 16 16\times16 16×16 的空间特征 token。
  • 潜在动作 IDM:根据当前与未来视觉变化提取连续潜在动作 z z z
  • LaWM:根据当前视觉特征和 z z z 预测未来视觉特征。
  • Qwen3-VL:理解图像与语言,并在部署时预测潜在动作 z ^ \hat z z^
  • Alternate-DiT 动作专家:在语义上下文和视觉动力学上下文之间交替注意,通过流匹配生成连续动作块。

1.5、推理流程

LaWAM 推理可以拆成四步:

  1. DINOv3 将当前图像编码为当前视觉特征 u u u
  2. Qwen3-VL 根据当前观测和语言指令预测潜在动作 z ^ \hat z z^
  3. LaWM 一次前向计算得到未来视觉子目标 u ^ T = L a W M ( u , z ^ ) \hat u_T=\mathrm{LaWM}(u,\hat z) u^T=LaWM(u,z^)
  4. Alternate-DiT 同时读取当前特征 u u u、未来子目标 u ^ T \hat u_T u^T 和 VLM 语义特征,通过 10 步流匹配生成动作块 a 1 : T a_{1:T} a1:T

它对应的概率分解为:

p ( a 1 : T , u ^ T , z ^ ∣ o , l ) ⏟ L a W A M = p θ ( z ^ ∣ o , l ) ⏟ Policy Prior p ω ( u ^ T ∣ u , z ^ ) ⏟ LaWM p η ( a 1 : T ∣ o , l , u , u ^ T ) ⏟ Action Expert . \underbrace{p(a_{1:T},\hat{u}_T,\hat{z}\mid o,l)}_{\mathrm{LaWAM}} =\underbrace{p_\theta(\hat{z}\mid o,l)}_{\text{Policy Prior}} \underbrace{p_\omega(\hat{u}_T\mid u,\hat{z})}_{\text{LaWM}} \underbrace{p_\eta(a_{1:T}\mid o,l,u,\hat{u}_T)}_{\text{Action Expert}}. LaWAM p(a1:T,u^T,z^o,l)=Policy Prior pθ(z^o,l)LaWM pω(u^Tu,z^)Action Expert pη(a1:To,l,u,u^T).

这个公式表达的不是三个独立模型随意串联,而是一条明确的信息链:任务意图先变成潜在动作,潜在动作再变成具备空间结构的未来状态,最后未来状态约束真实动作。

公式中各变量的含义如下:

符号 含义 数据形态/来源
o o o 当前时刻的视觉观测 一张或多张 RGB 图像
l l l 当前任务的语言指令 例如 “fold the towel”
a 1 : T a_{1:T} a1:T 从当前时刻开始、长度为 T T T 的连续动作块 末端位姿增量、旋转量、夹爪状态等
T T T 一个动作块包含的离散动作步数 会随控制频率变化
u = f ψ ( o ) u=f_\psi(o) u=fψ(o) 当前观测经过冻结视觉编码器得到的视觉特征 带空间结构的 DINO patch token
z ^ \hat z z^ 策略根据当前观测和指令预测的潜在动作 推理时由 VLM 的 latent-action query 产生
u ^ T \hat u_T u^T LaWM 预测的未来视觉特征,即潜在视觉子目标 不是 RGB 图像,而是未来 DINO 特征
p θ p_\theta pθ 策略先验(Policy Prior) 参数 θ \theta θ 主要对应 VLM 与潜在动作映射模块
p ω p_\omega pω 潜在世界模型 LaWM 参数 ω \omega ω 对应 LAM 的 forward decoder
p η p_\eta pη 动作专家的条件动作分布 参数 η \eta η 对应 Alternate-DiT 与动作头
⋅ ^ \hat{\cdot} ^ 模型预测值 z ^ \hat z z^ u ^ T \hat u_T u^T

其中 p ( a 1 : T , u ^ T , z ^ ∣ o , l ) p(a_{1:T},\hat u_T,\hat z\mid o,l) p(a1:T,u^T,z^o,l) 表示:给定当前观测 o o o 和指令 l l l,模型同时产生潜在动作、未来视觉子目标和真实动作块的联合分布。公式右侧把这件事拆成“预测潜在动作 → 预测未来特征 → 生成机器人动作”三步。


2、Stage 1:潜在世界模型 LaWM

2.1、核心目标

Stage 1 不使用语言,也不需要人工动作标签。训练样本只需提供相隔固定物理时间 τ \tau τ 的当前观测 o o o 与未来观测 o T o_T oT

冻结视觉编码器 f ψ f_\psi fψ 后,有:

u = f ψ ( o ) , u T = f ψ ( o T ) . u=f_\psi(o),\qquad u_T=f_\psi(o_T). u=fψ(o),uT=fψ(oT).

逆动力学模型根据这对特征推断潜在动作,LaWM 再根据当前特征和潜在动作恢复未来特征:

z ∼ q ϕ ( z ∣ u , u T ) , u ~ T = L a W M ω ( u , z ) . z\sim q_\phi(z\mid u,u_T),\qquad \tilde{u}_T=\mathrm{LaWM}_\omega(u,z). zqϕ(zu,uT),u~T=LaWMω(u,z).

符号 含义
f ψ f_\psi fψ 冻结的视觉基础模型,论文中使用 DINOv3; ψ \psi ψ 表示其参数
u u u 当前观测 o o o 的视觉特征
u T u_T uT 真实未来观测 o T o_T oT 的视觉特征,也是 LaWM 的监督目标
q ϕ ( z ∣ u , u T ) q_\phi(z\mid u,u_T) qϕ(zu,uT) IDM 定义的潜在动作后验分布; ϕ \phi ϕ 是逆动力学编码器参数
z z z 从真实视觉转移 ( u , u T ) (u,u_T) (u,uT) 中提取的潜在动作
u ~ T \tilde u_T u~T Stage 1 中 LaWM 根据真实教师潜在动作 z z z 重建的未来特征
L a W M ω \mathrm{LaWM}_\omega LaWMω 参数为 ω \omega ω 的潜在世界模型,即 LAM 的前向解码器
τ \tau τ 当前观测与未来观测之间固定的真实时间间隔

这里需要区分 u T u_T uT u ~ T \tilde u_T u~T 和后文的 u ^ T \hat u_T u^T u T u_T uT 是真实未来特征; u ~ T \tilde u_T u~T 是 Stage 1 使用 IDM 潜在动作重建的结果; u ^ T \hat u_T u^T 是 Stage 2 使用 VLM 预测潜在动作得到的结果。

这里的 z z z 不是机器人的关节角、末端位姿或夹爪开合量,而是一段视觉转移的紧凑表示。例如“机械臂从桌面左侧移动到杯子上方”在不同机器人、不同背景中可以对应相近的潜在动作,但 LaWM 会结合当前场景,将它展开成不同本体下的未来视觉特征。

2.2、逆动力学模型与 LaWM

论文采用连续潜在动作。逆动力学编码器把当前与未来 DINO patch 展平成时空 token 序列,联合编码后输出潜在动作后验。LaWM 则以当前特征为主体,通过 AdaLN 将潜在动作注入每个 Transformer block,预测未来特征。

作者没有采用简单的加法注入,原因是潜在动作的范数波动可能整体平移视觉 token,造成尖锐的 loss spike。AdaLN 将潜在动作转换成注意力层和 MLP 层的 shift、scale 与 gate,训练会更稳定。

2.3、辅助状态预测

只根据视觉变化学习 z z z,模型可能把背景变化或外观差异也编码进去。论文增加了一个轻量状态预测头:给定当前末端状态 s s s 与潜在动作 z z z,预测未来状态 s T s_T sT

L a u x = ∥ g ( s , z ) − s T ∥ 2 2 . \mathcal{L}_{\mathrm{aux}}=\left\|g(s,z)-s_T\right\|_2^2. Laux=g(s,z)sT22.

其中, s s s 是当前机器人状态, s T s_T sT 是经过物理时间 τ \tau τ 后的真实机器人状态, g g g 是轻量状态预测器, g ( s , z ) g(s,z) g(s,z) 是预测的未来状态, ∥ ⋅ ∥ 2 2 \|\cdot\|_2^2 22 表示 L2 误差。论文主要使用末端执行器状态构造该辅助监督。

这个辅助头的作用是让 z z z 更关注真实的具身运动,而不是只解释画面变化。它只服务于 Stage 1,训练结束后会被丢弃,不进入 LaWAM 推理路径。

2.4、LaWM 训练损失

完整目标为:

L L A M = ∥ u ~ T − u T ∥ 2 2 ⏟ L w m + ∥ g ( s , z ) − s T ∥ 2 2 ⏟ L a u x + β D K L ( q ϕ ( z ∣ u , u T )   ∥   N ( 0 , I ) ) . \mathcal{L}_{\mathrm{LAM}} =\underbrace{\left\|\tilde{u}_T-u_T\right\|_2^2}_{\mathcal{L}_{\mathrm{wm}}} +\underbrace{\left\|g(s,z)-s_T\right\|_2^2}_{\mathcal{L}_{\mathrm{aux}}} +\beta D_{\mathrm{KL}}\left(q_\phi(z\mid u,u_T)\,\|\,\mathcal{N}(0,I)\right). LLAM=Lwm u~TuT22+Laux g(s,z)sT22+βDKL(qϕ(zu,uT)N(0,I)).

符号 含义
L L A M \mathcal L_{\mathrm{LAM}} LLAM Stage 1 训练 LAM/LaWM 的总损失
L w m \mathcal L_{\mathrm{wm}} Lwm 未来视觉特征预测损失,即 u ~ T \tilde u_T u~T u T u_T uT 的距离
L a u x \mathcal L_{\mathrm{aux}} Laux 机器人未来状态辅助预测损失
D K L ( ⋅ ∣ ⋅ ) D_{\mathrm{KL}}(\cdot|\cdot) DKL() KL 散度,用于约束潜在动作后验分布
N ( 0 , I ) \mathcal N(0,I) N(0,I) 均值为 0、协方差为单位矩阵 I I I 的标准高斯先验
β \beta β KL 正则项权重;论文训练中设置为 10 − 5 10^{-5} 105
I I I 单位矩阵,维度与潜在动作 z z z 一致

三个损失分别解决三个问题:

  • 未来特征重建:让 LaWM 真正预测场景演化;
  • 状态辅助监督:让潜在动作具有物理运动含义;
  • KL 正则:约束潜在动作分布,降低 Stage 2 中策略先验学习 z z z 的难度。

论文使用约 3000 小时机器人视频和 1500 小时第一人称人类视频训练 LaWM。人类视频没有机器人动作标签也没关系,因为 Stage 1 本身就是从视觉转移中自监督学习动力学;对于没有有效机器人状态的样本,源码会跳过辅助状态损失。

2.5、跨本体潜在动作

如下图所示,作者先从源视频中提取一串潜在动作,再把同样的潜在动作作用到不同环境、不同机器人本体的初始特征上。LaWM 会生成符合当前场景的特征变化,而不是机械复制源视频外观。

在这里插入图片描述

这说明潜在动作和未来视觉子目标承担了不同职责:

  • 潜在动作 z z z 表达“发生什么变化”,更偏跨本体;
  • LaWM 输出的 u ~ T \tilde{u}_T u~T 表达“这个变化在当前本体和场景里长什么样”,带有具体空间结构。

这也是 LaWAM 不直接把潜在动作 token 当成唯一动作条件的原因。紧凑的 z z z 便于迁移,但真正指导控制时,展开后的视觉子目标更明确。


3、Stage 2:潜在世界动作模型 LaWAM

3.1、核心目标

Stage 1 的 IDM 需要同时看到当前帧和未来帧,因此部署时不能使用。Stage 2 的关键任务是让 VLM 在没有未来帧的情况下,仅根据当前观测与语言指令预测潜在动作:

z ^ ∼ p θ ( z ^ ∣ o , l ) . \hat z\sim p_\theta(\hat z\mid o,l). z^pθ(z^o,l).

然后用训练好的 LaWM 计算:

u ^ T = L a W M ( u , z ^ ) . \hat u_T=\mathrm{LaWM}(u,\hat z). u^T=LaWM(u,z^).

这里的 z ^ \hat z z^ 与 Stage 1 的 z z z 不同: z z z 由 IDM 看过真实未来帧后得到,是教师信号; z ^ \hat z z^ 由 VLM 只根据当前观测 o o o 与语言指令 l l l 预测,是部署时真正使用的潜在动作。 u ^ T \hat u_T u^T 则是 z ^ \hat z z^ 经过 LaWM 后得到的预测未来视觉特征。

这里的 u ^ T \hat u_T u^T 就是论文反复强调的 latent visual subgoal,潜在视觉子目标

3.2、潜在动作蒸馏

VLM 如何知道应该输出什么潜在动作?答案是让 Stage 1 的 IDM 当教师。

  • 教师 IDM 看到 ( o , o T ) (o,o_T) (o,oT),输出教师潜在动作 z z z
  • 学生 VLM 只看到 ( o , l ) (o,l) (o,l),输出预测潜在动作 z ^ \hat z z^
  • 通过均方误差让 z ^ \hat z z^ 对齐 z z z

L d i s t i l l = E [ ∥ z ^ − z ∥ 2 2 ] . \mathcal{L}_{\mathrm{distill}}=\mathbb{E}\left[\left\|\hat z-z\right\|_2^2\right]. Ldistill=E[z^z22].

其中, z z z 是 IDM 输出的教师潜在动作, z ^ \hat z z^ 是 VLM 输出的学生潜在动作, E [ ⋅ ] \mathbb E[\cdot] E[] 表示对训练样本取期望或批次平均。该损失越小,说明 VLM 越能在看不到未来帧时复现 IDM 提取出的视觉转移编码。

蒸馏解决的是“VLM 会不会正确驱动 LaWM”的问题。如果 z ^ \hat z z^ 偏离 LAM 学到的潜在空间,即使 LaWM 本身很强,也会预测出错误的未来子目标。

3.3、未来视觉子目标监督

仅对齐潜在动作还不够,作者还直接监督 LaWM 输出的未来特征:

L w m = ∥ u ^ T − u T ∥ 2 2 . \mathcal{L}_{\mathrm{wm}}=\left\|\hat u_T-u_T\right\|_2^2. Lwm=u^TuT22.

其中, u ^ T \hat u_T u^T 是“VLM 预测 z ^ \hat z z^ → LaWM 解码”得到的未来视觉子目标, u T = f ψ ( o T ) u_T=f_\psi(o_T) uT=fψ(oT) 是真实未来观测的 DINO 特征。该损失在源码中名为 loss_perceptual,本质上是未来特征 MSE。

它要求 VLM 预测的 z ^ \hat z z^ 经过 LaWM 后,确实能落到真实的未来视觉特征附近。前一个损失对齐“原因”,这个损失对齐“结果”。

3.4、Alternate-DiT 动作专家

动作专家同时面对两类信息:

  • 语义流:VLM 的完整隐藏状态,包含当前图像、语言指令和其他视角信息;
  • 动力学流:当前 DINO 特征 u u u 与 LaWM 预测的未来特征 u ^ T \hat u_T u^T

Alternate-DiT 的交叉注意力层在两类上下文之间交替读取,中间穿插动作 token 的自注意力。这样做的直观含义是:动作生成既要知道“任务要求做什么”,也要知道“场景接下来应该变成什么样”。

在这里插入图片描述

上图中,同一个动作块执行期间只预测一次子目标。随着动作逐步执行,机械臂热力图不断靠近子目标区域。LaWM 并不替代动作专家做低层控制,而是给动作专家提供一个短时、可追踪的未来状态。

3.5、动作流匹配

动作专家从高斯噪声 x 0 x_0 x0 出发,通过 10 步向量场积分得到连续动作块。训练时,在干净动作 a a a 与噪声 ϵ \epsilon ϵ 之间采样中间状态:

x t = t   a + ( 1 − t ) ϵ , x_t=t\,a+(1-t)\epsilon, xt=ta+(1t)ϵ,

符号 含义
a a a 数据集中的干净专家动作块,即流匹配的目标样本
ϵ \epsilon ϵ 与动作块同形状的标准高斯噪声
t t t 流匹配时间变量,取值范围为 [ 0 , 1 ] [0,1] [0,1];它不是机器人真实时间
x t x_t xt 在噪声与真实动作之间插值得到的带噪动作
1 − t 1-t 1t 噪声在当前插值时刻所占的权重

t = 0 t=0 t=0 时, x t = ϵ x_t=\epsilon xt=ϵ,输入完全是噪声;当 t = 1 t=1 t=1 时, x t = a x_t=a xt=a,输入到达真实动作。动作专家学习从 x t x_t xt 指向干净动作的速度场。这里的 t t t 是生成模型内部的去噪进度,不能与后文表示现实秒数的 t b , i t_{b,i} tb,i 混淆。

模型学习预测对应速度场。源码最终使用逐元素 MSE,并通过 actions_mask 屏蔽不同控制频率下的 padding token。

3.6、Knowledge Insulation

如果动作损失直接反向传播进 LaWM,世界模型可能为了让当前 benchmark 的动作更容易拟合,逐渐破坏预训练得到的跨本体动力学。论文将这个问题称为“动作专家覆盖世界模型知识”。

Knowledge Insulation(KI)的核心是隔离动作专家梯度:LaWM 仍由未来特征监督更新,但动作流匹配损失不直接改写 LaWM。开源配置中对应的关键设置是:

detach_future_feature: true
unfreeze_lam_decoder: true

前者把送入 flow head 的未来特征与 LaWM 梯度断开,后者允许 LaWM 解码器继续接受自身的未来特征损失监督。

3.7、Stage 2 联合损失

完整损失为:

L L a W A M = λ d i s t i l l L d i s t i l l + λ w m L w m + L a c t . \mathcal{L}_{\mathrm{LaWAM}} =\lambda_{\mathrm{distill}}\mathcal{L}_{\mathrm{distill}} +\lambda_{\mathrm{wm}}\mathcal{L}_{\mathrm{wm}} +\mathcal{L}_{\mathrm{act}}. LLaWAM=λdistillLdistill+λwmLwm+Lact.

符号 含义
L L a W A M \mathcal L_{\mathrm{LaWAM}} LLaWAM Stage 2 的总训练损失
L d i s t i l l \mathcal L_{\mathrm{distill}} Ldistill 潜在动作蒸馏损失,使 z ^ \hat z z^ 对齐教师 z z z
L w m \mathcal L_{\mathrm{wm}} Lwm 未来视觉子目标损失,使 u ^ T \hat u_T u^T 对齐真实 u T u_T uT
L a c t \mathcal L_{\mathrm{act}} Lact 条件流匹配动作损失,训练动作专家
λ d i s t i l l \lambda_{\mathrm{distill}} λdistill 潜在动作蒸馏损失权重
λ w m \lambda_{\mathrm{wm}} λwm 未来特征预测损失权重

论文和当前 release 配置中两个 λ \lambda λ 都取 0.1;动作损失前没有额外系数,相当于权重为 1。

当前开源 LIBERO 和 RoboTwin 配置对应:

loss_total = (
    loss_flow
    + 0.1 * loss_perceptual
    + 0.1 * loss_distill
)

其中:

  • loss_flow 对应 L a c t \mathcal{L}_{\mathrm{act}} Lact
  • loss_perceptual 对应预测未来特征与真实未来特征的 MSE;
  • loss_distill 对应 VLM 潜在动作与 IDM 教师潜在动作的 MSE。

4、物理时间对齐:不同频率的数据如何一起训练

4.1、问题来源

如果不同机器人分别以 5 Hz、10 Hz 和 20 Hz 采集动作,“第 5 个动作 token”对应的真实时间并不相同。直接使用 token 位置编码,模型会混淆动作索引和物理时间。

LaWAM 先定义固定的真实时间范围 τ \tau τ。对于控制频率为 h b h_b hb 的本体分支,动作块长度为:

H b = round ⁡ ( τ h b ) . H_b=\operatorname{round}(\tau h_b). Hb=round(τhb).

其中, b b b 表示某个数据集或机器人本体分支, h b h_b hb 是该分支的原生控制频率,单位为 Hz; τ \tau τ 是一个动作块覆盖的固定物理时长,单位为秒; H b H_b Hb 是该分支在时长 τ \tau τ 内应包含的动作 token 数; round ⁡ \operatorname{round} round 表示四舍五入取整。

例如,同样预测未来 1.2 秒,20 Hz 数据需要 24 个动作,5 Hz 数据只需要 6 个动作,但二者都对应同一个物理时间终点。

4.2、物理时间位置编码

i i i 个动作 token 的时间坐标不再直接使用 i i i,而是:

t b , i = i h b . t_{b,i}=\frac{i}{h_b}. tb,i=hbi.

其中, i i i 是动作 token 在动作块内的序号, h b h_b hb 是本体分支 b b b 的控制频率, t b , i t_{b,i} tb,i 是该 token 对应的真实经过时间,单位为秒。例如在 20 Hz 数据中, i = 4 i=4 i=4 对应 0.2 秒;在 5 Hz 数据中,同样的 i = 4 i=4 i=4 对应 0.8 秒。

论文随后使用正弦函数构造物理时间编码:

ϕ ( t b , i ) = Concat ⁡ k = 0 K − 1 [ sin ⁡ ( t b , i ω k ) , cos ⁡ ( t b , i ω k ) ] . \phi(t_{b,i})=\operatorname{Concat}_{k=0}^{K-1} \left[\sin(t_{b,i}\omega_k),\cos(t_{b,i}\omega_k)\right]. ϕ(tb,i)=Concatk=0K1[sin(tb,iωk),cos(tb,iωk)].

符号 含义
ϕ ( t b , i ) \phi(t_{b,i}) ϕ(tb,i) i i i 个动作 token 的物理时间位置编码
Concat ⁡ \operatorname{Concat} Concat 将不同频率下的正弦与余弦值拼接成向量
k k k 正弦/余弦频率分量索引
K K K 使用的频率分量数量,通常由动作隐藏维度决定
ω k \omega_k ωk k k k 个频率基函数的角频率

这样,不同数据源中对应相同真实时间的动作 token 会得到相近的位置编码,而不是因为 token 下标相同就被误认为处在同一时刻。

再对 t b , i t_{b,i} tb,i 做正弦位置编码,加入动作 token。源码中的 build_time_grid() 会根据 horizon_sec 和每个样本的 action_hz 构造时间网格,并在训练和推理时统一使用。

在这里插入图片描述

图中将同一套 LIBERO 轨迹下采样成 5/10/20 Hz。没有物理时间编码时,Long 和 Goal 任务下降明显;加入编码后,性能接近原生 20 Hz 训练上界。


5、训练流与推理流

5.1、完整训练流

第一阶段:LaWM 预训练

  1. 从视频中采样相隔固定物理时间的当前帧与未来帧;
  2. DINOv3 提取当前和未来 patch 特征;
  3. IDM 从特征变化中推断潜在动作 z z z
  4. LaWM 根据当前特征和 z z z 预测未来特征;
  5. 联合优化未来特征重建、状态辅助预测和 KL 正则;
  6. 训练结束后保留 IDM 作为 Stage 2 教师,保留前向解码器作为 LaWM。

第二阶段:LaWAM 策略集成预训练

  1. VLM 根据当前观测和语言指令预测 z ^ \hat z z^
  2. IDM 根据真实视觉转移输出教师 z z z,监督潜在动作蒸馏;
  3. LaWM 将 z ^ \hat z z^ 解码成 u ^ T \hat u_T u^T,真实未来特征 u T u_T uT 监督子目标预测;
  4. Alternate-DiT 读取语义流与动力学流,预测动作流匹配向量场;
  5. 通过 KI 隔离动作损失对 LaWM 的直接梯度影响。

第三阶段:Benchmark SFT

  • LIBERO:训练 25k steps,论文统计 40 个任务、2000 次评估;
  • RoboTwin:训练 100k steps,论文使用 2500 条干净场景演示和 25000 条重随机化演示;
  • 真机:Franka 的两个任务各 150 条演示,双臂毛巾折叠使用 280 条演示。

5.2、完整推理流

推理时不再使用真实未来帧,也不再调用 IDM:

当前 RGB + 语言指令
        ↓
Qwen3-VL 预测潜在动作 z_hat
        ↓
LaWM 一次前向预测未来视觉子目标 u_T_hat
        ↓
Alternate-DiT 结合语义上下文和未来子目标
        ↓
10 步流匹配生成连续动作块
        ↓
执行动作块,获取新观测,再闭环规划

5.3、用“折叠毛巾”理解推理过程

假设当前指令是“fold the towel”:

  1. VLM 看到毛巾当前形态和机械臂位置,预测一个表示“抓住长边并向内折”的潜在动作;
  2. LaWM 将它展开为未来 DINO 特征,特征中保留机械臂目标区域和毛巾大致变化方向;
  3. 动作专家读取语言语义,知道总体任务仍是折叠毛巾;同时读取未来子目标,知道当前动作块应该靠近哪一侧、朝哪个方向运动;
  4. 流匹配生成一段双臂连续动作;
  5. 执行后重新观察,再预测下一个子目标,直至完成两次长边折叠和一次短边折叠。

这不是在潜在空间里一次规划完整的 70 秒动作,而是用短时视觉子目标做闭环动作块控制


6、源码解析

以下源码解析基于开源仓库 RLinf/LaWAM 的 main 分支,检查版本为 commit 4ea6fda(2026-08-05)。

6.1、项目目录

LaWAM/
├── latent_action_model/          # Stage 1:LAM / LaWM
│   ├── core/lam_model.py         # LatentLAMModel,总体前向流程
│   ├── core/lam_lightinng.py     # Stage 1 损失与 Lightning 训练
│   ├── core/utils/lam_encoder.py # 逆动力学编码器
│   ├── core/utils/lam_decoder.py # LaWM 解码器与状态预测头
│   └── config/                   # DINO base / large 配置
├── starVLA/
│   ├── model/framework/vlas/lawam.py
│   │                              # Stage 2 主模型、蒸馏、子目标与总损失
│   ├── model/framework/vlas/flowmatching_expert.py
│   │                              # 动作流匹配训练与采样
│   ├── model/framework/vlas/cross_attention_dit.py
│   │                              # AlternateVLDiT
│   ├── model/framework/latent_world/runtime/freeze_policy.py
│   │                              # LaWM 冻结与 KI 相关策略
│   └── config/training/          # LIBERO / RoboTwin SFT 配置
├── examples/LIBERO/              # LIBERO 评估脚本
├── examples/Robotwin/            # RoboTwin 评估脚本
└── deployment/                   # 真机与仿真策略服务

6.2、Stage 1 在代码中如何实现

入口类是 latent_action_model/core/lam_model.py 中的 LatentLAMModel

核心 _run() 流程可以简化为:

features = vision_encoder.encode(current_and_future_images)

enc_in = features[:, :T]      # IDM 输入:当前/未来视觉转移
dec_in = features[:, T:T+1]   # LaWM 输入:当前视觉特征
tgt = features[:, -1:]        # 监督目标:未来视觉特征

nodes = encoder(enc_in, states, embodiment_id)
quantized = vae_or_vq(nodes)

recon = decoder(features=dec_in, actions=quantized)
s_pred = state_decoder(z_t=quantized, state_0=current_state)

几个关键点:

  • vision_encoder 默认加载 DINOv3,并在视觉特征空间训练;
  • 当前 release 使用 vq_type: vae,所以论文中的连续潜在动作对应 VAE 量化器分支,而不是离散 codebook token;
  • LAMDecoder_v2 使用 AdaLNBlock,潜在动作生成每层的 shift、scale 和 gate;
  • StatePredictor 使用按 embodiment 分类的 MLP,处理不同机器人的状态语义差异;
  • 人类视频对应无效/零状态 mask,只参与未来特征学习,不参与机器人状态辅助损失。

lam_lightinng.py_compute_step() 对未来特征计算重建损失,并在存在有效机器人样本时增加末端状态辅助损失。release 的 large 配置使用 smooth_l1 重建损失,论文公式为便于表达写成 L2;两者属于论文描述与工程配置的实现差异。

6.3、Stage 2 如何预测潜在动作

starVLA/model/framework/vlas/lawam.py 中,VLM 序列会插入潜在动作占位 token。模型取出这些位置的隐藏状态,再通过轻量 Q-Former 聚合成一个潜在动作:

h_act = hidden[act_placeholder_mask]
pred_latent = self.vlm_to_lam(h_act.view(batch_size, num_queries, -1))

训练时,_run_lam_teacher() 调用 Stage 1 的 get_latent_action(),从真实视觉转移提取教师潜在动作,并明确 detach(),教师分支不参与反向传播:

teacher_latent = self.lam.get_latent_action(...)["quantized"].detach()
loss_distill = mse_loss(pred_latent, teacher_latent)

6.4、LaWM 如何变成未来视觉子目标

当前图像先通过 LaWM 使用的 DINO 编码器得到 h t h_t ht,预测潜在动作送入解码器:

h_t1_pred = self.lam.decoder(h_t, pred_action_emb)
loss_perceptual = F.mse_loss(h_t1_pred, h_t1_gt)

这几行正是论文中“policy prior → LaWM → latent visual subgoal”的代码落点。

需要注意,h_t1_pred 不是一张图,也不是单个全局 token。对于 256 × 256 256\times256 256×256 输入和 ViT-B/16,它保留 16 × 16 = 256 16\times16=256 16×16=256 个空间 token,因此动作专家仍能判断未来变化发生在哪个区域。

6.5、Alternate-DiT 如何融合两类上下文

flowmatching_expert.py 将编码器上下文拼接为:

encoder_hidden_states = torch.cat((h_t, h_t1_star, cond_vlm), dim=1)

然后构建两张 mask:

  • image_mask 只选中当前视觉与未来视觉子目标;
  • vlm_mask 只选中 VLM 语义 token。

AlternateVLDiT.forward() 中,偶数交叉注意力层在 VLM token 和 image token 之间切换,奇数层进行动作 token 自注意力。它不是简单把所有 token 一次拼接后交给普通 Transformer,而是显式控制动作专家在何时读取语义、何时读取动力学。

6.6、源码中的训练损失

LatentWorldPolicyBackend.forward() 对应 Stage 2 的完整训练:

loss_distill = self._compute_distill_loss(...)
loss_perceptual = F.mse_loss(h_t1_pred, h_t1_gt)
loss_flow = self.flow(...)

loss_total = (
    loss_flow
    + perceptual_weight * loss_perceptual
    + lam_encoder_distill_weight * loss_distill
)

LIBERO 与 RoboTwin release 配置均设置:

perceptual_weight: 0.1
enable_loss_distill: true
lam_encoder_distill_weight: 0.1
repeated_diffusion_steps: 2
num_inference_steps: 10
use_alternate_vldit: true

repeated_diffusion_steps: 2 表示同一批动作重复采样两组流匹配噪声,提高每批数据对随机时间步和噪声的覆盖率;它不代表推理只做两步。推理仍由 num_inference_steps: 10 控制。

6.7、源码中的物理时间对齐

LIBERO 配置使用:

horizon_sec: 0.4
action_horizon: 50

RoboTwin 配置使用:

horizon_sec: 1.2
action_horizon: 50

推理时源码根据每个样本的 action_hz 计算有效动作长度:

n_from_hz = floor(horizon_sec * action_hz)

再用时间 mask 屏蔽其余位置,并通过 time_encoder(t_grid) 生成真实时间坐标的动作位置编码。这样同一模型可以处理不同控制频率,同时保持未来视觉子目标对应相同的物理时间范围。

6.8、论文与当前 release 配置的差异

复现时需要注意以下几点:

项目 论文描述 当前开源 release 配置
LaWM 编码器/解码器深度 附录写 24 层 / 24 层 dino_large_vae.yaml 为 24 层 / 12 层
LaWM 特征损失 公式写 L2 large 配置使用 smooth_l1
潜在动作形式 连续 latent action vq_type: vae,与连续表示一致
Stage 2 世界模型损失名 L w m \mathcal{L}_{wm} Lwm 代码名为 loss_perceptual,实际是未来特征 MSE
动作专家状态输入 论文实验不使用 proprioception 配置 flow_cfg.use_state: false

这些差异不改变方法主线,但说明论文公式是方法层的抽象,复现应以 release checkpoint 对应的 YAML 为准。尤其是网络深度,不能仅按附录文字手动重建后直接加载当前开源权重。

6.9、推理代码路径

predict_action() 的执行顺序与论文推理流完全对应:

shared = self._run_shared_encoding_infer(...)
# shared 中包含 h_t、pred_action_emb、h_t1_pred、h_vlm

actions = self.flow.sample_actions_cfg(
    h_t=shared.h_t,
    h_t1_star=shared.h_t1_pred,
    h_vlm=shared.h_vlm,
    num_inference_steps=10,
)

sample_actions_cfg() 从高斯噪声初始化动作,在每个时间步调用 Alternate-DiT 预测速度,再用 Euler 更新动作。整个过程中 LaWM 只调用一次,不会反复生成未来状态。

6.10、开源复现入口

官方仓库已经公开代码、基础配置、LaWM/LAM 权重、LaWAM 预训练权重、LIBERO/RoboTwin SFT 权重及对应数据集。最小环境安装为:

git clone https://github.com/RLinf/LaWAM.git LaWAM
cd LaWAM

conda create -n lawam python=3.10 -y
conda activate lawam

pip install -r requirements.txt
pip install flash-attn==2.8.3 --no-build-isolation
pip install -e .

运行前还需要准备:

  • Qwen/Qwen3-VL-2B-Instruct
  • facebook/dinov3-vitb16-pretrain-lvd1689m
  • 官方 lawam_lam checkpoint 与 YAML;
  • 对应 benchmark 的 SFT checkpoint 和仿真环境。

如果只做快速验证,建议先跑 LIBERO。RoboTwin 需要独立模拟器环境,依赖更重,官方脚本也采用“策略服务 + 仿真 worker”的部署方式。


7、模型效果

7.1、LIBERO

在这里插入图片描述

LaWAM 在 LIBERO-Long、Goal、Object、Spatial 四个套件上的成功率分别为 97.0%、98.4%、99.6% 和 99.4%,平均 98.6%。

对比值得注意的不是只高出几个点,而是它同时保持了低延迟:像素空间 WAM 中,Cosmos-Policy 和 LingBot-VA 的平均成功率都是 98.5%,但延迟分别为 1413 ms 和 4482 ms;LaWAM 为 187 ms。

7.2、RoboTwin

RoboTwin 2.0 包含 50 个双臂操作任务。LaWAM 在干净场景和随机场景中的平均成功率分别为 92.64% 和 89.80%,合计 91.22%。结果说明潜在视觉子目标不仅适用于 LIBERO 的单臂任务,也能扩展到双臂协同操作。

7.3、真机任务

在这里插入图片描述

论文在两类平台上测试三个任务:

  • Franka:物品抓取放置、抽屉打开;
  • Quanta X1 双臂机器人:毛巾折叠。
方法 Pick-and-Place Open Drawer Fold Towel 平均
π 0.5 \pi_{0.5} π0.5 86.7 80.0 83.3 83.3
GR00T-N1.6 83.3 76.7 46.7 68.9
Fast-WAM 56.7 63.3 70.0 63.3
LingBot-VA 76.7 83.3 0.0 53.3
LaWAM 93.3 86.7 90.0 90.0

毛巾折叠最能体现低延迟的意义。毛巾在策略计算期间仍可能继续运动,如果单次推理耗时过长,下一段动作面对的已经是“过期观测”。论文认为 LingBot-VA 在该任务中的失败与 4.482 秒推理延迟密切相关。

7.4、组件消融

在这里插入图片描述

消融结果可以得到三个结论:

  1. 去掉 LaWM 的下降最大,尤其是 LIBERO-Long,说明显式未来子目标是主要增益来源;
  2. 去掉潜在动作蒸馏后明显下降,说明 VLM 必须学会正确进入 LAM 的潜在空间;
  3. 同时去掉 KI 与蒸馏继续下降,说明 LaWM 既要被正确驱动,也要避免被动作损失破坏。

8、LaWAM 的价值与局限

8.1、方法价值

LaWAM 最有价值的地方,不是简单提出“在 latent space 做 world model”,而是建立了一个完整、可部署的接口:

潜在动作:压缩跨本体的视觉变化
        ↓
LaWM:把变化展开成当前场景中的未来视觉子目标
        ↓
动作专家:将未来视觉子目标转成连续控制

这个接口兼顾了三个目标:

  • 比直接 VLA 多了显式的短时未来预测;
  • 比像素空间 WAM 少了视频生成成本;
  • 比只使用 latent action token 保留了更明确的空间结构。

8.2、当前局限

论文明确指出两类问题:

  • 相机运动:当前方法更适合相机相对稳定的机械臂操作。第一人称视频中如果头部抖动或视角变化占主导,LaWM 可能把相机自运动误当成任务动力学;这会限制它直接用于移动机器人或人形机器人。
  • 细粒度形变:当前 DINO 特征分辨率对细微布料褶皱还不够敏感,毛巾等柔性物体的精细动力学仍难以准确建模。

工程上还需要注意,LaWAM 的“高效”主要指推理阶段。论文的 Stage 2 策略集成预训练使用 64 张 H100 训练 200k steps,RoboTwin SFT 也使用 64 张 H100 训练约 20 小时;其训练门槛并不低。

8.3、总结

LaWAM 给世界动作模型提供了一条很清晰的轻量化路线:未来预测不必等价于未来视频生成,动作模型真正需要的是一个与控制相关、带空间结构、能够快速计算的未来状态。

它把 LAM 中过去常被丢弃的 forward decoder 重新利用起来,变成 LaWM;再通过潜在动作蒸馏,让 VLM 在推理时能够驱动这个世界模型;最后用 Alternate-DiT 把语义理解与潜在动力学送进连续动作生成。

从结果看,这种设计在单臂、双臂和真机任务上都保持了较强性能,并明显降低了像素空间 WAM 的推理延迟。它目前还不能完全解决移动视角和柔性物体动力学问题,但已经证明:世界模型可以不“画出未来”,仍然能让机器人根据未来行动。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐