ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

具身模型设计洞察:世界-动作模型WAM的预训练、动作表征与仿真到真机落地

具身模型设计洞察:世界-动作模型WAM的预训练、动作表征与仿真到真机落地

1. 从"只会说"到"能动手":具身模型到底在解决什么问题

这两年大模型的发展速度大家有目共睹,语言理解、图像生成、代码补全,一个比一个能打。但如果你真让一个纯语言模型去拧瓶盖、叠衣服、把散落一地的积木按颜色归类,它大概率只能给你写一段"如何拧瓶盖"的说明文,而不是真的把瓶盖拧开。这个落差,就是具身模型要填的坑。

所谓具身模型,简单说就是让模型拥有"身体",能感知环境、做出动作、并根据动作结果反过来调整自己。它和传统机器人控制最大的区别在于:传统方案是"感知-规划-控制"三段式,每一段都是独立模块,工程师手工调参、写规则;而具身模型试图把这一整套流程压缩进一个可学习的网络里,让模型自己从数据中学会"看到什么、该做什么"。

OpenWAM 团队做的 WAM(World-Action Model,世界-动作模型)就是这条路线上的一个代表性尝试。它的核心思路不复杂:让模型同时学会"世界会怎么变"和"我该怎么做"。前者是预测,后者是决策,两者共享同一套表征,互相促进。这个思路听起来顺理成章,但真正落地时会遇到一堆问题——数据从哪来、动作空间怎么定义、预训练和微调怎么衔接、仿真和真机的差距怎么补。这篇文章就围绕这些实际问题,把具身模型的设计洞察拆开讲清楚。

如果你是从传统机器人、强化学习或者大模型方向转过来的,这篇文章能帮你快速建立具身模型的整体认知框架;如果你已经在做相关项目,里面关于预训练策略、动作表征、数据配比的讨论应该能给你一些直接可用的参考。

2. WAM 的核心设计:为什么要把"世界模型"和"动作模型"绑在一起

2.1 世界模型和动作模型各自解决什么

先拆开看两个概念。

世界模型(World Model)的核心任务是预测。给定当前观测和动作,预测下一时刻的观测会变成什么样。比如机械臂当前看到杯子在桌上,执行"向前移动 5 厘米"这个动作后,杯子在画面中的位置会怎么变。世界模型学的是环境的动态规律,它不关心"该不该做这个动作",只关心"做了之后会发生什么"。

动作模型(Action Model)的核心任务是决策。给定当前观测和目标,输出应该执行什么动作。它学的是策略,关心的是"怎么做才能达成目标"。

传统做法是把两者分开:先训一个世界模型做仿真,再在世界模型里训一个策略。这种方案的问题在于,世界模型的预测误差会直接传导给策略,而且两个模型各自优化,表征不共享,效率低。

2.2 共享表征带来的实际收益

WAM 的做法是把两者塞进同一个网络,共享底层表征,上层分两个头:一个预测下一帧观测,一个输出动作。这样做的好处,从工程角度看主要有三点。

第一,表征更鲁棒。动作预测需要模型理解"什么因素会影响结果",世界预测需要模型理解"环境会怎么演化",两者共享底层特征后,模型被迫学到更本质的物理规律,而不是记住一些表面相关性。实测中,这种共享结构在跨场景泛化上通常比单独训两个模型要好。

第二,数据利用率更高。同一批轨迹数据,既能用来训世界模型(预测下一帧),也能用来训动作模型(模仿动作),一份数据干两份活。对于具身领域这种数据获取成本极高的场景,这一点非常关键。

第三,训练信号更密集。动作标签通常只有专家轨迹才有,但观测序列本身是无处不在的。世界模型的预测任务可以利用大量无动作标签的视频数据,相当于给动作模型提供了一个额外的辅助监督信号。

2.3 一个容易踩的坑:两个头的损失权重

共享表征听起来美好,但实操中最容易出问题的地方是损失权重的平衡。世界模型的预测损失(通常是像素级或特征级的回归/重建)和动作模型的决策损失(通常是动作的回归或分类)量级往往差好几个数量级。如果直接相加,大概率会出现一个头主导训练、另一个头学不动的情况。

OpenWAM 团队在分享中提到的处理方式是:对两个损失分别做归一化,再按固定比例加权。具体比例需要根据任务调整,但一个经验性的起点是让两个损失在训练初期的梯度范数大致相当。我自己的做法是先在少量数据上跑几百步,打印两个头的梯度范数,然后据此设定权重,而不是拍脑袋定一个数。

注意:损失权重不是设一次就完事。训练过程中两个头的收敛速度不同,建议每隔一定步数重新检查梯度范数,必要时动态调整。

3. 预训练策略:具身模型为什么要"先看后动"

3.1 预训练在具身领域的特殊意义

语言模型预训练大家很熟,无非是在海量文本上做下一词预测。具身模型的预训练逻辑类似,但数据形态复杂得多:有纯视频(无动作标签)、有带动作的轨迹数据、有仿真环境生成的数据、有真机采集的数据。这些数据的质量、分布、标注完整度差异巨大,怎么组织预训练流程,直接决定了模型的上限。

