正在翻开……

π0:动作是长出来的

Black, Brown, Driess, Esmail, Equi, Finn et al. · Physical Intelligence · 2024 · arXiv:2410.24164

这台机器人会从烘干机里掏出衣服、运到桌边、一件一件叠好——全程二十分钟,靠一个神经网络。论文里有一串吓人的名字:流匹配、动作专家、跨具身预训练。你一个都不用记,它们出场时都会带着人话别名。你只需要带一双手来:先替机器人叠一次衣服,你会亲手撞上整篇论文与之搏斗的那个麻烦——会说话的模型,说不出手上的功夫。

先替机器人叠一次衣服

叠衣服的时候,你的手腕在干什么?提起衣角、抖平、压出折痕——高度一起一伏,从不停顿。下面这块画布,横轴是 3 秒时间,纵轴是手腕的高度。

在图中从左到右按住拖动,画出你自己的"叠衣曲线"——随手画就行,弯弯曲曲才好。画完之后,它会被翻译成机器人的语言,重新执行一遍。没什么大不了的,对吧?

灰色 = 连续的手 · 红色 = 被翻译成"动作词汇"后的执行 · 先看示例,再自己画一条

这不是我们故意调坏的玩具。2023 年前后最出名的机器人大模型(RT-2、OpenVLA 这一系)就是这样干活的:把连续动作切成 256 个档位编进词表,像写句子一样,一个词一个词地把动作"说"出来。灵巧不在词汇表里——它藏在每秒几十次、谁也说不出口的连续微调里。

然而,机器人为什么非要用"说"的?这得从它的家世讲起。

见过世面的嘴,跟不上手

想让机器人听懂"把衬衫叠好"这句话,最省事的办法是站在巨人肩膀上:把在整个互联网上练出来的视觉语言模型(VLM,白话叫「见过世面的底座」)搬过来。它认得衬衫、懂得"叠"是什么意思、还见过一万种桌面。代价是:它只会输出"词"。于是前辈们教它把动作也当成一种外语——切档、编号、进词表(如果你读过我们的具身智能总图那一篇,你亲手给机械臂的动作切过档)。

这条路成立,但欠了两笔债,而且都欠在"手"上:

第一宗罪:慢。语言模型说话是自回归的(白话叫「一格一格往外吐」)——每吐一个词,都要完整跑一遍几十亿参数的网络,还得等上一个词吐完才能吐下一个。RT-2 自己汇报的控制频率是每秒 1–3 个动作;而叠衣服这种活,手腕需要每秒 50 次修正。第二宗罪:糙。就是你在上一节亲眼看到的阶梯——切档丢掉的所有微调。

问题链已经清楚了:前辈们解决了"见识",代价是失去了"手感"。能不能两样都要——既留住 VLM 读万卷书的底子,又让动作保持连续、成块、以 50Hz 的节奏涌出来?

π0 的回答分两半:动作怎么出来(下一节),和动作从哪个器官出来(再下一节)。

显影:从噪声里长出一秒钟的动作

如果你读过我们的扩散模型那一篇,你在暗房里亲手显影过一张雏菊:从一团雪花噪声出发,一小步一小步擦掉噪声,图像慢慢浮现。π0 干的是同一件事,只是显影液里泡的不是像素,是动作:一条 50 步、整整一秒的手腕轨迹,作为一个整体,从随机噪声里被"洗"出来。这门手艺叫流匹配(flow matching,扩散的近亲,白话叫「走直线的显影术」)。论文管这一整条轨迹叫动作块(action chunk)——不是一个词一个词地说,是一整秒的动作一口气长出来。

显影要花几步?扩散原配是 1000 步——图像可以慢慢等,机器人的手悬在半空等不起。先押注,再拖滑块验证:你猜 π0 在真机上显影一块动作,用几步?

显影步数 = 1 · 一步到位的结果:一团糊 · 先在上面押注,再拖滑块加步数

把滑块拖到底你会看到答案:10 步。但真正的信息藏在从 1 到 10 的路上。步数 = 1 时,曲线是虚线所示两种叠法(先提左角 / 先提右角)的平均——手既想先提这边又想先提那边,结果哪边都不像,衣角会直接脱手。步数加上去,曲线越来越果断地投向其中一种叠法。一步是平均,十步是选择:显影的每一小步都在重新问一次"往哪种动作走",问得多了,糊糊的平均就凝成清晰的决定。这和扩散篇里"一步登天画不出雏菊"是同一个道理——而 π0 只需要 10 步,因为走的是直线路径,每步只花 2.7 毫秒。

