从在梦里打游戏到显示机器人操作:世界模型的演进全貌

前言

沿一条技术主线梳理世界模型八年演进:从 Dreamer 的梦境训练、JEPA 的表征预测、Cosmos 的视频模拟,到 World Action Model 直接生成机器人动作。

部分内容以及截图来源于:https://v.douyin.com/y_p1rfU3UtU/
博主【可lip】的抖音作品,非常非常优秀的一个抖音具身智能博主。
原视频较长,该博客提供文字版简短总结,也算是我自己的学习笔记。
任何总结、解读无法代替原视频,如果有时间和心力,还是建议大家前往观看博主的原视频!。

@

1. 世界模型两条主线

在这里插入图片描述

1.1 从World Models到Dreamer:在模型的梦里训练策略

先说2018年那篇World Models。作者是Jürgen Schmidhuber,也就是LSTM和RNN的作者,这篇工作是他主导的。要理解这篇论文,得先搞清楚“世界模型”这个词到底什么意思。论文里的定义是这样:你的大脑里有一个关于世界内部的模型,它在给定当前动作的条件下,预测接下来的感官输入会是什么。

在这里插入图片描述

论文举的例子是一个棒球击球手——球飞过来只有几毫秒可以反应,他能打中,是因为脑子里这个内部模型已经下意识地预测出来球什么时候到哪里,然后肌肉只要跟着下意识挥棒就行了。论文第一张图左边是一个人骑车,他脑子里想的就是骑车的画面,而世界模型其实就是我们脑海里想象的这个模型的意思。右边是1990年Schmidhuber自己画的图,他最初的设想就是一个RNN当控制器,另一个RNN当世界模型去预测下一步的输入和奖励。2018年的这篇论文,其实有点像把他当初的这个设想做成了现实。

在这里插入图片描述

这篇论文的结构,基本是以一个开赛车游戏的任务来出发的。这个任务有一系列的视频照片,然后有一个action,这个action可以让你控制简单的赛车向左走还是向右走还是刹车等等。

模型具体来说,把整个系统拆成三块:V、M和C。V就是vision,是一个VAE,负责处理视觉图片。他把一帧64乘64的画面压成隐空间latent,和现在的VAE其实是一样的,训练目标就是Z能够把这一帧画面重建回来,标准的VAE。

在这里插入图片描述

重点是世界模型M,也就是memory。它当时的做法是一个LSTM加一个混合密度网络的输出层,叫MDN-RNN。它每一步的输入是三样东西:第一个是当前的Z,还有当前的action,就是你这个小车往哪开,还有自己上一步的隐状态H。输出是下一个Z的概率分布。这里的分布并不是一个点,因为环境是有随机性的,所以M输出的是一个混合高斯模型。

在这里插入图片描述

H是什么呢?如果大家了解LSTM的话,它是一个LSTM的隐藏状态,具体其实就是256个数,它并不是训练出来的,而是每走一步算出来的一个向量。它的更新规则就是新的H等于LSTM吃进当前这一帧的Z、当前的动作A,还有上一步的H,这些东西共同计算出这么一个H。所以H这个东西天生带时间维度的记忆。另外就是C,也就是controller,它其实非常简单,就是一个线性层,输入是Z和H拼接起来的一个向量,输出就是未来的动作。

V和M合起来就叫世界模型,C只是它的一个策略。大家看,其实主要世界模型就是这个M。M学的就是:我现在看到的Z,然后我做了当前的action,接下来我会看到什么。也就是它是给定当前的世界状态,还有当前的动作,我对未来状态的一个预测。这个就是世界模型的核心,也是未来所有世界模型的基础,这个概念从18年就有了。

在这里插入图片描述

训练总共分5步 :第一步,让一个随机策略在这个环境里面开1万局,就是这个车乱走,每一帧的画面和当时的动作都记录下来,这个时候是随机的。第二步,用这些画面去训那个encoder,训那个VAE,也就是训V,这一步是纯无监督的损失,就是重建,看它重建的行不行。第三步,用这个训好的V,把刚刚那一万局的画面都变成了隐空间Z,配上录下来的action动作,然后去训M。M的训练就是去预测下一步的Z,给定当前的帧,去预测下一步Z。第四步就是定义C,那个线性层。第五步,当时还没有用梯度下降的方法去训练这个策略,而是采用了进化算法去搜。它不用梯度,维护一群候选解,然后每个候选解去拿真实的环境跑几局,看总分,分高的那个留下,在它附近再采一批,这样一代一代地往前推。

在这里插入图片描述

实验就是一个开车的小游戏,叫Car Racing,是一个俯视角的赛车游戏。赛道每局是随机生成的,它有三个连续动作,比如转向、油门、刹车,一局平均900分以上就算解决了这个问题。它整个的原理是什么呢?一张静止的画面,可能你说不出开多快、往哪儿转。Z就是一张画面的压缩,而H就是关键。H是LSTM一路读着Z和动作的序列积攒下来的,因为M里面输入有它自己上一步的H,H就成了从第一步到现在输入全部的压缩的摘要。它为了要预测下一帧,被这个任务逼着,就可以把速度、航向,还有这个弯要拐多久等等这些一帧看不出来的量全部存到H里面。所以说它本质就是一个在图像领域的next token prediction。

我当时看的时候觉得很有趣,next token prediction这个在LLM里面被证明非常成功的例子,其实在18年就有人尝试在这个图像领域去做了,只是当时可能受限于各种环境,它并没有这么成功。好在在26年的时候,这个思想又重新焕发了它的光彩。这个工作的细节大家不用太了解,因为这个工作实在太久远,我就想给大家介绍一下它的思路,就是世界模型的思路,就是预测下一帧。

随后,Car Racing是文章的第一个实验。第二个实验它做得更加激进,就是所有的实验直接在梦里面做。环境是VizDoom,是一个第一人称的游戏。对面的怪物朝你扔火球,你只能左右地移动,活一步多加一分,最多是2100分。左边是真实的画面,还有它重建出来的画面,它可能有一些错误,比如怪物数量都不对,但是可能够用了。这次的做法是C完全不碰真实的游戏,跟之前不一样。因为M的输出是下一个Z的分布,所以你可以从真的这个分布里采样一个Z,然后当成下一帧喂回M和C,就这样一直在模型内部脑子里滚下去。这样的话M就可以生成出一段从来没有发生过的游戏过程,然后让它自己进化。它当时的结果其实可以达到了1092分,还是非常高的分儿,也就是只在梦里面训练就可以达到这么高的分数。

在这里插入图片描述

但是在梦里面有一个坑。因为这个它只是一个近似的模型,它在训练数据稠密的地方很准,但是在训练数据稀疏的地方会犯错。而C的优化只在梦里面进行,它分不清真的高分和这个模型算错了的高分。这其实就是sim-to-real的gap。

举个例子,作者在早期的实验里面找到了一个对抗的策略:站到某个位置,他发现梦里的怪物永远不发火球,这个火球刚成型就消失了。也就是说,它放在梦里面满分,但是真实游戏里面会一塌糊涂。为什么这样呢?其实就是这个C拿到了一个M全部的隐藏状态,等于拿到了这个游戏引擎的内部。它可以把M推到这个训练数据从来没有覆盖过的地方去。这个地方M其实是错的,就是世界模型本身预测错了。而这个错误对这个策略是有利的,所以就造成了这个sim to real的gap。这就是第一篇World Models的做法。大家看,其实已经建立了当前这个world model的雏形。

接下来讲一讲之后的一篇,就是Planet。Planet主要做了两处改动。第一处是把V和M合成一个模型训了,就不要分头训。第二个就是它加了一个reward的头,可以从状态预测这一步得几分。这样Planet就必须保留对预测下一步和预测分数有用的信息。但是它的代价就是从此这个世界模型就绑定了任务。到后面也有很多人批评这种做法,就是你这个reward的头一加,你这个世界并不是单纯的世界,而是针对这个任务去优化的世界。第二个最重大的改变就是这个RSSM,也是后面Dreamer系列用的这个模型,它叫recurrent state space model,循环状态空间模型。因为当时还没有Transformer,大家去处理序列基本都用的类似这样的东西。然后就是消融实验,对比了这个RSSM模型比其他的模型都好,这里就不细说了,因为这是确实是上古模型,大家可能也不太知道。

在这里插入图片描述

接下来说Dreamer V1。Dreamer V1是第一代把Planet每步在线规划换成了一个在想象里训的actor critic。它的步骤是这样的:首先我有一个replay buffer,然后从replay buffer里面抽,比如抽50条真实的序列,然后去更新当前的世界模型,就是重建下一帧。然后从这些真实状态出发,在我的脑子里面,从世界模型的脑海里面想象15步,然后更新我的actor和critic。每做100次梯度更新,就拿当前的actor到真实的环境里面再跑一局,之后把跑完这一局再存进replay buffer里面。World model是采一次数据一条之前走完,比如我就采一万条,然后直接训就行了,再也不回头。而Dreamer是三块一起循环地训。

在这里插入图片描述
在这里插入图片描述

这为什么能解决作弊呢?我们假设这个actor在梦里面发现,站到某个角落,火球会消失,它就学会往那边跑了,对吧?我就永远被怪物砸不到了。那下一轮我们到真实环境里面,他真的跑到了那个角落,但是发现火球没有消失,他被打死了。那么这段真实的经历,在那个角落里的状态,还有真实的下一帧,包括分数归零的这个reward等等这些信息,就被存到了这个replay buffer里面。下一轮世界模型会在这批数据上去更新,那个角落的预测就会被纠正。它发现从那儿出发的这个小象轨迹,现在显示我死亡了,那么critic给他的这个估值,也就是这个分数就会掉下来。Actor就学会,我这个策略是错的,我就不再去往这个策略学了。Actor去钻漏洞的那个动作本身,其实就是在替模型采集它最缺的那块数据,也就是他把这个素材加到了自己循环训练的这个流程里面。这是Dreamer系列最大的一个更新。

然后简单看一下Dreamer V2和V3的贡献,其实都只是在一些架构上做了具体的改动。比如Dreamer V2,它是把Planet从高斯改成了离散。Dreamer V3提出了一个超参数优化的方法,它其实没有改新范式,但是它加了一堆trick。总之它能做到的就是同一套超参数可以换不同的任务就可以跑,不用任何人类的数据。比如它当时做到了从零在《我的世界》Minecraft里面可以挖到钻石。这个可能大家如果经历过那个年代可能会听过这个新闻,还登在了Nature上面。然后它还对模型做了scale,从12兆放大到了400兆,还做了一系列的消融实验。其中有一个最重要的结论就是:世界模型的性能主要来自于无监督的重建损失,去掉reward、去掉value的梯度几乎不掉分。也就是说,世界模型的表征,其实并不是靠具体某一个任务学出来的,这个非常重要。这个其实就是后来先用无标注数据预训练出一个世界模型这条路线的一个重要依据,我们放在后几期会讲到。总之,Dreamer V3就证明了世界模型重要的是世界,而不是任务。

最后重点讲一下DayDreamer。这篇工作做的事就是把Dreamer刚刚讲的那一系列方法真正放到了四台真机器人上,然后我们看看这个世界模型在物理世界成不成立。而且设定是非常硬的那种,真机的在线强化学习,不用任何仿真,不用任何人类视角,直接从真实物理世界去,所以这篇工作非常重要。它整个过程怎么放到真机上,我这里就不赘述很多公式和细节了,用一个清晰的例子给大家说清楚:
首先我们有一台真狗,机器狗,它有12个电机,身上有IMU和关节编码器等等。另外我们还有一台电脑,这台电脑上会跑两个程序。另外我们还有一个几十行的打分代码,也就是每二十分之一秒读一次传感器,算一个分数。身体越正,分数越高;身体正了之后,腿越接近站姿,分越高;站好了之后,往前走得越快,分越高,等等。其实这个东西就是一个打分器,它是一个纯规则的rule-based打分器,可以读取当前的传感器,然后判断这个狗的状态是好还是坏。

