资讯动态

放弃视频大模型,从头训练世界动作模型的完整复盘

发布时间:2026/10/14 13:48:30 来源:尧图企业网站定制
说实话我一开始也被“借一个视频大模型来当底座”这个思路吸引过。视频大模型的确能生成以假乱真的下一帧看着就像是掌握了世界的演变规律那把它当作“世界模型”的一部分来用不是顺理成章吗但真上手做动作控制时我越来越觉得不对劲视频大模型生成的画面再流畅到了机械臂末端位姿、关节力矩这些“动作层面”它给不了精细的、可执行的控制信号。于是我把原来的方案推翻完全不借视频大模型从数据集采集开始把世界动作模型World Action Model从头训了一遍。这篇文章就是我的完整复盘包括为什么放弃“借力打力”、数据怎么搞、网络结构怎么搭、训练中遇到了哪些坑以及最终这套方案的可行性和适用范围。1. 视频大模型帮不了动作控制这不是算力问题是目标问题1.1 视频生成和动作决策是两种不同的学习任务视频大模型的核心任务是条件生成给定文本、起始帧或者一段运动趋势补出后续像素。它优化的目标是“下一帧看起来合理”也就是分布层面的相似度。可动作控制的终极目标不是“下一帧看起来合理”而是“执行这个动作之后环境会以符合物理规律的方式回应我”。这两个目标之间有一条巨大的裂缝。举个例子。视频大模型可以生成一个人伸手够杯子的画面杯子的形变、光影都无可挑剔。但它不会告诉你手指应该施加多大的力、腕关节要保持什么姿态、当前这个角度下电机该输出多少扭矩。这些“动作层面的微观决策”恰恰是机器人执行任务最关键的部分。视频大模型没有这个信息因为它本质上是一个观察者不是一个行动者。你让它生成一万帧也没用它生成的是一个“合理的故事”而不是一串“可执行的指令”。我见过不少方案试图把视频大模型生成的结果当作数据增强或者当作一种想象的反馈信号。想法很好但实际跑起来你会发现视频大模型在生成时会“脑补”出一个现实的未来这个未来可能与当前机器人动力学模型下的真实响应存在偏差偏差一旦进入策略学习就会让动作模型产生一种“幻觉自信”。它以为自己预测到了未来实际预测的是另一个世界里的事情。还有一个更现实的问题成本。视频大模型的参数量动辄十亿以上甚至上百亿推理一次需要几百毫秒到数秒。机器人控制回路通常要求几十赫兹甚至上千赫兹的输出频率你总不能让机械臂在运动过程中停下来等你生成一帧漂亮的未来画面。这种时间尺度上的错配决定了视频大模型和实时动作控制天然地不适配。1.2 借力视频大模型的隐性成本可能有人会说我不直接用它在线推理我只用它的预训练权重做初始化或者用它在离线阶段生成合成数据。这两条路我也都走过从实际经验出发它们都存在隐性问题。先说说用预训练视频模型做视觉编码器初始化。这类模型的表征空间是针对“图像内容”优化的它把大量容量花在纹理、光影、物体边缘这些视觉重建任务上。而动作控制真正需要的是“我的干预会怎样改变状态”这种因果关系。你拿视频大模型初始化编码器相当于给一个赛跑的运动员配了一双走红毯的高跟鞋看似精致跑起来就吃亏了。头部特征确实能提取出“这是什么物体、大概在哪里”但对于“夹爪靠近物体时会不会打滑、手柄转动到哪个角度会触发限位”这类交互信息它给不了任何先验。而且视频大模型做的是高维像素重建完成一次前向计算就要消耗大量显存和算力。如果你决定在它的encoder后面接一个策略head训练时整个backbone不能冻结太深否则表征不会变化白搭但解冻就意味着显存翻倍一次训练迭代的时间成本和能源成本都高了不止一个数量级。我为一个小型桌面机械臂任务试过这种方案训练一版要占满四张24G卡普通的6自由度抓取任务而已这种投入明显不划算。再说合成数据路线。用视频大模型生成“机器人做任务”的视频再把这些视频当成训练样本用来学习动作这里有一个致命陷阱视频里没有动作标签。动作模型的训练样本必须包含明确的动作指令比如关节角度的轨迹、末端位姿的路径。你最多能从视频里做运动追踪估算出大致轨迹但估算误差在真实控制里根本无法容忍。一次抓取动作的目标是一个特定的空间点差上几毫米夹爪就撞到了物体边缘。视频生成结果里的“宏观动作”可以很自然但是“微观控制精度”完全达不到要求。1.3 从头训的真实含义先想清楚什么叫“世界动作模型”所以我把“视频大模型”整个拿掉从头训。这里有个概念需要先厘清世界动作模型和普通的策略网络Policy有什么区别。纯行为克隆只是从观测到动作的函数拟合它没有对环境动态建模而世界动作模型至少要具备对“状态变化”做出预测的能力只是这种预测不一定体现在像素层面。我们可以把“世界”理解为当模型输入当前状态s_t和候选动作a_t它能输出对下一状态s_{t1}的预测这个预测可以是显式的预测下一帧图像、预测下一时刻关节角度也可以是隐式的预测下一时刻的潜在表征或者只在表征空间进行对比约束。有了这种动态建模能力模型才能不依赖于“记住演示数据”而是在给定新的初始条件下推断出合理的行动。这正是我做的模型和其他“挂了个视频大模型名头”的方案的差别我的世界动作模型是自带的、紧凑的、可实时推理的。我建议所有打算做这个方向的人先把这个问题想清楚你要的到底是“能生成视频的世界模型”还是“能让机器人动起来的动作模型”。前者是模拟器思维后者是控制器思维。动作控制如果真要借用生成模型应该借的是“紧凑的动态预测器”而不是“像素级别的视频生成器”。所以我的方案里没有视频大模型取而代之的是一个轻量级的潜空间状态预测头。2. 先把数据闭环跑通动作数据才是真正的门槛2.1 世界动作模型需要什么形态的训练样本很多研究者和工程师把注意力放在模型结构上但我踩过一轮之后得出了一个结论从头训世界动作模型最大的瓶颈不是算力更不是结构设计而是——高质量的动作数据从哪里来。世界动作模型的训练样本是三元组结构(观测序列, 动作序列, 后续观测)。观测可以是多帧图像、关节角度、末端位姿的组合动作序列是每个决策时刻模型应该输出的控制指令后续观测用于监督动态预测头。重点是“动作”这一环它必须在物理层面真实可执行不能是估算出来的。机器人领域里一个动作往往是7维左右的末端位姿3维位置3维旋转夹爪状态或者N维关节角度。这种数据的采集方式和视频数据完全不同。我最早用的数据采集方案是遥操作记录人操作一个主手控器带着从手机械臂做任务记录下每帧的关节角度和图像。这个方案最大的优点是直接拿到真实可执行的动作轨迹而且人类示教里天然包含了很多“处理意外情况”的能力比如手指卡住了会自动微调、物体偏移了会重新对准。这些都是后面策略模型能泛化的基础。但遥操作也有大问题采集速度太慢、样本姿势受人工操作习惯影响、长期采集会出现疲劳导致后半段数据质量下降。所以我又加了第二类数据来源——仿真自动采集。在仿真环境里我设计脚本让虚拟机械臂自动执行任务利用随机初始化和随机目标生成大量轨迹。这种数据产量高、覆盖广但缺点是有sim-to-real gap。怎么配比我目前的经验是仿真数据和真实遥操作数据按7:3混合先用仿真数据把模型训练到基本可用再用真实数据微调效果最稳。2.2 三类数据来源的优劣与配比方案我把跑通的项目中尝试过的数据来源整理成表格这里面的参数都是经过实际验证的但具体任务不同数值需要自行调整。数据来源优点缺点推荐配比遥操作示范动作真实可执行、包含人类避错技巧采集慢、数量有限、轨迹风格单一30%仿真自动采集数量大、覆盖状态空间广、可加随机化物理模型与真实环境有差距60%真实环境半自动轨迹接近部署工况、动力学精准需要设计干预规则、标注成本高10%第三类真实环境半自动轨迹听起来比较少见但我觉得很有价值。做法是在真实机械臂上部署一个简单的脚本控制器完成一个固定动作比如到达某个位置再返回脚本只负责大方向人的干预只发生在异常情况。这样我能拿到一批“虽然不是最优但动力学绝对真实”的轨迹。这批数据的作用是把模型的动力学感知拉回真实世界避免仿真数据比例过高时模型彻底“仿真化”。数据规模方面我自己做过一组对比实验500条遥操作轨迹1200条仿真轨迹训练出来的模型已经可以在同一仿真环境里达到85%以上的抓取成功率但如果只给同等数量但噪声很大的数据同一个模型结构只有不到50%。数据质量对效果的左右能力比模型结构升级要明显得多。2.3 数据清洗与对齐比模型结构更容易翻车的细节从头训世界动作模型还有一个绕不开的活就是数据对齐。所谓对齐是指图像帧的时间戳、关节状态的时间戳、动作指令的时间戳三者必须严格同步。采集系统里有一个极其常见的坑图像流是30Hz关节状态流是100Hz两者如果不做时间对齐模型会把“旧图像”和“新动作”混在一起学训练出来的策略会出现明显的响应延迟看起来像是模型反应慢其实是数据源不同步造成的。我在代码里专门加了一个预处理模块先把所有传感器的ROS bag文件解析成统一时间轴的样本帧因为动作模型训练需要一个时间上连续、间隔一致的输入序列比如每隔20毫秒取一帧图像和对应的动作。实际做的时候图像帧将作为序列的最新状态动作取该帧之后实际执行的那一步后续观测单独作为动态预测的监督标签。这个细节决定了模型是“看到图就决策”还是“看到图再等一下才反应”差别非常大。另外一个容易被忽视的清洗环节是动作平滑性检查。人类示范偶尔会有大的抖动比如快碰倒物体时猛的撤回这种动作轨迹平滑度很差但在统计上只占少数并不会显著影响模型分布。问题是动作模型的输出必须平滑稳定学习个别脉冲式变化会导致模型夹在“两种模式”之间中间生成一些似像非像的动作机械臂执行时就会表现为轻微震颤。因此我会实时计算相邻动作的差分绝对值把一些异常突变的轨迹段剔除然后再送进训练管线。3. 模型骨架让“世界压缩”和“动作解码”各司其职3.1 观察编码视觉时序特征怎么进模型因为不借视频大模型我的输入编码器完全是在训练过程中从头学出来的。一个很关键的经验是不要一上来就用特别大的视觉骨干网络先用中等规模编码器重点放在时序建模上。动作控制需要的信息往往比“看图识物”更聚焦模型真正要关心的是物体位置、相对姿态、运动趋势而不是背景里是什么材质、桌上有什么装饰品。我的编码器设计经验是用视觉骨干网络提取单帧特征把6帧图像的特征在时间维度上拼接起来送入一个轻量级Transformer层对时序依赖建模。注意我说的是“轻量”通常6层、256维就可以了。更大的模型在仿真里看起来精度会略高但真实部署时延迟增加而且训练时间几乎翻倍收益不成比例。把视觉特征和机器人本体状态关节角度、末端速度在特征层拼接也很关键。视觉特征告诉模型“世界长什么样”本体状态告诉模型“我现在到底在哪个姿势”两者缺一不可。很多从零训练翻车的案例都是因为模型只有视觉输入结果同样的画面被解读成完全不同的状态。视觉有歧义的时候本体状态就是那个“唯一校准线”。3.2 动作解码连续动作空间的两种主流出口动作解码部分我试过两个方向一个直接回归另一个基于扩散模型。直接回归的做法是用一个几层MLP把特征映射成动作向量输出7维或者N维关节角度向量用MSE做损失。这个方案的优势是推理极快一毫秒内就能出结果而且实现简单训练稳定。缺点是表达不了“多模态动作”也就是面对同样的情况有多个合理动作时模型只能输出一个平均解容易被“和稀泥”。扩散策略Diffusion Policy是另一种更稳的路线把“动作生成”当成一个从噪声到动作的去噪过程以观察特征为条件在每一步迭代中逐步还原动作轨迹。它最大的好处是能够表达多模态分布动作平滑性也会更好特别适合需要精细操控的抓取任务。缺点是推理需要十几步甚至几十步去噪迭代延迟明显提高训练时也会遇到扩散模型常见的模式坍塌、训练不稳定问题。我给一个实际建议如果你的任务不需要太强的多模式适应性比如只是固定流程的码垛、分拣那直接回归就够了省心省力但如果你做的是灵巧操作、物体摆放角度随机变化很大的任务我的建议是扩散策略方案用它的多模态能力换取操控质量。我自己的最终模型是这样分工的姿态粗略位置由扩散head生成一个未来50步的轨迹片段末端时刻的精细微调用一个直接回归的修正头效果是两种优势都拿到了推理延迟也能控制在十几毫秒以内。3.3 世界建模部分用一个辅助表征头把动力学关系钉进来既然叫世界动作模型就不能只有“观察-动作”的黑盒映射。我在实现里增加了一个动态预测头它的输入是当前状态特征和候选动作embedding输出是下一时刻的状态表征预测。这个预测头不输出图像而是输出一个低维潜向量。训练时我们用对比学习把这个潜向量和真实的下一时刻状态表征拉近同时让它和错误动作产生的预测上拉开差距。这个设计的意义在于迫使模型在表征空间里理解“动作会导致怎样的状态变化”。有了这条约束模型就不是简单抄演示了它在学一种“动作-状态转移关系”。实测效果中加了动态预测头以后模型在新初始条件下的任务成功率比纯行为克隆高出10%左右而且对观测噪声的鲁棒性更好。不过这个动态预测头有调参风险。它太弱了起不到作用太强了又会喧宾夺主让模型专注于预测状态而忽略了动作正确性。训练时我给动态预测头设置了一个自适应权重任务成功率下降就降低它的影响这是从几次失败调参中总结出来的简单策略。4. 从头训练的关键回合loss设计、评测方式与迭代闭环4.1 多任务损失怎么配比dynamics loss为什么不能一开始就压满从头训世界动作模型最核心的训练目标是让只看24帧视觉输入和一组机器人状态模型就能推理出下一串动作指令的模型等于我对模型的预期是“像个有经验的操控者那样”。我同时训练三个任务的损失总loss是它们按权重求和。第一项是动作损失约束生成的动作轨迹和真实示范轨迹之间的差异。第二项状态动态损失用的是对比学习约束预测的状态表征和真实下一帧状态表征更近。第三项是特征正则化防止模型只在潜空间里自嗨要求状态embedding保持可区分度。动作损失的初始权重是1.0状态动态损失我特意设置成0.1特征正则化是0.02这样模型在早期会专注于“模仿生成”先把动作形态学像再慢慢逼它理解因果。关键教训是dynamics loss不要一上来就压满。我在第一版实验里把它的权重设到0.5结果模型训练十几个epoch后任务成功率总是冲到某个水平就掉头向下。原因在于模型过早陷入“预测状态”的任务导致动作表征没有成型整体收敛到低水平。后来我改成warm-up策略前5轮训练让动态预测头以很小的权重学习等到动作损失降到一定程度后再逐步调高它的权重整个训练过程就顺利多了。4.2 评测不能只看成功率还要盯动作质量评测方式上我最开始只看任务成功率比如抓取任务的“抓起来并放到目标点”比例这带来一个假象一个模型的成功率到了70%和另外一个成功率也是70%可能一个动作流畅得像真人控制一个动作在途中有明显抖动甚至接近摔倒只是最后勉强完成了任务。只盯成功率会把动作质量严重低估。后来我加了三组得分分别是拿机器人末端轨迹的每秒总变化量来描述平稳性拿动作最大变化量与真实示范差异的均方根误差来衡量动作合理性还有拿末端位置在任务窗口内的最大偏差来跟踪动态表现。评测用的奖励是装具任务采集的验证集样本不是训练集。通过这套评测我发现一个很有意思的现象两个结构相同的模型一个用纯BC训练一个加了状态动态损失成功率可能只差几个百分点但动作合理性得分差距可以达到20%以上。这印证了我对动态建模作用的判断。4.3 一组可以在两张24G显卡上跑起来的参考配置很多人会觉得从头训世界动作模型门槛很高其实难度没有想象中那么大。我在项目里的软硬件配置和训练参数提供出来作为参考视觉特征输出维度是128喂给Transformer序列的帧数是6Transformer有6层、8个注意力头动作head部分我用的是带有4个扩散步的扩散策略变体。数据方面单条轨迹取100个控制步每步包含一张第三视角图像和一组7维末端动作标签原始数据存成HDF5接在DataLoader里。训练的batch size是24序列长度是6帧用AdamW优化器加线性warmup训练总步数20万步。当我不加任何压缩组件时整份训练的确占了接近一半显存但在开了bfloat16混合精度后两张RTX 4090就能维持在1200步/秒左右的训练速度一个完整的训练周期大概18个小时。这个成本在机器人学习方向上不算高个人开发者也能负担得起。5. 实操中踩过的四个坑以及对应的解决办法5.1 动作高频抖动模型学到了噪声而不是平滑的轨迹第一个让我头疼的问题是模型训练完以后机械臂执行任务时末端一直在小幅度高频抖动人眼能看到明显的震颤。从评测指标也能发现动作平稳性得分极低。排查了很久我发现根源在数据清洗环节。遥操作采数据时人的手本来就会有微小肌肉震颤如果我把这些震颤当作真实信号教给模型模型就会把这部分噪声学进生成轨迹里。解决方案有三层。第一层在数据端对训练数据里的动作轨迹做平滑滤波但保留必要的快摆动作不能被过度磨平用非线性扩散滤波会好一些。第二层在模型端给动作损失加了一个梯度惩罚——相邻两个行为之间的变化不能过猛让模型知道“平稳输出”也是一种准则。第三层在推理端对输出的动作向量做指数滑动平均推理把预测结果用上一帧结果和当前帧结果按比例融合。三层做完动作平稳性得分恢复到了和真人示范差不多的水平。但我得提醒一件事推理端平滑不能调太重。有一次我把平滑系数设到0.9动作是稳定了但模型对快速变化的反应变得极其迟钝执行任务时明显“慢半拍”反而抓取成功率大幅下降。这种系数要按实际机器人响应速度微调没有标准答案。5.2 仿真里满分真机上一塌糊涂分布偏移的止血方案仿真里训练出来的模型拿到真实机械臂上第一轮测试的成功率几乎是0。这个结果虽然早就有所预期但真的看到时还是很受打击。核心原因是分布偏移仿真环境的纹理、光照、物体摩擦系数和真实环境差异太大。同样一个位置与姿态特征在仿真和真实状态下编码出来的差异极大。我的止血方案是“两步走”第一步在仿真阶段做随机化把背景纹理、光照强度、物体形状参数都做了大范围随机采样让模型不能依赖死板的视觉特征第二步在部署前用少量真实遥操作数据做微调第一步数据占了80%第二步数据量只要50条轨迹期数下在模型上的效果是从0%提升到了42%左右。它没有一步到位但这套两步走方案已经是“不再用仿真数据转向真实微调”前的最稳路径。5.3 dynamics头收敛缓慢特征预测缺乏语义监督动态预测头最初设计时我让它去预测下一时刻的特征向量用的是简单的最小均方误差。结果这个头的loss下降非常慢神经网络你说它在随机猜也行。后来我想明白了a向量本身没有语义约束何来一致性呢同一状态的观察在视线角度略有变化时特征向量可能差异很大在这种情况下仍希望预测头“精确预测”等于让模型做一件它根本没学过的问题。解决办法是更换了loss形式用对比学习代替回归。我把当前状态特征定义为锚点模型输出一个预测特征然后把真实的下一时刻特征当成正样本把随机选取的其他时刻状态特征当成负样本用InfoNCE损失。这样模型需要学的不是“预测一个精确的特征值”而是“区分哪个才是真实的下一状态”。这个改动让动力学预测头的收敛速度明显提升同时也让策略头的准确率略有提高。这里也顺带说明一下如果你头铁一定要保留回归式的动态预测头那最好是预测“状态的残差变化”也就是delta特征而不是绝对值。预测残差比预测绝对值要容易很多很多模型都因为这一点模型通得太明显了。5.4 记忆演示但不泛化数据多样性补齐策略最后一个坑也是最隐蔽的一个模型在训练集上表现很好但一旦把任务目标换成训练时没有见过的新位置成功率立刻崩盘。说到底这是模仿学习的老毛病——记忆演示路径没有学到背后的控制逻辑。我最初用固定的物体位置、固定的目标点采集数据模型实际上把“在某个位置伸手、合爪、提起”背了下来。我做过实验在训练时把抓取起始位置从固定的正前方改成左前、右前、近端等九个位置每个位置各采一部分数据。另外再加随机扰动物体在桌面上放置时位置有正负5厘米的随机偏移目标摆放位置也不固定。这两个改动让模型在新位置测试成功率从33%提高到68%。这说明世界动作模型的泛化能力很大程度上取决于训练数据的覆盖度模型结构能压缩多少复杂度不能凭空造出没见过的模式。我建议大家在采集数据之前就认真地设计好任务的状态空间列出可能出现的初始位置、目标位置、障碍物形态然后每个维度都采样并采集数据。把数据采集做得像做实验设计一样精心比每次换个模型结构都更顶用。有的团队花了一个月换模型架构成功率原地不动把数据覆盖度提升一倍效果反而立竿见影。这是我在这轮从头训过程中最强烈的感受。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