目录

一、π₀的提出背景与模型定位

1.1 Π0介绍

1.2 为什么RT-2之后还需要π0

1.3 π0为什么被称为机器人基础模型

1.4 π0与ACT、Diffusion Policy的关系

二、π₀的输入、输出与动作表示

2.1 模型输入

2.2 动作块

2.3 四类Token

2.4 必须区分的三个时间符号

三、π₀的模型结构

3.1 整体层级结构

3.2 Gemma、PaliGemma与π₀的关系

3.3 π₀到底是什么Transformer结构

3.4 Action Expert是什么

3.5 Action Output Head位于哪里

3.6 Action Output Head接收什么张量

3.7 为什么Transformer输出后还要经过全连接层

3.8 Action Output Head输出的是什么

四、π₀的训练过程

4.1 构造训练输入

4.2【Flow Matching】噪声 ϵ 是什么

4.3【Flow Matching】动作Token如何生成

4.4【Flow Matching】随机采样Flow时间并构造中间动作

4.5 【Flow Matching】为什么目标速度是 At−ϵ

4.6 【Flow Matching】Action Output Head与损失函数如何匹配

4.7 【Flow Matching】训练时是否需要多步积分

4.8【Decoder-only Transformer】一层双Expert Transformer如何计算

第一步:分别归一化

第二步:分别生成自己的Q、K、V

第三步:沿Token维度合并Q、K、V

4.9【Decoder-only Transformer】分块Attention Mask

使用具体Token举例

4.10【Decoder-only Transformer】动作块内部为什么是双向Attention

4.11【Decoder-only Transformer】VLM Expert与Action Expert如何交互

4.12 【Decoder-only Transformer】Attention之后如何进入下一层

五、π₀的推理过程

5.1 推理时动作块从哪里来

5.2 推理时为什么使用KV Cache

5.3 每个Flow步骤的Attention如何计算

5.4 Action Output Head在推理中如何工作

5.5 为什么使用Euler更新

5.6 论文中的步长0.1与10步推理

5.7 完整推理流程

5.8 比较π₀、ACT和Diffusion Policy动作块如何执行

六、ACT、Diffusion Policy与π₀的区别

七、π₀的意义、局限与总结

7.1 核心意义

7.2 主要局限

7.3 完整训练流程

7.4 完整推理流程

7.5 π₀需要重点记住的12点

哲学思考



一、π₀的提出背景与模型定位

1.1 Π0介绍

π0,读作Pi-Zero,是Physical Intelligence于2024年提出的通用机器人策略模型。它以互联网预训练VLM为基础,加入专门的连续动作专家,并通过Flow Matching生成机器人动作序列。模型可以控制单臂、双臂以及移动操作机器人,并通过直接提示或任务后训练完成多种操作任务。

ACT和Diffusion Policy都可以预测连续动作块,但原始模型主要依赖机器人任务数据训练。ACT通过CVAE和Transformer一次解码动作块;Diffusion Policy从随机动作噪声开始,通过多步去噪得到动作块。它们的原始版本都没有充分利用互联网规模视觉语言预训练形成的语义知识。π₀进一步将预训练VLM与连续机器人控制结合起来

π0=PaliGemma VLM+Action Expert+Flow Matching

其中:

  • PaliGemma负责理解图像、语言和任务语义;

  • Action Expert负责处理机器人状态与连续动作;

  • Flow Matching负责从随机动作块出发,逐步生成符合当前场景的合理动作块;

π₀仍然是一个动作策略。它直接根据当前观察和任务学习未来连续动作块。它不显式预测未来图像或环境状态,因此不属于显式世界模型。相比ACT和Diffusion Policy,π₀真正增加的是:

利用预训练VLM理解开放的视觉和语言任务,再通过机器人专用的Action Expert和Flow Matching生成高频连续动作。

1.2 为什么RT-2之后还需要π0