在这里插入图片描述

我们分别来说说这几个阶段都在做什么。首先,狗那侧的程序非常简单,它就一直在重复一件事,每秒20次,就是在读传感器,然后把传感器里的数据喂给当前的一个大脑。这个大脑可以理解成action或者agent,就是一个小的神经网络。然后大脑会输出十二个关节的目标,把这个东西发给电机,然后把刚才感觉到了什么、做了什么、得到了几分,记到一个日记本里,也就是这里的replay buffer。开头的几分钟,因为大脑是个随机数,这个狗就在地上乱跑乱蹬。最后每隔一小会儿,狗那边的程序就会往磁盘上看一眼,看看电脑那边有没有存下新版本的大脑,也就是有没有存下新的checkpoint。如果有,我就换上,然后继续循环我这个蹬腿的动作。狗这一侧自己完全不学习,它只负责一个是动,另外一个是记日记,放到这个replay buffer,这个就是狗那一侧。

然后另外一侧我们看看电脑那侧在做什么。它做的其实也是一个循环,第一步就是读日记,从这个replay buffer里面读。它要去学我的身体到底是怎么回事,它都不认识这个狗,我得学学这个狗到底是什么样。具体做法就是我从这个日记本里面抽几十段、每秒32步的记录,去训练一个网络去回答:假如说我现在腿是这个姿势、这个速度,然后我又发了这样的action,就是电机指令,那下一瞬间我会感觉到什么,我会得几分。那其实这个网络就是世界模型。注意这里的世界,它并不是我们想象的一幅画面或者一个视频等等,它其实就是我的身体对指令的反应,包括了这个重心怎么移动、哪条腿会打滑、这样蹬会不会翻过来等等。然后它也会顺带预测这个分数,分数就是我们刚刚讲的那个打分代码的输出,它会预测这件事。

第二步,有了这个身体模型之后,这时候电脑就可以不动真狗地去做实验。具体做法就是我从日记里的每一个真实的瞬间出发,然后我去问接下来15步,如果我这样蹬或者那样蹬,然后让身体模型往后推演15步。注意这个推演并不是发生在真狗上,而是发生在这个世界模型的脑海里,也就是发生在梦里面。然后我去看这个模型预测的分数,哪种蹬法最高,我们就把大脑往那个方向改一点。这样的好处就是,一次抽出来几十段日记可能有1000多个瞬间,每个瞬间都往后推15步,那几万次脑内实验可以放在显卡同时算,几十毫秒就会完成这样的训练。
在这里插入图片描述

第三步就是,我把这个比如我往前推进了第几步,我知道这样蹬会好一点,这个时候我会存下一个checkpoint,也就是它的大脑。然后我们会把这个checkpoint放到这个磁盘里面,然后就等狗那一端来取。这个时候狗取了之后,它就重新做动作,然后重新去感知,然后重新去记日记。这个时候日记本里又会多了狗刚才用新大脑走出来的这个新记录,然后不断地往复循环。最终我们就可以学到一个狗如何站起来,学到最好的奖励对应的动作是什么样。我觉得非常非常聪明,很有趣的一个架构。

为什么这样一个小时就能学会狗怎么从翻过来的状态起身呢?因为大家算一下,狗一个小时可能最多能走这个72000步,而且它还得摔倒、翻身慢慢来。但是显卡在这一个小时里面可以在它的世界模型,也就是身体模型里面预演几千万步它的真实经历,只是用来校准这个身体模型的。而它练技术的过程是在大脑里面完成。这就有点像这个运动员每跳一次水,假如说跳水运动员,每跳一次之后会在脑子里回放、想象几千遍我该怎么做,然后再去跳下一次。然后真实世界给他的反馈,他会更新自己脑子里面的这个预演的环境。其实就是这样。

那其实看上去很像仿真啊,那我为什么不类似用这个MuJoCo这种仿真器,我想把它训好,再搬到真机,它跟这种MuJoCo一类的仿真器有什么区别呢?其实就是一个是手写的世界模型,它其实和真机对不上。就像MuJoCo这种基于物理的仿真器,它也许对这种比如电机的力矩曲线,或者甚至细致到这块地板的摩擦力、绳子的软硬、相机画面的光照等等,它可能没法预测真实的场景,这个就是sim-to-real gap,这也是现在具身智能很大的一个问题。如果在模拟器里面的仿真完全没有办法代替真实的环境,而学出来的这个世界模型是你用真机自己用真实的数据去拟合的。

在这里插入图片描述

真实画面压成隐状态,世界模型在脑内滚动预测下一帧,策略只在梦里进化。

1.2 Dreamer式世界模型:RSSM架构与真机训练实验

要理解Dreamer这条路线,得先明白它到底在解决什么问题。前面提到的那台电机、训练时地板的摩擦系数,这些物理细节其实全都藏在数据里,不需要任何人显式地把它们写进模型。这跟MuJoCo那种仿真器完全不同。MuJoCo可以显式地把物理参数一条条训出来,但真实世界太复杂了,你没法量化每一个细节。Dreamer的做法是把这些知识隐式地学进去。代价也很直接:必须用真机训练,而且几个小时起步。论文作者自己提到,狗会摔坏很多次。这句话听着轻描淡写,但它是这条路线的核心成本。你没法在仿真里预训练好了再搬过来,模型必须一边在真实硬件上跑、一边摔、一边学。

模型本身的结构可以拆成四块来看。最左边是encoder,它负责把这一步所有传感器读数融合成一个离散的Z。注意这里的“所有”是字面意思:机械臂的关节角、夹爪的开合状态、末端位置,再加上相机图像,每一个模态各走一个小的编码器,编完之后再拼起来,得到这个Z。所以Z不是某一类信号的压缩,而是多模态信息的一个联合离散表示。接下来是RSSM,也就是循环状态空间模型,它是整个架构的核心。RSSM在预测的时候不看当前输入,只凭上一步的H和动作action,预测出下一个Z。图里表达得很清楚:每一个Z的输入其实由当前的表示、当前的H,再加上action共同决定。换句话说,模型学的是“给定我现在脑子里的状态和我要做的动作,下一步的世界会变成什么样”。然后是decoder,它从状态重建出每个模态——关节角、夹爪、图像等等。但这里有个关键点:decoder只在训练时起作用,它重建出来的东西是当作训练信号用的,推理和控制的时候并不需要真的把图像画出来。最后是reward头,它从状态直接预测当前这一步的分数。为什么要有这个头?因为只有reward才能让模型在“脑子”里自动去学——没有奖励信号,梦里的尝试就没有方向,模型不知道该往哪个方向优化。

把这四块串起来,整个训练流程可以一句话概括:机器人不停地往replay buffer里写数据,电脑不停地用replay里的数据练,模型不看传感器也能猜出下一步,然后在猜出来的“梦”里尝试动作,比预期好得多的结果就存下来,改好的策略定期再发回机器人,这样循环往复。这个循环里有几个值得注意的地方。
第一,学习和执行是分离的——机器人负责采集,电脑负责在隐空间里做梦和优化,两边通过replay buffer和定期下发的策略连接。
第二,所谓“在梦里尝试动作”,指的是模型在RSSM的隐空间里向前推演,不需要真的让机器人在物理世界里试错,这就把大量探索的成本从真机转移到了计算上。
第三,筛选机制是“比预期好得多”才存下来,不是所有结果都留,这相当于在梦里的尝试也做了一层过滤。

但即便有了梦里的推演,真机代价依然绕不开。前面说的“几个小时起步”和“狗会摔坏很多次”就是这条路线最实在的门槛。你需要在真实硬件上跑足够长的时间,让replay buffer积累出足够多样的数据,模型才能在隐空间里学到可信的动态。这段时间里机器人会反复失败,硬件损耗是实打实的成本。

实验结果里最直观的是机器狗那段官方视频。大概一个小时这样来回循环地训练,机器狗就能学出四脚同时腾跃的步态往前走。视频里随着步骤推进,你能看到它慢慢站起来——讲解里说“这可能就是世界模型起作用了”——到后面它完全可以从零开始学会怎么走。从零开始这个限定很重要:没有预训练、没有示教、没有手工设计的步态,就是一个小时的真机循环之后自己冒出来的腾跃步态。

接下来是那个著名的推倒实验。训练一个小时之后,作者拿一根杆子反复把它推倒,让它在线上再学10分钟,10分钟以后它就能适应。适应的表现分两档:轻推的时候它会有一个反抗能力,会顶住;重推之后也能马上翻身再站起来。左边那段视频展示的就是这个过程,右边的学习曲线则证明它比传统的一些方法都要好。这个实验想说明的是,世界模型学到的不是某一个固定步态的肌肉记忆,而是一个能在线更新的世界表示——被推倒这个事件本身超出了训练分布,但模型能在10分钟的线上学习里把这个新情况吸收进去。

还有一个观察挺有意思,是关于光照适应的。机械臂那个实验是在夜里训练的,天亮了以后日出的强光打进来,图像层面发生变化,性能会突然直接跌到0。曲线图上橙色那条线就是图像这条线,能看到它掉下去的那个点。作者什么都没干,没有做任何干预,让它继续学。5个小时以后,它居然就恢复了,并且超过了原来的水平,也就是绿线那条水平。这个现象之所以值得单独拎出来讲,是因为它展示了自我循环训练的一个副产品:模型不仅能适应新的动力学,还能适应传感器输入本身的分布漂移。日出这种变化不是机器人动作引起的,是环境单方面变了,但只要有reward信号在,循环就能把它拉回来。

在这里插入图片描述

把这一节收一下:Dreamer这条路线在23年以前代表了世界模型的一种典型做法——用RSSM在隐空间里做预测,用decoder重建当训练信号,用reward头驱动梦里的优化,真机采集和隐空间推演交替循环。跟现在动辄几个B参数、画面精美的世界生成器比,它确实粗糙,性能也不太好。但一些核心思想在18年的时候就已经奠定了,而且相当超前。讲解里有个类比说得很到位:我们现在看大模型,本质上也是next token prediction,那其实也是在预测下一帧的动作。回看这段历史,就像看古法时代大家是怎么做的——工具简陋,但路子是对的。

1.3 JEPA路线:从LeCun立场文到V-JEPA 2与DINO-WM

JEPA这条线的起点,是LeCun在2022年6月挂在OpenReview上的一篇立场文,标题叫《A Path Towards Autonomous Machine Intelligence》,全文62页。这篇东西有点特别:没有实验,没有代码,纯粹是一份设计方案,相当于LeCun把自己对智能体怎么学习世界、怎么规划的看法整个摊开来写了一遍。后来这条线上的所有工作,基本都能从这份文档里找到源头。

从时间线上看,这条线走得不快。2023年1月先出了I-JEPA,做的是图像;2024年2月出了V-JEPA,把同样的思路搬到视频上;2024年11月,Meta和纽约大学合作发了DINO-WM,第一次把表征空间的预测拿去做仿真机器人的规划;到2025年6月,Meta和Meta FAIR联合LeCun发布V-JEPA 2,这一版才第一次上真机,数据规模也扩了上去。另外提一句,LeCun后来已经离开Meta,他自己的公司AMI Labs今年3月融了10亿美元,专门做世界模型。

JEPA的全称是Joint Embedding Predictive Architecture,联合嵌入预测架构。它的结构可以拆成两半看:输入X走一个编码器,得到嵌入SX;输入Y走另一个编码器,得到嵌入SY。然后有一个预测器,从SX去预测SY。整个预测发生在表征空间里,不在像素空间里。这是它和生成式路线最根本的分歧点。

LeCun批评像素空间的生成式预测,主要抓了两个问题。第一个是未来的不唯一性:给定同一段过去,未来可以有很多种走法,如果模型非要在像素空间里预测一个确定的未来,那它只能把所有可能的结果平均一下,输出就是模糊的。第二个是真实世界的细节根本不可预测,而且也不重要——一片树叶怎么晃、墙上的反光怎么变,这些信息你没法预测,但生成式模型被迫要把容量和算力花在这些地方。