想看显影的真实算术?(可跳过,不影响后面)

训练时,把干净动作块 A 和噪声 ε 按比例 τ 兑在一起:Aτ = τ·A + (1−τ)·ε(τ=0 是纯噪声,τ=1 是干净动作)。拿一个真实数字算一遍:某一步的手腕高度 a = 0.62,抽到的噪声 ε = −1.30,τ = 0.5,则兑出来的"脏动作"= 0.5×0.62 + 0.5×(−1.30) = −0.34。网络看着观测和这个 −0.34,要学会报出修正方向 u = a − ε = 0.62 − (−1.30) = +1.92——"往干净动作的方向走这么多"。这就是全部损失函数:让网络的输出 vθ 贴住 u。

推理时从纯噪声出发,按网络报的方向走 10 小步(步长 δ=0.1 的欧拉积分)。两个论文细节:训练时 τ 不是均匀抽的,而是从一个偏向"噪声更浓"一端的 Beta 分布里抽——作者的理由是:观测(图像+状态)对动作的约束很强,难的是从浓噪声里定方向,不是最后的精修;τ 超过 s=0.999 的部分干脆不训练,这让步长最小可以到 1/1000,也就是说这套模型理论上支持最多 1000 步显影——但 10 步就够用了。

然而,显影的每一小步都需要有人报方向——"向量场"从哪来?让 30 亿参数的 VLM 底座自己报?它那张嘴一秒钟吐不出几个词,我们绕了一圈又回到原地。π0 的做法是:给它配一个新器官。

双体:30 亿的见识,3 亿的手感

想想你自己:认出"这是衬衫、要叠它"的是大脑皮层——大、博学、慢条斯理;真正控制手指起落节奏的是小脑——小、专一、飞快。π0 就是照这个分工长的:一个 Transformer 里住着两套权重。图像和指令这些"见识 token",归 PaliGemma 底座(30 亿参数:4 亿的眼睛 SigLIP + 26 亿的语言模型 Gemma,互联网预训练原封搬来);机器人的本体状态(白话叫「它对自己关节的感觉」)和待显影的动作 token,归一个从零训练的 动作专家(action expert,只有 3 亿参数)。两套权重在同一栋楼里开会——注意力互通——但各记各的笔记。

互通归互通,谁能看谁是有规矩的。点下面三组 token,看每一组的注意力能望到哪里:

块内互相全看 · 块之间只准往左看,不准往右看

注意箭头的方向:永远指向左边。动作 token 望得到全部——图像、指令、状态;但图像和指令永远看不见动作。这一手有两个用意:预训练的见识不被动作打扰(底座见到的输入分布和它在互联网上见的一样),以及一笔精明的算术——显影要跑 10 轮,但图像、指令、状态在这 10 轮里一动不动,它们的注意力结果算一次就缓存起来,10 轮显影只有 3 亿参数的动作专家在反复奔跑。见识和手感住同一栋楼,但不共用一本笔记:底座保住它读过的万卷书,专家小到跑得起 50Hz。

两套权重的参数明细(论文附录 B)
部件宽度 width前馈 mlp_dim参数量初始化
PaliGemma 底座(SigLIP 眼睛 + Gemma 语言模型)204816384约 30 亿互联网预训练权重
动作专家10244096约 3 亿从零随机

两位专家只在自注意力层相遇,所以宽度不必相同。合计约 33 亿参数。另有一个 MLP 把显影进度 τ 编码进动作 token。论文还训练了一个不用 VLM 的对照版 π0-small(4.7 亿参数),第 07 节它会上考场。

器官齐了。然而一双好手还得摸过足够多的衣服——数据从哪来?这是论文自认为和架构同等重要的另一半答案。

先见世面,再学精

学厨的老规矩:先在后厨打三年杂——什么菜都碰过、什么翻车都救过;再跟师傅精学三个月本帮菜。只上过精修课、没打过杂的学徒,手艺可以很齐整,但一失手就不知道怎么救。π0 的训练配方照抄这个结构:预训练喂杂数据——7 种机器人、68 类任务、超过 10000 小时的自采数据,再掺上开源数据集(占 9.1%),教它"世界会出什么错";后训练喂精数据——针对目标任务的 5 到 100+ 小时高质量演示,教它"这件事怎么干漂亮"。

这个配方值多少分?论文用 7 个又长又难的真实任务做了对照:完整配方、"从零学精"(跳过预训练)、"只见世面"(预训练完直接上,不微调)。点下面三个配方,逐个上考场——三个都点过,对比才会浮现:

7 个多阶段长任务 · 柱高 = 平均完成度(10 次试验)· ● = 预训练里见过同类任务,○ = 全新任务

三个配方都点过之后,看两处:右边三个 ○ 任务(组装纸箱、打包外卖盒、装鸡蛋)预训练里完全没有——"只见世面"在它们身上几乎交白卷,见过世面不等于上手就会。再看最左边的叠衣服:"从零学精"只拿到约 0.2,完整配方约 0.8——差出的那 0.6,不是精修课教的,是三年杂役教的"衣服缠成一团时怎么办"。杂数据教它世界会怎么出错,精数据教它这件事该怎么干漂亮——越难的任务,前者越值钱。坦白一处例外:装鸡蛋一栏,"从零学精"追平了完整配方——预训练不是处处灵,论文自己也把"该配多少杂数据"列为未解问题。

预训练数据的家底(论文第 V 节)
项目数字
自采灵巧操作数据9.03 亿时间步(单臂 1.06 亿 + 双臂 7.97 亿),10000+ 小时
机器人形态7 种:单臂 UR5e / Franka、双臂 UR5e / Trossen / ARX / AgileX、移动双臂 Trossen / ARX / Fibocom(按运动学归类)
任务68 类(每类含大量物体与场景变化,如"收桌子"覆盖各种餐具垃圾)
开源数据OXE、Bridge v2、DROID,共占训练混合的 9.1%,含 22 种机器人
配平每个"任务×机器人"组合按 n0.43 加权,防止叠衣服这类大户淹没别人
跨形态对齐动作向量一律补零到 18 维(最大机器人的维数),缺的相机位置留空

后训练数据量:最简单的任务 5 小时,最复杂的(叠衣服全流程)100 小时以上。

然而,成绩单再好也是"离线"的故事。真机上,50Hz 意味着每 20 毫秒就得有一个动作候着——这笔实时的账,π0 是怎么算平的?现在把所有零件装回一台机器,看它真实的一秒钟。

组装时刻:机器人的一秒钟

你摸过的零件全部到齐:底座看一眼世界,动作专家显影 10 步,一整块 50 个动作出炉,机器人执行其中一段,然后回头再看一眼世界。下面是这个循环在一块消费级显卡(RTX 4090)上的真实计时,每一毫秒都来自论文附录的实测表。拖动滑块,改变"执行多少个动作才回头看一眼",看这台机器的性格怎么变:

执行 25 个动作(0.5 秒)再重新推理 · π0 的原配节奏

盯住下面那条"新鲜度"标尺:拖到最左(每 5 个动作就回头看),机器人对世界的反应极快,但将近一半的时间花在推理上,动作走走停停;拖到最右(把 50 个动作执行完才回头),动作行云流水,但块尾那个动作执行时,它依据的已经是一秒之前的世界——衣角早就滑走了。π0 选在 25(半秒):一次长出一整块动作,是 50Hz 流畅的前提;块要执行多长,是"流畅"和"活在当下"之间的折中。顺带看推理条的内部:73 毫秒里,显影 10 步只占 27 毫秒——正因为反复奔跑的只是那个 3 亿参数的小脑,第 04 节埋的伏笔在这里兑现。

机器装完了。然而它对上老路子的"说动作"机器人,到底赢多少?上考卷。

对决:五张考卷

论文把预训练完的 π0 不做任何微调直接拉上考场,同台的有:自回归离散 token 的 OpenVLA(70 亿参数,正是你在第 01 节见过的那种"说动作"的模型)、扩散出动作但没有 VLM 底座的 Octo(9300 万参数)、以及 π0 自家去掉 VLM 的对照版 π0-small(4.7 亿参数)。点五张考卷逐一翻看——先猜猜参数最大的 OpenVLA 考得怎么样:

预训练后直接上场(不微调)· 柱高 = 平均完成度 · 数值为论文图 7 柱高读数(约)

叠 T 恤那张考卷最说明问题:70 亿参数的 OpenVLA 几乎交白卷——不是它见识少,是自回归离散 token 撑不起 50 步的动作块,衣服在它"说"完一个动作之前就滑走了。再看 π0-small:没有 VLM 底座,靠流匹配也能拿到一半分数——手感是流匹配给的;但论文的语言跟随实验里,它听不懂细致的指令(π0 的语言跟随准确率显著更高,还能接受一个高层 VLM 当"指挥"拆解长任务)——见识是底座给的手感这门课,流匹配完胜自回归;见识这门课,预训练底座完胜从零训练——两门都及格的,只有双体。