RT-2已经证明,互联网预训练VLM中的物体概念、语言知识和初步推理能力可以迁移到机器人控制。但RT-2仍然把连续机器人动作离散成动作Token,再像生成文字一样自回归地逐个输出。对于简单抓取和放置任务,这种方法能够工作;但机器人进行衣物折叠、双臂配合、插接、整理餐桌等复杂任务时,需要连续、平滑和高频的控制,自回归生成离散动作Token会带来量化误差和推理延迟。

RT-2的动作路径是:

连续动作→离散动作Token→自回归生成→反量化

π0则希望改成:

连续动作→连续生成模型→连续动作块

因此,π0保留VLM负责视觉和语言理解,但不再要求VLM原来的文字生成头同时承担高频连续控制,而是在旁边加入一个专门生成机器人动作的Action Expert。

1.3 π0为什么被称为机器人基础模型

传统机器人策略通常只针对一种机器人、一个任务或一个固定环境训练。换机器人、换夹爪或换任务后,往往要重新收集大量数据并重新训练。π0希望像语言基础模型一样,先在多机器人、多任务数据上进行广泛预训练,再用少量目标机器人数据进行后训练或微调。其目标是:

【预训练】:多机器人+多任务+大规模数据→通用机器人预训练模型

【后训练】:通用预训练模型+少量目标数据→任务专用策略

Physical Intelligence将这种跨机器人本体和跨任务的统一策略称为Generalist Robot Policy,即通用机器人策略。

1.4 π0与ACT、Diffusion Policy的关系

①ACT提出动作分块:它使用Transformer和CVAE直接重建未来动作序列,并通过Temporal Ensembling融合相互重叠的动作块。

②Diffusion Policy同样生成动作块,但它把动作序列看成一个需要逐步去噪的随机变量:

噪声动作序列→逐步去噪→真实动作序列

这样可以表示同一场景下的多种合理动作轨迹。

③π0则采用:

VLM条件+Action Expert+Flow Matching+动作分块

因此可以理解为:

ACT【基于CVAE的动作块策略】提供了“不要只预测一步,而要预测动作块”的重要思想;

Diffusion Policy【基于扩散模型的动作块策略】证明连续生成模型适合机器人动作;

π0【基于VLM和Flow Matching Action Expert的动作块策略】进一步用Flow Matching和Action Expert把连续动作生成接入预训练VLM。


二、π₀的输入、输出与动作表示

2.1 模型输入

在机器人真实控制时刻 t,π₀的输入可以写成:

这些信息不会把原始数值直接简单拼接,而是分别转换为Transformer可以处理的Token。

2.2 动作块

π₀一次生成未来 H 步连续动作。例如:H=50,D=14,代表模型一次生成50步动作,每步包含14个连续控制量。

2.3 四类Token

Token类型

产生方式

本质

图像Token

Image Encoder

连续视觉特征

语言Token

Tokenizer+Embedding

离散词表索引对应的连续向量

状态Token

State Projection

连续机器人状态特征

动作Token

Action-Time MLP

连续动作与Flow时间特征

所谓“动作Token”,只是指动作在Transformer序列中占据一个Token位置。它不代表动作被加入语言词表,也不代表模型需要在若干离散动作类别中选择。π₀最终输出连续动作块,因此,它不需要动作词表分类,也不需要再将离散Token反量化成连续动作。

2.4 必须区分的三个时间符号

训练时随机采样的是Flow时间 τ,不是机器人真实时间 t。很多Diffusion论文会使用字母 t 表示噪声时间,但本文为了避免与机器人真实控制时间混淆,统一使用 τ。


三、π₀的模型结构

3.1 整体层级结构

π₀ Policy

├─ ① 输入编码

│ ├─ Image Encoder

│ │  图像 → 视觉Token

│ ├─ Language Embedding

│ │  语言 → 语言Token

│ ├─ State Projection

│ │  机器人状态 → 状态Token

│ └─ Action-Time MLP

│   中间动作+Flow时间 → 动作Token

├─ ② 多层双Expert Decoder-only Transformer

│ ├─ VLM Expert

│ │  处理图像和语言Token

│ └─ Action Expert

│   处理状态和动作Token