JEPA的应对方式就藏在这个结构里。编码器X把X压成SX,编码器Y把Y压成SY,预测器从SX预测SY,能量函数就是表征空间里的预测误差。关键在于,SY是先经过编码器Y编码之后才拿来当目标的,所以编码器Y实际上决定了「摘要」里写什么。比如做机械臂任务,摘要里可以只留机械臂的位置、夹爪的开合状态,背景的纹理、反光这些直接丢掉。这样一来,不可预测的细节被编码器过滤掉了,预测器不用去背那些它背不出来的东西。

未来不唯一的问题也是靠编码器解决的。编码器的不变性会让不同的Y映射到同一个SY上——几种不同的未来,只要在语义上是一回事,编码之后就是同一个点,预测器预测这个点就不存在「平均出模糊」的问题了。除此之外,JEPA还引入了一个潜变量Z,用来表示X里没有、但预测Y所需要的信息。最典型的就是动作:光看当前这一帧,你不知道接下来会往哪个方向动,动作方向这个信息就在Z里。

这套设计有一个绕不开的坑:坍缩。因为目标SY是编码器自己算出来的,网络很容易偷懒——把编码器输出全压成常数,误差直接归零,预测器什么都没学到。LeCun在这个问题上的立场很明确:他反对用对比学习来解决,理由是高维空间下负样本的需求量是指数增长的,不现实。他主张的是四条准则。第一条,SX要尽可能多地携带X的信息,同时摘要不能为空;第二条,SY同样要尽可能多地携带Y的信息,也不能为空;第三条,SY必须能从SX里预测出来,也就是它必须是可预测的;第四条,Z携带的信息量要尽可能小,否则预测器同样可以作弊,把答案全塞进Z里,无视SX也能把误差压到零。

I-JEPA是这套想法第一个真正落地的图像版。流程很直白:一张24×24的图片,切成16×16的小块,然后遮住其中一部分,让模型去预测被遮住的内容,本质上和MAE是一个路子。具体来说,目标区域大概占整张图的15%到20%,图里狗的一部分被挖黑,Y是整张图,但要预测的只是那几块被挖掉的目标区域。上下文编码器只允许看没被遮住的部分,输出SX,也就是前面说的那个摘要。预测器拿SX,再拿四组mask token——这就是Z的部分,因为图像任务里没有动作,Z要尽量信息量少,所以它只是一个单纯的mask token,起的作用接近位置编码,告诉预测器该猜哪一块。另一边,Y的编码器看了全图之后,把要预测的块抽出来。两边一算loss,就完了。

在这里插入图片描述

V-JEPA就是把I-JEPA搬到视频上,2024年2月做的,原理基本一样,区别在挖空的方式。视频可以理解成一个厚的立方体,挖空就是给它戳几个透明的窟窿,而且必须保证全部穿透,不能有任何泄漏。原因很实在:如果某一帧没被穿透,模型就可能照抄那一帧,反过来脑补出前面几帧,那就等于作弊了。架构上,编码器Y由编码器X通过EMA更新而来,预测的目标仍然是挖空的内容,这一点很像video MAE。

在这里插入图片描述

这里有个值得停一下的问题:既然叫世界模型,为什么不直接让它根据过去预测未来,而非要用挖空这种方法?文字稿里给的原因是——直接预测未来帧的结果会更差。实验数据是,直接预测后面得到71,用挖空的方法反而更高。这说明至少在当时的算力和数据量条件下,用自监督方法直接预测下一帧这个想法还没有完全work。这个结果其实挺能说明问题的:JEPA在视频上的第一版,重点还放在「能不能学到好表征」上,而不是「能不能预测未来」上。

DINO-WM是这条线上的一次转向,发在ICML 2025上。前面I-JEPA和V-JEPA,产物都是一个编码器,它们回答的问题是「在表征空间里预测能不能学到更好的表征」,走的是无监督路线。DINO-WM第一次把JEPA这个思路变成了能真正拿来规划的世界模型,它回答的是「在表征空间里预测能不能拿来控制」。做法上,编码器换成了冻结的DINOv2——Meta出的图像预训练模型,训练全程不动,坍缩问题也就顺带解决了。输入改成用过去三帧去预测下一帧,这是世界模型的用法。最核心的改动在Z:I-JEPA和V-JEPA里的Z只是一个mask token,起位置编码的作用;到了DINO-WM,Z换成了这一帧真实执行的动作A。以pushT任务为例,绿色是固定不动的铆定点,蓝色是可以推的着力点,灰色那个T就是被推的东西,目标是从一个形状推到另一个形状,看蓝色的块往哪个方向使力。这里A就是推杆的位移,也就是蓝色点的位移,它是一个5帧拼成的10维向量,过一个小MLP之后,复制到每个格子的向量后面。预测目标也跟着变了,不再是挖掉的块,而是下一帧。这么一换,整个架构就从表征学习的方法,变成了LeCun所说的那种世界模型。

在这里插入图片描述

像素空间被迫平均出模糊未来,表征空间先过滤细节再预测,避开不唯一性。

1.4 V-JEPA 2 两阶段架构与规模扩展

在 DINO-WM 之后,JEPA 这条线上真正称得上“合体”的工作,是 Meta FAIR 实验室在 2025 年 6 月发布的 V-JEPA 2。前面讲过的几条线索——V-JEPA 的挖空补全预训练、JEPA 在表征空间做预测的立场、以及在真实机器人任务上的落地尝试——到这一篇基本汇到了一起。它也是整条 JEPA 路线上最重要的一篇工作。

在这里插入图片描述

先看整体架构。V-JEPA 2 可以清楚地切成两块。左边那一块,仔细看其实就是 V-JEPA 的编码器,只不过被 scale 上去了:用了一个 ViT-G,10 亿参数。这个数字放在当时,已经算比较大的纯视觉编码器了。它的结构和前面第七页讲的 V-JEPA 完全一样——挖掉的视频过一个 encoder,完整的视频过 EMA 的 encoder,然后预测器用简单的 mask token 在被挖掉的位置上作答,损失用 LE loss,并且这个 EMA 是不传梯度的。换句话说,第一阶段在方法上没有任何新东西,变化全部发生在参数量和数据量上。

第二步才是这篇工作的重点:真机实验。做法是在第一阶段的基础上再做一次后训练,得到一个叫 V-JEPA 2-AC 的模型,把机器人的动作重新编码进第二阶段里。于是第二阶段的任务就从“挖空补全”变成了“世界模型预测未来帧”。整个 V-JEPA 2 因此是分两个阶段训的:第一阶段用挖空的方式训 encoder;第二阶段把 encoder 冻住,去训一个 predictor,通过预测未来的方式训出一个任务相关、并且带 action 的 predictor。用作者的话说,第一阶段是在训世界模型的骨架、世界模型的知识,第二阶段才是在具体任务上把动作加进世界模型,让它能逐步自己演化。

第一阶段的训练数据是超过 100 万小时的互联网视频,加上 1100 万张图片,全程不用任何动作标签,目标就是 V-JEPA 那套挖空补全。训完之后,配套的预测器之类全部扔掉,只留下训好的编码器。第二阶段则是从零训练一个 3 亿参数的动作条件预测器,也就是 V-JEPA 2-AC 里的那个 predictor。

在这里插入图片描述

这里有个很自然的问题:为什么非要分两段,不能一段训完?作者的解释是,只看过去猜未来这个任务本身太不确定了——你没有一个具体的任务约束,未来可能有很多种走向,模型不太好学。所以第一阶段先用挖空这个想法做 pretrain,把骨架搭起来;到第二阶段有了具体任务,再把 action 放进来,针对这个任务做调整。

第一阶段还专门做了规模扩展的实验,结论是这套架构完全可以 scale,而且每一步 scale 都能涨点。作者强调,相比 baseline,架构本身什么都没变,变的只是数据量这些规模因素。具体数字是这样的:在 ITL 的 200 万段视频上,性能是 84.2;数据从 200 万段扩到 2200 万段,涨到 85.2;模型从 3 亿参数加到 10 亿参数,性能又涨 1.5;训练步数从 9 万步拉到 25 万步,再涨 0.8;最后分辨率从 256 提到 384,最终达到 88 以上。数据、模型、训练步数、分辨率,四个维度各自往上推,性能都跟着往上走,这条 scaling 曲线是这篇工作里相当有说服力的一部分。

在这里插入图片描述

论文主要设计了三个实验。前两个是 video QA,也就是 understanding,以及 understanding 加 prediction,这两个主要是为了检验第一阶段训出来的 encoder 的优点,当时是 SOTA。真正值得展开的是阶段二怎么训、训完怎么上真机。

先看数据长什么样。阶段二用的是 DROID 的一个 Franka 机械臂、桌面遥操的公开数据集,只取左侧固定的外部相机视角,切成 4 秒一段,每秒 4 帧,总共 62 个小时、23000 条轨迹。这个数据量并不大,作者特意对比了一句,相比后面的 π 等等要小得多。每一帧带 7 维的末端状态,也就是最后夹爪那个位置的状态:XYZ、三个欧拉角,加上夹爪的开合。动作就是从相邻两帧的状态差算出来的——XYZ 直接相减得到位移差;姿态是两个旋转矩阵相乘再转回欧拉角;夹爪同样相减。总之用前一帧减后一帧的方式,就能把 action 算出来。

训练时,这些图像全部输入第一阶段预训练好的 encoder,注意 encoder 是不训的,整体梯度都不过这个 encoder,它只在第一阶段训过,这里你就把它理解成一个知识提取器。第二阶段要训的是那个只有 3 亿参数的预测器,输入是当前这一帧的 Z1、当前状态 S1 和动作 A1,任务是猜下一帧 Z2,损失用 L2 算预测的 Z2 和真实的 Z2 之间的差。关键在于这个过程是在隐空间里做的:训练的 ground truth 相当于原始帧的下一帧过 encoder 得到的表征,这样第一帧预测第二帧、第二帧预测第三帧、第三帧预测第四帧,就能一帧一帧对齐起来。

在这里插入图片描述

推理的时候可以 one by one 直接出:Z1 输出一个 Z2,把 Z2 再当输入去猜第三帧,再和真实的比。这样连续滚动 N 步,就是 rollout。最后第六步是两项 L1 相加——rollout 损失和刚才那个正常的单步损失相加,梯度只到预测器为止,encoder 完全不动。

训完之后怎么上真机,方式也挺特别。首先需要一张目标图:比如想让夹爪去夹桌子上的苹果,就先给它夹苹果的那个状态拍一张,作为总的目标图。作者打了个比方,这就像驴子前面的那根胡萝卜,是个目标,驴子看着胡萝卜往前跑。每次推理时,从初始状态过 encoder 输出一个特征,目标图也过 encoder 输出一个特征。动作怎么来?靠搜。每次从一个高斯里采样 800 条动作,把这 800 条动作配合当前帧输进 predictor,输出一个新的隐空间图像,然后在隐空间里算它和当前 goal image 的 L2 距离,看这 800 个动作哪个离 goal 最近——注意是隐空间距离最近,不一定是像素维度上差得最少。取最相近的 10 条动作平均起来,作为当前真实的 action 传给机械臂,机械臂动一下,再采当前数据,这样循环若干步,就能完整地到达最后的目标图。这套流程里完全没有 language 模态,跟 VLA 不一样,所以它只能靠目标图一步一步引导机械臂。看代码还能发现,搜动作的时候其实只搜了 4 个维度:XYZ 位移和夹爪,三个旋转量直接置零。也就是说条件比较简单,真机上的机械臂并不会转手腕。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验部分,两个测试都不在它的数据集里,属于泛化测试,用的是 Franka Panda 的 robotic 夹爪,固定分辨率的单目 RGB 相机。对照的是 Octo——一个在 Open X-Embodiment 100 多万条轨迹上预训练好的 VLA 模型。结果 V-JEPA 2-AC 比当时那个 VLA 好很多。它还和英伟达当时发布的世界模型 Cosmos 做了对比。这场对比有点意思:LeCun 一直说动作一定要在隐空间里做,像素派都不太行,这个实验在当时完美地证明了 LeCun 的观点——当然现在可能又不一样了。Cosmos 是一个 7B 的视频生成器,用视频生成的方式算出机器人每一步当前应该的动作,再逆动力学回归到真实动作上,大概是这么个流程,后面会细讲。而 V-JEPA 2-AC 因为在隐空间上直接计算,速度会快很多,各种准确率也高很多。