你已经看完了整台机器的原理、家教和考卷。最后一站,轮到你来当它的工程师。

沙盒:你来给 π0 定参数

任务:追住一只被气流吹得飘忽的衣角(虚线),3 秒钟。你有两个旋钮——显影步数(第 03 节)和动作块执行长度(第 06 节)。推理期间机器人只能保持原姿势(这个玩具里如此,见下方杠精清单)。先试两种极端:1 步 × 执行 50,和 20 步 × 执行 5,说出它们各自的死因;然后试着打败 π0 的原配(10 步 × 执行 25)。

显影步数
执行长度
虚线 = 飘忽的衣角 · 实线 = 你的机器人 · 平均追踪误差越小越好

三种死法应该都见过了:步数太少,动作是"各种可能的平均",;块太长,块尾执行的是一秒前规划的动作,;块太短,一小半时间悬停在显影里,还频繁地重掷"哪种叠法"的骰子,。离原配最近的是 10 步 × 执行 10——在这个玩具里几乎打平,但真机上重推理次数翻倍,意味着 GPU 负载和延迟抖动的风险也翻倍,论文选 25 是更稳的那只手。能说出每种失败的死因,你就真的懂了这台机器。

专精是昆虫的事

回到学术锚点:这是 Physical Intelligence 团队 2024 年的论文《π0: A Vision-Language-Action Flow Model for General Robot Control》(arXiv:2410.24164)。本文只展开了它的主线:流匹配动作块、双体架构、预训练/后训练配方与真机评测;被我们从简的有语言跟随实验的细节、高层 VLM 指挥策略,以及全部训练超参。文中所有交互都是教学玩具:真实的 π0 显影的不是一条高度曲线,而是 50×18 维的联合动作分布。

论文的扉页引了海因莱因的那句话,结尾是"专精是昆虫的事"(Specialization is for insects)。整篇论文就是对这句话的一次工程执行:不为某一个任务造一台专机,而是让一个模型先见遍七种身体、一万小时的杂活,再学会任何一门手艺。你这一路亲手验证过它的每个零件:你画过一条自己都说不出口的连续轨迹(第 01 节)——所以你知道灵巧为什么装不进词表;你押注过显影步数,看着一团糊在 10 步里凝成一种叠法(第 03 节);你点亮过三组 token 的视野,看见见识和手感如何同楼不同笔记(第 04 节);你给它排过课程表,看见杂役的三年在最难的考卷上值 0.6 分(第 05 节);你掰过它的一秒钟,最后亲手把它调坏又调好(第 06、08 节)。当你下次看到机器人叠衣服的视频,你看到的不再是魔术——是每半秒一次快门、10 步显影、50 个动作一口气长出来的那台机器。

从这里出发有两条路:还没走过具身智能总图的,去那里看这台机器在整张地图上的位置;对"从噪声里长出东西"意犹未尽的,扩散模型那一篇的暗房随时开门。

杠精清单:五个你有权较真的地方

1. 柱状图的数字是精确的吗?不是。第 05、07 节的完成度数值是我们从论文图 7 和图 13 的柱高上读出来的近似值(误差约 ±0.05),所以正文一律写"约"。推理耗时(14/32/27/73 毫秒)和数据规模是论文正文与附录里的精确数字。

2. 显影玩具骗人吗?第 03 节"两种叠法"的双峰设定是教学化的:真实动作分布的多峰性远比两条曲线复杂,真网络的向量场是学出来的,不是我们手写的规则。但"一步得到平均、多步凝成选择"这个定性行为,是流匹配/扩散类模型的真实性质。

3. 对 OpenVLA 公平吗?论文自己承认:这套高频灵巧数据对不支持动作块的 OpenVLA 本来就艰难,且受算力限制两个基线没训到同等轮数——所以他们补了一个只训 160k 步的"同算力版 π0",它仍然全面领先。π0-small 的对比也有混淆:它既没 VLM 又更小,两个因素分不开,论文坦承这一点。

4. 推理时机器人真的会"发呆"吗?论文只说明每执行 25 个动作(0.5 秒)推理一次、单次推理 73 毫秒,没有写明推理是否与执行流水线重叠。第 06、08 节的"发呆"是我们玩具里的保守假设。

5. 这就是通用机器人了吗?论文的讨论节自己列了三条限制:预训练数据该怎么配比仍是未解问题;不是所有评测任务都能可靠完成;跨任务、跨机器人到底有多少正迁移,还没有答案。