
物理AI这个概念正在以极强的势头冲进大众视野。无论是能叠衣服的机械臂还是能在仓库里自主搬箱的移动机器人背后都绕不开三个缩写VLM、VLA、WAM。很多人看到这些词的第一反应是“又一个新名词”但物理AI真正难的地方不是名词而是数学模型如何把像素、语言、动作和历史经验放进同一个特征空间并让它们互相预测。如果你正在做机器人控制、自动驾驶决策、生成式仿真或者只是被“物理AI”的大词吸引想弄清楚它到底在技术上解决什么问题这篇文章值得收藏。本文不罗列论文而是从数学逻辑出发把VLM视觉语言模型、VLA视觉语言动作模型、WAM世界动作模型分别拆开再串成一条完整的物理AI技术线。读完你会理解为什么多模态对齐是第一步动作预测是第二步世界建模是第三步以及每一步的损失函数和训练范式为什么长成那样。1. 物理AI为什么需要三种模型物理AI的目标是让AI在真实物理世界里完成有目的的动作。和聊天的LLM不同机器人需要考虑“物体在重力下会不会掉落”“手臂角度与抓手姿态如何匹配”“连续动作之后世界会变成什么样”。这不是一个模型能解决的问题。从传统机器人看感知模块检测位置规划模块搜索路径控制模块算出关节力矩。模块分开接口是人写的误差会一级级放大。感知错一点规划就偏控制就抖。物理AI的思路是把“看懂”“决定”“预判”三件事分别用专门的模型承担同时让它们共享同一个特征空间。于是就有了三层架构VLM负责把视觉和语言对齐输出稳定、可迁移的“世界描述”VLA负责根据描述和当前状态输出动作这是行为的来源WAM负责在动作执行前和执行中预测世界变化给规划和策略一个可回滚的“脑内推演”。这不是为了造词而是工程必然。三种模型解决的是三种不同数学问题静态对齐、动态映射、隐状态预测。下面分别展开。2. VLM把像素和语言放进同一个向量空间2.1 VLM解决什么问题VLM的核心不是“看图说话”。它的目标是让视觉特征和语言特征在同一空间里可比。比如给模型一张“桌上有红色杯子和蓝色杯子”的图片模型要能回答“红色杯子在哪个位置”或执行“拿起红色杯子”的指令前提是图像特征和文本特征的距离足够近。这个问题在数学上是跨模态表征对齐找到映射 (f_v) 和 (f_t)使得语义相同的图像和文本在表示空间里距离近语义不同的距离远。CLIP采用的对比学习是这类方法最经典的起点。2.2 对比学习的数学本质给定一个batch的 (N) 对图文样本模型分别得到图像特征 (z_i^v) 和文本特征 (z_i^t)InfoNCE损失把第 (i) 对看作正样本把同batch内其他 (N-1) 对看作负样本[ \mathcal{L}{CLIP} -\frac{1}{N}\sum{i1}^N \log \frac{\exp(\text{sim}(z_i^v, z_i^t)/\tau)}{\sum_{j1}^N \exp(\text{sim}(z_i^v, z_j^t)/\tau)} ]其中 (\tau) 是温度系数控制分布的锐利程度。(\tau) 越小模型对最相似的负样本越敏感训练难度越大(\tau) 越大所有样本一视同仁对齐强度变弱。工程上这个超参的调节比很多人想象的更影响效果。2.3 为什么对齐这么重要如果视觉和语言没有对齐下游的VLA就失去了“接地”能力。所谓“接地”就是把抽象指令“拿起红色杯子”和视觉实体图像中的红色杯子区域联系起来。物理AI场景里VLM通常不是最终执行者而是特征提取器和语义接口。让机器人能理解“哪个物体”“什么属性”“在哪”这些能力都来自对齐。一个常见误区是VLM越大越好。在物理AI里VLM除了生成文本还经常被用作奖励模型、数据标注器、视觉特征骨干。过大的VLM推理延迟可能不适合实时控制实际项目中经常要选7B或者更小的蒸馏版本。下面给一个简化实现# clip_loss.py import torch import torch.nn.functional as F def contrastive_loss(image_embeds: torch.Tensor, text_embeds: torch.Tensor, temperature: float 0.07) - torch.Tensor: # 输入形状均为 [B, D]要求已经做 L2 归一化 logits image_embeds text_embeds.T / temperature batch_size logits.shape[0] labels torch.arange(batch_size, devicelogits.device) loss_i F.cross_entropy(logits, labels) loss_t F.cross_entropy(logits.T, labels) return (loss_i loss_t) / 2这个损失函数的核心是对角线上是正确配对每行每列各一个正样本。对称化处理图像到文本、文本到图像各算一次能让梯度更均衡。2.4 生成式VLM纯对比学习只能得到embedding真正要生成语言还需要在解码器上加自回归损失[ \mathcal{L}{VLM} -\sum{t1}^{T} \log p_\theta(y_t \mid x_v, y_{t}) ]其中 (x_v) 是视觉输入(y_{t}) 是已生成的前缀。LLaVA这类模型把视觉token投影成和文本token同维的向量然后交给LLM一起做next token prediction。物理AI里经常用它做“开放词汇检测”或“任务拆解”。关键判断理解是基础但理解不等于行动。VLM输出的是语言或特征不直接驱动关节。VLA要解决的是“特征到动作”的映射。3. VLA把语义特征映射成连续动作3.1 为什么不能直接调VLM把VLM的文本输出再喂给传统规划器会损失大量信息而且推理慢。VLA的做法更激进让模型直接输出动作。它同时接收图像、语言指令和机器人状态输出关节位置、末端速度或力矩指令。从公开的机器人操作研究看这类方法在桌面操作、移动操作等场景已经展现出不错的泛化能力但对训练数据和硬件非常挑剔。3.2 动作空间的表示动作是连续向量(\mathbf{a} \in \mathbb{R}^d)(d) 是自由度。机械臂位姿常用SE(3)矩阵表示但神经网络更习惯输出向量。常见的做法有几种。第一种是输出末端位移或关节角度增量把高层的语义变成底层控制信号训练简单但需要模型自己学会动力学。第二种是输出动作chunk也就是未来 (H) 步的动作序列降低决策频率缓解累积误差。第三种是RT-2式的动作token化把每个动作维度的连续值离散成 (K) 个bin然后像语言模型一样预测下一个动作token。这些做法的数学本质是把连续空间量化牺牲一定精度但换来自回归模型现成的训练框架# action_tokenization.py def action_to_tokens(action, num_bins256, action_range(-1.0, 1.0)): lo, hi action_range normalized (action - lo) / (hi - lo) normalized normalized.clamp(0.0, 1.0) tokens (normalized * (num_bins - 1)).round().long() return tokens注意量化精度问题。如果动作范围是 ([lo, hi])(K) 个bin的分辨率是 ((hi-lo)/K)。bin太少动作抖动明显bin太多分类任务变难。实际项目中这个值需要根据机械臂精度重新标定不能直接照抄论文。3.3 动作Chunking缓解复合误差动作chunking是VLA工程里极其关键的设计。如果每步只预测一个动作模型误差会随步数累积。训练时用真实观测做teacher forcing推理时却用模型自己的错误预测分布偏移会越来越严重。动作chunking让模型一次输出未来 (H) 步动作然后执行 (H) 步再重新规划[ \mathbf{a}{t:tH} \sim \pi\theta(\cdot \mid \mathbf{o}_t, \mathbf{g}) ](H) 越大长时一致越好但灵活性下降。工程经验是简单重复动作 (H) 可以大一些精确操作 (H) 要小一些。这个超参直接决定了VLA的“决策节奏”。3.4 行为克隆与扩散策略最基础的VLA训练使用行为克隆BC对专家轨迹求最大似然[ \mathcal{L}{BC} -\sum{t} \log \pi_\theta(\mathbf{a}_t \mid \mathbf{o}_t, \mathbf{g}) ]但直接回归多峰动作分布会让模型取均值动作变得平滑无力。更常见的是用扩散策略前向过程往专家动作上加噪模型学习去噪。训练时优化[ \mathcal{L}{DM} \mathbb{E}{t,\epsilon}\left[|\epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t} \mathbf{a}_0 \sqrt{1-\bar{\alpha}_t}\epsilon, \mathbf{o}, \mathbf{g}, t)|^2\right] ]推理时从纯噪声出发逐步去噪生成一个动作chunk。扩散策略的好处是能表达多峰动作分布适合演示数据中同一场景有不同解法的真实情况。判断VLA解决了“做什么”但没有回答“做完会发生什么”。长期任务里模型需要预判行为后果这就是WAM的舞台。4. WAM世界模型与动作的联合建模4.1 先说明一个概念问题WAMWorld Action Model / 世界动作模型不像VLM和VLA那样已经有明确统一的定义。不同团队可能把它解释为“世界模型 动作生成”或“能感知世界的动作模型”。本文按“世界与动作联合建模”来理解模型不仅要学会策略 (\pi(a \mid o, g))还要学会动态模型 (p(s_{t1} \mid s_t, a_t))。有了后者机器人才能在动作前推演。直观上可以这样理解VLA知道“推杯子”是一个动作WAM还知道“推完之后杯子会沿着力的方向滑动滑动距离取决于摩擦系数和推的力度”。这种对物理后果的建模是WAM区别于普通动作模型的关键。4.2 世界模型的数学组成一个典型的世界模型分三部分编码器observation encoder(e_\theta(o_t) \to z_t)动态模型latent dynamics(g_\phi(z_t, a_t) \to z_{t1})奖励/代价预测器(r_\psi(z_t, a_t) \to \hat{r}_t)训练目标是让隐状态预测出的下一时刻表示尽量匹配真实下一时刻编码后的表示。常用变分下界把问题转化为重建损失和KL散度优化[ \mathcal{L}{WM} \mathbb{E}\left[ -\log p(o{t1} \mid z_{t1}) \right] \beta \cdot KL(q(z_{t1} \mid o_{t1}, z_t, a_t) | g_\phi(z_t, a_t)) ]前半部分是重建保证隐状态包含足够信息后半部分是压缩逼着动态模型学会在隐空间预测。4.3 为什么是隐空间预测直接在像素空间预测下一帧计算量大而且很多像素与决策无关。物理AI真正需要的是“任务有关的状态变化”杯子是否移动、门是否打开、物体是否被夹紧。隐空间预测等于用神经网络自己决定“该关注什么”省掉了大量无关细节。这和Sim2Real也有关系如果动态模型是在真实交互数据里学的机器人就能在仿真里训练策略再用真实微调。WAM可以被理解为把“世界规律”也学进特征空间。4.4 一个最小世界模型代码# world_model.py import torch import torch.nn as nn import torch.nn.functional as F class LatentDynamics(nn.Module): def __init__(self, obs_dim, action_dim, hidden_dim): super().__init__() self.encoder nn.Linear(obs_dim, hidden_dim) self.gru nn.GRUCell(action_dim, hidden_dim) self.decoder nn.Linear(hidden_dim, obs_dim) def forward(self, obs, action, hidden): h_next self.gru(action, hidden) obs_pred self.decoder(h_next) return h_next, obs_pred model LatentDynamics(obs_dim64, action_dim8, hidden_dim128) optimizer torch.optim.Adam(model.parameters(), lr1e-4) for obs, action, obs_next in dataloader: z model.encoder(obs) z_next, obs_pred model(obs, action, z) loss F.mse_loss(obs_pred, obs_next) optimizer.zero_grad() loss.backward() optimizer.step()这个例子隐藏了一个重要细节encoder把obs编码成hidden_dim维但 (z) 的初始值没有参与未来预测(z_{next}) 直接由GRU输出。实际训练时通常还要让 (z_{next}) 去预测奖励、终止条件或者做在线规划。把世界模型用于规划是比单纯预测更高级的用法。4.5 WAM在物理AI里的价值WAM的核心价值是让机器人拥有“脑内推演”能力。在工厂里机器人可以先推演“执行序列A会不会碰撞”再决定是否执行在家庭场景中机器人可以预判“把杯子放在桌沿会不会掉”。这种能力减少了试错成本也是物理AI从“演示驱动”走向“自主作业”的关键。但也要清醒世界模型很难学准。真实物理世界有摩擦、形变、遮挡、随机扰动纯数据驱动的动态模型往往在分布外场景失准。用仿真数据预训练再在真机上更新是目前比较稳妥的做法。5. 三层架构如何协作VLM、VLA、WAM不是三个独立模型各管各的在实际系统中它们常常通过共享特征空间协作。典型流程是VLM接收摄像头画面和自然语言指令输出结构化描述和视觉特征例如“红色杯子在托盘左侧把手朝右”。任务层把描述翻译成目标表征 (g)交给VLA。VLA根据当前观测 (\mathbf{o}_t) 和目标 (g)生成动作chunk。WAM在VLA每一决策周期里用当前状态和候选动作推演未来给VLA提供评分或修正信号。在工程实现时这层协作不需要三个完整模型全部同时跑。延迟敏感的环节可以用小模型离线学习环节可以用大模型蒸馏数据。三层架构的真正意义不是“三个模型”而是“三种抽象层次”语义、行为、物理动态。也可以把协作关系简化为表格模型输入输出数学任务典型训练目标VLM图像、文本文本/特征跨模态对齐InfoNCE next token predictionVLA图像、文本、状态动作序列条件分布建模行为克隆/扩散损失WAM状态、动作未来状态/代价隐空间动态预测重建损失 KL惩罚6. 训练数据与工程落地问题6.1 数据从哪来VLM需要海量图文对和指令数据VLA需要专家示教轨迹通常来自遥操作、仿真采样或真实任务采集WAM需要“状态-动作-下一状态”的三元组只有真实执行才能获得。物理AI的数据瓶颈比大语言模型更突出因为真实机器人数据贵且慢。可行路径是闭环数据飞轮先用已有VLM和世界模型在仿真中生成合成轨迹训练一个弱VLA在真机上采集失败和成功案例再挑选高价值数据微调三个模型。这里需要提醒不要为了追求数据量而放弃数据质量动作标签错误对VLA的伤害远大于缺少数据。6.2 推理延迟与实时性机器人控制对延迟有硬要求。VLM如果负责实时语义理解最好用轻量级模型加速VLA可以用动作chunk减少决策频率WAM在关键决策点异步运行不阻塞底层控制回路。可以把不同模型拆到不同算力设备上用消息队列或共享内存通信。下面是一个典型的配置示例# physai_stack.yaml actor_models: vlm: engine: onnxruntime precision: fp16 cache: true vla: action_chunk: 16 predictor: diffusion denoise_steps: 5 wam: horizon: 32 latent_dim: 512 async: true实际部署时这张配置表意味着“VLM可以缓存语义结果VLA每16步规划一次WAM在后台推演候选动作”。不同任务对三个延迟项的要求完全不同没有银弹。6.3 安全与回滚物理AI模型输出会被真实机械臂执行安全边界不能靠“模型智能”兜底。生产系统必须加两层保护输入侧的指令校验输出侧的关节速度、力、运动范围限制。任何模型更新都要先在仿真和受限真机上验证再灰度放开。模型出现明显分布外输入时应该触发保守策略而不是让策略自由发挥。7. 常见问题与排查思路问题现象可能原因排查方式解决方案VLM能描述场景但机器人无法执行语义输出没有转化为可执行目标检查目标表征是否包含位姿信息给VLM增加结构输出头或绑定目标检测模块VLA动作抖动动作token化bin数过少可视化动作分布增加bin数或改用连续回归头VLA动作过于平滑、不敢动行为克隆损失对多峰分布取均值统计动作分布是否多峰换用扩散策略或CVAE长任务执行后期偏差越来越大单步决策累积误差记录每一步重规划频率采用动作chunking或加入执行-感知闭环WAM预测的未来状态与实际差距大动态模型分布外对比隐空间向量和真实状态增加仿真与真机混合训练多模型串行推理延迟过高每个模型都跑完整任务统计各阶段耗时拆分异步推理、缓存VLM结果每个问题都要看日志而不是猜。物理AI项目里最先暴露的往往是数据格式错误、坐标系不一致、单位不统一这类低级问题模型本身的反而不多。8. 最佳实践与避坑清单第一先定义问题再选模型。如果任务是抓取已知物体不需要完整VLM如果任务需要开放式语言指令VLA和WAM才有意义。很多项目失败的根源是模型选型超过了任务复杂度。第二重视特征空间一致性。三模型协作时不同模型输出向量的维度、归一化方式和坐标系必须统一。物理量要明确单位关节角度用弧度还是角度、速度用米每秒还是毫米每秒。这类低级错误最容易在联调时暴露。第三损失函数里不要塞太多目标。一个模型同时做VLM理解、VLA动作和WAM预测训练时梯度容易互相干扰。更稳的做法是预训练阶段分开训练微调阶段再联合。如果一定要联合用梯度裁剪和损失权重平衡。第四所有真实机器人实验必须有仿真预演和急停保护。物理AI不同于普通算法项目一个小数点就是一次硬件维修。更新模型前先跑离线数据集回放验证动作分布没有偏出安全区间。第五关注可解释性。即使端到端模型很强也要保留每个模块的日志。至少要知道VLM输出了什么描述、VLA生成了多长的动作chunk、WAM预测的下一步状态是否与真实状态偏差过大。物理AI的调试本质是看“哪个抽象层的假设错了”。第六版本管理要覆盖数据和模型。物理AI项目里一个模型文件只对应一份训练数据meta信息。换数据不换版本号出问题只能靠猜。建议把数据集hash、仿真器版本、模型checkpoint、评测指标绑定到一起形成可复现单元。9. 总结与下一步路线到这里VLM、VLA、WAM的底层数学逻辑已经清晰了。VLM把像素和语言对齐解决的是“感知与语义的静态对应”VLA把观测和语言映射成连续动作解决的是“看到之后做什么”WAM在隐空间里学习世界动态解决的是“做了之后会发生什么”。三者层层递进共同构成物理AI的核心技术骨架。对准备入局物理AI的开发者建议下一步这样走先用开源VLM做一次简单的视觉问答或目标定位建立对齐损失和数据格式的直觉再用一个固定仿真环境训练VLA策略体会动作chunk和扩散策略的差异最后尝试加一个轻量世界模型观察它能不能提升长时任务的命中率。每一步都不需要特别大的算力但都会帮助你理解“物理AI为什么不是玄学”。最后提醒一句物理AI目前最大的风险不是模型不够聪明而是我们对数据分布、动态预测误差和硬件安全边界的理解还不够细。数学逻辑能解释模型为什么工作但工程红线需要开发者自己守住。建议把本文的排查表和避坑清单收藏起来做项目时对照着看。