在这里插入图片描述
在这里插入图片描述

最后是作者自己说的三条局限。第一,它对相机位置很敏感,因为模型没有标定,动作的坐标很容易乱——随便拍一张照片,模型的坐标就可能对不上。这也是为什么实验里不能动关节、限定得那么死的原因,通用性并不高。第二,实验里相机的位置是手动试出来的:最终那张 goal image,从 35 度一直扫到 85 度,最后推断出一个最佳角度才做的实验。所以作者的原话是,如果要做的话,这个模型其实并不是一个能上真机的模型。

把这一节收一下:V-JEPA 2 的价值不在于发明了新模块,而在于把“表征空间预测”这条路走通了、并且 scale 起来了。第一阶段用 100 万小时视频加 1100 万张图片、不带任何动作标签,把 ViT-G 编码器训成一个通用的世界模型骨架;第二阶段冻住它,只训 3 亿参数的预测器,用 62 小时、23000 条 Franka 轨迹把动作接进去,就能在真机上靠目标图加采样搜动作完成任务。规模扩展的四个维度——数据 200 万到 2200 万段、模型 3 亿到 10 亿、训练 9 万到 25 万步、分辨率 256 到 384——每一步都带来性能提升,最终超过 88。局限也很实在:没标定、对相机位置敏感、只能搜 4 个维度、相机角度是手动扫出来的。它证明了隐空间路线的速度和精度优势,但离一台能随便上真机的通用机器人,还有距离。

2. Genie与Cosmos架构

2.1 Genie 的 latent action 机制与影响

在讲 Genie 之前,得先交代它想解决什么问题。Dreamer 那一系列的世界模型能根据动作预测未来帧,但训练数据必须是“视频 + 动作”成对出现,而且动作标签要细到每一帧、每一个关节,这种数据在真实世界里极难大规模采集,泛化自然就受限。另一边,视频生成模型吃的是海量互联网视频,不需要任何动作标注,可它的条件太粗了——你只能给它一句话,它给你一整段,中途插不上手。Genie 要回答的就是这中间的空档:能不能对视频做细粒度的控制,像操作一个游戏那样,一帧一帧地决定走向?

这个“看电影”和“打游戏”的对比是理解 Genie 的入口。传统视频模型像坐在电影院里,人家放什么你看什么,比如你把杯子放进水槽这个动作,它可以一次性给你生成 20 帧,看完不满意,只能从头重新生成,中间没有任何干预的余地。Genie 更像手里握着一个只有 8 个键的手柄,每按一下画面往前走 0.1 秒,你可以控制它往左拐、往右拐、跳一下,甚至什么都不做。这个“每按一下走一小步”的粒度,正是 Dreamer 系列想要而视频模型给不了的东西。

Genie 出自 Google DeepMind,2024 年拿了 ICML 最佳论文。架构上并不复杂:上面是一条常规的视频生成链路,一个 tokenizer 把画面压进隐空间,后面接 DiT 类的视频生成模型——当时论文里还叫 DiT models,理解成 U-Net 或 DiT 那种视频生成骨干就行——负责生成未来的帧。真正的主角是中间的 latent action model,它由两个组件构成,一个 encoder,一个 decoder。

Encoder 的输入是全部视频帧,X1 到 XT 再加上 XT+1,也就是当前这一段加上真正的下一帧,它把这些统统吃进去,输出却小得惊人:只有一个动作 A。这个 A 经过泛化(量化)之后只有 8 个动作码,每个码大约 32 维。Decoder 那边接收两样东西,一个是 encoder 吐出来的动作 A,另一个是 1 到 T 帧的视频,然后它要预测出第 T+1 帧。整个 latent 逻辑就这么点东西。

这套机制为什么能work,文字稿里用了一个很妙的类比——两个人玩传话游戏。甲是 encoder,他能看到当前画面,也能看到下一帧,等于偷看了答案;乙是 decoder,只能看到当前画面。任务是让乙预测出未来的画面。但甲每次只能对乙做一个极小的提示,因为 action 只有 8 个 token,甲每次只能从 8 种手势里挑一种打给乙。你可以想象,如果乙要凭这一下手势猜出下一帧,那在海量视频上反复训练之后,甲的手势自然会被逼成“往左走”“往右走”“跳”“别动”这类信息量最大的动作——因为只有这些语义明确的动作,才能让乙把下一帧猜对。把 action 做得尽可能小,恰恰是在强迫 encoder 输出最精炼、最简单、信息密度最高的动作。文字稿里举了个直观的例子:输出一个机械臂,给 down,下一帧机械臂就往下调;给 up,机械臂就往上调。

这里值得停一下,想想这个设计的巧妙之处。它没有用任何动作标签,监督信号完全来自“能不能重建下一帧”这个预测任务。8 个码、32 维,这个瓶颈窄到几乎不可能塞进冗余信息,encoder 被迫只保留对预测未来真正有用的那部分变化。换句话说,动作这个概念是从视频里自己长出来的,不是人标上去的。

那 Genie 在机器人历史上到底重不重要?文字稿里的判断很清醒:Genie 本身并不是做机器人的,机器人部分只是一个副实验。但它给机器人领域留下了一句非常重要的话——latent action 可以当作无标注视频和机器人策略之间的接口。机器人最缺的就是带动作标签的数据,而人类视频、互联网视频遍地都是,如果能从这些海量无标签视频里学出动作,这些数据就全部变得可用了。这是这篇工作留给后人最大的财富。具体来说它证明了两件事:一是这种极小的 action 确实能控制视频模型发生改变;二是可以用这个范式去仿真地生产带 action 标签的真实数据。

后续的影响基本沿着这两条线展开。2024 年 10 月的 LAPA 用的就是 Genie 式的 VQ 引动作,给人类视频打上标签,训了一个 VLA 模型,最终结果比 OpenVLA 高 6.2 个点。DreamGen 走的是另一条路,用 LAPA 给生成出来的视频打成伪动作,拿合成视频直接训练策略。还有 DreamDojo,从 4.4 万小时的第一人称类视频里学连续的引动作,蒸馏以后能达到 10FPS,你往前、上下、左右操作,它可以实时地对视频生成做出改动。一个原本不是为机器人设计的工作,最后成了这条数据链路的起点,这大概是 Genie 最没想到的副产品。

2.2 Cosmos 1与 Cosmos Policy 的架构和数据

现在开始讲 Cosmos

要理解 Cosmos 这一系列,得先把时间拨回 2025 年 1 月。英伟达在那时发布了 Cosmos,定位是「世界基础模型平台」。注意它交付的不只是一个模型,而是一整套东西:数据清洗管线、先进的视频 tokenizer、预训练好的世界模型基础、后训练样例,而且所有权重和代码全部开源。这个「全开源」在当时是相当少见的动作,后面会看到,它恰恰是 Cosmos 一对整个领域最大的贡献。

它为什么要做这件事?动机是 physical AI——带传感器和执行器的 AI,也就是机器人、自动驾驶这一类。这类系统要训练,光有文本和图像不够,它需要的是观测-动作交替的序列:看到什么、做了什么、接下来又看到什么。所以 Cosmos 对世界模型的定义很明确:用过去的观测,加上当前的扰动(文本、动作、相机轨迹都算扰动),去预测下一段视频。这个定义把「动作」摆在了和文本同等的位置上,后面 Cosmos Policy 能顺着这条路走下去,根子就在这里。

范式是三步走。
第一步,拿海量互联网视频预训练一个通才,让它先学会视频世界长什么样;
第二步,用 physical AI 数据去学物理规律;
第三步,用机器人、自动驾驶的少量数据后训练成专才。架构上不复杂:视频过 tokenizer,进 attention,文本走 T5 文本编码器,最后用扩散模型输出。

这套组合在 2025 年初算是标准配置,Cosmos 一甚至还保留了 token by token 的自回归路径和扩散两条路。

真正值得说的是数据。Cosmos 一是第一个把整个数据清洗和收集过程公开、并且把管线开源的团队,论文里一半篇幅都花在数据上——这个比例本身就说明问题。原始数据规模是 2000 万小时,分辨率从 720P 到 4K,来源是专有视频加上公开的互联网视频。2000 万小时是什么概念?按小时算,一个人不吃不睡看两千多年。但这么 raw 的数据是没法直接训的,得洗。

清洗分五步。
第一步是切分:训一个神经网络专门找镜头切换点,把长视频切成没有转场的干净片段,少于 2 秒的直接丢掉,长于 60 秒的再切分,同时用 GPU 硬件编码统一转成 H264。
第二步是过滤,四个过滤器串联着来。先是运动过滤,用光流加 ViT 分类器,把静止画面和手持乱晃的镜头去掉,同时给相机运动打上平移、缩放的标签;然后是画质过滤,分类器打感知质量分,去掉最差的 15%,再用美学模型打分;接着是字幕过滤;最后是类型过滤——先定一套内容分类,把抽象图像、游戏画面、动画这些动力学并不真实的内容排除掉。这一步能看出 Cosmos 对「动力学真实性」的追求有多严格,它要的是真实世界的运动规律,游戏和动画里的物理是假的,宁可不要。
第三步是标注:内部微调了一个 13B 的模型,给每一段视频做 caption。
第四步是去重:用 K-means 做无监督分簇,簇内两两算距离找重复,发现重复就保留分辨率最高的那个,这一步大概去掉了约 30%。
第五步是切片:按分辨率、宽高比、长宽打包,切片直接对应到训练的各个阶段。最终产出大约 1 亿段预训练片段,和约 1000 万段质量更高的微调片段。

这里有个细节很关键:预训练数据里没有动作标签,全是 caption 文本标签。也就是说,Cosmos 一在预训练阶段学的是「看视频、配文字」,压根没碰过动作。这也解释了为什么视频模型不好训——光数据的清洗整理,每一步都要投入非常大的人力物力,模型本身反倒不是最难的。

那要把它用到真机或机器人上怎么办?得后训练,接一个训练头把动作加进去。Cosmos 一当时的做法是:用 Bridge 数据集约 2 万段,动作过一个 MLP 变成一个向量,再扩散加到 DiT 的时间步嵌入上。用法就是给定当前帧和一个动作,输出下一帧;再给下一个动作,再输出一帧。这形态其实很像 Genie 的可控版本,区别在于控制信号从 latent action 换成了真实的机器人动作。

所以 Cosmos 1的定位要说清楚:它是基础模型,是「大脑」,是后面所有设计的地基。开源这件事,是它对以后世界模型最大的贡献——大家不用再从零洗数据了。

后面还有个版本叫 Predict 2.5,2025 年 10 月发布,在 Cosmos 一上做了几处改进:以前有 token by token 的自回归和扩散两条路,Predict 2.5 只保留扩散;去噪方式从 diffusion 改成更先进的 flow matching;tokenizer 不再自己搞,改用 Wan 2.1 的 VAE,效率更高效果也更好;文本编码器和训练模式也做了微调。整体没有范式上的改变,就是让整个模型更现代、更贴近当下先进的视频生成器。

在这里插入图片描述

再往后就是 Cosmos Policy,英伟达和 Stanford 2026 年 1 月发表在 ICLR 上的工作。它把 Cosmos 视频模型正式用到具身智能上。作者想要的是一个统一模型:不改架构,靠视频模型原本的去噪机制去建模动作,顺带还能得到一个能规划的世界模型和一个 value。输入是当前状态加一句任务描述文本,中间那个模型就是 Cosmos 视频模型,输出可以是一系列 action、一系列未来的机器人状态,还有一个 value。