└─ ③ Action Output Head

最终动作Token隐藏特征 → Flow速度场

3.2 Gemma、PaliGemma与π₀的关系

①Gemma本身是Decoder-only Transformer,原始Gemma只有一套Transformer参数,主要用于语言建模:

文本Embedding→多层Transformer Block→Language Head

每个Transformer Block包含:

  • RMSNorm;

  • Self-Attention;

  • Attention输出投影;

  • FFN;

  • 残差连接。

②PaliGemma在Gemma前面加入图像编码器,视觉Token和语言Token一起进入Gemma式Decoder-only Transformer:

图像→Image Encoder→视觉Token

③π₀在PaliGemma基础上进一步增加:

  • 机器人状态输入投影;

  • 动作与Flow时间编码MLP;

  • 每一层中的第二套Action Expert参数;

  • 分块Attention Mask;

  • Action Output Head;

  • Flow Matching训练与推理机制。

因此可以概括为:

Gemma=Decoder-only语言模型

PaliGemma=Image Encoder+Gemma

π0=PaliGemma+Action Expert+Action Output Head+Flow Matching

即π0=Image Encoder+Decoder-only(Gemma)+Action Expert+Action Output Head+Flow Matching

3.3 π₀到底是什么Transformer结构

π₀不是VLM Encoder→Cross-Attention→Action Decoder【ACT】,它也不是先由VLM输出一个最终特征,再把这个特征传给一张独立动作网络【Diffusion Policy】。π₀的主体是:

[图像Token,语言Token,状态Token,动作Token]→同一个Decoder-only Transformer

这里的“Decoder-only”表示:

  • 没有独立的观察Transformer Encoder;

  • 没有独立的Action Transformer Decoder;

  • 没有专门的Encoder—Decoder Cross-Attention模块;

  • 不同模态通过同一序列中的Self-Attention交换信息。

π₀前面确实有Image Encoder,但“Decoder-only”描述的是视觉Token产生之后的Transformer主干。π₀采用的是分块Mask,动作块内部是双向Attention。

看到这里不懂和疑惑不用急,后面第四章会有详细介绍】。

3.4 Action Expert是什么

“Action Expert是新增的小参数分支”很容易被误解为:PaliGemma额外连接一张Action Decoder,实际不是。原始Gemma每个Transformer Block只有一套参数。π₀则在每一层内部放置两套参数,例L层结构如下:

第 L 层Transformer Block

├─ VLM Expert

│ ├─ VLM RMSNorm

│ ├─ VLM Q/K/V投影

│ ├─ VLM Attention输出投影

│ └─ VLM FFN

└─ Action Expert

├─ Action RMSNorm

├─ Action Q/K/V投影

├─ Action Attention输出投影

└─ Action FFN

两套Expert不是前后串联,而是在同一层的联合Self-Attention中交互,此外Token采用固定路由。它们的隐藏宽度可以不同,但投影后的Attention Head规格必须兼容,才能在同一个注意力空间中计算。

使用的参数

Token类型

隐藏维度

Attention Head Dimension

层数

VLM Expert

图像、语言Token

2048

相同

相同

Action Expert

状态、动作Token

1024

相同

相同


3.5 Action Output Head位于哪里

Action Output Head位于全部Transformer Block之后。完整链路为:

图像、语言、机器人状态、中间动作块

分别编码成Token

多层双Expert Decoder-only Transformer

最后一层动作Token隐藏特征

Final RMSNorm

Action Output Head

H×D 维连续速度场

图像、语言、状态和动作Token都参与Transformer计算,但最终只有动作Token的隐藏特征进入Action Output Head【第四章会详细解释为什么】。总结原因是:

  • 图像Token描述场景;

  • 语言Token描述任务;

  • 状态Token描述机器人当前姿态;

  • 这些信息已经通过多层Attention影响了动作Token;

  • 最终动作Token已经包含生成动作所需的多模态信息。

所以输出阶段不需要再次把图像、语言、状态Token全部送入输出头。可以理解为:

图像、语言、状态⟶Attention动作Token⟶Action Output Head

3.6 Action Output Head接收什么张量

经过所有Transformer层和最终RMSNorm后,动作Token隐藏特征为:

其中:B:Batch大小;H:动作Token数量;dA:Action Expert隐藏宽度。第 i 个动作Token对应未来动作块中的第 i 个动作位置:

但是,这个动作Token并不等于真正的机器人动作。它是一个抽象隐藏特征,其中融合了:

  • 当前图像中的物体与空间关系;

  • 语言指令;

  • 机器人当前状态;

  • 当前中间动作块;

  • Flow时间;

  • 动作块其他位置的信息。

3.7 为什么Transformer输出后还要经过全连接层

Transformer输出的 dA 维向量是内部表征,不是机器人可以直接执行的控制量。例如:

表示一共有50个动作Token;每个动作Token由1024维隐藏特征表示。但机器人单步动作D可能只有14维,代表双臂关节、夹爪或末端位姿变化等控制量。因此,需要Action Output Head完成:1024→14。其本质是一个线性映射:

其中:

于是:

最终得到:

每个动作Token都经过同一个线性输出层,得到一个 D 维速度向量。为什么一个线性层就可以?因为复杂的非线性理解已经由前面的多层Transformer完成。Action Output Head主要负责把已经形成的动作隐藏特征“读取”到机器人动作空间。它类似目标检测模型最后的检测Head:

深层特征→边界框与类别输出

不是最后一个Head独自完成了全部理解,而是前面的主干网络已经形成了适合输出的特征。

3.8 Action Output Head输出的是什么

Action Output Head输出:

它不是最终动作块,而是Flow速度场。它表示当前中间动作块相对于Flow时间 τ 应该如何变化。也就是:

Action Output Head回答的不是“最终动作是什么”,而是“当前动作草稿下一步应该如何修改”。

最终动作由多次速度预测和数值积分得到。


四、π₀的训练过程

4.1 构造训练输入

一条训练样本包含:

其中:ot:当前观察;At:专家在该观察下执行的真实动作块。训练时还需要采样:

以及Flow时间:

这里的 τ 是从定义在 [0,1] 上的训练时间分布中随机采样的,不是机器人真实控制时间 t。

4.2【Flow Matching】噪声 ϵ 是什么

ϵ与真实动作块形状相同:

所以,ϵ不是一个标量“噪声等级”,而是一整个随机动作块。因此可以把它理解为:

ϵ=Flow生成过程的随机起始动作块

它虽然形状像动作块,但不能直接控制机器人,只是一份随机动作草稿。训练中每次会重新采样噪声,让模型学习从不同随机起点走向符合当前条件的真实动作。

4.3【Flow Matching】动作Token如何生成

对中间动作块中的每个动作:

模型先进行动作输入投影,再将Flow时间 τ 编码成时间特征,随后通过Action-Time MLP生成动作Token:

其中ϕ(τ)表示Flow时间的编码。动作块长度为 H 时,就会生成 H 个动作Token:


4.4【Flow Matching】随机采样Flow时间并构造中间动作


4.5 【Flow Matching】为什么目标速度是 At−ϵ

π₀规定了一条从随机起始动作块到真实动作块的直线路径:

展开整理:

它与匀速运动公式非常相似:

当前位置=起始位置+时间×速度

对应关系是:

匀速运动

Flow Matching

起始位置

ϵ

时间

τ

速度

At−ϵ

当前位置

Atτ

因此,对 τ 求导:

所以目标速度为:

这不是“动作减噪声的误差”,也不是机器人真实关节速度。它表示:

从随机起始动作块 ϵ 走向真实动作块 At 时,每单位Flow时间应发生的动作数值变化。


4.6 【Flow Matching】Action Output Head与损失函数如何匹配

模型输入:

经过双Expert Transformer后,得到动作Token隐藏特征:

Action Output Head预测:

训练程序已知:真实动作块 At;本次随机采样的起始动作块 ϵ。因此可以计算监督标签:

损失为:

预测和标签的形状完全相同,因此损失会逐动作位置、逐动作维度进行比较。模型并不会直接把真实动作 At作为输入答案看到。模型看到的是当前状态、当前flow时间步的动作快和当前flow时间步

而真实动作快和噪声:

由训练程序保留,用来计算监督标签。可以把训练理解为:

给模型当前场景、当前动作草稿以及当前Flow阶段,让模型预测这份动作草稿应该向哪个方向修改。

训练集中存在大量不同的:观察、机器人状态、专家动作和随机噪声等,因此模型最终学习的是一个条件函数:

也就是说,在动作空间中不同位置、不同任务条件下,都有不同的变化方向与幅度。这些速度向量合起来,才称为速度场或向量场。

4.7 【Flow Matching】训练时是否需要多步积分

答案是不需要。一条样本的一次训练过程是:

真实观察 ot+真实动作块 At

随机采样高斯起始动作块 ϵ

随机采样Flow时间 τ

直接构造中间动作 Atτ

Transformer一次前向

Action Output Head一次预测完整速度场

与 At−ϵ 计算损失

反向传播

训练时不需要执行推理阶段的10次Euler更新。一次训练前向通常只抽一个 τ,只预测一次速度场。但是在不同训练迭代中:

噪声会重新采样;Flow时间会重新采样;同一专家动作可能对应许多不同的中间动作。

经过大量训练后,模型逐渐学习整个动作空间中的速度场。

4.8【Decoder-only Transformer】一层双Expert Transformer如何计算

设第 L 层输入为:

每一层按照相同结构计算,但不同层的参数彼此独立。

第一步:分别归一化

图像、语言Token使用VLM Expert的RMSNorm:

状态、动作Token使用Action Expert的RMSNorm:

第二步:分别生成自己的Q、K、V

VLM Expert生成:

Action Expert生成:

两套Expert不共享QKV投影参数。但是,Q、K、V投影后的Attention Head Dimension相同,因此能够参与联合Attention计算。

第三步:沿Token维度合并Q、K、V

这里是沿Token序列长度维度拼接,不是把最后的特征维度拼起来。


4.9【Decoder-only Transformer】分块Attention Mask

π₀将完整序列分为三个块:

Attention Mask不是作用在Q、K、V投影阶段,而是作用在QK⊤得到的注意力分数矩阵上

其中:

 

使用具体Token举例

假设序列为:

[P1,P2,S,A1,A2,A3]

其中:

  • P1,P2:图像或语言Token;

  • S:状态Token;

  • A1,A2,A3:三个动作Token。

Mask为:

Query \ Key

P1

P2

S

A1

A2

A3

P1

×

×

×

×

P2

×

×

×

×

S

×

×

×

A1

A2

A3

对应数值Mask:

逐行理解:

  • 图像和语言Query只能读取图像、语言;

  • 状态Query可以读取图像、语言和状态自身;

  • 动作Query可以读取图像、语言、状态和完整动作块。


4.10【Decoder-only Transformer】动作块内部为什么是双向Attention

可以理解为动作块是一次性联合预测的,所以不存在自回归模型中的“偷看未来”问题。但需要注意的是:原生diffusion policy的动作块用了mask因果掩码,因此需要确认动作块内部是否双向,体现在Mask右下角:

普通GPT使用下三角Mask:

因此GPT适合逐Token自回归生成,而π₀适合一次联合更新整个动作块。


4.11【Decoder-only Transformer】VLM Expert与Action Expert如何交互

从整体实现看,Q、K、V都会合并:

然后计算一次联合Self-Attention。但从不同Query的实际可见范围看:

所以两套Expert真正交互的位置是:

Action Expert生成的动作Query,可以读取VLM Expert生成的图像、语言Key和Value。

两套Expert不是互相传递一个最终向量,而是在每一层Attention中持续交换信息。只有动作token与其他token在每层进行了充分的交流,所以这就是为什么最终只需要动作Token的隐藏特征进入Action Output Head层,