WAM 的预训练思路可以概括为"先学世界,再学动作,最后联合微调"。第一阶段用大量视频数据训世界模型,让模型学会预测未来帧;第二阶段引入带动作标签的数据,同时训世界预测和动作预测;第三阶段在目标任务上做联合微调。

3.2 为什么不能一上来就联合训练

有人可能会问:既然最终要联合,为什么不一开始就联合训?

原因在于数据分布和任务难度的差异。纯视频数据量大、覆盖广,但缺少动作标签;带动作的数据量小、场景窄,但监督信号直接。如果一上来就联合训,模型会倾向于拟合数据量大的那部分,动作头学不到东西。先让世界模型在大量视频上打好基础,相当于给模型一个"物理常识"的底子,再引入动作数据时,模型已经理解了基本的动态规律,学动作会快很多。

这个逻辑和语言模型先预训练再微调是一致的:预训练阶段学通用表征,微调阶段学具体任务。只不过具身模型的"通用表征"不仅是语义,还包括物理动态。

3.3 预训练数据配比的实操经验

数据配比是预训练阶段最需要反复试的部分。根据公开分享和我的实际经验,几个原则值得参考:

  • 视频数据要占大头,但不能全是视频。纯视频预训练出来的世界模型,在动作预测上往往表现一般,因为视频里没有动作信息,模型不知道"是什么动作导致了画面变化"。
  • 仿真数据和真机数据要混合。仿真数据量大、标注准,但存在 sim-to-real gap;真机数据真实,但量少、噪声大。混合训练能让模型同时受益于两者的优势。
  • 任务多样性比单任务数据量更重要。与其在一个任务上堆一万条轨迹,不如在几十个任务上各采几百条。多样性带来的泛化收益,通常比单任务的数据量收益更大。

一个可参考的配比是:视频数据 60%、仿真轨迹 25%、真机轨迹 15%。这个比例不是固定的,需要根据目标任务调整。如果目标任务和仿真环境差异大,真机数据比例要往上提。

4. 动作表征:连续控制里的"分词"问题

4.1 动作空间怎么定义才合理

语言模型的基本单位是 token,具身模型的基本单位是动作。动作怎么表示,直接决定了模型能学什么、学得多好。

常见的动作表征有三类:

表征方式形式优点缺点
关节角度/末端位姿连续向量直接、精度高维度高、时序依赖强
动作 chunk连续向量序列减少决策频率、时序一致性好chunk 长度难定
离散动作 token离散码本可复用语言模型架构量化误差、码本难训

WAM 采用的是动作 chunk方案,即一次预测未来若干步的动作序列,而不是单步动作。这个选择背后有明确的工程理由。

4.2 为什么用动作 chunk 而不是单步

单步动作预测的问题在于决策频率太高。如果控制频率是 50Hz,模型每秒要做 50 次决策,每次决策的误差会累积,而且高频决策对模型的推理速度要求极高。

动作 chunk 相当于让模型"一次想好几步",比如一次预测未来 16 步的动作。这样做的好处是:决策频率降低到原来的 1/16,推理压力小;chunk 内部的动作天然具有时序一致性,不会出现前后矛盾;模型有更多上下文来推断动作意图。

代价是 chunk 长度需要调。太短了退化成单步,太长了模型难以准确预测远期的动作。根据经验,chunk 长度在 8 到 32 之间比较常见,具体取决于任务的控制频率和动作复杂度。控制频率高、动作变化快的任务,chunk 可以短一些;控制频率低、动作平滑的任务,chunk 可以长一些。

4.3 动作 token 化的尝试与局限

把连续动作离散化成 token,然后套用语言模型的架构,这个思路在学术界有不少尝试。好处是能直接复用成熟的语言模型训练框架,坏处是量化误差难以避免。

连续动作的精度要求往往很高,比如机械臂的关节角度,差 0.1 弧度可能就抓不住东西。离散化的码本如果不够细,精度损失直接体现在任务成功率上;码本太细,又退化成连续空间,失去离散化的意义。目前来看,动作 token 化在一些粗粒度任务上可行,但在精细操作任务上还有明显局限。

提示:如果你的任务对精度要求高,优先考虑连续动作表征;如果任务动作空间本身比较离散(比如开关、档位),token 化是更自然的选择。

5. 从仿真到真机:具身模型落地时最容易被低估的环节

5.1 sim-to-real gap 的真实来源

仿真环境里训得好好的模型,搬到真机上效果打骨折,这是具身领域的老大难问题。gap 的来源主要有几个:

  • 视觉差异:仿真的渲染和真实相机拍出来的图像,在光照、纹理、噪声上差异巨大。
  • 物理差异:仿真的接触模型、摩擦系数、延迟特性和真实世界不完全一致。
  • 动力学差异:真机有电机延迟、关节间隙、线缆阻力,这些在仿真里往往被简化或忽略。