它的核心就一句话:把动作伪装成一个画面,混进视频里让它续写。这个思路和 H3 那类视频模型很像——所有模态压成一个大长条,全转成输入 token 塞进视频模型里压。好处是 attention 非常稠密,切换感受野就能完成不同任务。具体看 conditional 部分的输入:现在的状态本来是数字,通过某种变换变成跟图像一样大小的 token;三路相机,应该是 Aloha 里定的那三路;然后是待去噪的部分,可以是未来的 action chunk——这个 action chunk 可以理解成 action expert,就是用于扩散模型的未来动作帧;还有 future state、未来三个视角的图像帧长什么样,以及一帧 value。

预训练阶段,模型已经很好地学会了「给前面的帧和一句话,把后面这些帧还原出来」,这是几千万小时视频预训练换来的本事。所以后训练只需要学一件事:动作帧是什么。对 Cosmos Policy 来说,动作帧就是一种长得比较奇怪的画面,它能跟着场景一起学会。

2.3 Cosmos Policy 的动作块编码与后训练策略

先说动作是怎么变成模型能“看见”的东西的。这一步听起来玄,其实做法很土。在 LIBERO 这个仿真环境里,一个时刻的动作就是 7 个数:末端执行器的位置增量 XYZ 三个、转动角三个、再加一个夹爪的开合,正好 7 个。策略不是一步一步出动作,而是一次性吐出 K 个时刻的动作,也就是一个 action chunk。LIBERO 里这个 K 取 16,所以一次输出就是 16×7,一共 112 个数。这 112 个数先被拉平成一长条,然后靠“复制自己”的方式把维度撑大,撑到跟视频帧、图像帧一个大小,好让它能混进条件值里去——模型内部处理的是图像那样的张量,动作要假装成一张“帧”才塞得进去。真正用的时候再做一个逆变换,把这坨张量还原回 112 个数的动作块。作者的原话就是“非常的简单”,没有额外的编码器、没有专门的 action tokenizer,纯粹是拉平、复制、混入、逆变换四步。这一点值得留意:Cosmos Policy 并没有为动作设计一套独立的表示,而是硬把动作塞进视频模型的帧空间里,让扩散模型用同一套去噪机制同时处理画面和动作。

在这里插入图片描述

在这里插入图片描述

后训练的整体框架是两阶段的,这一点跟 Cosmos 1、predictor 0.5 那一脉相承。第一阶段是预训练,完全不碰机器人数据,没有任何具身智能的东西,就是拿海量视频去训,跟前面讲的 Cosmos 一或者 predictor 0.5 的做法一样。到第二阶段后训练,才把机器人数据加进来,并且用几种不同的 mask 定义出几种不同的训练任务。它的底座是 predictor 2 的 2B 普通扩散视频模型——注意是“普通”的扩散视频模型,不是什么专门为机器人改造过的架构,2B 的参数量,基座在后训练全程不动,动的只是后训练这一层。

后训练的核心机制是三种 mask。mask 在这里的作用就是控制感受野:哪部分帧可见、哪部分不可见、哪部分要加噪,全靠 mask 说了算。三种 mask 对应三种任务,在一个 batch 里按固定比例分配。第一个任务占 50%,叫 policy training。做法是把后面的东西全 mask 掉,只给未来加噪,前面保留当前的状态帧 state,再加三个视角的图片作为条件,然后让模型一步暴力地去还原后面所有的 target——包括未来的动作、未来的状态、未来三个视角的帧,还有 value。注意这里是“一步暴力还原”,不是迭代去噪很多步,就是一口气把整块未来吐出来。这 50% 的数据干的就是策略学习这件事:看到现在,直接给出未来的一整块动作和相关预测。

第二个任务占 25%,做的是世界模型训练。这一回未来的 action 是给定可见的,模型纯去训未来的状态、未来的三帧画面和 value。换句话说,动作已经告诉你了,你负责把“执行这个动作之后世界会变成什么样”预测出来。这部分数据的作用是保证模型能很好地预测未来,把视频生成那套本事用在机器人场景里。第三个任务也占 25%,只训 value:把所有帧都变成可见帧,value 可以看到前面所有的东西,模型唯一的任务就是把 value 估准。三个任务按 50/25/25 的比例混在一个 batch 里,一次前向同时干三件事——学策略、学世界模型、学价值函数。

这里就绕不开 value 的定义。value 的意思是:站在某个状态上,按当前策略一直走到底,预期能拿到多少奖励。作者特意点了一句,这个 value 跟他那篇“派 0.6”用强化学习做 VLA 的文章里的 value 非常像,感兴趣的可以回去对照。标注方法叫蒙特卡洛回报,说白了就是跑完之后往回倒推。具体做法是:rollout 一条轨迹,成功了记 1,失败了记 0;ALOHA 真机那边不用 0/1,而是用最终的完成度打分,再乘一个折扣因子 gamma,gamma 一般取 0.99。有了终点分数就从终点往回推,给每一步贴一个数。作者举了个例子:一条 60 步的轨迹最后成功了,终点是 1,第 40 步的 value 就是 0.99 的(60 减 40)次方,也就是 0.99 的 20 次方,算下来 0.82,这就是第 40 步的 value;再往前每一步依次类推。如果这条轨迹失败了,那每一步的 value 全是零。作者自己评价这套标注“非常粗非常暴力”——确实,它不做什么精细的信用分配,就是拿折扣因子把终点的成败往回摊。

那这些 rollout 数据从哪来?后训练用的是 rollout 数据集。所谓 rollout,就是把已经训好的策略放进真环境里跑一遍,把整条轨迹记下来,还有最后成没成。这里有个很关键的动机:演示数据是人遥操作出来的,百分之百都成功。如果只用演示数据训,会出两个问题。第一,value 标签基本都是正数,模型没见过负样本,学不会区分好坏。第二,世界模型只见过成功的未来,没见过失败的未来。作者的原话是“失败是成功之母,失败很重要”——模型要是分不出好动作坏动作,就没法真正模拟这个世界。你希望它能预测“这一帧滑脱”,那就得给它看真实滑脱的样子。所以必须用真机去采 rollout 数据,具体做法是当前真机的演示数据,再加上一些回放失败的例子,让世界模型见过失败长什么样。

在这里插入图片描述

把这套训练对应到推理上,就自然分出两种模式。
第一种叫策略模式,最简单粗暴:输入当前状态和当前图像,一步造出 action chunk,直接当机器人的运动指令执行,然后循环。它对应的就是那 50% 的 policy training 数据。
第二种叫规划模式,复杂一些:拿当前观测——三路相机加本体状态——再加上文本任务,先采样 8 组噪声,得到 8 个不同的候选动作块 A;然后对每一个 A,用视觉模型生成 T 加 K 的画面,也就是让每个动作块“想象”出三种未来,8 个动作块就是 24 个未来;接着用 value 函数给每个未来打分,而且每个未来打 5 次分,一个动作块的三个未来就是 15 个分;最后在所有动作里投票,看哪个动作的未来得分最高,就执行那一块动作。作者说整块算下来大概 2 秒就能跑完,执行完再更新观测继续循环。代价是比策略模式慢一点,但成功率高一截。后面真机实验里有个数字能说明这个差距:直接一步打分只有 61.3 的评分,换成采 8 个 action 再投票的规划模式,准确率能到 72%,提升相当大。

在这里插入图片描述

训练规模上,作者给了三组实验。
前两组是仿真,在 LIBERO 和 RoboCat 上采仿真数据,每个仿真各采 50 条,用 32 或 64 张 H100 训 48 小时——注意这里说的只是后训练,基座模型一直没动,始终是拿海量纯视频训出来的那个。
第三组是 ALOHA 真机双臂,采了 185 条,同样做微调。结果在当时相当能打:LIBERO 上比 Pi0.5 高;RoboCat 上两个仿真任务基本都拿到 SOTA,而且只演示了 50 次,就比其他方法演示 300 次的性能还高,说明有一定的 few-shot 能力。真机那边是把四个任务合并成一个策略一起训、一起测,主要对标 Pi0.5,除了 put candy in the bowl 这个任务 Pi0.5 更高之外,其余任务 Cosmos Policy 都拿了 SOTA,平均 93.6,对比 Pi0.5 的 88.6。
作者认为这个实验非常重要:Pi0.5 这类 VLA 在预训练阶段就用了大量遥操数据和大量 action,而 Cosmos 只在后训练时用了一点机器人数据微调,结果却能打平甚至超过——这说明互联网上海量视频训出来的视觉模型,已经能得到跟真实遥操任务相匹配的能力,他把这看作视觉模型迎头赶上的一个重要标志。

2.5 Cosmos3 逆动力学、Policy 与动作表示

到了 Cosmos3,整个模型要处理的任务形态比前两代更完整了。文字稿里把它的推理模式拆成两类,一类叫逆动力学,一类叫 policy,两者的输入输出刚好互补。逆动力学其实很好理解:给定文本,再给定未来的一些视频帧,让模型反过来去推——根据这些已经看到的视频帧,预测出对应的动作。这个方向跟常规的“给动作、生成未来画面”正好相反,所以叫逆动力学。而 policy 才是这一代真正重要的东西,也是世界模型直接用在真机上的那种形态:通过文本和第一帧,模型既去预测未来的世界模型帧,也去预测 action。一个是从未来帧倒推动作,一个是从第一帧同时生成未来帧和动作,这两条路径合起来,就构成了 Cosmos3 完整的训练和推理模式。

Cosmos3 还有一个区别于前作所有地方的关键设计,就是它的动作表示。它的动作并不是用直接的指令来表示的,而是用“两帧之间世界改变了什么”来表示,也就是两帧之间的差。这一点是理解 Cosmos3 动作接口的入口。文字稿里对着一张表讲得很细,表里的 D 指的就是维度。先看 ego pose,它是 9D 的,这一段就是 9 个数,由 3 个零件构成:3D pos,也就是它在世界坐标系下的位置差;加上 6D root,用 6 个维度来表示它的旋转角。这里有一个必须强调的点——这 9 个数在 Cosmos3 里并不是绝对位置,而是相邻两帧之间的变化量。以上一帧的位置当原点,看这一帧到了哪儿,然后直接做差。所以模型看到的不是“相机现在在哪”,而是“相机从上一帧到这一帧挪了多少、转了多少”。

在这里插入图片描述

这张表里的“零件”一共就那么几种。第一种是 ego pose 9D,文字稿里打了个比方,说它就是“看世界的那只眼睛”,ego 就是自我,第一视角,所以它表示的是主相机自己动了多少,也就是主相机在世界坐标系下的位置变化。第二种是 effector pose,也就是末端的执行器,通俗说就是夹爪动了多少,一般也是用 9D 来表示。第三种是手指,也就是灵巧手,它是用 3D 加上 5 个 fingers 来表示。最后一种是 grasp state,抓取状态,用 1D 的开合程度来表示。文字稿还举了人手的例子:人手就是 15D,5 个指尖各三个坐标,相对于手腕的位置,等等。说白了,他是把能想到的所有机器人动作状态都统一地收进了这一张表里,不同本体不再各用一套私有格式,而是全部由这些标准零件拼出来。

拼的方式很直观。自动驾驶因为相机固定在车上,车运动就是相机动,所以它只有一个会动的视角,用 9D 表示就够了。运动相机也是只有单视角会动,同样 9D。单臂机器人是 10D,因为相机架在桌面上不动,没有 ego 这一项,所以是末端的 9D 加上一个夹爪的 1D。双臂机器人就是两条臂,9 加 1 再加 9 加 1。人形机器人是 29D,因为它有头部相机,所以有一个 ego 9,再加上两条臂的 9 加 1,直接拼接起来。还有一个第一人称 egocentric 的人手,总共 57D:头部相机 9D,右手腕 9D,右手指尖 15D,再加左手手腕 9D,这些加起来就是 57D。文字稿在这里的原话是,先规定好不同的零件,然后不同的本体通过这些零件的拼接,组成它动作的表示。这个思路的干净之处就在于,新本体进来不需要重新设计一套动作头,只要数清楚它有几个相机、几条臂、几只灵巧手、有没有夹爪,按零件表拼维度就行。