4.12 【Decoder-only Transformer】Attention之后如何进入下一层

联合Attention输出为:

然后按Token来源重新拆开。其中:ZP经过VLM Expert自己的输出投影;ZS,ZA经过Action Expert自己的输出投影。之后分别进行残差连接:

再分别进入各自FFN:

完成后进入下一层,重复相同结构。单层过程可以概括为:

两套Expert分别Norm

→ 分别生成自己的QKV

→ Q、K、V沿Token维度合并

→ 加分块Mask做联合Self-Attention

→ 按Token来源拆开

→ 各自输出投影+残差

→ 各自FFN+残差

→ 进入下一层


五、π₀的推理过程

5.1 推理时动作块从哪里来

推理时只有:

  • 当前图像;

  • 语言指令;

  • 机器人状态。

没有真实专家动作块 At。因此模型首先随机生成一份初始动作块:

其中:

其形状与最终动作块相同,它不是机器人状态提供的动作,只是模型内部随机生成的一份动作草稿。

5.2 推理时为什么使用KV Cache

一次动作块生成过程中:

  • 图像不变;

  • 语言指令不变;

  • 动作块在每个Flow步骤都会改变。

因此,没有必要在每个Flow步骤重新计算完整图像语言前缀。在本文参考的openpi实现中,模型先运行:

并缓存每一层的:

KV Cache不是只缓存最后一层,而是保存每一个Transformer层中的前缀Key和Value。

【论文描述与代码实现的区别】论文的分块设计使状态不能读取动作,因此从结构上看,状态KV也具备缓存条件。但本文所依据的openpi实现实际只缓存图像和语言前缀。状态Token仍然放在后缀中,与动作Token一起在每个Flow步骤重新计算。因此:

Token类型

推理时处理

图像、语言

每层K/V缓存

状态

每个Flow步骤重新计算Q/K/V

动作

每个Flow步骤重新计算Q/K/V


5.3 每个Flow步骤的Attention如何计算

在当前实现中,后缀为状态+动作快

每个Flow步骤重新生成状态

以及动作快

然后把当前后缀Key、Value缓存前缀KV(图像+语言)拼接:

后缀Query为:

 

于是:

Mask仍然会区分状态和动作:

  • 状态Query只能读取图像、语言和状态;

  • 动作Query可以读取图像、语言、状态和全部动作Token。动作块内部依然采用双向Attention,因此每个Flow步骤都是联合修改整段动作轨迹,而不是逐个动作自回归生成。推理时对应的Mask区域为:

Query \ Key

P1

P2

S

A1

A2

A3

S

×

×

×

A1

A2

A3


5.4 Action Output Head在推理中如何工作

在第 τ 个Flow步骤,经过全部Transformer层后,得到动作Token最终隐藏特征:

Action Output Head输出:

它表示当前动作块应该怎样变化。随后使用Euler方法更新:

更新后的动作块会重新进入Action-Time MLP:

然后再重新经过以下过程:

  • Action Expert;

  • 计算联合Attention;

  • FFN;

  • Final RMSNorm;

  • Action Output Head;

  • Euler更新

以此循环,直到Flow过程结束

5.5 为什么使用Euler更新

5.6 论文中的步长0.1与10步推理

按照论文记法,Flow 时间从0 变化到1),采用固定步长0.1)时:

因此需要进行10次 Euler 更新:

每一步均先预测速度,再更新动作块:

例如,前两步为:

后续重复该过程,最终得到:

一次完整的动作生成包括:

  • 采样1次初始随机动作块;

  • 执行10次 Transformer 前向计算;

  • 调用10次 Action Output Head;

  • 进行10次 Euler 更新。

每一步都会使用更新后的动作块和新的 Flow 时间重新预测速度。步长 (0.1) 和10步推理是 π₀论文采用的实验设置,并非 Flow Matching 的唯一配置。理论上也可以采用更大或更小的步长、更多或更少的积分步骤、非均匀步长或更高阶 ODE 求解器。