WAM 团队在分享中提到,他们在预训练阶段就引入了域随机化(domain randomization),在仿真里随机化光照、纹理、相机参数、物理参数,让模型见到足够多的变化,从而对真实世界的差异更鲁棒。

5.2 真机微调的数据效率问题

域随机化能缓解 gap,但不能完全消除。最终还是要用真机数据做微调。问题是真机数据采集成本极高:需要人操作、需要标注、需要处理各种异常情况。

提高真机微调效率的几个实操技巧:

  • 优先采集失败案例。成功轨迹模型可能已经见过类似的,失败案例才是模型真正需要学的。
  • 用少量真机数据做对齐,而不是从头训。真机微调的目标是让模型适应真机的特性,不是重新学任务。
  • 在线微调比离线微调更有效。让模型在真机上跑,收集它自己的失败轨迹,人工纠正后立即用于更新,这种迭代方式通常比攒一大批数据再训要快。

5.3 一个被忽视的细节:动作执行的平滑性

模型输出的动作序列,直接下发到机器人执行时,往往会因为预测噪声导致动作抖动。这种抖动在仿真里可能看不出来,但在真机上会表现为电机异响、机械磨损、任务失败。

处理方式通常是在动作输出后加一层滤波,比如低通滤波或滑动平均。但滤波会引入延迟,延迟又会影响控制效果。这个权衡需要根据具体任务调。我的经验是:先不加滤波跑一遍,观察抖动的频率和幅度,再针对性地设计滤波器,而不是一上来就加一个通用的低通滤波。

6. 具身模型的评测:怎么判断一个模型到底行不行

6.1 离线指标和在线指标的差异

具身模型的评测比语言模型复杂得多。语言模型看 perplexity、看 benchmark 分数就够了,具身模型不行。离线指标(比如动作预测的 MSE、世界预测的 PSNR)只能反映模型拟合数据的能力,不能反映它在真实任务上的表现。

一个模型离线指标很好,在线任务成功率很低,这种情况在具身领域非常常见。原因是离线指标衡量的是"预测得准不准",而在线任务关心的是"能不能完成任务"。预测误差在时序上累积后,可能导致完全不同的任务结果。

6.2 评测应该看哪些维度

根据 WAM 团队的分享和我的实际经验,具身模型的评测至少应该覆盖以下几个维度:

  • 任务成功率:最直接的指标,但需要足够多的试验次数才有统计意义。
  • 泛化能力:在训练时没见过的场景、物体、指令上表现如何。
  • 鲁棒性:面对扰动、噪声、异常输入时能否保持稳定。
  • 执行效率:完成任务需要多少步、多少时间。
  • 安全性:会不会做出危险动作,比如碰撞、超速。

这几个维度往往互相冲突。比如追求高成功率可能导致动作保守、效率低;追求泛化可能导致在特定任务上精度下降。评测时要根据实际应用场景确定优先级,而不是追求所有指标都好看。

6.3 评测中的常见陷阱

评测具身模型时,有几个坑特别容易踩:

陷阱一:测试集和训练集分布太接近。如果测试场景和训练场景几乎一样,模型表现好是理所当然的,说明不了泛化能力。测试集应该刻意包含训练时没见过的变化。

陷阱二:试验次数太少。具身任务的随机性很大,同一个模型跑 10 次和跑 100 次,成功率可能差很多。至少要跑几十次才有参考价值。

陷阱三:只测成功案例。失败案例往往更能暴露模型的问题。记录失败时的观测、动作、环境状态,对后续改进更有价值。

7. 具身模型后续可以往哪些方向走

从 WAM 的设计思路往外延伸,具身模型还有几个值得关注的方向。

多模态融合。目前的具身模型大多以视觉为主,但真实操作中触觉、力觉、听觉都很重要。把触觉信号引入模型,对精细操作任务可能有明显帮助。

长时序任务规划。现在的模型大多处理秒级到分钟级的任务,更长时序的任务(比如做一顿饭)需要分层规划能力。高层规划用语言模型,低层执行用具身模型,这种分层架构是一个可能的方案。

跨本体泛化。不同机器人的关节数、自由度、运动学结构都不一样,怎么让一个模型适配多种本体,是一个开放问题。可能的思路是把动作空间抽象成任务空间,让模型学任务级的动作,而不是关节级的动作。

持续学习。真实环境中任务和场景会不断变化,模型需要能持续学习新技能而不遗忘旧技能。这在具身领域比在语言领域更难,因为数据分布的变化更剧烈。

这些方向目前都还在探索阶段,没有成熟的方案。但可以确定的是,具身模型的核心挑战始终是数据和泛化:怎么用有限的数据学到可泛化的技能,怎么让模型在真实世界中稳定工作。WAM 的共享表征、分阶段预训练、动作 chunk 这些设计,本质上都是在回答这两个问题。

我在实际做具身项目时最大的体会是:不要指望一个模型解决所有问题。把世界模型和动作模型绑在一起是为了共享表征,但具体任务上该微调还是要微调,该加规则还是要加规则。模型是工具,不是万能药。把模型的边界搞清楚,在边界内用好它,比追求一个"通用具身智能"要实际得多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进