拼接完之后怎么进模型?因为各个本体的维度不一样,所以 Cosmos3 针对每种本体都会配一个线性投影。进主干之前,先把动作补 0 补到 64 维,之后再过一个线性投影,把它投到模型可以识别的 token 数上。补 0 这一步是为了把长短不一的动作向量对齐到同一个长度,线性投影则负责把对齐后的向量映射进主干能吃的 token 空间。这套设计很精妙,操作非常干净,而且覆盖面非常广,这以后可能会作为一个标准,进入到所有世界模型里面。至少从工程角度看,用“零件 + 拼接 + 补零 + 投影”四步把异构本体的动作统一进一个接口,确实比每个本体单独训一个动作头要省事得多。

2.6 Cosmos3 训练流程与评测结果

Cosmos3 的训练不是一步到位,而是分成了好几个阶段,每个阶段喂什么数据、冻结还是放开哪些参数、加不加动作,都有明确安排。整套流程走下来,才得到一个既能生成视频、又能出动作的模型。

第一步是预训练语言模型这一侧。他们先冻结 VLM,初始化用的是千问3VL,nano 版 8B、super 版 32B 两个尺寸。冻结的意思是这部分的权重先不动,只做 next token prediction 的训练,喂进去 2200 万样本,训 2 个 epoch。这一步本质上还是让模型把通用的视觉语言能力打扎实,还没涉及什么物理世界的东西。

预训练完了之后做 SFT。这一阶段用的是 220 万 physical AI 样本,来源是机器人、驾驶、智能基础设施这些领域的私有数据。这里有个细节值得注意:他们并没有把这 220 万样本单独喂进去就完事,而是按 1:4 的比例把预训练数据混回来。为什么要混?就是怕模型在专有数据上训完之后,把原来那点通用能力给忘了。这个配比说明他们很清楚灾难性遗忘这件事。

SFT 之后,他们复制了 AR 塔的权重,拿去训练 DMDM 去噪模型。这一阶段的预训练数据量很大:7.6 亿张图,加 3.48 亿段视频,其中 1.39 亿段是带音频的。四种模式混合着来,文生图占 20%,文生视频占 56%,图生视频占 16%,续视频占 8%。这里要划一个重点:这个阶段是没有动作的,纯粹是视频和图像的生成训练。

接下来是 mid training,动作和控制就是在这里加进来的。数据配比变成了视频 32%、图像 10%、视音频 8%、动作 25%,总共 6.13 万小时的数据。也是在这个阶段,模型接入了 action token 头。换句话说,前面几个阶段模型学的都是“世界长什么样”,到 mid training 才开始学“机器人该怎么动”。

最后是 post training,针对各个任务出专才模型。其中机器人策略专才模型用了 7.6 万条轨迹来训练,损失函数用的是 flow matching 损失。

训练流程讲完,就得看评测了。视频生成这块,Cosmos3 第一次和闭源模型做了正式对比。在 physical AI 相关的 benchmark 上——包括自动驾驶、常识、物理、机器人、工业这几个方向——它超过了 Sora 等闭源模型。这是开源模型第一次在部分领域压过闭源,这个结果的分量不轻。

策略模型的评测更有意思。RoboLab 微调之后,总成功率是 39.7%,对比 pi 0.5 的 28.1%,高出了一截。另一个证据是 Libra 1,只训练了 200 步,性能就大幅提升。200 步在机器人训练里几乎可以忽略不计,能在这个步数上看到明显涨点,说明 mid training 之后的 Cosmos3 已经是一个相当优秀的 foundation model 了,下游任务只需要很少的微调就能激活。

真机实验放在 robot arena,也就是 David 平台上做双盲众包 A/B test。截至 2026 年 5 月 30 日的榜单,Cosmos3 排名第一,排在它后面的是 pi 0.5、dream zero、spirit 这些模型。双盲众包的意思是测试者和被试都不知道用的是哪个模型,靠人投票比出来的,这种评测方式比实验室里的固定指标更接近真实使用场景。

把这一串结果串起来看:从冻结 VLM 做 next token prediction,到混数据做 SFT 防遗忘,到复制权重训 DMDM,到 mid training 接动作头,再到 post training 出专才模型,每一步的数据配比和参数策略都是为下一步做铺垫。评测端从视频生成 benchmark 到策略成功率再到真机盲测,三个层面都拿到了能打的结果,尤其是开源模型在 physical AI 领域首次超过闭源这一点,算是给这条路线做了一个阶段性的背书。

在这里插入图片描述

从冻结 VLM 到接动作头再到出专才模型,每阶段数据配比都为下一步铺垫。

3. 动作视频生成探索

3.1 从 VPP 到 UWM:动作与视频生成的早期探索

在聊 Dream Zero 之前,得先把这条线上的两个先行者交代清楚,不然 Dream Zero 里那些看起来像是突然冒出来的设计,就成了没头没尾的东西。这两个工作是 VPP 和 UWM,一个想绕开视频生成,一个想把动作和视频塞进同一个模型里,各自解决了一部分问题,也各自留下了没解决的问题。

先说 VPP 的动机。世界模型有一个绕不过去的痛点,就是太慢。生成视频本身就是一件很重的事,一帧一帧往外推,时间全耗在里面。可机器人这边要的是强实时性,动作得马上出来。如果按标准的世界模型流程走——先生成画面,再根据画面生成动作——那机器人就得停在那儿等着。视频里举的例子很直白:你在那儿叠衣服,衣服都掉下去了,模型这边还在生成画面,这肯定不行。这个场景其实把问题说得很清楚了,不是世界模型预测得不准,而是它预测得太慢,慢到物理世界已经不等人了。

在这里插入图片描述

VPE 的想法就是,那干脆不生成视频了。既然完整的视频里有很多杂七杂八、对动作没什么用的信息,那为什么要把它整个生成出来再从中提取动作呢?它选择直接用视频模型 backbone 的隐空间特征,在上面接一个 action 头,让这个头去拟合动作。这样整个链路里就没有“生成完整视频”这一步,省掉了最贵的那一段。这个思路本质上是在说:我要的是视频模型在预训练里学到的那个表征,不是它生成的像素。表征里已经压缩了对动作有用的信息,直接拿来用就行。

但 VPP 的坏处也很明显,而且这个坏处跟它的好处是同一个来源——它太以 action 为主了。视频预测那一支,也就是预测未来画面的分支,并没有帮上太多忙。换句话说,它把视频模型当成了一个特征提取器,而没有真正利用“预测未来”这件事本身。对动作来说,未来画面里其实藏着很多信息,比如物体接下来会怎么动、接触之后会发生什么,这些在纯表征里是丢掉的。VPE 绕开了生成,也顺带绕开了预测带来的好处。这个取舍在当时看是合理的,毕竟实时性是硬约束,但它也留下了一个问题:能不能既保留预测,又不被生成的慢拖死?

在这里插入图片描述

UWM 就是在这个问题上往前迈了一步。这篇工作发表在 2025 年的 RSS 上,这篇其实就很像我们上次讲的 Cosmos3,说明 UWM 的架构思路在后来的工作里被反复复用,它算是一个原型。UWM 最核心的贡献是,它第一次把动作既作为输入,也作为输出。这个说法听起来有点绕,但看它的输入输出就明白了:输入的是当前帧,还有 action,输出的可以是 action,也可以是未来的世界情况。也就是说,同一个模型,动作在它这里既可以是条件,也可以是结果,具体扮演哪个角色,取决于你怎么喂它、怎么问它。

这种“一个模型多种用法”的能力,靠的是两种推理方式。第一种叫 marginal inference,也就是 policy。给定当前的输入,模型只输出未来的动作,不管未来帧。这时候动作是输出,模型干的是策略的活。第二种叫 inverse dynamics,输入的是当前的动作,输出的是未来的帧、未来的视频,也就是单独的世界模型那一支。这时候动作是输入,模型干的是预测未来的活。两种推理方式对应两种完全不同的任务,但用的是同一套权重。

UWM 真正有意思的地方在于它怎么让同一个模型切换这些任务。它靠的是去噪时间步的条件。这里得解释一下“去噪”在这个语境下的含义:所谓去噪,就是当前这个模型能看到什么样的信息、能看到多少这样的信息。扩散模型去噪的时候,不同的时间步对应不同的噪声水平,模型看到的东西也就不一样。UWM 把这个机制用成了任务开关——它有 action 的 T 和 video 的 T 两个去噪时间步,这两个 T 是分开调的。通过调节这两个 T,给模型不同的条件,它就能执行不同的任务。

具体来说,可以列出这么几种用法。
给定当前的动作和图像,让它输出未来的世界,这就是纯的世界模型。
给定图像让它输出 policy,这就是策略。
给定未来的图像,通过逆动力学反推,输出夹爪的动作,这就是逆动力学那一支。
还可以做视频预测,等等。
同一个模型,靠调两个 T 就能在这些任务之间来回切,这是这篇文章的创新点。这是这篇文章的一个创新,后面的这个 Cosmos3 其实非常像它这个方法。

但 UWM 的问题也很实在。它当时做得太小了。这是实验室做的工作,而且应该是从零开始训的,所以效果并没有那么好。两层限制。
一层是规模——从零训练意味着没有站在任何大规模预训练视频模型的肩膀上,所有东西都得自己学,数据量、参数量、算力都受限。
另一层是“从零”本身——它没有借到互联网规模视频数据里的那个先验,而这个先验恰恰是后来 Dream Zero 反复强调的东西。所以 UWM 的思路是对的,架构方向也对,但它的实验条件撑不起这个思路的潜力。这也就解释了为什么视频里在讲完 UWM 之后马上就转到 Dream Zero,并且说 Dream Zero 是“本期的重点”——UWM 把路指出来了,真正把这条路走通的是后面的人。

把 VPE 和 UWM 放在一起看,能看到一条挺清晰的演进线。VPE 的出发点是“太慢了”,解法是绕开生成、直接用表征,代价是丢掉了预测。UWM 的出发点是“能不能让动作既是输入又是输出”,解法是用两个去噪时间步把多种任务塞进一个模型,代价是规模太小、从零训练、效果不够。两个工作各自解决了一个具体问题,也各自留下了一个缺口。VPE 留下的缺口是“预测到底有没有用”,UWM 留下的缺口是“这套架构如果放到大规模预训练模型上会怎样”。这两个缺口,正好是后面 Dream Zero 要填的。所以这一节虽然是讲早期探索,但它其实是理解 Dream Zero 那些设计选择的前提——你得先知道 VPE 为什么放弃生成、UWM 为什么强调动作的双重角色,才能明白 Dream Zero 为什么要在视频模型 backbone 上做端到端的联合建模,又为什么那么在意泛化性这件事。

VPE 用表征绕开生成但丢掉预测,UWM 用双时间步让动作既是输入又是输出。

3.2 Dream Zero:world action model 的定义、动机与架构

Dream Zero 在这个领域里做的一件挺关键的事,是在 related work 里正式把「world action model」这个词定义了下来。这个命名不是随手起的,它相当于给一类做法划了个圈:模型不只生成视频,也不只输出动作,而是把「世界怎么变」和「我该怎么动」放在同一个框里学。有意思的是这个词被定义之后的传播速度——arXiv 上标题或摘要里带 world action model 的文章数量开始往上爬,2 月份的时候还是蓝海,一个月之后就冒出 60 多篇,再往后就逐渐变红海了。一个术语从被提出到被跟风,中间只隔了一个月,这个节奏本身就说明大家手里攒的东西差不多,缺的只是一个统一的说法。