5.7 完整推理流程

          当前图像 + 语言 + 机器人状态
                     ↓
        计算并缓存图像–语言前缀各层的 K/V
                        ↓
              随机初始化动作块 Aₜ⁰ = ε
                         ↓
                输入 Aₜ⁰、oₜ、τ = 0
                         ↓
           重新计算状态与动作的 Q/K/V
                         ↓
动作 Query 读取:前缀 KV + 状态 KV + 当前动作 KV
                         ↓
          Action–Action 区域双向 Attention
                         ↓
          得到最后 H 个动作 Token 隐藏特征
                         ↓
        Action Output Head 预测速度 vθ⁰
                         ↓
              Aₜ⁰·¹ = Aₜ⁰ + 0.1vθ⁰
                         ↓
           将更新后的动作块重新输入模型
                         ↓
                     重复 10 次
                         ↓
                 得到最终动作块 Aₜ¹

 

5.8 比较π₀、ACT和Diffusion Policy动作块如何执行

①π₀: π₀使用 Flow Matching生成50步动作块,但实际只执行前16步或25步,随后根据新图像和机器人状态重新生成下一块。下一块可以在实际运行中接上,但并不是把上一动作块继续“顺延”,也不使用 ACT 的 Temporal Ensemble;它会丢弃未执行的旧动作,并从新的随机噪声重新生成。块间衔接主要依靠最新状态条件、动作块联合建模、训练数据中的连续轨迹以及底层控制器,因此通常能够保持连贯,但没有显式的无缝拼接保证。

ACT: ACT每次预测一个完整动作块,并在后续控制时刻继续生成相互重叠的新动作块。对于同一时刻的多个动作预测,ACT使用 Temporal Ensemble 加权平均,因此新旧动作块能够较平滑地衔接。不过,如果多个动作块代表不同的行为模式,平均结果可能产生动作模糊或响应滞后。

Diffusion Policy: Diffusion Policy从随机噪声出发,迭代生成完整动作块,只执行其中前若干个动作,然后根据最新观测重新生成下一块。新动作块通常不会直接继承上一块的剩余动作,而是依靠当前机器人状态、观测历史以及训练中学到的轨迹连续性实现衔接。这种滚动时域控制具有较强的环境响应能力,但块间连续性并非严格保证。

总结:π₀和 Diffusion Policy 的动作执行策略非常相似,二者都会一次生成完整动作块,只执行其中一部分,然后根据最新观测重新生成下一块。而ACT使用 Temporal Ensemble 加权平均来实现动作的输出。


六、ACT、Diffusion Policy与π₀的区别

对比项

ACT

Diffusion Policy

π₀

模型基础

CVAE+Transformer

条件扩散模型

PaliGemma+Action Expert

主要输入

图像、状态

观察窗口、状态

图像、语言、状态

动作表示

连续动作块

连续动作块

连续动作块

随机起点

低维潜变量 z

完整动作噪声

完整动作噪声

输出头预测内容

最终连续动作

噪声或等价去噪参数

Flow速度场

训练目标

动作重建+KL

噪声预测等目标

速度场回归

推理方式

一次解码

多步去噪

多步ODE积分

语言能力

原始版本无

原始版本无

Transformer交互

视觉条件与动作Decoder

依去噪网络而定

双Expert联合Self-Attention

动作注意力

Decoder结构

依模型而定

动作块内部双向Attention

①ACT通常一次前向直接得到动作块。

 

②Diffusion Policy:

③π₀:


七、π₀的意义、局限与总结

7.1 核心意义

第一,π₀把预训练VLM的视觉语言知识用于机器人连续控制,使模型能够根据自然语言理解任务目标。

第二,Action Expert不是独立Action Decoder,而是每个Transformer Block中的机器人专用参数路径。

第三,两套Expert通过联合Self-Attention持续交换信息,使动作Token在每一层都可以读取图像、语言和机器人状态。

第四,分块Mask既保留了PaliGemma前缀的信息流,又让完整动作块内部进行双向Attention。

第五,Action Output Head把动作Token隐藏特征映射成连续速度场,使模型不需要动作词表。