Dream Zero 对 VLA 的批评来得很直接。VLA 一般是从视觉语言模型初始化过来的,这就意味着它继承了语言和语义方面的先验——它知道「杯子」「笔」这些词指什么,也知道一些常识性的语义关系。但问题在于,它对几何、对动力学、对接触这些东西没有先验。它不知道两个物体贴在一起会不会滑,不知道手伸过去会不会撞到,不知道推一下物体会往哪个方向倒。这个先验缺失带来的后果很具体:VLA 对新物体的泛化其实还不错,换个没见过的杯子它照样认得;但对新动作的泛化就很差,稍微变一个抓取方式、变一个操作轨迹,它就不行了。要让它学会,只能靠大量重复示教把动作硬灌进去。作者拿 Pi 0.5 举例,说它微调之后的泛化性差,就是这个道理——示教数据里没覆盖到的动作,模型基本接不住。

视频模型这边的账算得不一样。视频模型是在数千万到上亿小时的数据上训出来的,它学的本质上是「接下来该怎么动」——画面下一帧会变成什么样,物体之间怎么相互作用,这些东西在海量视频里被反复见过。这个先验恰好是 VLA 缺的那一块。所以 Dream Zero 主打的就是泛化性:不靠堆示教数据去覆盖动作空间,而是借视频模型已经学到的物理直觉去补。这个动机说白了就是,与其教一个不懂物理的模型做动作,不如找一个已经懂点物理的模型,再教它把物理知识翻译成关节角度。

方法上,Dream Zero 是从联合分布出发的。给定历史画面、语言指令和当前 state,模型要输出的是未来画面和动作这两样东西,也就是建模 p(未来画面, 动作 | 历史画面, 指令, state)。这个联合分布被拆成两项:
一项是视频预测,预测未来画面长什么样;
另一项是逆动力学,从未来画面反推出动作。这个拆法和 UniPi 的思路表面上像,但实现上不一样——UniPi 是把它拆成两个模型分别训,Dream Zero 则是用同一个模型端到端地学这个分解。端到端的好处是动作和视频两个模态始终对齐,预测画面的时候动作信息在起作用,生成动作的时候画面信息也在起作用,两边互相促进,而不是各训各的、最后再拼起来。这个设计选择在后面讲训练和推理的时候会反复体现出价值。

微调的时候,Dream Zero 只需要学两件事。
第一件是用少量机器人视频数据让视频模型理解机器人本体——视频模型原来见过的是人手、是自然场景,现在得让它认识机械臂长什么样、关节怎么连、相机装在哪。
第二件是学会从画面中抽取动作,也就是把逆动力学那一项真正学到手。这两件事都不需要海量示教,因为底层的物理先验已经在那儿了,微调只是做适配。

架构上的骨干是 Wan 2.1,一个 14B 的 image-to-video 开源模型。在这个骨干之上,Dream Zero 加了一个 action encoder,把动作和状态转成 token;state 和 text 则交给 state/text encoder 处理,文本指令和机器人状态都从这里进去。这些 token 一起被放进 DiT 里做联合建模。这里有个和 UWM 不一样的地方值得说明:Dream Zero 给动作和视频用的是同一个噪声水平 t,而 UWM 是分开的。同一个 t 的好处是初期收敛快,两个模态在同样的噪声强度下一起去噪,配合起来比较顺;代价是灵活性不如 UWM,因为噪声水平绑死了,就没法让视频和动作各自按自己的节奏去噪。这个绑定还带来一个直接后果——模型只能一次性把动作和视频都输出出来,不能像某些方案那样先出视频再慢慢推动作。所以 Dream Zero 在推理时是「一口吐两个答案」:同一次前向,既给出未来画面的答案,也给出关节该怎么转的答案。这不是推理阶段临时凑的,而是训练时两个模态就耦合在一起,推理时自然也是耦合的。

这套架构落到真机上,还有一层时间上的错位要处理。机器人是连续执行的,比如以 15 赫兹一刻不停地动,而模型相当于每 1.6 秒才被唤醒一次。所以 Dream Zero 的真实实验要求在 0.6 秒内算出接下来 1.6 秒的动作。看时间轴会发现有个错位:模型在算第一块的时候,机器人正在执行第 0 块动作。也就是说推理必须在当前这一块用完之前算完。Dream Zero 能做到 0.6 秒远小于 1.6 秒的执行时间,余量还挺足,这是它后续一系列工程优化保下来的。

在这里插入图片描述

调用时的流程分几步。
第一次先「看一眼现场」:把三个相机的画面拼成一帧,做一次前向。这一次如果你去看代码会发现它什么都不输出——它做的事情是把当前这一帧的初始状态,比如笔在左边、杯子在右边、马克笔在什么地方,送进 KV cache,后续的步骤可以从这个 KV cache 里读到。
第二步是从两团噪声出发做联合去噪,一团对应未来的画面,另一团对应未来 24 步的动作。
第三步就是同一次前向吐出两个答案,一个关于画面,一个关于关节该怎么转。

等 1.6 秒过去、机器人执行完那 24 步,进入第二次调用。这时候相机拍到手臂确实离笔更近了,但现实里手偏右了两厘米——模型上一轮想象的画面是手已经精准对准马克笔,实际运行的世界和模型脑海里想象的世界出现了偏差。这一轮要做的事情就是把这个现实写进记忆。看代码的话,模型自己生成的那些视频并没有存进 KV cache,真正存进去的是真实视频,它过一遍同样架构的 VAE 存进去,替代掉之前 attention mask 里那一块。这样就形成了一个实时纠偏的过程:模型每轮都拿真实观测去校正自己的想象,而不是一路按自己的幻觉往下推。

「慢」是世界模型被用得最多的一个吐槽,Dream Zero 为此做了很多优化。CFG 并行是一块,DiT 加速是一块——在视频去噪的 10 步里,中间某几步复用噪声,省掉重复计算。再往下还有量化之类的底层优化。这些叠起来之后,Dream Zero Flash 版本比原本快了 38 倍。Flash 版本有个特点,它不会把图像层面输出得特别干净,因为推理步数变少了。为了让模型能适应这种「视频不太干净、但 action 很干净」的状态,训练时特意给视频加了噪声,让模型认识这种状态,推理时才能顺利跑出来。这算是个挺实用的 trick,也说明这套系统在工程上是真下了功夫去抠每一环的。

数据这块 Dream Zero 自己采了一套,叫 AGIbot GE,没有开源。他们声称采了 500 个小时,总共 7193 段,覆盖 22 个真实场景,包括家里、餐厅、超市、咖啡馆、仓库、酒店、零售店等等。每段平均能到 4.4 分钟,每段平均有 42.4 个子任务。跟一些零散的开源数据集比,它每个任务时长长、子任务多,这是优势。

采集方式在论文里也写了:雇遥操员,每天拿一份打印的任务清单;每段挑三个比较粗粒度的任务连着做,比如收拾桌子、擦桌面、整理调料,凑成 5 分钟一段;每天登记每个任务干了几次,规定一个任务最多只能采满 50 段,采满就从清单上永久废除,再更新新的任务。第三步是关键——每个任务只采 50 段,没有任何一个任务能占据数据集的大比例,老任务还不断下架,所以整个分布是一条很长的长尾,技能类型非常多。数据要这么设计是有原因的:前面说过模型分两部分,一部分预测未来视频,一部分做逆动力学,长尾分布正好喂这两块——场景和任务足够杂,视频预测才见得多,动作类型足够散,逆动力学才不至于只学会几种固定套路。

3.3 Dream Zero 泛化实验与数据优势

Dream Zero 的泛化实验很炸裂。测试条件相当苛刻:环境是完全没有见过的环境,物体也是完全没有见过的物体,而且数据采集和测评全部在不同的地方完成。也就是说,模型在训练阶段接触到的场景和它最终被考核的场景之间,不存在任何空间上的重叠。对照对象是 Pi 0.5,作者还特意用相同的数据对 Pi 0.5 做了微调,尽量把对比做得公平一些。结果是从零训练的 VLA 成功率基本接近于零——就是「它动不了」。如果从官方预训练的节点出发做微调,成功率可能会稍微提高一点,但和 Dream Zero 相比仍然差得很远。 world action model 相对于 VLA 的优势的直接证据。

当然,这个实验不能说明世界模型已经完全打败了 VLA,因为 Pi 0.5 毕竟是一个很老的模型,拿它当对手本身就有点欺负人。但这个实验至少能说明一件事:世界模型这条线的泛化性确实很好。它符合作者讲的那套故事——模型通过视频已经学到了大量隐藏的、关于未来世界应该如何运作的规律,所以只需要在一批长尾数据上学到隐含的逆动力学,也就是「画面变化对应什么样的动作」,就能非常快地泛化到新的场景里。这个逻辑和整篇文章的主线是咬合的:视频预训练负责提供世界如何演化的先验,后训练只需要补上「怎么动」这一小块。

更能说明问题的是那些训练集里完全没有出现过的动作。解鞋带、握手、熨衣服,这些动作在训练数据里一个都没有,Dream Zero 依然能完成得不错。相比之下,Pi 0.5 以及其他 VLA 模型在这些任务上就要差很多。这里的关键在于,这些动作并不是靠记忆或者检索完成的,模型此前根本没有见过对应的演示,它靠的是从视频里学到的物理直觉加上逆动力学的迁移能力。作者在前面解释过长尾数据的作用:让模型见过的场景类型多一点、长尾一点,其实有助于整个 world action model 学到逆动力学,也就是它具体该怎么运动、怎么操作,以及这些操作对应什么样的机器人动作。换句话说,泛化不是靠堆同构的遥操数据堆出来的,而是靠场景和动作的多样性把逆动力学这一层学扎实。

接下来这组实验是本节最值得细看的部分,因为它直接回答了「世界动作模型到底吃什么数据」这个问题。实验设置是这样的:从预训练好的模型出发,把跨本体的数据和预训练数据按 1:1 混合,再训练一万步。关键在于跨本体那一部分数据的用法——只使用视频预测损失,完全没有动作标签。也就是说,这部分数据只告诉模型「画面接下来会怎么变」,不告诉它「机器人关节该怎么动」。

在这个设置下,基线成功率是 38.3,也就是什么都不加的状态。然后加入 12 分钟的人类第一视角视频,也就是 egocentric 数据,成功率提升到了 54.3,涨了 16 个百分点。另外一组实验加入 20 分钟另一台机器人的视频,而且只有 72 段,成功率提升到 55.4。作者特别强调了 12 分钟人类视频直接涨 16 个点这件事,因为这说明这条路线完全依赖视觉信息,对动作标签的需求并不高。而人类视频的数量比机器人数据多好几个量级,这就打开了数据来源的天花板。

这个结果的意义要放在和 VLA 的对比里看。当前 VLA 的训练还是以高质量的遥操数据为主,这类数据采集成本高、规模有限,而且换个本体、换个场景往往就要重新采。world action model 这条线的大优点就在于,它的数据可以不完全来自遥操——海量的人类 egocentric 视频、甚至其他模态的数据,都可以混进来一起训练。作者把这称为 world action model 的另一个优点:预训练阶段的其他数据对它提升很大。这也解释了为什么前面那个泛化实验能成立:模型在预训练阶段已经从海量视频里吸收了世界如何运作的规律,后训练只需要用少量带动作标签的数据把逆动力学对齐上,就能迁移到新场景。

把这几组实验串起来看,Dream Zero 这一节的论证链条是完整的:泛化实验证明它在未见环境和物体上远超同数据微调的 VLA;未见动作实验证明它具备动作层面的组合与迁移能力;数据混合实验则给出了机制上的解释——它可以从无动作标签的视频里获益,而且获益幅度相当可观。

3.4 Lingbo 系列:表征解耦与双流架构

Lingbo 是蚂蚁在 2026 年 1 月 29 日放出来的工作,比 Dream Zero 还早半个月。它切入的角度和 Dream Zero 不太一样:Dream Zero 是从「视频生成模型能不能当模拟器」这条线往下推,Lingbo 则先对着 VLA 这类模型开了一炮——它认为当时的 VLA 把视觉表征和动作表征搅在一起学,表征纠缠,导致样本效率低、泛化也差。解决办法是把任务拆开:先预测下一帧画面,再从画面变化里反推动作。这个拆法和前面讲的 Cosmos 3 逆动力学思路是一路的,只不过 Lingbo 把它做成了完整的训练与推理架构。

它还有一个更底层的立论,讲的是物理世界的因果性。现实世界里,当下的状态只依赖过去,不会反过来被未来影响。Lingbo 拿这个去批评 Action Chunking 这类常见做法:一个动作块内部用双向注意力,块里后面的帧就能「看到」前面的帧,等于让未来影响了过去,这在物理上说不通。所以 Lingbo 在架构上把因果注意力卡得很死,这一点后面会看到,它直接决定了推理时缓存怎么用。

具体架构是双流 MOT。视频流用一个大模型,负责输出未来的画面;动作流只有 350M 的模型,负责输出动作。两条流中间用 cross attention 通信,视频流的信息喂给动作流,让动作知道画面要往哪走。这个「大视频模型 + 小动作头、中间靠 cross attention 连」的结构,和 Cosmos 3 的做法相似,区别在于 Lingbo 把因果性约束贯彻得更彻底。严格因果注意力带来一个直接好处:历史 token 的 K/V 不会因为新帧进来而改变,所以可以一直存着 KV cache,序列持续增长也不用丢帧。模型因此能看到从任务第一帧到现在的整条历史。这一点和 Dream Zero 形成鲜明对比——Dream Zero 是攒够 8 个 latent 帧(大约 6.6 秒)就清空一次缓存,长了就得从头再来。
在这里插入图片描述

缓存不清空,推理速度就成了问题,Lingbo 在这里做了几手 trick。最准的是同步模式:每生成一帧都等最新观测进来重算,准确率最高,但机器人得停下来等,慢。最朴素的是异步模式,不等观测、直接往下推,准确率只有 74.3,误差会一步步积累。折中办法是用动力学模型走一步:拿最新的观测,把已有的、保证是最新的观测作为起点,重新算一遍未来的帧。相比之前 step by step 累积出来的错误帧,重算出来的帧准确率高很多;算完再塞回缓存,同时速度也保住了,因为重算一帧的 FDM 其实非常快,接上去正好不拖节奏。这个折中方案的准确率能到 94.4,接近同步方法,而且还长出了长程任务能力,指标是 85.6——以前的同步方法因为太慢,压根没有长程能力。

记忆这块,Lingbo 专门设计了两个任务来证明它比 Dream Zero 强。前面说的那条序列一直往后涨,Dream Zero 每完一帧清空一个,而 Lingbo 从头到尾不清空,KV cache 里存的就是从任务开始到现在的整条记忆。左边那个擦盘子任务,要求恰好擦 6 下——你得记住已经擦了几下,才能知道什么时候停。Lingbo 在这个任务上成功率 100%,Pi 0.5 只有 47%。这个差距基本就是记忆能力的差距。

数据上,Lingbo 走的是聚合路线:6 个开源数据集加上一些内部数据,总共 16000 小时。Dream Zero 是自采 500 小时,虽然质量很高(由姚超源采的),但时长和本体数量都差了一截,Lingbo 的本体更多。模型规模是 5B 加 350M,比 Dream Zero 那个 14B 的视频生成器小不少,推理显存也更低,单张 4090 就能跑。在它出来的时候,benchmark 成绩还是相当高的。

Lingbo 后续还有 V2.0,2026 年 6 月发表。这一版的引言直接批评了前一代,连自己 V1.0 的设计也没放过。架构上,输入是一排 language 加一个高的 task goal,保持和 Pi 一样有个 planner——可以理解成一个 VLM,输出子任务。比如大任务是打扫房间,它就输出第一步「把垃圾桶倒掉」之类的子任务。子任务过 language model,再进一个 MOE 模块。它把以前的 VAE 换掉了,自己做了一个 SamVAE:输入当前帧,还可以输入 human video instruction,论文里说人可以演示一遍,送进 VAE,对应的机器人就做相同动作,等于支持了不同的 instruction。输出头同样是 video 和 action 两个自回归输出,video 输出未来视频帧,action 输出对应动作,和 V1 差不多。另外还有一个 MCP 结构。SamVAE 的做法是摒弃之前的 tokenizer、完全重训:前半部分和正常 VAE 一样,输入视频过 vision foundation model(论文里用的是 Meta 的 PE,一个用大量语义图像数据训练的图像编码器),拿到比较通用的图像特征,再过一个 encoder 和 decoder 做重建;同时加了一个 align,让中层特征和 vision foundation model 的特征越近越好,保证语义对齐,重建则保证像素级对齐。到这里还是 VAE 通过重建把图像扩到隐空间的老思路。多出来的是逆动力学的 action tokenizer:把 vision tokenizer 冻住,拿它的 latent code,上面接一个逆动力学模型 IDM。

大视频流加小动作流靠 cross attention 通信,严格因果让缓存从头存到尾。

3.5 动作如何一步步进入主干:从 VPP 到 World Action Model 的演进

把前面这些工作排成一条线,会看到一件很清楚的事:World Action Model 这条路线真正的演进主线,不是视频生成得越来越好看,而是动作这个东西怎么一点一点被塞进训练和推理的主干里。视频模型原本只关心下一帧长什么样,机器人要的是下一帧该往哪动,这两件事之间的缝隙,就是这一节要讲的内容。

先看最早的一类做法,VPP 式的两段式。它先生成一段视频,再把这段视频送进一个 IDM(逆动力学)模块,由 IDM 输出动作。这个动作完全不在视频模型里面,视频模型和动作模型是两套东西,中间靠生成出来的画面做接口。好处是思路直白,视频模型可以单独训、单独换;坏处也很明显,逆动力学那一段是串行的,必须先把完整视频生成出来,才能反推动作,延迟被拉得很长。而且动作的质量上限被视频质量卡死,画面一旦糊了、物理一旦不合理,后面怎么反推都是在错误的基础上猜。

然后是 GRY 这一类分离式结构。它可以输出未来帧,也可以输出动作,但未来帧和动作互相看不见——两条输出分支各干各的,谁也不给谁提供信息。这比 VPP 进一步,至少动作是由模型自己吐出来的,不是靠外部 IDM 事后反推;但动作和视觉预测之间没有耦合,模型学到的动作表示和它学到的世界演化是两张皮。

再往前是 VPP 的另一条变体思路:仍然以视频模型为基础,但不再生成完整视频再反推,而是直接拿视频 backbone 里面的特征接一个头去解码动作。动作开始借用视频模型内部表征的力量了,不过它借的只是特征,动作本身还没有进入训练目标。

真正的转折点是 UWM。到 UWM 这里,动作终于可以进训练了,模型也可以可选地输出未来的动作帧。UWM 从零训练,数据量等等相对都比较小,规模上没法跟后面这些工作比,但它把范式定下来了:动作不是外挂,是训练目标的一部分。这一步的意义不在于它自己跑得多好,而在于它证明了这条路能走。

再往后就是 Dream Zero、LingBot-VLA 这一类 World Action Model。到这一步,整个结构变成一个完整的整体:动作既作为输入,也作为输出;未来帧是可选的,可以出也可以不出;动作可以一口气通过扩散通道输出。前面几代工作里那些「动作在模型外面」「动作和视觉互不相见」「动作只借特征不参与训练」的限制,到这里全部被拆掉了。

把这条线连起来看,动作进入主干的深度是一级一级加深的:VPP 是动作完全在模型外,靠 IDM 事后反推;GRY 是动作在模型内但和未来帧彼此隔离;VPP 的特征解码头是动作借用视频 backbone 的特征;UWM 是动作进入训练目标、未来帧可选输出;Dream Zero 和 LingBot-VLA 是动作既输入又输出、未来帧可选、扩散一次性出动作。视频生成能力在这条线上一直存在,但它是载体,不是目的。

这条演进线走到这里,也把一个争论摆到了台面上:推理的时候,视频画面到底重不重要?今年 3 月有一篇叫 Fast-WAM 的 action model 工作专门做了这个消融。它用同一个骨干、同一套配方,只换推理时的做法,然后对比几种模式的表现。

完全不做想象的那一档,分数是 91.8 和 97.6,因为不出画面,延迟非常低,只有 190 毫秒。联合生成的那一档,也就是像 Dream Zero 一样既生成最后画面也生成动作,性能并没有提升很多,延迟反而增高了。先生成视频、再通过逆动力学反推动作的那一档,性能是 91.3,比联合生成还要高一点,但延迟更高,因为逆动力学是串行的,必须先把完整视频生成完才能反推。最后一档是把训练时的视频目标去掉,这一下掉点非常快,直接掉了 8 个点,掉到 83 点。

这组数字给出的结论很干脆:真正重要的是训练时候那个视频预测目标,至于推理的时候生不生成画面,在分布内的 benchmark 上几乎不重要。换句话说,视频预测在训练阶段充当的是一种约束、一种让表征必须理解世界怎么变的压力;到了推理阶段,这个压力已经内化进参数里了,再花时间把画面一帧帧画出来,对动作质量的边际贡献很小,只是白白增加延迟。当然要说明的是,Fast-WAM 这个实验做的是分布内评测,没有做泛化性实验,所以这个结论不能无限外推——在需要应对新场景、新物体的时候,显式生成画面是否还有额外价值,这篇工作没有回答。这一点作者在讲的时候也特意点了出来,说这是个挺有趣的讨论。可以把它理解成:在域内任务上,减弱生成时的视频质量去换延迟是划算的,推理时生成的画面可能并没那么重要。

这张图其实把上面那个结论讲得很形象。标题「控制需要的是往哪动,不是长什么样」,左右两个任务分别是把抓起的物体放进抽屉、把橙子放到蓝色盘子上。下面四行分别是输入、真值、30 步去噪预测和 1 步直接预测的帧序列。30 步去噪和 1 步直接预测画出来的画面精细程度差得很远,但对控制来说,真正决定成败的是物体往哪个方向移动、最终落到哪里,而不是画面上的纹理有多干净。1 步直接预测省掉了大量去噪步骤,延迟降下来,动作该往哪走这件事并没有丢。这正好呼应 Fast-WAM 那组数字:训练时把视频预测作为目标逼着模型学动力学,推理时不必把画面完整地画出来。

说到这里,可以把今天讲的所有 World Action Model 相关工作的基本范式收个尾。VPP 是先生成一段视频,再通过 IDM 模块输出动作,动作完全不在视频模型里面。GRY 是分离的,能输出未来帧也能输出动作,但未来帧和动作互相看不见。VPP 的另一条路是以视频模型为基础,用视频 backbone 里的特征接一个头去解码。真正到 UWM,动作终于可以进训练,也可以可选地输出未来的动作帧,虽然它从零训练的数据量比较小,但它定下了范式。最后到 Dream Zero 或者 LingBot-VLA 这种 World Action Model,整个是一个完整的动作既作为输入也作为输出,未来帧是可选的,动作可以一口气通过扩散通道输出。

这条线看下来,动作如何一点一点加到训练和推理的主干里,就是整个 World Action Model 的发展状态。从 2018 年的 World Models、Dreamer 在模型的梦里训练策略,到 JEPA 在表征空间里预测、不生成像素,到英伟达 Cosmos 拿视频生成模型当模拟器,再到今年的 World Action Model 让视频和动作一起生成——世界模型从在梦里打游戏,一步一步走到了直接给机器人出动作。这条路的每一段都不是推倒重来,而是把上一段留在模型外面的那部分,往主干里再挪进去一点。动作从外部模块的产物,变成训练目标的一部分,最后变成和视觉预测平起平坐的输入输出。至于下一步往哪走,是继续把更多模态塞进同一个主干,还是回到显式生成去解决泛化,今天讲的这些工作还没有给出答案。

posted @ 2026-10-17 20:18  TTGF  阅读(3)  评论(0)    收藏  举报