第六,Flow Matching让π₀能够从随机动作块开始,通过少量数值积分步骤生成连续动作轨迹。

7.2 主要局限

第一,π₀依赖大规模、多机器人专家示范数据,训练和部署成本高于单任务策略。

第二,推理虽然可以缓存图像语言前缀的KV,但每个Flow步骤仍需重新计算状态和动作后缀,并运行Action Expert与Action Output Head。

第三,使用10个Flow步骤意味着一次动作块生成需要多次Transformer前向,延迟高于一次解码式模型。

第四,不同机器人的动作空间和动作维度不同,需要进行统一表示、归一化和机器人专用适配。

第五,π₀直接预测动作空间速度场,不显式模拟动作执行后的未来环境,因此不是显式世界模型。

7.3 完整训练流程

专家观察 ot+真实动作块 At

随机采样起始动作块 ϵ

随机采样Flow时间 τ

直接构造中间动作 Atτ

图像、语言、状态、动作分别编码成Token

进入双Expert Decoder-only Transformer

每层分别生成Q/K/V

Q、K、V沿Token维度合并

分块Mask控制联合Self-Attention

动作块内部进行双向Attention

分别经过两套Expert的输出投影、残差和FFN

最后 H 个动作Token经过Final RMSNorm

Action Output Head预测 H×D 速度场

与目标速度 At−ϵ 计算损失

反向传播

7.4 完整推理流程

当前图像+语言+机器人状态

缓存图像语言前缀的各层K/V

随机初始化动作块 At0=ϵ

每个Flow步骤重新计算状态和动作Q/K/V

动作Query读取前缀、状态和全部动作KV

最后 H 个动作Token进入Action Output Head

预测当前速度场 vθ

Atτ+Δτ=Atτ+Δτ·vθ

更新后的动作块重新进入模型

论文配置下重复10次,Δτ=0.1

得到最终动作块 At1

执行部分动作并重新观察

7.5 π₀需要重点记住的12点

① π₀由PaliGemma、Action Expert、Action Output Head和Flow Matching组成。

② π₀主体是双Expert Decoder-only Transformer,不是传统Encoder—Decoder结构。

③ Action Expert是每个Transformer Block内部新增的第二套参数,不是独立Action Decoder。

④ 图像和语言Token走VLM Expert,状态和动作Token走Action Expert。

⑤ 两套Expert分别生成自己的Q、K、V,再通过统一Self-Attention交互。

⑥ Mask作用在 QK⊤ 注意力分数矩阵上,不直接作用在QKV投影阶段。

⑦ 动作块双向Attention体现在Action—Action Mask子矩阵全部开放。

⑧ Action Output Head只读取最后 H 个动作Token的最终隐藏特征。

⑨ 它将每个动作Token从 dA 维线性映射成 D 维连续速度向量。

⑩ ϵ是一整个随机初始化动作块,不是噪声等级。

⑪ 训练时随机抽取一个Flow时间,直接构造中间动作,只进行一次速度预测和反向传播。

⑫ 推理时每个Flow步骤都重新预测速度;论文使用 Δτ=0.1,经过10次Euler更新得到最终动作块。

哲学思考

“机器人真正听懂人话,不是会回答,而是能把理解变成动作。”

——当图像Token描述场景、语言Token给出目标、状态Token标记身体位置,Action Expert便在分块Attention中让信息汇入动作Token;Flow Matching从随机动作块出发,借Action Output Head预测速度场,用十次Euler更新把“动作草稿”推成可执行轨迹。它表面上是在教机器人连续控制,本质上是在回答理解如何获得行动力:知识不是停在内部表征里的解释,而是经过约束、反馈与滚动观察,变成对现实有效的选择。成熟的智能,不在于说出世界是什么,而在于重新看见世界后,仍能修正下一步。

结尾语:如果本文对您有帮助,请点赞鼓励一下,这对我真的很重要。您的每一次鼓励,都是我继续创作的动力,谢谢啦!下次见。

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