离散自回归动作 Token
OpenVLA: 一种开源的视觉-语言-动作模型
OpenVLA 模型是一个 7B 参数的视觉-语言-动作模型 (VLA),基于来自 Open X-Embodiment 数据集的 97 万个机器人演示进行训练。
OpenVLA 的核心思想是将机器人动作预测完全统一为视觉-语言任务 。它接受一张机器人当前看到的图片和一句文本指令,最终由大型语言模型(LLM)逐字输出机器人的动作指令。
第一步:视觉与文本输入的嵌入(Embedding)
模型首先接收一张当前摄像头拍摄的原始图像I I I 和一段自然语言任务指令L L L (如"Pick up the yellow mustard bottle")。
为了兼顾“高层语义”与“低层精准几何定位”,模型使用双流视觉编码器提取图像特征:
Input: I ∈ R H × W × C , L = ( w 1 , w 2 , … , w M ) E SigLIP ( I ) ∈ R N v × D 1 , E DinoV2 ( I ) ∈ R N v × D 2 Z v = [ E SigLIP ( I ) ∥ E DinoV2 ( I ) ] ∈ R N v × ( D 1 + D 2 ) X v = f MLP ( Z v ) ∈ R N v × D LLM X l = Embed LLM ( L ) ∈ R M × D LLM X = [ X v ∥ X l ] ∈ R ( N v + M ) × D LLM \begin{aligned} & \text{Input: } I \in \mathbb{R}^{H \times W \times C}, \quad L = (w_1, w_2, \dots, w_M) \\ & E_{\text{SigLIP}}(I) \in \mathbb{R}^{N_v \times D_1}, \quad E_{\text{DinoV2}}(I) \in \mathbb{R}^{N_v \times D_2} \\ & Z_v = \left[ E_{\text{SigLIP}}(I) \,\Vert{}\, E_{\text{DinoV2}}(I) \right] \in \mathbb{R}^{N_v \times (D_1 + D_2)} \\ & X_v = f_{\text{MLP}}(Z_v) \in \mathbb{R}^{N_v \times D_{\text{LLM}}} \\ & X_l = \text{Embed}_{\text{LLM}}(L) \in \mathbb{R}^{M \times D_{\text{LLM}}} \\ & X = [X_v \,\Vert{}\, X_l] \in \mathbb{R}^{(N_v + M) \times D_{\text{LLM}}} \end{aligned} Input: I ∈ R H × W × C , L = ( w 1 , w 2 , … , w M ) E SigLIP ( I ) ∈ R N v × D 1 , E DinoV2 ( I ) ∈ R N v × D 2 Z v = [ E SigLIP ( I ) ∥ E DinoV2 ( I ) ] ∈ R N v × ( D 1 + D 2 ) X v = f MLP ( Z v ) ∈ R N v × D LLM X l = Embed LLM ( L ) ∈ R M × D LLM X = [ X v ∥ X l ] ∈ R ( N v + M ) × D LLM
I ∈ R 224 × 224 × 3 I \in \mathbb{R}^{224 \times 224 \times 3} I ∈ R 224 × 224 × 3 :输入图像,设定分辨率为224 × 224 224 \times 224 224 × 224 (相比384 × 384 384 \times 384 384 × 384 ,控制性能无损失但训练速度提升 3 倍)。
L = ( w 1 , … , w M ) L = (w_1, \dots, w_M) L = ( w 1 , … , w M ) :长度为M M M 的自然语言任务指令词元序列。
E SigLIP , E DinoV2 E_{\text{SigLIP}}, E_{\text{DinoV2}} E SigLIP , E DinoV2 :预训练双流视觉编码器。SigLIP 提取高层语义,DinoV2 提取细粒度空间几何特征,两者按通道拼接成特征Z v Z_v Z v 。
N v N_v N v :图像划分切片(Image Patches)导出的视觉标记(Visual Tokens)数量。
f MLP f_{\text{MLP}} f MLP :2 层多层感知机投影器,将融合后的视觉特征维度映射并对齐至 LLM 的隐空间维度D LLM D_{\text{LLM}} D LLM 。
X ∈ R ( N v + M ) × D LLM X \in \mathbb{R}^{(N_v + M) \times D_{\text{LLM}}} X ∈ R ( N v + M ) × D LLM :将投影后的视觉标记序列X v X_v X v 与文本标记序列X l X_l X l 沿时间轴直接拼接,构成送入 7B Llama 2 骨干网的统一多模态上下文序列。
第二步:连续动作的离散化与词表映射(Action Discretization & Tokenization)
为了让只能输出文本词元(Text Tokens)的 LLM 能够输出机器人物理动作,需要将连续的物理动作向量转译为 LLM 能理解的离散 Token。
假设机器人当前需要执行的末端执行器动作向量为:
a = [ a 1 , a 2 , … , a N ] ⊤ ∈ R N \mathbf{a} = [a_1, a_2, \dots, a_N]^\top \in \mathbb{R}^N a = [ a 1 , a 2 , … , a N ] ⊤ ∈ R N
例如在 7 自由度机械臂控制中,N = 7 N=7 N = 7 ,前 6 维分别代表机械臂末端在 3D 空间中的平移变化量(Δ x , Δ y , Δ z \Delta x, \Delta y, \Delta z Δ x , Δ y , Δ z )和旋转变化量(Δ roll , Δ pitch , Δ yaw \Delta \text{roll}, \Delta \text{pitch}, \Delta \text{yaw} Δ roll , Δ pitch , Δ yaw ),第 7 维代表夹爪的开合程度。
量化与 Token 映射公式如下:
q 1 ( i ) = Percentile ( D , a i , 1 ) , q 99 ( i ) = Percentile ( D , a i , 99 ) a ~ i = Clip ( ⌊ 255 × a i − q 1 ( i ) q 99 ( i ) − q 1 ( i ) ⌋ , 0 , 255 ) ∈ { 0 , 1 , … , 255 } y a i = V LLM [ ∣ V LLM ∣ − 256 + a ~ i ] \begin{aligned} & q_1^{(i)} = \text{Percentile}(\mathcal{D}, a_i, 1), \quad q_{99}^{(i)} = \text{Percentile}(\mathcal{D}, a_i, 99) \\ & \tilde{a}_i = \text{Clip} \left( \left\lfloor 255 \times \frac{a_i - q_1^{(i)}}{q_{99}^{(i)} - q_1^{(i)}} \right\rfloor, \, 0, \, 255 \right) \in \{0, 1, \dots, 255\} \\ & y_{a_i} = V_{\text{LLM}}[\vert{}V_{\text{LLM}}\vert{} - 256 + \tilde{a}_i] \end{aligned} q 1 ( i ) = Percentile ( D , a i , 1 ) , q 99 ( i ) = Percentile ( D , a i , 99 ) a ~ i = Clip ( ⌊ 255 × q 99 ( i ) − q 1 ( i ) a i − q 1 ( i ) ⌋ , 0 , 255 ) ∈ { 0 , 1 , … , 255 } y a i = V LLM [ ∣ V LLM ∣ − 256 + a ~ i ]
q 1 ( i ) , q 99 ( i ) q_1^{(i)}, q_{99}^{(i)} q 1 ( i ) , q 99 ( i ) :训练集D \mathcal{D} D 中第i i i 维动作对应的第 1 和第 99 分位数截断边界。
a ~ i ∈ { 0 , 1 , … , 255 } \tilde{a}_i \in \{0, 1, \dots, 255\} a ~ i ∈ { 0 , 1 , … , 255 } :将第i i i 维连续动作归一化到[ q 1 ( i ) , q 99 ( i ) ] [q_1^{(i)}, q_{99}^{(i)}] [ q 1 ( i ) , q 99 ( i ) ] 范围内,再均匀离散化得到的整数索引(区间档位)。
V LLM V_{\text{LLM}} V LLM :Llama 2 分词器的词表。为了避免扩充词表导致权重重随机化,直接覆盖词表末尾使用频率最低的 256 个保留 Token,将档位索引a ~ i \tilde{a}_i a ~ i 映射为对应的动作 Tokeny a i y_{a_i} y a i 。
为什么要计算第 1 与第 99 分位数分界线(q 1 ( i ) q_1^{(i)} q 1 ( i ) 和q 99 ( i ) q_{99}^{(i)} q 99 ( i ) ) :对连续的动作数值进行离散划分(量化),同时抵抗数据中的噪点和异常值。
为什么要划分 256 个区间?
LLM 的预测是输出离散类别概率。因此需要把原本连续的物理变化量(比如机械臂向左移动0.0123 m 0.0123\text{m} 0.0123 m )划分到 256 个固定档位(Bin Index:0 ∼ 255 0 \sim 255 0 ∼ 255 )中,离散化为整数。
为什么要用第 1 和第 99 分位数,而不是最小值和最大值(Min-Max)?
如果直接取数据集中的最小值与最大值作为映射边界(Min-Max),假设某一次采集数据时手臂被撞了一下,产生了一个极大的速度噪点(比如Δ x = 10.0 \Delta x = 10.0 Δ x = 10.0 ),那么最大值会被拉得极大。这会导致原本正常的动作范围(比如− 0.1 ∼ + 0.1 -0.1 \sim +0.1 − 0.1 ∼ + 0.1 )在映射后全部挤在非常窄的小区间里,大大浪费了 256 个档位的分辨率(有效粒度变极低)。
用第 1 分位数q 1 ( i ) q_1^{(i)} q 1 ( i ) (去掉极小的前 1% 异常值)和第 99 分位数q 99 ( i ) q_{99}^{(i)} q 99 ( i ) (去掉极大的后 1% 异常值)作为 256 个区间的上下边界,能将区间均匀铺在 98% 的正常动作数据上,超出边界的离散化时直接截断(Clip),从而确保对正常动作有极高的分辨率。
划分 256 个区间而非其它数量区间的原因
在计算机科学中,256 256 256 是一个非常特殊的二进制数字,其刚好占满 1 个字节(1 Byte / 8-bit),同时与图像/传感器数据天然对齐。机器人视觉输入的 RGB 图像,每个颜色通道的像素值也是 256 阶。使用 256 阶离散化在数据表示和内存对齐上非常顺畅。
OpenVLA 使用 Llama 2 作为语言模型的骨干网络。Llama 2 采用的 Byte-Pair Encoding (BPE) 分词器有一个硬性约束——特殊标记(Special Tokens)预算受限。Llama 分词器在预训练时,预留给微调新增的“自定义/特殊 Token”(Special Tokens)只有 100 个。
为了引入全新的“动作 Token”,OpenVLA 遵循了 RT-2 等前作的惯例,直接覆盖 Llama 词汇表中最罕用/使用频率最低的最后 256 个 Token。如果设置成 1024 档,就需要覆盖原词表中过多有用的文本 Token,可能会损坏 LLM 原有的语言理解和推理能力;如果设置成 64 档,对 Token 空间的占用倒是小了,但又会牺牲控制精度。
另外,连续动作空间离散化时,档位数目决定了机器人的最小控制分辨率(Sensitivity)。假设机械臂末端在一个控制周期内的移动范围是[ − 0.1 m , + 0.1 m ] [-0.1\text{m}, +0.1\text{m}] [ − 0.1 m , + 0.1 m ] ,总跨度为0.2 m 0.2\text{m} 0.2 m (200 mm 200\text{mm} 200 mm )。
如果设为 16 档:每个档位代表200 mm 16 = 12.5 mm \frac{200\text{mm}}{16} = 12.5\text{mm} 16 200 mm = 12.5 mm 。机器人的控制极其粗糙,无法完成插拔、按按钮等精细操作。
如果设为 256 档:每个档位代表200 mm 256 ≈ 0.78 mm \frac{200\text{mm}}{256} \approx 0.78\text{mm} 256 200 mm ≈ 0.78 mm 。小于1 mm 1\text{mm} 1 mm 的控制精度对于绝大多数日常桌面抓取和操纵任务(如抓取瓶子、推按开关)已经完全足够。
如果设为 65,536 档(16-bit):精度虽然极高,但会给 LLM 的分类预测带来极大的学习难度。
在神经网络训练中,LLM 预测动作本质上是在做 256 分类的 Softmax:P ( y i ) = e z i ∑ j = 0 255 e z j P(y_i) = \frac{e^{z_i}}{\sum_{j=0}^{255} e^{z_j}} P ( y i ) = ∑ j = 0 255 e z j e z i 。如果分类类别数太多(如 10,000 分类),Softmax 的概率分布会非常稀释,模型不仅收敛极慢,而且相邻档位之间的差距过于微小(例如第 5000 档和第 5001 档),会导致交叉熵损失难以有效指导梯度更新。256 跨度的多分类问题在现代深度学习中已经被验证为非常容易优化(就像分类 CIFAR-100 或 ImageNet-1k 级别的分类节点)。
第三步:LLM 前向预测与训练目标(Autoregressive Action Prediction)
将拼接好的上下文序列X = [ X v ∥ X l ] X = [X_v \,\Vert{}\, X_l] X = [ X v ∥ X l ] 喂入 LLM 骨干网,LLM 以自回归(Next-Token Prediction)的方式,顺序预测N N N 个动作 Token:
P ( y a 1 , y a 2 , … , y a N ∣ X ) = ∏ i = 1 N P θ ( y a i ∣ y < a i , X ) P(y_{a_1}, y_{a_2}, \dots, y_{a_N} \mid X) = \prod_{i=1}^N P_\theta \left( y_{a_i} \mid y_{<a_i}, X \right) P ( y a 1 , y a 2 , … , y a N ∣ X ) = i = 1 ∏ N P θ ( y a i ∣ y < a i , X )
模型优化目标为仅对这N N N 个动作 Token 计算的标准交叉熵损失(忽略图像与文本指令位置):
L Action ( θ ) = − ∑ i = 1 N log P θ ( y a i ∣ y < a i , X ) \mathcal{L}_{\text{Action}}(\theta) = - \sum_{i=1}^N \log P_\theta \left( y_{a_i} \mid y_{<a_i}, X \right) L Action ( θ ) = − i = 1 ∑ N log P θ ( y a i ∣ y < a i , X )
在该训练阶段,关键的工程决策包括:
解冻(Unfreeze)并全程微调视觉编码器 :训练中解冻视觉编码器对捕捉细粒度空间几何细节至关重要,如果按照传统 VLM 做法冻结视觉编码器,会导致控制精度大幅下降。
高 Epochs 充分训练 :全量迭代训练多达27 轮(Epochs) ,直到动作 Token 预测准确率超过 95%。
学习率策略 :采用固定学习率η = 2 × 10 − 5 \eta = 2 \times 10^{-5} η = 2 × 1 0 − 5 (不使用 Warmup),与 VLM 预训练保持一致。
第四步:推断时的动作解码(Action Inference / Unquantization)
在实际控制机器人时,模型输出N N N 个动作 Token后,执行**反量化(Unquantization)**还原为真实物理世界的连续动作标量并下发给控制器:
a ^ i = q 1 ( i ) + a ~ i 255 ⋅ ( q 99 ( i ) − q 1 ( i ) ) \hat{a}_i = q_1^{(i)} + \frac{\tilde{a}_i}{255} \cdot \left( q_{99}^{(i)} - q_1^{(i)} \right) a ^ i = q 1 ( i ) + 255 a ~ i ⋅ ( q 99 ( i ) − q 1 ( i ) )
将还原出的a ^ = [ a ^ 1 , a ^ 2 , … , a ^ N ] ⊤ \hat{\mathbf{a}} = [\hat{a}_1, \hat{a}_2, \dots, \hat{a}_N]^\top a ^ = [ a ^ 1 , a ^ 2 , … , a ^ N ] ⊤ 组合下发给机器人的底层伺服电机,即完成了一次“观测图像+指令→ \rightarrow → 物理动作”的端到端决策控制。
附:训练数据的构建策略
为了让上述流程能泛化控制多种机器人形态,训练数据基于 Open X-Embodiment (OpenX) 跨具身数据集构建,通过严格的过滤机制与启发式重采样均衡形态分布:
D OpenVLA = ∑ k ∈ K filtered w k ⋅ D k s.t. K filtered = { k ∣ Camera ( k ) ≥ 1 (3rd-person) , Control ( k ) = Single-Arm EE } w k = f Octo ( Diversity ( k ) , Domain ( k ) ) \begin{aligned} & \mathcal{D}_{\text{OpenVLA}} = \sum_{k \in \mathcal{K}_{\text{filtered}}} w_k \cdot \mathcal{D}_k \\ & \text{s.t.} \\ & \quad \mathcal{K}_{\text{filtered}} = \{k \mid \text{Camera}(k) \ge 1 \text{ (3rd-person)}, \, \text{Control}(k) = \text{Single-Arm EE}\} \\ & \quad w_k = f_{\text{Octo}}(\text{Diversity}(k), \text{Domain}(k)) \end{aligned} D OpenVLA = k ∈ K filtered ∑ w k ⋅ D k s.t. K filtered = { k ∣ Camera ( k ) ≥ 1 (3rd-person) , Control ( k ) = Single-Arm EE } w k = f Octo ( Diversity ( k ) , Domain ( k ))
D k , w k \mathcal{D}_k, w_k D k , w k :第k k k 个独立的子数据集及其对应的混合采样权重。
K filtered \mathcal{K}_{\text{filtered}} K filtered :经过过滤条件(包含第三人称视角相机且采用单臂末端执行器控制)筛选出的子数据集集合。
f Octo f_{\text{Octo}} f Octo :继承自 Octo 的启发式重采样策略,降低低多样性数据集权重,提高高多样性数据集权重;训练后三分之一阶段排除表现较差的 DROID 数据集。
FAST:面向视觉-语言-动作模型的高效动作标记化
本研究(Physical Intelligence 提出的 FAST 分词器)旨在解决高频机器人控制场景下,经典自回归 VLA 模型(如 OpenVLA、RT-2)采用“逐时间步分箱(Binning)分词”所导致的信息冗余、收敛缓慢以及高频控制性能急剧退化问题。
FAST 通过将时域连续动作块映射至频域(离散余弦变换 DCT),结合标量量化与字节对编码(BPE),实现了将高频动作块压缩为少量高效 Token 的端到端映射过程。
动作块预测任务界定
策略网络π ( a 1 : H ∣ o ) \pi(\mathbf{a}_{1:H} \mid o) π ( a 1 : H ∣ o ) 接收当前视觉/文本观测o o o ,直接预测包含H H H 个时间步的连续动作块(Action Chunk)a 1 : H \mathbf{a}_{1:H} a 1 : H ,用以保证时间连续性并减少累积误差。
动作分词器T a \mathcal{T}_a T a 的目标是将连续动作块映射为离散 Token 序列:
T a : a 1 : H ∈ R H × ∣ A ∣ ⟶ [ T 1 , T 2 , … , T n ] , T i ∈ { 1 , 2 , … , ∣ V ∣ } \mathcal{T}_a: \mathbf{a}_{1:H} \in \mathbb{R}^{H \times |\mathcal{A}|} \longrightarrow [T_1, T_2, \dots, T_n], \quad T_i \in \{1, 2, \dots, |\mathcal{V}|\} T a : a 1 : H ∈ R H × ∣ A ∣ ⟶ [ T 1 , T 2 , … , T n ] , T i ∈ { 1 , 2 , … , ∣ V ∣ }
a 1 : H = [ a 1 , a 2 , … , a H ] ⊤ ∈ R H × D \mathbf{a}_{1:H} = [\mathbf{a}_1, \mathbf{a}_2, \dots, \mathbf{a}_H]^\top \in \mathbb{R}^{H \times D} a 1 : H = [ a 1 , a 2 , … , a H ] ⊤ ∈ R H × D :连续动作块,时间步长为H H H ,动作空间维度为D = ∣ A ∣ D = |\mathcal{A}| D = ∣ A ∣ (如 7 自由度末端执行器动作)。
∣ V ∣ |\mathcal{V}| ∣ V ∣ :动作词表的大小(Vocabulary Size)。
n n n :分词后产生的离散 Token 数量(因压缩率不同,序列长度n n n 可变)。
经典逐时间步分箱(Naive Per-Timestep Binning)缺陷
经典方法(如 OpenVLA、RT-2)将每个时间步t ∈ [ 1 , H ] t \in [1, H] t ∈ [ 1 , H ] 的每个维度d ∈ [ 1 , D ] d \in [1, D] d ∈ [ 1 , D ] 独立划分至N = 256 N=256 N = 256 个区间,展开为固定长度n = H × D n = H \times D n = H × D 的 Token 序列:
T Binning ( a 1 : H ) = [ T 1 , 1 , … , T 1 , D , T 2 , 1 , … , T 2 , D , … , T H , 1 , … , T H , D ] \mathcal{T}_{\text{Binning}}(\mathbf{a}_{1:H}) = [T_{1,1}, \dots, T_{1,D}, \; T_{2,1}, \dots, T_{2,D}, \; \dots, \; T_{H,1}, \dots, T_{H,D}] T Binning ( a 1 : H ) = [ T 1 , 1 , … , T 1 , D , T 2 , 1 , … , T 2 , D , … , T H , 1 , … , T H , D ]
对自回归模型而言,下一个 Token 的学习信号强度取决于给定历史条件下的边际信息增量(Conditional Entropy / Information Gain):
I ( T i ∣ T 1 : i − 1 ) \mathcal{I}(T_i \mid T_{1:i-1}) I ( T i ∣ T 1 : i − 1 )
在连续平滑动作信号下,当采样频率提升(即时间步长Δ t → 0 \Delta t \to 0 Δ t → 0 )时:
lim Δ t → 0 ∥ a t + 1 − a t ∥ = 0 ⟹ I ( T t + 1 , d ∣ T 1 : t , d ) → 0 \lim_{\Delta t \to 0} \|\mathbf{a}_{t+1} - \mathbf{a}_t\| = 0 \implies \mathcal{I}(T_{t+1, d} \mid T_{1:t, d}) \to 0 Δ t → 0 lim ∥ a t + 1 − a t ∥ = 0 ⟹ I ( T t + 1 , d ∣ T 1 : t , d ) → 0
连续相邻时间步的 Token 强高度相关,导致每个 Token 包含的边际信息量趋近于零。这使得自回归模型梯度收敛极慢,在高频数据(如 DROID 数据集,50Hz)训练时极易退化为简单重复预测首个动作(Copying First Action),使得预测均方误差(MSE)急剧上升。
FAST 频域动作压缩全流程 (The FAST Tokenization Pipeline)
FAST 的核心思想是利用频域变换(DCT)去除连续时域信号的高频冗余,仅提取表征轨迹整体形状的低频系数,再通过 BPE 实现进一步无损压缩。
第一步:分位数归一化 (Percentile Normalization)
对输入动作块a 1 : H \mathbf{a}_{1:H} a 1 : H 的每个维度d ∈ { 1 , … , D } d \in \{1, \dots, D\} d ∈ { 1 , … , D } 分别进行截断归一化,将正常动作范围线性缩放至[ − 1 , 1 ] [-1, 1] [ − 1 , 1 ] :
a ˉ t , d = Clip ( 2 ⋅ a t , d − q 1 ( d ) q 99 ( d ) − q 1 ( d ) − 1 , − 1 , 1 ) , ∀ t ∈ { 1 , … , H } \bar{a}_{t, d} = \text{Clip}\left( 2 \cdot \frac{a_{t, d} - q_1^{(d)}}{q_{99}^{(d)} - q_1^{(d)}} - 1, \, -1, \, 1 \right), \quad \forall t \in \{1, \dots, H\} a ˉ t , d = Clip ( 2 ⋅ q 99 ( d ) − q 1 ( d ) a t , d − q 1 ( d ) − 1 , − 1 , 1 ) , ∀ t ∈ { 1 , … , H }
q 1 ( d ) , q 99 ( d ) q_1^{(d)}, q_{99}^{(d)} q 1 ( d ) , q 99 ( d ) :训练集中第d d d 维动作的第 1 和第 99 分位数边界,抵抗离群噪点干扰。
A ˉ ∈ R H × D \bar{\mathbf{A}} \in \mathbb{R}^{H \times D} A ˉ ∈ R H × D :归一化后的连续动作块矩阵。
沿时间轴(长度为H H H )对归一化矩阵A ˉ \bar{\mathbf{A}} A ˉ 的每一个动作维度d d d 独立施加 1D-DCT-II 变换,将信号从时域转换至频域:
C k , d = w ( k ) ∑ t = 1 H a ˉ t , d cos ( π ( 2 t − 1 ) ( k − 1 ) 2 H ) , k ∈ { 1 , … , H } C_{k, d} = w(k) \sum_{t=1}^{H} \bar{a}_{t, d} \cos \left( \frac{\pi (2t - 1) (k - 1)}{2H} \right), \quad k \in \{1, \dots, H\} C k , d = w ( k ) t = 1 ∑ H a ˉ t , d cos ( 2 H π ( 2 t − 1 ) ( k − 1 ) ) , k ∈ { 1 , … , H }
w ( k ) = { 1 H , k = 1 (直流分量 DC, 表征整体均值) 2 H , 2 ≤ k ≤ H (交流分量 AC, 由低到高频) w(k) = \begin{cases}
\frac{1}{\sqrt{H}}, & k = 1 \text{ (直流分量 DC, 表征整体均值)} \\
\sqrt{\frac{2}{H}}, & 2 \le k \le H \text{ (交流分量 AC, 由低到高频)}
\end{cases} w ( k ) = ⎩ ⎨ ⎧ H 1 , H 2 , k = 1 ( 直流分量 DC, 表征整体均值 ) 2 ≤ k ≤ H ( 交流分量 AC, 由低到高频 )
C k , d C_{k, d} C k , d :第d d d 维动作在第k k k 个频率分量上的 DCT 系数。
C ∈ R H × D \mathbf{C} \in \mathbb{R}^{H \times D} C ∈ R H × D :频域系数矩阵,其中低频系数(k k k 较小)集中了轨迹绝大部分能量与轮廓信息,高频系数(k k k 较大)多为微小震荡或 0。
第三步:标量量化与稀疏化 (Quantization & Rounding)
利用缩放因子γ \gamma γ 对频域系数矩阵C \mathbf{C} C 进行缩放并四舍五入取整,使不重要的高频微小系数直接归零,形成稀疏整数矩阵:
C ˉ k , d = Round ( γ ⋅ C k , d ) ∈ Z \bar{C}_{k, d} = \text{Round}\left( \gamma \cdot C_{k, d} \right) \in \mathbb{Z} C ˉ k , d = Round ( γ ⋅ C k , d ) ∈ Z
γ \gamma γ :缩放超参数(在所有实验中默认设为γ = 10 \gamma = 10 γ = 10 ),用于在有损压缩重建精度与压缩率之间取得平衡。
C ˉ ∈ Z H × D \bar{\mathbf{C}} \in \mathbb{Z}^{H \times D} C ˉ ∈ Z H × D :量化后的稀疏整数频域矩阵,绝大多数元素为 0。
第四步:列优先展平与 BPE 无损压缩 (Column-Major Flattening & BPE)
列优先展平 (Column-Major Flattening) :
为了让自回归模型在预测时首先生成对轨迹整体形状影响最大的低频分量,对矩阵C ˉ \bar{\mathbf{C}} C ˉ 采用列优先(Column-Major / Frequency-First)方式展平为一维整数序列:
S flat = [ C ˉ 1 , 1 , C ˉ 1 , 2 , … , C ˉ 1 , D , C ˉ 2 , 1 , C ˉ 2 , 2 , … , C ˉ 2 , D , … , C ˉ H , 1 , … , C ˉ H , D ] \mathbf{S}_{\text{flat}} = [\bar{C}_{1,1}, \bar{C}_{1,2}, \dots, \bar{C}_{1,D}, \; \bar{C}_{2,1}, \bar{C}_{2,2}, \dots, \bar{C}_{2,D}, \; \dots, \; \bar{C}_{H,1}, \dots, \bar{C}_{H,D}] S flat = [ C ˉ 1 , 1 , C ˉ 1 , 2 , … , C ˉ 1 , D , C ˉ 2 , 1 , C ˉ 2 , 2 , … , C ˉ 2 , D , … , C ˉ H , 1 , … , C ˉ H , D ]
BPE 算法压缩 (Byte-Pair Encoding) :
训练一个词汇表大小为∣ V BPE ∣ |\mathcal{V}_{\text{BPE}}| ∣ V BPE ∣ (默认 1024)的 BPE 分词器ϕ \phi ϕ 。BPE 逐步将频繁出现的零值片段及相邻维度间的高频系数模式合并为单一离散 Token,生成最终送入 VLA 的短 Token 序列:
[ T 1 , T 2 , … , T n ] = BPE-Encode ( S flat , ϕ ) [T_1, T_2, \dots, T_n] = \text{BPE-Encode}\left( \mathbf{S}_{\text{flat}}, \, \phi \right) [ T 1 , T 2 , … , T n ] = BPE-Encode ( S flat , ϕ )
n ≪ H × D n \ll H \times D n ≪ H × D :压缩后的 Token 序列长度大幅缩短,彻底消除了高频冗余。
第五步:动作解码与反量化 (Action Decoding & Inverse DCT)
在 VLA 模型推断出 Token 序列[ T 1 , … , T n ] [T_1, \dots, T_n] [ T 1 , … , T n ] 后,执行全套逆过程快速还原物理动作:
BPE 解码 :S flat = BPE-Decode ( [ T 1 , … , T n ] , ϕ ) \mathbf{S}_{\text{flat}} = \text{BPE-Decode}([T_1, \dots, T_n], \phi) S flat = BPE-Decode ([ T 1 , … , T n ] , ϕ )
重构频域矩阵 :将一维序列按列优先还原为矩阵C ˉ ∈ Z H × D \bar{\mathbf{C}} \in \mathbb{Z}^{H \times D} C ˉ ∈ Z H × D 。
反量化 :C ^ k , d = C ˉ k , d γ \hat{C}_{k, d} = \frac{\bar{C}_{k, d}}{\gamma} C ^ k , d = γ C ˉ k , d
逆离散余弦变换 (IDCT) :
a ^ t , d = ∑ k = 1 H w ( k ) C ^ k , d cos ( π ( 2 t − 1 ) ( k − 1 ) 2 H ) \hat{a}_{t, d} = \sum_{k=1}^{H} w(k) \hat{C}_{k, d} \cos \left( \frac{\pi (2t - 1) (k - 1)}{2H} \right) a ^ t , d = k = 1 ∑ H w ( k ) C ^ k , d cos ( 2 H π ( 2 t − 1 ) ( k − 1 ) )
反归一化 :
a t , d pred = q 1 ( d ) + a ^ t , d + 1 2 ( q 99 ( d ) − q 1 ( d ) ) a_{t, d}^{\text{pred}} = q_1^{(d)} + \frac{\hat{a}_{t, d} + 1}{2} \left( q_{99}^{(d)} - q_1^{(d)} \right) a t , d pred = q 1 ( d ) + 2 a ^ t , d + 1 ( q 99 ( d ) − q 1 ( d ) )
算法实现与通用动作分词器 (FAST Algorithm & FAST+)
归一化输入动作块,得到范围在[ − 1 , 1 ] [-1, 1] [ − 1 , 1 ] 上的矩阵A ˉ \bar{\mathbf{A}} A ˉ 。
对每个动作维度沿时间轴独立执行 1D-DCT,提取频域矩阵C \mathbf{C} C 。
应用缩放因子γ \gamma γ 放大系数并四舍五入取整,获得稀疏频域矩阵C ˉ \bar{\mathbf{C}} C ˉ 。
按列优先(低频优先)交错顺序展开为一维整数数组S flat \mathbf{S}_{\text{flat}} S flat 。
通过训练好的 BPE 编码器将稀疏整数序列压缩成固定词表范围内的离散 Token 序列[ T 1 , … , T n ] [T_1, \dots, T_n] [ T 1 , … , T n ] 。
为了消除针对每个新机器人数据集重新训练 BPE 词汇表的时间开销,作者在包含单臂、双手及移动操作机器人的100 万条 1 秒长动作片段(包含 Joint 与 End-Effector 空间,涵盖 10Hz~50Hz 各种频率) 的跨具身混合数据集上,训练了通用动作分词器FAST+ 。
FAST+ 可作为开箱即用的黑盒分词器直接应用于任意全新机器人形态。
Diffusion Action Policy
Octo:一款开源通用机器人策略
Octo 是一个开源的通用机器人策略(Generalist Robot Policy),其核心设计思想是通过统一标记化(Tokenization) 、模块化 Transformer 骨干网 与轻量级扩散解码头(Diffusion Readout Head) ,实现跨不同机器人形态、传感器配置(摄像头与本体感觉)和动作空间的端到端控制与高效微调。
任务与多模态输入标记化 (Task & Observation Tokenization)
Octo 将包含自然语言指令ℓ \ell ℓ 、目标图像g g g 以及多时间步多视角观测历史o 1 : H \mathbf{o}_{1:H} o 1 : H 的多模态输入统一转化为通用 Token 序列:
T lang = E T5 ( ℓ ) ∈ R L × D model T img ( v , t ) = Patchify ( ConvStack ( I t ( v ) ) ) ∈ R P × D model , v ∈ { wrist , 3rd-person , … } , t ∈ { 1 , … , H } T goal = Patchify ( ConvStack ( I g ) ) ∈ R P × D model z in = [ T lang ∥ T goal ∥ T img ( 1 , 1 ) ∥ … ∥ T img ( V , H ) ∥ T read , 1 ∥ … ∥ T read , H ] + P pos \begin{aligned} & \mathcal{T}_{\text{lang}} = E_{\text{T5}}(\ell) \in \mathbb{R}^{L \times D_{\text{model}}} \\ & \mathcal{T}_{\text{img}}^{(v, t)} = \text{Patchify}\left(\text{ConvStack}(I_t^{(v)})\right) \in \mathbb{R}^{P \times D_{\text{model}}}, \quad v \in \{\text{wrist}, \text{3rd-person}, \dots\}, \quad t \in \{1, \dots, H\} \\ & \mathcal{T}_{\text{goal}} = \text{Patchify}\left(\text{ConvStack}(I_g)\right) \in \mathbb{R}^{P \times D_{\text{model}}} \\ & \mathbf{z}_{\text{in}} = \left[ \mathcal{T}_{\text{lang}} \,\Vert{}\, \mathcal{T}_{\text{goal}} \,\Vert{}\, \mathcal{T}_{\text{img}}^{(1, 1)} \,\Vert{}\, \dots \,\Vert{}\, \mathcal{T}_{\text{img}}^{(V, H)} \,\Vert{}\, \mathcal{T}_{\text{read}, 1} \,\Vert{}\, \dots \,\Vert{}\, \mathcal{T}_{\text{read}, H} \right] + \mathbf{P}_{\text{pos}} \end{aligned} T lang = E T5 ( ℓ ) ∈ R L × D model T img ( v , t ) = Patchify ( ConvStack ( I t ( v ) ) ) ∈ R P × D model , v ∈ { wrist , 3rd-person , … } , t ∈ { 1 , … , H } T goal = Patchify ( ConvStack ( I g ) ) ∈ R P × D model z in = [ T lang ∥ T goal ∥ T img ( 1 , 1 ) ∥ … ∥ T img ( V , H ) ∥ T read , 1 ∥ … ∥ T read , H ] + P pos
ℓ \ell ℓ :输入的自然语言指令;E T5 E_{\text{T5}} E T5 :预训练 T5-Base (111M) 语言模型,提取长度为L L L 的语言嵌入 Token 序列T lang \mathcal{T}_{\text{lang}} T lang 。
I t ( v ) ∈ R H i × W i × C I_t^{(v)} \in \mathbb{R}^{H_i \times W_i \times C} I t ( v ) ∈ R H i × W i × C :时间步t t t 下第v v v 个摄像头视角(如手腕视角或第三人称视角)的观测图像;I g I_g I g :事后重标记(Hindsight Relabeling)或指定的目标图像(Goal Image)。
ConvStack \text{ConvStack} ConvStack 与Patchify \text{Patchify} Patchify :浅层卷积堆栈与图像切片映射,将每张图像转换为P P P 个维度为D model D_{\text{model}} D model 的图像 Token。
H H H :观测历史长度,默认设为H = 2 H=2 H = 2 (两帧观测历史即可提供足够的时域上下文,更长历史效益递减)。
T read , t ∈ R 1 × D model \mathcal{T}_{\text{read}, t} \in \mathbb{R}^{1 \times D_{\text{model}}} T read , t ∈ R 1 × D model :显式插入的可学习读取 Token(Readout Tokens) ,对应时间步t t t ,用于后续聚合并提取动作特征。
P pos \mathbf{P}_{\text{pos}} P pos :可学习的位置编码(Learned Positional Embeddings)。
统一 Token 序列z in \mathbf{z}_{\text{in}} z in 送入 Transformer 骨干网络(提供 Octo-Small 27M 与 Octo-Base 93M 两种规格),采用**分块注意力掩蔽(Block-Masked Attention)**机制进行特征提取:
E = Transformer ( z in , M ) ∈ R N tokens × D model \mathbf{E} = \text{Transformer}(\mathbf{z}_{\text{in}}, \mathbf{M}) \in \mathbb{R}^{N_{\text{tokens}} \times D_{\text{model}}} E = Transformer ( z in , M ) ∈ R N tokens × D model
注意力掩蔽矩阵M \mathbf{M} M 的因果约束规则
因果约束(Causal Constraint) :观察 TokenT img ( v , t ) \mathcal{T}_{\text{img}}^{(v, t)} T img ( v , t ) 只能因果地关注来自相同或更早时间步(≤ t \le t ≤ t )的观察 Token 以及任务 Token(T lang , T goal \mathcal{T}_{\text{lang}}, \mathcal{T}_{\text{goal}} T lang , T goal )。
读取 Token 隔离约束(Readout Token Isolation) :读取 TokenT read , t \mathcal{T}_{\text{read}, t} T read , t 可以单向关注当前及之前的所有观察 Token 与任务 Token,但任何观察 Token 与任务 Token 均不可关注读取 Token 。读取 Token 类似 BERT 的[CLS] 标记,只被动聚合时域语义,不破坏原始特征。
缺失模态掩蔽(Missing Modality Masking) :对于缺失摄像头视角或无语言标注的数据集样本,其对应的输入 Token 被完全屏蔽(Fully Masked),避免影响模型参数传播。
分块注意力掩蔽的实现与目的
Octo 的“分块注意力掩蔽”是把输入的数据划分成不同的“数据块”(Block),并为这些块制定了三条严格的“偷看规则”(通过在注意力矩阵上加掩蔽 Mask 来实现):
观察块(Observation Blocks):机器人第t t t 秒看到的画面,只能看当前和过去(≤ t \le t ≤ t )的画面以及任务指令,绝对不能偷看未来(t + 1 t+1 t + 1 秒)的画面。
读取 Token(Readout Tokens):它像是一个“只许听不许说”的旁听生。它可以看自己当前和之前的所有观察画面、任务指令,但所有的观察画面和指令,绝对不能看这个读取 Token。
缺失模态块(Missing Modality Blocks):如果某个数据集根本没有手腕摄像头,或者没有语言指令,这些缺失的数据块在掩蔽矩阵里就会被完全遮挡(Mask 为 0),相当于直接在模型里“隐身”。
它的目的包括:
实现“单向偷听”,安全提取控制特征:Octo 把过去所有的画面和任务指令融合压缩成一个精炼的向量(类似于 BERT 里的 [CLS] 标记),然后直接丢给后面的动作头去解算动作,既不破坏前面的特征表达,又提取到了最纯粹的决策信息。
极强的主插拔灵活性(插件化):传统的模型(如 OpenVLA)如果预训练时用了“主摄像头+手腕摄像头”,微调时想加一个“力矩传感器”,就必须把整个网络结构改掉、重新初始化训练。而 Octo 这种分块掩蔽机制,把输入变成了“拼图”。微调时想加一个力矩传感器,只需要在输入序列里追加一个新 Token 块,并为它配置一条掩蔽规则,预训练好的 Transformer 主干网权重完全不需要破坏或重新初始化,直接像插拔 U 盘一样即插即用。
扩散解码动作头与连续动作块预测 (Diffusion Readout Head & Chunked Action Prediction)
Octo 从读取 Token 得到的输出嵌入e t = E [ T read , t ] ∈ R D model \mathbf{e}_t = \mathbf{E}[\mathcal{T}_{\text{read}, t}] \in \mathbb{R}^{D_{\text{model}}} e t = E [ T read , t ] ∈ R D model 中解码出连续的多模态动作分布。相比离散化分类(OpenVLA/RT-2)或 MSE 回归,采用轻量级条件扩散解码头在单次 Transformer 前向传播后进行多步去噪预测:
a t : t + K − 1 ∼ p θ ( a t : t + K − 1 ∣ e t ) x K ∼ N ( 0 , I ) For k = K , K − 1 , … , 1 : x k − 1 = 1 α k ( x k − 1 − α k 1 − α ˉ k ϵ θ ( x k , e t , k ) ) + σ k z , z ∼ N ( 0 , I ) a ^ t : t + K − 1 = x 0 ∈ R K × D action \begin{aligned} & \mathbf{a}_{t:t+K-1} \sim p_\theta(\mathbf{a}_{t:t+K-1} \mid \mathbf{e}_t) \\ & \mathbf{x}_K \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\ & \text{For } k = K, K-1, \dots, 1: \\ & \quad \mathbf{x}_{k-1} = \frac{1}{\sqrt{\alpha_k}} \left( \mathbf{x}_k - \frac{1 - \alpha_k}{\sqrt{1 - \bar{\alpha}_k}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_k, \mathbf{e}_t, k) \right) + \sigma_k \mathbf{z}, \quad \mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\ & \hat{\mathbf{a}}_{t:t+K-1} = \mathbf{x}_0 \in \mathbb{R}^{K \times D_{\text{action}}} \end{aligned} a t : t + K − 1 ∼ p θ ( a t : t + K − 1 ∣ e t ) x K ∼ N ( 0 , I ) For k = K , K − 1 , … , 1 : x k − 1 = α k 1 ( x k − 1 − α ˉ k 1 − α k ϵ θ ( x k , e t , k ) ) + σ k z , z ∼ N ( 0 , I ) a ^ t : t + K − 1 = x 0 ∈ R K × D action
训练目标 (DDPM Objective)
去噪网络ϵ θ \boldsymbol{\epsilon}_\theta ϵ θ 采用标准 DDPM 目标进行端到端优化,对数据集加噪动作进行重建:
L Diffusion ( θ ) = E k ∼ U ( 1 , K ) , ϵ ∼ N ( 0 , I ) , ( a , e ) [ ∥ ϵ − ϵ θ ( α ˉ k a t : t + K − 1 + 1 − α ˉ k ϵ , e t , k ) ∥ 2 2 ] \mathcal{L}_{\text{Diffusion}}(\theta) = \mathbb{E}_{k \sim U(1, K), \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}), (\mathbf{a}, \mathbf{e})} \left[ \left\Vert{} \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\left( \sqrt{\bar{\alpha}_k}\mathbf{a}_{t:t+K-1} + \sqrt{1 - \bar{\alpha}_k}\boldsymbol{\epsilon}, \, \mathbf{e}_t, \, k \right) \right\Vert{}_2^2 \right] L Diffusion ( θ ) = E k ∼ U ( 1 , K ) , ϵ ∼ N ( 0 , I ) , ( a , e ) [ ϵ − ϵ θ ( α ˉ k a t : t + K − 1 + 1 − α ˉ k ϵ , e t , k ) 2 2 ]
a t : t + K − 1 ∈ R K × D action \mathbf{a}_{t:t+K-1} \in \mathbb{R}^{K \times D_{\text{action}}} a t : t + K − 1 ∈ R K × D action :从时间步t t t 开始预测的连续动作块(Action Chunk),包含K K K 个连续时间步的动作。
x k \mathbf{x}_k x k :第k k k 步去噪过程中的动作隐变量;K K K 为扩散去噪总步数。
ϵ θ \boldsymbol{\epsilon}_\theta ϵ θ :以 Transformer 输出嵌入e t \mathbf{e}_t e t 、去噪步索引k k k 及当前带噪动作x k \mathbf{x}_k x k 为条件的轻量去噪 MLP 网络。
α k , α ˉ k , σ k \alpha_k, \bar{\alpha}_k, \sigma_k α k , α ˉ k , σ k :扩散预定义预设噪声调度表参数(Noise Schedule)。
扩散解码动作头与连续动作块预测
相比之前的“离散方法”(如 OpenVLA/RT-2),Octo 完全放弃将动作转成文本 Token,而是直接在连续的物理数值空间里,利用 Diffusion(扩散去噪模型)生成连续的动作曲线。其连续控制极度平滑精确;能够天然生成多模态的动作分布;预测的是未来一整块动作(比如未来 1 秒内的K K K 个动作,即 Action Chunking),大幅减少了控制延迟。
扩散解码的推理过程(Inference)就像在迷雾中把一块纯噪声一步步雕刻成一条完美的动作轨迹:
扩散的开始(起点k = K k=K k = K ):从标准高斯分布中随机抽样出一个纯随机的高斯噪声向量x K ∼ N ( 0 , I ) \mathbf{x}_K \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) x K ∼ N ( 0 , I ) 。此时的动作数据没有任何含义,完全是雪花噪点。
一步步去噪(中间过程k → 0 k \to 0 k → 0 ):去噪网络ϵ θ \boldsymbol{\epsilon}_\theta ϵ θ 接收两个输入,当前的带噪动作x k \mathbf{x}_k x k 和 Transformer 读取 Token 提取出的上下文向量e \mathbf{e} e 。去噪网络预测出当前的噪声成分,并将其扣除一点点,推算出稍微清晰一点的下一个动作状态x k − 1 \mathbf{x}_{k-1} x k − 1 。这个过程通常重复K K K 步(例如 10~100 步)。
扩散的结束(终点k = 0 k=0 k = 0 ):经过K K K 步递归去噪后,输出最终收敛的x 0 \mathbf{x}_0 x 0 。这就是一个纯净、连续的物理动作块a ^ t : t + K − 1 \hat{\mathbf{a}}_{t:t+K-1} a ^ t : t + K − 1 (比如未来 0.5 秒内机械臂 3D 位姿变化和夹爪开合的连续数值轨迹)。
注意:整个去噪过程完全是在后面那个极其轻量级的“扩散动作头(MLP)”内部递归进行的,前面的 Transformer 大模型主干网只需要运行 1 次前向传播提取出上下文向量e \mathbf{e} e 即可,因此推断速度非常快!
训练时输入的数据是什么
训练时输入的是:真实数据集里的连续动作向量a \mathbf{a} a 加噪后的“带噪动作”。训练过程采用的是标准 DDPM(扩散概率模型)的训练逻辑,不需要像推断那样一步步递归去噪,而是“一步到位”:
提取真值:从机器人训练数据集中取出当前时间步真实的未来动作块a real \mathbf{a}_{\text{real}} a real (比如未来 10 个时间步的真实末端位姿变化)。
随机加噪:随机挑选一个去噪步数k k k (如k = 45 k=45 k = 45 ),并抽样一个标准高斯噪声ϵ \boldsymbol{\epsilon} ϵ 。利用数学公式一次性将噪声混入真实动作中,得到加噪后的动作x k = α ˉ k a real + 1 − α ˉ k ϵ \mathbf{x}_k = \sqrt{\bar{\alpha}_k} \mathbf{a}_{\text{real}} + \sqrt{1 - \bar{\alpha}_k} \boldsymbol{\epsilon} x k = α ˉ k a real + 1 − α ˉ k ϵ 。
前向与 Loss 计算:将这个带噪动作x k \mathbf{x}_k x k 、去噪步数k k k 以及 Transformer 提取的上下文e \mathbf{e} e 一起喂给去噪网络ϵ θ \boldsymbol{\epsilon}_\theta ϵ θ 。
训练目标:让去噪网络去预测我们刚刚加进去的那个噪声ϵ \boldsymbol{\epsilon} ϵ ,计算预测噪声与真实噪声之间的 MSE 损失(∥ ϵ − ϵ θ ( x k , e , k ) ∥ 2 \Vert{}\boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta(\mathbf{x}_k, \mathbf{e}, k)\Vert{}^2 ∥ ϵ − ϵ θ ( x k , e , k ) ∥ 2 )。
预训练数据流与微调范式 (Training Data Curation & Downstream Adaptation)
数据集重采样与动作空间统一
预训练基于 Open X-Embodiment 中精选的 25 个子数据集,处理逻辑如下:
筛选过滤 :仅保留包含图像流并采用 Delta 末端执行器(Delta End-Effector)控制的数据集,剔除无图像、非 Delta 控制及小众极度重复数据集。
动作空间标准化 :将所有数据集的夹爪控制指令归一化为连续标量,使得+ 1 +1 + 1 代表“夹爪打开”,0 0 0 代表“夹爪关闭”。
启发式加权采样 :将数据集划分为高多样性与低多样性两类,高多样性数据集采样的批次权重翻倍;对无语言标签的数据集随机采用 100% 事后目标图像重标记(Hindsight Goal Relabeling)条件化。
下游极简高效微调 (Downstream Fine-Tuning)
在 downstream 迁移至新机器人形态、新传感器输入(如增加力矩传感器输入)或新动作空间(如关节位置控制)时,得益于分块掩蔽与读取 Token 设计:
完全保留 Transformer 骨干网预训练权重 ,仅针对新引入的传感器输入添加浅层编码器/位置编码,或针对新动作空间/损失函数挂载新的读取头。
全参数端到端更新 :使用余弦衰减学习率与线性预热(Linear Warmup),在约 100 条下游目标轨迹上微调 50,000 步,全参数更新效果显著优于冻结部分骨干网参数。
三维扩散策略 (3D Diffusion Policy)
DP3 (3D Diffusion Policy) 旨在仅通过少量专家演示(如 5 条演示),学习一个能精准泛化至 3D 物理空间的视觉运动策略π : O ↦ A \pi: \mathcal{O} \mapsto \mathcal{A} π : O ↦ A 。
系统整体从单视角深度相机观测(RGB-D 或单深度图)出发,将其转化为稀疏点云,经轻量级点编码器提炼为紧凑的 3D 视觉特征向量,最后以此特征和机器人自身状态为条件,利用条件扩散过程去噪生成连续动作序列。
3D 视觉感知与特征提取 (3D Perception & Feature Encoding)
单视角点云生成与预处理
系统仅接收单个摄像头拍摄的低分辨率深度图像(如84 × 84 84 \times 84 84 × 84 ),结合相机内参矩阵K ∈ R 3 × 3 \mathbf{K} \in \mathbb{R}^{3 \times 3} K ∈ R 3 × 3 和外参矩阵[ R ∣ t ] ∈ R 3 × 4 [\mathbf{R} \mid \mathbf{t}] \in \mathbb{R}^{3 \times 4} [ R ∣ t ] ∈ R 3 × 4 ,将其反投影为原始 3D 点云矩阵P raw \mathbf{P}_{\text{raw}} P raw 。为增强空间外观泛化能力,点云中仅包含 3D 空间坐标,丢弃 RGB 颜色通道。
为了去除桌尾、地面等环境背景冗余并减小数据随机性,对点云进行空间裁剪 与最远点采样 (FPS) :
P raw = Backproject ( D , K , [ R ∣ t ] ) ∈ R N raw × 3 P crop = { p i ∈ P raw ∣ p min ≤ p i ≤ p max } ∈ R N crop × 3 P = FPS ( P crop , N ) ∈ R N × 3 \begin{aligned}
& \mathbf{P}_{\text{raw}} = \text{Backproject}(D, \mathbf{K}, [\mathbf{R} \mid \mathbf{t}]) \in \mathbb{R}^{N_{\text{raw}} \times 3} \\
& \mathbf{P}_{\text{crop}} = \{ \mathbf{p}_i \in \mathbf{P}_{\text{raw}} \mid \mathbf{p}_{\text{min}} \le \mathbf{p}_i \le \mathbf{p}_{\text{max}} \} \in \mathbb{R}^{N_{\text{crop}} \times 3} \\
& \mathbf{P} = \text{FPS}(\mathbf{P}_{\text{crop}}, N) \in \mathbb{R}^{N \times 3}
\end{aligned} P raw = Backproject ( D , K , [ R ∣ t ]) ∈ R N raw × 3 P crop = { p i ∈ P raw ∣ p min ≤ p i ≤ p max } ∈ R N crop × 3 P = FPS ( P crop , N ) ∈ R N × 3
D ∈ R H × W D \in \mathbb{R}^{H \times W} D ∈ R H × W :单视角深度图像(分辨率为H × W = 84 × 84 H \times W = 84 \times 84 H × W = 84 × 84 )。
p i = [ x i , y i , z i ] ⊤ \mathbf{p}_i = [x_i, y_i, z_i]^\top p i = [ x i , y i , z i ] ⊤ :单点在 3D 摄像机/世界坐标系下的绝对空间位置。
[ p min , p max ] [\mathbf{p}_{\text{min}}, \mathbf{p}_{\text{max}}] [ p min , p max ] :工作空间 3D 边界框 (Bounding Box),用于裁剪无用背景点。
FPS ( ⋅ , N ) \text{FPS}(\cdot, N) FPS ( ⋅ , N ) :最远点采样(Fartherst Point Sampling),将裁剪后的点云下采样至固定点数N N N (在仿真与真实场景中均取N ∈ { 512 , 1024 } N \in \{512, 1024\} N ∈ { 512 , 1024 } )。
轻量级 DP3 编码器 (DP3 Point Encoder)
下采样后的稀疏点云P \mathbf{P} P 送入一个轻量级 MLP 网络(DP3 Encoder),提取出低维紧凑的 3D 特征向量v \mathbf{v} v :
H = LayerNorm ( MLP 3 -Layer ( P ) ) ∈ R N × d hidden h global = MaxPool i = 1 N ( H i , : ) ∈ R d hidden v = ProjectionHead ( h global ) ∈ R d v \begin{aligned}
& \mathbf{H} = \text{LayerNorm}\left( \text{MLP}_{3\text{-Layer}}(\mathbf{P}) \right) \in \mathbb{R}^{N \times d_{\text{hidden}}} \\
& \mathbf{h}_{\text{global}} = \text{MaxPool}_{i=1}^N \left( \mathbf{H}_{i, :} \right) \in \mathbb{R}^{d_{\text{hidden}}} \\
& \mathbf{v} = \text{ProjectionHead}(\mathbf{h}_{\text{global}}) \in \mathbb{R}^{d_v}
\end{aligned} H = LayerNorm ( MLP 3 -Layer ( P ) ) ∈ R N × d hidden h global = MaxPool i = 1 N ( H i , : ) ∈ R d hidden v = ProjectionHead ( h global ) ∈ R d v
P ∈ R N × 3 \mathbf{P} \in \mathbb{R}^{N \times 3} P ∈ R N × 3 :预处理后的稀疏 3D 点云。
MLP 3 -Layer \text{MLP}_{3\text{-Layer}} MLP 3 -Layer :交错使用层归一化 (Layer Normalization) 的 3 层多层感知机,稳定小样本训练。
MaxPool \text{MaxPool} MaxPool :沿点维度(N N N 个点)取最大池化,确保点云顺序排列的置换不变性(Permutation Invariance)。
v ∈ R d v \mathbf{v} \in \mathbb{R}^{d_v} v ∈ R d v :生成的紧凑 3D 视觉特征向量,维度仅为d v = 64 d_v = 64 d v = 64 (低维紧凑表达可防止过拟合,性能显著优于大型预训练点云骨干网 PointNeXt)。
条件扩散动作生成与优化 (Conditional Action Generation)
去噪扩散生成推理 (DDIM Sampling / Inference)
决策模块构建为以 3D 视觉特征v \mathbf{v} v 和机器人状态q \mathbf{q} q 为条件的多层卷积(1D-CNN)扩散模型。
推断阶段,从标准高斯噪声a K ∼ N ( 0 , I ) \mathbf{a}_K \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) a K ∼ N ( 0 , I ) 出发,利用 DDIM 调度器进行K K K 步(推理取K = 10 K=10 K = 10 )迭代去噪,还原出无噪动作序列a 0 \mathbf{a}_0 a 0 :
a k − 1 = α k ( a k − γ k ϵ θ ( a k , k , v , q ) ) + σ k z , z ∼ N ( 0 , I ) \mathbf{a}_{k-1} = \alpha_k \left( \mathbf{a}_k - \gamma_k \boldsymbol{\epsilon}_\theta(\mathbf{a}_k, k, \mathbf{v}, \mathbf{q}) \right) + \sigma_k \mathbf{z}, \quad \mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) a k − 1 = α k ( a k − γ k ϵ θ ( a k , k , v , q ) ) + σ k z , z ∼ N ( 0 , I )
a 0 ∈ R T a × D a \mathbf{a}_0 \in \mathbb{R}^{T_a \times D_a} a 0 ∈ R T a × D a :生成的连续动作序列(Action Chunk),包含T a T_a T a 个未来时间步上的机器人动作(如末端位姿变化量或关节角度)。
q ∈ R D q \mathbf{q} \in \mathbb{R}^{D_q} q ∈ R D q :机器人本体感觉状态(如本体关节角度、末端执行器当前位姿)。
ϵ θ ( a k , k , v , q ) \boldsymbol{\epsilon}_\theta(\mathbf{a}_k, k, \mathbf{v}, \mathbf{q}) ϵ θ ( a k , k , v , q ) :条件去噪网络(采用 1D Temporal CNN 架构),输入为带噪动作a k \mathbf{a}_k a k 、当前扩散时间步k k k 、3D 特征v \mathbf{v} v 及状态q \mathbf{q} q 。
α k , γ k , σ k \alpha_k, \gamma_k, \sigma_k α k , γ k , σ k :由 DDIM 噪声调度器在第k k k 步预设的系数。
训练目标与噪声预测 (Training Objective)
训练阶段,从专家演示数据集中随机采样无噪动作轨迹a 0 ∼ D \mathbf{a}_0 \sim \mathcal{D} a 0 ∼ D ,随机抽取训练扩散步数k ∈ { 1 , … , 100 } k \in \{1, \dots, 100\} k ∈ { 1 , … , 100 } ,并混入高斯噪声ϵ k ∼ N ( 0 , I ) \boldsymbol{\epsilon}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵ k ∼ N ( 0 , I ) 。
网络采用样本预测/噪声重建均方误差 (MSE) 损失进行端到端优化:
a k = α ˉ k a 0 + β ˉ k ϵ k L DP3 ( θ ) = MSE ( ϵ k , ϵ θ ( a k , k , v , q ) ) = ∥ ϵ k − ϵ θ ( α ˉ k a 0 + β ˉ k ϵ k , k , v , q ) ∥ 2 2 \begin{aligned}
& \mathbf{a}_k = \bar{\alpha}_k \mathbf{a}_0 + \bar{\beta}_k \boldsymbol{\epsilon}_k \\
& \mathcal{L}_{\text{DP3}}(\theta) = \text{MSE}\left( \boldsymbol{\epsilon}_k, \, \boldsymbol{\epsilon}_\theta(\mathbf{a}_k, k, \mathbf{v}, \mathbf{q}) \right) = \left\| \boldsymbol{\epsilon}_k - \boldsymbol{\epsilon}_\theta\left( \bar{\alpha}_k \mathbf{a}_0 + \bar{\beta}_k \boldsymbol{\epsilon}_k, \, k, \, \mathbf{v}, \, \mathbf{q} \right) \right\|_2^2
\end{aligned} a k = α ˉ k a 0 + β ˉ k ϵ k L DP3 ( θ ) = MSE ( ϵ k , ϵ θ ( a k , k , v , q ) ) = ϵ k − ϵ θ ( α ˉ k a 0 + β ˉ k ϵ k , k , v , q ) 2 2
α ˉ k , β ˉ k \bar{\alpha}_k, \bar{\beta}_k α ˉ k , β ˉ k :根据扩散调度器推导出的单步加噪前向扩散系数。
训练超参数设置:训练时扩散步数设为 100,Batch Size 设为 128,训练 3000 个 Epoch 以确保收敛。
Flow Matching Action Expert (Pi0 and Pi0.7 as example)
π 0 \pi_0 π 0 与π 0.7 \pi_{0.7} π 0.7 是一系列基于条件流匹配(Conditional Flow Matching, CFM)的视觉-语言-动作(VLA)基础策略模型。其核心设计是将多模态感知输入与低级控制解耦,利用独立的**动作专家(Action Expert)**在连续空间中建模多模态动作分布,实现高频、平滑且精准的机器人控制。
系统架构与端到端特征前向传播
系统由VLM 视觉-语言骨干网(VLM Backbone) 、MEM 历史视频编码器(History Vision Encoder) 以及动作专家网络(Action Expert) 三部分构成,遵循**知识隔离(Knowledge Insulation, KI)与 双专家混合(MoE-style Architecture)**设计。
多模态 Prompt 输入标记化
在时间步t t t ,模型接收包含环境观测、本体状态与多模态上下文的统一 PromptC t \mathcal{C}_t C t :
o t − T : t = [ I t − T : t 1 , … , I t − T : t n , q t − T : t ] , g t ⋆ = [ G t 1 , … , G t n ] C t = { ℓ t , ℓ ^ t , g t ⋆ , m t , c t } \begin{aligned} & \mathbf{o}_{t-T:t} = \left[ \mathbf{I}_{t-T:t}^1, \dots, \mathbf{I}_{t-T:t}^n, \mathbf{q}_{t-T:t} \right], \quad \mathbf{g}_t^\star = \left[ G_{t}^1, \dots, G_{t}^n \right] \\ & \mathcal{C}_t = \left\{ \ell_t, \, \hat{\ell}_t, \, \mathbf{g}_t^\star, \, m_t, \, c_t \right\} \end{aligned} o t − T : t = [ I t − T : t 1 , … , I t − T : t n , q t − T : t ] , g t ⋆ = [ G t 1 , … , G t n ] C t = { ℓ t , ℓ ^ t , g t ⋆ , m t , c t }
I t − T : t i ∈ R ( T + 1 ) × H × W × C \mathbf{I}_{t-T:t}^i \in \mathbb{R}^{(T+1) \times H \times W \times C} I t − T : t i ∈ R ( T + 1 ) × H × W × C :第i ∈ { 1 , … , n } i \in \{1, \dots, n\} i ∈ { 1 , … , n } 个摄像头视角(主视角、双腕视角及后视角)保留的T + 1 T+1 T + 1 帧历史图像,统一缩放至448 × 448 448 \times 448 448 × 448 。经由 MEM 视觉编码器在空域与时域压缩后,输出固定数量的视觉 Token。
g t ⋆ \mathbf{g}_t^\star g t ⋆ :由世界模型g ψ g_\psi g ψ 生成或从未来轨迹采样的多视角子目标图像(Subgoal Images),通过同一视觉编码器提取 Token。
ℓ t , ℓ ^ t \ell_t, \hat{\ell}_t ℓ t , ℓ ^ t :高层任务自然语言指令(如"clean the kitchen")与当前局部子任务指令(如"open the fridge door")。
m t = { s t , q t , mistake t } m_t = \{s_t, q_t, \text{mistake}_t\} m t = { s t , q t , mistake t } :Episode 元数据,包含整体执行速度s t s_t s t 、质量评分q t ∈ { 1 , … , 5 } q_t \in \{1,\dots,5\} q t ∈ { 1 , … , 5 } 及错误标记mistake t ∈ { true , false } \text{mistake}_t \in \{\text{true}, \text{false}\} mistake t ∈ { true , false } 。
c t ∈ { joint , ee } c_t \in \{\text{joint}, \text{ee}\} c t ∈ { joint , ee } :低级控制模式标识符(关节空间或末端执行器空间)。
q t − T : t ∈ R ( T + 1 ) × D q \mathbf{q}_{t-T:t} \in \mathbb{R}^{(T+1) \times D_q} q t − T : t ∈ R ( T + 1 ) × D q :机器人关节/末端本体感觉历史状态向量,通过线性投影矩阵映射至 VLM 骨干网嵌入空间:
x state = W q q t − T : t ∈ R ( T + 1 ) × D VLM \mathbf{x}_{\text{state}} = \mathbf{W}_q \mathbf{q}_{t-T:t} \in \mathbb{R}^{(T+1) \times D_{\text{VLM}}} x state = W q q t − T : t ∈ R ( T + 1 ) × D VLM
骨干网注意力掩蔽与知识隔离 (Knowledge Insulation)
VLM 骨干网(π 0.7 \pi_{0.7} π 0.7 为 Gemma3 4B,π 0 \pi_0 π 0 为 PaliGemma 3B)采用分块因果注意力掩蔽(Block-Causal Masking):
图像观测 Token 与子目标图像 Token 内部使用双向注意力,且子目标 Token 可注意力感知观测 Token;随后的文本与状态 Token 严格执行因果注意力。
动作专家网络(π 0.7 \pi_{0.7} π 0.7 参数量为 860M,π 0 \pi_0 π 0 为 300M)处理H = 50 H=50 H = 50 个动作 Token,内部采用全双向注意力,并交叉注意力感知 VLM 骨干网的全部特征激活:
知识隔离 (KI) :VLM 骨干网仅由 FAST 离散 Token 的交叉熵损失进行梯度更新;动作专家的流匹配梯度**严禁回传(No Gradient Flow)**至 VLM 骨干网,以保证视觉语言表征的稳健性。
基于条件流匹配的动作生成 (Conditional Flow Matching)
动作生成被表述为连续空间上的条件流匹配(CFM)过程,直接预测未来H = 50 H=50 H = 50 步的连续动作块A t = a t : t + H − 1 ∈ R H × D a \mathbf{A}_t = \mathbf{a}_{t:t+H-1} \in \mathbb{R}^{H \times D_a} A t = a t : t + H − 1 ∈ R H × D a 。
概率路径与目标向量场
定义流匹配时间τ ∈ [ 0 , 1 ] \tau \in [0, 1] τ ∈ [ 0 , 1 ] 上的线性高斯概率路径(Optimal Transport Path):
q ( A t τ ∣ A t ) = N ( τ A t , ( 1 − τ ) I ) q(\mathbf{A}_t^\tau \mid \mathbf{A}_t) = \mathcal{N}\left( \tau \mathbf{A}_t, \, (1 - \tau) \mathbf{I} \right) q ( A t τ ∣ A t ) = N ( τ A t , ( 1 − τ ) I )
采样标准高斯噪声ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵ ∼ N ( 0 , I ) ,构建带噪动作轨迹:
A t τ = τ A t + ( 1 − τ ) ϵ \mathbf{A}_t^\tau = \tau \mathbf{A}_t + (1 - \tau) \boldsymbol{\epsilon} A t τ = τ A t + ( 1 − τ ) ϵ
该概率路径对应的目标去噪向量场为:
u ( A t τ ∣ A t ) = d d τ A t τ = A t − ϵ \mathbf{u}(\mathbf{A}_t^\tau \mid \mathbf{A}_t) = \frac{d}{d\tau} \mathbf{A}_t^\tau = \mathbf{A}_t - \boldsymbol{\epsilon} u ( A t τ ∣ A t ) = d τ d A t τ = A t − ϵ
训练优化目标
动作专家网络拟合条件向量场v θ ( A t τ , o t − T : t , C t , τ ) \mathbf{v}_\theta(\mathbf{A}_t^\tau, \mathbf{o}_{t-T:t}, \mathcal{C}_t, \tau) v θ ( A t τ , o t − T : t , C t , τ ) ,损失函数定义为:
L CFM ( θ ) = E τ ∼ Beta ( a , b ) , ( o , A t ) ∼ D , ϵ ∼ N ( 0 , I ) [ ∥ v θ ( τ A t + ( 1 − τ ) ϵ , o t − T : t , C t , τ ) − ( A t − ϵ ) ∥ 2 2 ] \mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{\tau \sim \text{Beta}(a,b), \, (\mathbf{o}, \mathbf{A}_t) \sim \mathcal{D}, \, \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})} \left[ \left\Vert{} \mathbf{v}_\theta\left( \tau \mathbf{A}_t + (1 - \tau)\boldsymbol{\epsilon}, \, \mathbf{o}_{t-T:t}, \, \mathcal{C}_t, \, \tau \right) - (\mathbf{A}_t - \boldsymbol{\epsilon}) \right\Vert{}_2^2 \right] L CFM ( θ ) = E τ ∼ Beta ( a , b ) , ( o , A t ) ∼ D , ϵ ∼ N ( 0 , I ) [ ∥ v θ ( τ A t + ( 1 − τ ) ϵ , o t − T : t , C t , τ ) − ( A t − ϵ ) ∥ 2 2 ]
τ ∼ Beta ( a , b ) \tau \sim \text{Beta}(a, b) τ ∼ Beta ( a , b ) :从偏向低数值(高噪声区间)的 Beta 分布中抽样的流匹配时间步,通过 Adaptive RMSNorm 注入动作专家。
欧拉积分推断与无分类器引导 (CFG)
推断时,从纯高斯噪声A t 0 ∼ N ( 0 , I ) \mathbf{A}_t^0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) A t 0 ∼ N ( 0 , I ) 开始,采用前向欧拉积分执行K K K 步去噪迭代(积分步长δ = 1 / K \delta = 1/K δ = 1/ K ):
A t τ + δ = A t τ + δ ⋅ v ^ θ ( A t τ , o t − T : t , C t , τ ) \mathbf{A}_t^{\tau + \delta} = \mathbf{A}_t^\tau + \delta \cdot \hat{\mathbf{v}}_\theta(\mathbf{A}_t^\tau, \mathbf{o}_{t-T:t}, \mathcal{C}_t, \tau) A t τ + δ = A t τ + δ ⋅ v ^ θ ( A t τ , o t − T : t , C t , τ )
针对 Episode 元数据m t m_t m t ,引入无分类器引导(Classifier-Free Guidance, CFG)强化特定属性控制:
v ^ θ = v θ ( A t τ , o t − T : t , C t , τ ) + β ( v θ ( A t τ , o t − T : t , C t , τ ) − v θ ( A t τ , o t − T : t , C t uncond , τ ) ) \hat{\mathbf{v}}_\theta = \mathbf{v}_\theta(\mathbf{A}_t^\tau, \mathbf{o}_{t-T:t}, \mathcal{C}_t, \tau) + \beta \left( \mathbf{v}_\theta(\mathbf{A}_t^\tau, \mathbf{o}_{t-T:t}, \mathcal{C}_t, \tau) - \mathbf{v}_\theta(\mathbf{A}_t^\tau, \mathbf{o}_{t-T:t}, \mathcal{C}_t^{\text{uncond}}, \tau) \right) v ^ θ = v θ ( A t τ , o t − T : t , C t , τ ) + β ( v θ ( A t τ , o t − T : t , C t , τ ) − v θ ( A t τ , o t − T : t , C t uncond , τ ) )
C t uncond \mathcal{C}_t^{\text{uncond}} C t uncond :将元数据m t m_t m t 进行 Dropout 后的条件集合。
β ∈ [ 1.3 , 2.2 ] \beta \in [1.3, 2.2] β ∈ [ 1.3 , 2.2 ] :CFG 引导权重,用于激发高质、高速的控制表现。
基于条件流匹配(Conditional Flow Matching, CFM)的动作生成详解
传统机械臂控制要么预测单一的数值,要么把动作分成离散的档位(如 OpenVLA)。但真实世界中,完成一个任务(比如“把手伸过去拿杯子”)往往有无数种平滑的画线方式。
扩散模型(Diffusion) 就像是把一张照片加满噪点,然后一步步把噪点擦掉恢复照片。它的轨迹是随机游走弯弯曲曲的,需要去噪很多步(如 20~50 步),速度较慢。
流匹配(Flow Matching) 不走弯路,而是直接在“随机噪声”和“真实动作”之间拉一条最平直的路线(直达矢量的场/速度场)。模型不需要一步步繁琐去噪,只需沿着这个“矢量场”推几步(如 5~10 步),就能极快地生成平滑连续的动作。
训练的目标是让网络学会:“给定当前的图像/指令(条件C \mathcal{C} C )以及一个半成品带噪动作,告诉我接下来应该往哪个方向推,才能最快变回真实动作?” 训练时并不是真的走多步去噪,而是一步到位采样训练:
获取真值(Target):从数据集中取出真实机械臂未来 50 步的连续动作轨迹,记为A real \mathbf{A}_{\text{real}} A real 。
随机加噪(构建直达路径):
随机抽样一个纯高斯噪声轨迹ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵ ∼ N ( 0 , I ) (代表起点τ = 0 \tau=0 τ = 0 的状态)。
随机选择一个时刻τ ∈ [ 0 , 1 ] \tau \in [0, 1] τ ∈ [ 0 , 1 ] (比如τ = 0.4 \tau = 0.4 τ = 0.4 )。
根据最平直的线性插值路径,合成出该时刻的“半成品带噪动作”:A τ = τ A real + ( 1 − τ ) ϵ \mathbf{A}^\tau = \tau \mathbf{A}_{\text{real}} + (1 - \tau) \boldsymbol{\epsilon} A τ = τ A real + ( 1 − τ ) ϵ
计算理想速度矢量(Ground Truth Field):从起点ϵ \boldsymbol{\epsilon} ϵ 直接指向终点A real \mathbf{A}_{\text{real}} A real 的直达速度方向,就是u = A real − ϵ \mathbf{u} = \mathbf{A}_{\text{real}} - \boldsymbol{\epsilon} u = A real − ϵ 。
网络预测与 Loss 计算:把“半成品动作”A τ \mathbf{A}^\tau A τ 、时刻τ \tau τ 和视觉/指令条件C \mathcal{C} C 喂给动作专家网络v θ \mathbf{v}_\theta v θ 。网络会预测一个速度方向v θ ( A τ , C , τ ) \mathbf{v}_\theta(\mathbf{A}^\tau, \mathcal{C}, \tau) v θ ( A τ , C , τ ) 。计算预测速度与理想速度之间的 均方误差(MSE Loss) 并更新网络参数:L = ∥ v θ − u ∥ 2 \mathcal{L} = \Vert{}\mathbf{v}_\theta - \mathbf{u}\Vert{}^2 L = ∥ v θ − u ∥ 2 。
当机器人在真实世界中运行,需要预测未来 50 步动作时,流匹配执行以下全流程推断(如 5 步欧拉积分):
起点(τ = 0 \tau = 0 τ = 0 ):完全不依赖上一时刻的动作,直接凭空从标准高斯分布中随机抽样出一个纯噪声动作序列A 0 ∼ N ( 0 , I ) \mathbf{A}^0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) A 0 ∼ N ( 0 , I ) 。
多步欧拉积分去噪(例如K = 5 K=5 K = 5 步,步长δ = 0.2 \delta = 0.2 δ = 0.2 ):第 1 步(τ = 0.0 \tau = 0.0 τ = 0.0 )把纯噪声A 0 \mathbf{A}^0 A 0 和图像/指令条件C \mathcal{C} C 送入动作专家,模型输出当前推进方向v 0 \mathbf{v}_0 v 0 。将状态沿着方向推一步:A 0.2 = A 0 + 0.2 × v 0 \mathbf{A}^{0.2} = \mathbf{A}^0 + 0.2 \times \mathbf{v}_0 A 0.2 = A 0 + 0.2 × v 0 。第 2 步(τ = 0.2 \tau = 0.2 τ = 0.2 )把A 0.2 \mathbf{A}^{0.2} A 0.2 送入网络,计算方向v 0.2 \mathbf{v}_{0.2} v 0.2 ,继续往前推:A 0.4 = A 0.2 + 0.2 × v 0.2 \mathbf{A}^{0.4} = \mathbf{A}^{0.2} + 0.2 \times \mathbf{v}_{0.2} A 0.4 = A 0.2 + 0.2 × v 0.2 。依次迭代,直至第 5 步(τ = 1.0 \tau = 1.0 τ = 1.0 )。
终点(τ = 1.0 \tau = 1.0 τ = 1.0 ):最终输出的A 1.0 \mathbf{A}^{1.0} A 1.0 就是一个完全消除噪声、物理平滑且符合图像/指令要求的连续 50 步机械臂动作矩阵(如关节角度或末端位姿)。
下发执行:将这 50 步动作的前 15~25 步直接下发给底层的机械臂电机控制器(PD / IK)去执行,同时异步启动下一次流匹配推理。
多模态 Prompt 扩充与 Dropout 训练策略
为了利用次优轨迹、失败样例与异构跨具身数据,π 0.7 \pi_{0.7} π 0.7 在训练阶段对 Prompt 各组件施加随机 Dropout,提升测试期灵活组合能力:
子目标图像g t ⋆ \mathbf{g}_t^\star g t ⋆ :仅在 25% 的训练样本中保留。保留样本中,75% 采样未来0 ∼ 4 0 \sim 4 0 ∼ 4 秒内的真实图像,25% 采样段尾图像;并混合世界模型g ψ g_\psi g ψ 生成的合成图像。包含子目标图像时,有 30% 概率丢弃子任务文本ℓ ^ t \hat{\ell}_t ℓ ^ t 。
Episode 元数据m t m_t m t :15% 的概率整体丢弃;保留时,内部各字段(Speed, Quality, Mistake)各有 5% 的独立丢弃概率。
历史帧与视角 :历史图像与状态整体有 30% 概率丢弃;后视摄像头有 30% 概率独立丢弃。
实时动作块控制与测试期部署算法 (RTC Deployment)
测试部署时,结合实时动作块(Real-Time Action Chunking, RTC)机制与多线程异步推断,消除推理延迟带来的机械臂卡顿。
测试期部署逻辑说明
初始化 :传入初始观测o 0 \mathbf{o}_0 o 0 、高层指令ℓ \ell ℓ 、元数据m m m (速度设为 P15 分位数,质量设为 5,错误设为 false)及控制模式c c c ;获得当前子任务指令ℓ ^ \hat{\ell} ℓ ^ 。
异步线程 1(子目标生成) :当子任务ℓ ^ \hat{\ell} ℓ ^ 发生变更,或计时器满Δ = 4 \Delta = 4 Δ = 4 秒时,异步调用世界模型更新子目标图像:g ⋆ ∼ p ψ ( g ⋆ ∣ o t , ℓ ^ , m ) \mathbf{g}^\star \sim p_\psi(\mathbf{g}^\star \mid \mathbf{o}_t, \hat{\ell}, m) g ⋆ ∼ p ψ ( g ⋆ ∣ o t , ℓ ^ , m ) ,并刷新上下文C \mathcal{C} C 。
主控制线程(动作专家推断) :若距离上次推断已执行H ^ \hat{H} H ^ 步(H ^ ∈ [ 15 , 25 ] \hat{H} \in [15, 25] H ^ ∈ [ 15 , 25 ] ),调用动作专家进行流匹配采样生成新动作块:A t ∼ π θ ( A ∣ o t − T : t , C , a t : ) \mathbf{A}_t \sim \pi_\theta(\mathbf{A} \mid \mathbf{o}_{t-T:t}, \mathcal{C}, \mathbf{a}_{t:}) A t ∼ π θ ( A ∣ o t − T : t , C , a t : ) (结合训练期模拟的0 ∼ 240 ms 0 \sim 240\text{ms} 0 ∼ 240 ms 延迟残差做平滑衔接)。
底层执行 :下发当前步物理动作a t \mathbf{a}_t a t 给底层 PD/IK 控制器执行。
统一或混合式动作生成
RDT2:探索UMI数据在零样本跨具身泛化中的扩展极限
RDT2 旨在解决大规模多模态动作分布建模与超大型 VLA 模型实时部署的冲突。系统通过硬件升级采集大规模 UMI(Universal Manipulation Interface)双手数据,并引入三阶段混合训练架构(离散预训练→ \to → 连续流匹配专家→ \to → 扩散蒸馏),兼顾 VLM 知识保留、表达能力与低延迟推理。
硬件迭代与数据规模 (Hardware & Dataset Scaling)
采用重新设计的手持 UMI 硬件,通过 CNC 尼龙66/玻璃纤维加工提升机械刚度,引入红外光六维姿态跟踪解决无纹理/高速运动场景漂移,并优化平行颌夹爪结构。
在自然环境中录制超过 10,000 小时、涵盖 100+ 家庭的双手 6 自由度末端姿态与夹爪动作数据集D \mathcal{D} D :
D : = { ( ℓ ( i ) , o t ( i ) , A t ( i ) ) | 0 ≤ t < T ( i ) , 1 ≤ i ≤ N } \mathcal{D} := \left\{ \left( \ell^{(i)}, \, \mathbf{o}_t^{(i)}, \, \mathbf{A}_t^{(i)} \right) \;\middle|\; 0 \le t < T^{(i)}, \, 1 \le i \le N \right\} D := { ( ℓ ( i ) , o t ( i ) , A t ( i ) ) 0 ≤ t < T ( i ) , 1 ≤ i ≤ N }
ℓ ( i ) \ell^{(i)} ℓ ( i ) :第i i i 条轨迹的自由格式自然语言任务指令。
o t ( i ) ∈ R H × W × C \mathbf{o}_t^{(i)} \in \mathbb{R}^{H \times W \times C} o t ( i ) ∈ R H × W × C :时间步t t t 的单帧 RGB 视觉观测(假定包含决策所需的完备信息)。
A t ( i ) = [ a t ( i ) , a t + 1 ( i ) , … , a t + T a ( i ) ] ⊤ ∈ R T a × d \mathbf{A}_t^{(i)} = [\mathbf{a}_t^{(i)}, \mathbf{a}_{t+1}^{(i)}, \dots, \mathbf{a}_{t+T_a}^{(i)}]^\top \in \mathbb{R}^{T_a \times d} A t ( i ) = [ a t ( i ) , a t + 1 ( i ) , … , a t + T a ( i ) ] ⊤ ∈ R T a × d :连续动作块(Action Chunk),其中d d d 为单步动作维度(末端姿态 + 夹爪宽度),T a T_a T a 为动作块预测步长。
N N N :轨迹总数(N > 10 , 000 N > 10,000 N > 10 , 000 小时数据)。
第一阶段:残差矢量量化与离散 VLM 预训练 (Stage 1: RVQ & Discrete VLM Pre-training)
为了保留预训练 VLM 的语言推理与离散概率知识,并加速收敛,第一阶段通过残差矢量量化(RVQ)将连续动作块离散化,使用交叉熵目标对 VLM 骨干网进行预训练。
RVQ 动作分词器 (RVQ Action Tokenizer)
采用一维时间卷积神经网络编码器ϕ enc \phi_{\text{enc}} ϕ enc 、深度为M M M 的码本(Codebook)与解码器ϕ dec \phi_{\text{dec}} ϕ dec :
{ z i } i = 1 n = ϕ enc ( A t ) , z i ∈ R C \{\mathbf{z}_i\}_{i=1}^n = \phi_{\text{enc}}(\mathbf{A}_t), \quad \mathbf{z}_i \in \mathbb{R}^C { z i } i = 1 n = ϕ enc ( A t ) , z i ∈ R C
对每个潜在向量z i \mathbf{z}_i z i (令初始残差r 0 i = z i \mathbf{r}_0^i = \mathbf{z}_i r 0 i = z i ),通过深度j = 1 , … , M j = 1, \dots, M j = 1 , … , M 迭代量化:
k j i = arg min 1 ≤ k ≤ K ∥ r j − 1 i − e j ( k ) ∥ 2 2 r j i = r j − 1 i − e j ( k j i ) \begin{aligned}
k_j^i &= \arg\min_{1 \le k \le K} \left\| \mathbf{r}_{j-1}^i - \mathbf{e}_j(k) \right\|_2^2 \\
\mathbf{r}_j^i &= \mathbf{r}_{j-1}^i - \mathbf{e}_j(k_j^i)
\end{aligned} k j i r j i = arg 1 ≤ k ≤ K min r j − 1 i − e j ( k ) 2 2 = r j − 1 i − e j ( k j i )
解码重构动作块A ^ t \hat{\mathbf{A}}_t A ^ t 及训练损失L vq \mathcal{L}_{\text{vq}} L vq :
A ^ t = ϕ dec ( { z ^ i } i = 1 n ) = ϕ dec ( { ∑ j = 1 M e j ( k j i ) } i = 1 n ) \hat{\mathbf{A}}_t = \phi_{\text{dec}}\left( \left\{ \hat{\mathbf{z}}_i \right\}_{i=1}^n \right) = \phi_{\text{dec}}\left( \left\{ \sum_{j=1}^M \mathbf{e}_j(k_j^i) \right\}_{i=1}^n \right) A ^ t = ϕ dec ( { z ^ i } i = 1 n ) = ϕ dec { j = 1 ∑ M e j ( k j i ) } i = 1 n
L vq = E ( ⋅ , ⋅ , A t ) ∼ D [ ∥ A t − A ^ t ∥ 2 2 + ∥ sg ( z i ) − z ^ i ∥ 2 2 + β ∥ z i − sg ( z ^ i ) ∥ 2 2 ] \mathcal{L}_{\text{vq}} = \mathbb{E}_{(\cdot, \cdot, \mathbf{A}_t) \sim \mathcal{D}} \left[ \|\mathbf{A}_t - \hat{\mathbf{A}}_t\|_2^2 + \|\text{sg}(\mathbf{z}_i) - \hat{\mathbf{z}}_i\|_2^2 + \beta \|\mathbf{z}_i - \text{sg}(\hat{\mathbf{z}}_i)\|_2^2 \right] L vq = E ( ⋅ , ⋅ , A t ) ∼ D [ ∥ A t − A ^ t ∥ 2 2 + ∥ sg ( z i ) − z ^ i ∥ 2 2 + β ∥ z i − sg ( z ^ i ) ∥ 2 2 ]
e j ∈ R K × C \mathbf{e}_j \in \mathbb{R}^{K \times C} e j ∈ R K × C :第j j j 层深度大小为K K K 的可学习码本(通过余弦相似度、EMA 平滑更新及不活跃条目重启防止崩溃)。
{ k 1 i , … , k M i } i = 1 n \{k_1^i, \dots, k_M^i\}_{i=1}^n { k 1 i , … , k M i } i = 1 n :动作块A t \mathbf{A}_t A t 压缩后生成的n × M n \times M n × M 个离散动作 Token 索引。
sg ( ⋅ ) \text{sg}(\cdot) sg ( ⋅ ) :Stop-gradient 算子。
VLM 骨干网交叉熵预训练
基于 Qwen2.5-VL (7B) 骨干网,覆盖词表末尾使用频率最低的 1024 个标记用于映射动作 Token。采用标准自回归下一个 Token 预测(Next-Token Prediction)目标训练 128k 次迭代:
L Stage1 ( Θ VLM ) = − ∑ i = 1 n ∑ j = 1 M log P Θ VLM ( k j i | k < j i , k < i , ℓ , o t ) \mathcal{L}_{\text{Stage1}}(\Theta_{\text{VLM}}) = -\sum_{i=1}^n \sum_{j=1}^M \log P_{\Theta_{\text{VLM}}}\left( k_j^i \;\middle|\; k_{<j}^i, k_{<i}, \ell, \mathbf{o}_t \right) L Stage1 ( Θ VLM ) = − i = 1 ∑ n j = 1 ∑ M log P Θ VLM ( k j i k < j i , k < i , ℓ , o t )
Θ VLM \Theta_{\text{VLM}} Θ VLM :Qwen2.5-VL 7B 可训练参数。
第二阶段:连续流匹配动作专家训练 (Stage 2: Flow Matching Action Expert)
为了消除自回归生成的量化误差与低效性,第二阶段冻结已预训练的 VLM 骨干网 ,训练一个 400M 参数的连续动作专家(RDT-1B 变体,引入 GQA 优化速度)。动作专家通过交叉注意力(Cross-Attention)融合 VLM 各层的潜在特征。
连续流匹配训练目标 (Flow Matching Loss)
采样流匹配时间步τ ∼ U ( 0 , 1 ) \tau \sim \mathcal{U}(0, 1) τ ∼ U ( 0 , 1 ) 及高斯噪声ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) ϵ ∼ N ( 0 , I ) ,构造带噪动作轨迹A t τ \mathbf{A}_t^\tau A t τ 与真实速度u \mathbf{u} u :
A t τ = ( 1 − τ ) ϵ + τ A t , u ( A t τ ∣ A t ) = A t − ϵ \mathbf{A}_t^\tau = (1 - \tau)\boldsymbol{\epsilon} + \tau \mathbf{A}_t, \quad \mathbf{u}(\mathbf{A}_t^\tau \mid \mathbf{A}_t) = \mathbf{A}_t - \boldsymbol{\epsilon} A t τ = ( 1 − τ ) ϵ + τ A t , u ( A t τ ∣ A t ) = A t − ϵ
动作专家去噪网络v θ \mathbf{v}_\theta v θ 的优化目标为:
L expert ( θ ) = E ( ℓ , o t , A t ) ∼ D , τ ∼ U ( 0 , 1 ) , ϵ ∼ N ( 0 , I ) [ ∥ v θ ( τ , A t τ , VLA frozen ( ℓ , o t ) ) − ( A t − ϵ ) ∥ 2 2 ] \mathcal{L}_{\text{expert}}(\theta) = \mathbb{E}_{(\ell, \mathbf{o}_t, \mathbf{A}_t) \sim \mathcal{D}, \, \tau \sim \mathcal{U}(0, 1), \, \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})} \left[ \left\| \mathbf{v}_\theta\left( \tau, \mathbf{A}_t^\tau, \text{VLA}_{\text{frozen}}(\ell, \mathbf{o}_t) \right) - (\mathbf{A}_t - \boldsymbol{\epsilon}) \right\|_2^2 \right] L expert ( θ ) = E ( ℓ , o t , A t ) ∼ D , τ ∼ U ( 0 , 1 ) , ϵ ∼ N ( 0 , I ) [ ∥ v θ ( τ , A t τ , VLA frozen ( ℓ , o t ) ) − ( A t − ϵ ) ∥ 2 2 ]
θ \theta θ :动作专家网络可训练参数,训练 66k 次迭代。
VLA frozen ( ℓ , o t ) \text{VLA}_{\text{frozen}}(\ell, \mathbf{o}_t) VLA frozen ( ℓ , o t ) :冻结的 VLM 骨干网各层特征,在多步积分推断中仅计算一次前向传播。
采样推断 (Multi-step Euler Inference)
从纯高斯噪声A t 0 ∼ N ( 0 , I ) \mathbf{A}_t^0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) A t 0 ∼ N ( 0 , I ) 开始,采用 5 步前向欧拉积分(步长δ τ = 0.2 \delta\tau = 0.2 δ τ = 0.2 )解算动作块:
A t τ + δ τ = A t τ + δ τ ⋅ v θ ( τ , A t τ , VLA frozen ( ℓ , o t ) ) , τ ∈ { 0 , 0.2 , 0.4 , 0.6 , 0.8 } \mathbf{A}_t^{\tau + \delta\tau} = \mathbf{A}_t^\tau + \delta\tau \cdot \mathbf{v}_\theta\left( \tau, \mathbf{A}_t^\tau, \text{VLA}_{\text{frozen}}(\ell, \mathbf{o}_t) \right), \quad \tau \in \{0, 0.2, 0.4, 0.6, 0.8\} A t τ + δ τ = A t τ + δ τ ⋅ v θ ( τ , A t τ , VLA frozen ( ℓ , o t ) ) , τ ∈ { 0 , 0.2 , 0.4 , 0.6 , 0.8 }
第三阶段:单步生成器扩散蒸馏 (Stage 3: Diffusion Distillation for Fast Inference)
为满足高动态任务(如打乒乓球)的极低延迟需求,第三阶段通过在线扩散蒸馏,将第二阶段的多步动作专家v θ \mathbf{v}_\theta v θ 压缩为单步生成器G θ ′ \mathcal{G}_{\theta'} G θ ′ 。
单步回归目标 (On-the-fly Regression Loss)
初始化可训练参数θ ′ ← θ \theta' \leftarrow \theta θ ′ ← θ ,冻结 VLM 与第二阶段教师专家v θ \mathbf{v}_\theta v θ 。在训练过程中实时运行教师模型的 5 步采样过程F \mathcal{F} F (避免离线数据集过拟合):
F ( A t 0 , ℓ , o t ; θ ) = A t τ = 1 ( 来自第二阶段教师模型的 5 步积分结果 ) G ( A t 0 , ℓ , o t ; θ ′ ) = A t 0 + v θ ′ ( 0 , A t 0 , VLA frozen ( ℓ , o t ) ) \begin{aligned}
& \mathcal{F}(\mathbf{A}_t^0, \ell, \mathbf{o}_t; \theta) = \mathbf{A}_t^{\tau=1} \quad (\text{来自第二阶段教师模型的 5 步积分结果}) \\
& \mathcal{G}(\mathbf{A}_t^0, \ell, \mathbf{o}_t; \theta') = \mathbf{A}_t^0 + \mathbf{v}_{\theta'}\left( 0, \mathbf{A}_t^0, \text{VLA}_{\text{frozen}}(\ell, \mathbf{o}_t) \right)
\end{aligned} F ( A t 0 , ℓ , o t ; θ ) = A t τ = 1 ( 来自第二阶段教师模型的 5 步积分结果 ) G ( A t 0 , ℓ , o t ; θ ′ ) = A t 0 + v θ ′ ( 0 , A t 0 , VLA frozen ( ℓ , o t ) )
损失函数定义为单步预测与教师 5 步结果的 MSE 回归:
L distill ( θ ′ ) = E ( ℓ , o t ) ∼ D , A t 0 ∼ N ( 0 , I ) [ ∥ F ( A t 0 , ℓ , o t ; θ ) − G ( A t 0 , ℓ , o t ; θ ′ ) ∥ 2 2 ] \mathcal{L}_{\text{distill}}(\theta') = \mathbb{E}_{(\ell, \mathbf{o}_t) \sim \mathcal{D}, \, \mathbf{A}_t^0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I})} \left[ \left\| \mathcal{F}(\mathbf{A}_t^0, \ell, \mathbf{o}_t; \theta) - \mathcal{G}(\mathbf{A}_t^0, \ell, \mathbf{o}_t; \theta') \right\|_2^2 \right] L distill ( θ ′ ) = E ( ℓ , o t ) ∼ D , A t 0 ∼ N ( 0 , I ) [ F ( A t 0 , ℓ , o t ; θ ) − G ( A t 0 , ℓ , o t ; θ ′ ) 2 2 ]
极速推断 (Single-Step Inference)
部署时仅需一次前向传播即可直接生成最终连续动作块:
A t final = A t 0 + v θ ′ ( 0 , A t 0 , VLA frozen ( ℓ , o t ) ) , A t 0 ∼ N ( 0 , I ) \mathbf{A}_t^{\text{final}} = \mathbf{A}_t^0 + \mathbf{v}_{\theta'}\left( 0, \mathbf{A}_t^0, \text{VLA}_{\text{frozen}}(\ell, \mathbf{o}_t) \right), \quad \mathbf{A}_t^0 \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) A t final = A t 0 + v θ ′ ( 0 , A t 0 , VLA frozen ( ℓ , o t ) ) , A t 0 ∼ N ( 0 , I )
离散扩散 VLA:将离散扩散引入 视觉-语言-行动策略中的动作解码
离散扩散 VLA(Discrete Diffusion VLA)旨在解决传统自回归 VLA 模型(如 OpenVLA)逐标记预测导致的高延迟问题,同时消除单独引入连续扩散网络时与 VLM 交叉熵损失产生的梯度竞争。
该架构将感知、指令理解与动作去噪统一于单一 Transformer 主干网络中,将动作生成表述为在离散词表上的掩码扩散(Masked Diffusion)过程,支持测试期的高效动作块并行解码与自适应二次重掩蔽(Secondary Remasking)。
动作离散化与词表扩充 (Action Discretization & Vocabulary Augmentation)
输入动作采用基于分位数的离散化方案,将连续动作块映射为离散标记序列,并扩充特殊掩码标记[MASK]。
a 0 = ( a 0 , 1 , a 0 , 2 , … , a 0 , L ) , a 0 , i ∈ { 1 , 2 , … , K } L = H × D action , D action = 7 , K = 256 V action = { 1 , 2 , … , K } ∪ { [MASK] } , ∣ V action ∣ = V = K + 1 \begin{aligned} & \mathbf{a}_0 = (a_{0, 1}, a_{0, 2}, \dots, a_{0, L}), \quad a_{0, i} \in \{1, 2, \dots, K\} \\ & L = H \times D_{\text{action}}, \quad D_{\text{action}} = 7, \quad K = 256 \\ & \mathcal{V}_{\text{action}} = \{1, 2, \dots, K\} \cup \{\text{[MASK]}\}, \quad \vert{}\mathcal{V}_{\text{action}}\vert{} = V = K + 1 \end{aligned} a 0 = ( a 0 , 1 , a 0 , 2 , … , a 0 , L ) , a 0 , i ∈ { 1 , 2 , … , K } L = H × D action , D action = 7 , K = 256 V action = { 1 , 2 , … , K } ∪ { [MASK] } , ∣ V action ∣ = V = K + 1
H H H :连续动作块包含的时间步数。
D action D_{\text{action}} D action :单步控制维度(如 3 平移 + 3 旋转 + 1 夹爪 = 7)。
L L L :一个完整动作块展开后的总动作标记数量。
K K K :基于训练集第 1 至 99 分位数划分的离散箱(Bin)数量,单维度离散化为 256 个档位。
a 0 \mathbf{a}_0 a 0 :原始无噪离散动作块,每个标记位置用 One-hot 向量e a 0 , i ∈ R V \mathbf{e}_{a_{0, i}} \in \mathbb{R}^V e a 0 , i ∈ R V 表示。
动作离散化与词表扩充:把物理动作变成“填字游戏”
这里的核心目的是:把机器人连续的物理运动(比如“机械臂向左移动0.0123 m 0.0123\text{m} 0.0123 m ”),转换成大语言模型(LLM/VLM)能看懂的“单词(Token)”。
机械臂的单步动作(D action = 7 D_{\text{action}} = 7 D action = 7 ):机械臂在任意一个瞬间,控制它需要 7 个数字(3 个空间平移Δ x , Δ y , Δ z \Delta x, \Delta y, \Delta z Δ x , Δ y , Δ z + 3 个角度旋转Δ roll , Δ pitch , Δ yaw \Delta \text{roll}, \Delta \text{pitch}, \Delta \text{yaw} Δ roll , Δ pitch , Δ yaw + 1 个夹爪开合度)。
动作块(Action Chunk,H H H ):模型不会只预测眼下一个瞬间,而是预测未来一小段连续轨迹(比如预测未来H = 10 H = 10 H = 10 个时间步)。
动作序列总长度L L L (L = H × D action L = H \times D_{\text{action}} L = H × D action ):如果预测未来H = 10 H=10 H = 10 步,每步有 7 个控制量,那么总共就要预测10 × 7 = 70 10 \times 7 = 70 10 × 7 = 70 个数字。这里的L L L 就是总数字个数(L = 70 L=70 L = 70 ),而i i i 代表这 70 个数字里的第i i i 个位置(比如i = 1 i=1 i = 1 是第 1 步的x x x 轴平移,i = 7 i=7 i = 7 是第 1 步的夹爪开合度,i = 8 i=8 i = 8 是第 2 步的x x x 轴平移……)。
{ 1 , … , K } \{1, \dots, K\} { 1 , … , K } 与 [MASK] 的“交集”到底在做什么
{ 1 , … , K } \{1, \dots, K\} { 1 , … , K } (用K = 256 K=256 K = 256 个桶来装数字):物理动作是连续的(比如移动量可以是0.0123456 … m 0.0123456\dots\text{m} 0.0123456 … m ),但语言模型只懂离散的单词。所以我们把动作允许的最大最小值之间切成 256 个等份区间(桶)。每一个连续的物理数值,映射进去后都会变成一个1 ∼ 256 1 \sim 256 1 ∼ 256 之间的整数编号。这就是{ 1 , … , K } \{1, \dots, K\} { 1 , … , K } ,代表 256 个具体的动作指令。
[MASK] 遮罩标记:这是一个特殊符号,代表“还没想好 / 空白”。
扩充词表V = { 1 , … , K } ∪ { [MASK] } \mathcal{V} = \{1, \dots, K\} \cup \{\text{[MASK]}\} V = { 1 , … , K } ∪ { [MASK] } :动作块是一条长度为L L L 的长横条纸带(共有L L L 个格子)。在推断刚开始时,模型不知道机器人该干嘛,纸带上全是空白格(也就是全是 [MASK])。模型每往前推一步,就会把某些格子上的 [MASK] 擦掉,填入真实的动作编号(即从{ 1 , … , K } \{1, \dots, K\} { 1 , … , K } 中选一个1 ∼ 256 1 \sim 256 1 ∼ 256 的数字填进去)。所以,这个词表必须同时包含“具体的动作指令{ 1 , … , K } \{1,\dots,K\} { 1 , … , K } ”和“代表空白待填的 [MASK]”。
离散扩散马尔可夫前向过程 (Discrete Diffusion Forward Noise Process)
前向加噪过程定义为离散马尔可夫链{ a t } t = 0 T \{ \mathbf{a}_t \}_{t=0}^T { a t } t = 0 T 。在每一步,每个标记位置以概率β t \beta_t β t 被替换为特殊标记[MASK](记为e M \mathbf{e}_M e M ),以概率1 − β t 1 - \beta_t 1 − β t 保持原状。
单步转移矩阵Q t ∈ R V × V \mathbf{Q}_t \in \mathbb{R}^{V \times V} Q t ∈ R V × V 与任意时刻t t t 的边际破坏分布q ( a t ∣ a 0 ) q(\mathbf{a}_t \mid \mathbf{a}_0) q ( a t ∣ a 0 ) 定义如下:
Q t e a t , i = ( 1 − β t ) e a t , i + β t e M Q ˉ t = Q t Q t − 1 ⋯ Q 1 q ( a t ∣ a 0 ) = ∏ i = 1 L Categorical ( a t , i | Q ˉ t e a 0 , i ) \begin{aligned} & \mathbf{Q}_t \mathbf{e}_{a_{t, i}} = (1 - \beta_t) \mathbf{e}_{a_{t, i}} + \beta_t \mathbf{e}_M \\ & \bar{\mathbf{Q}}_t = \mathbf{Q}_t \mathbf{Q}_{t-1} \cdots \mathbf{Q}_1 \\ & q(\mathbf{a}_t \mid \mathbf{a}_0) = \prod_{i=1}^L \text{Categorical}\left( a_{t, i} \;\middle\vert{}\; \bar{\mathbf{Q}}_t \mathbf{e}_{a_{0, i}} \right) \end{aligned} Q t e a t , i = ( 1 − β t ) e a t , i + β t e M Q ˉ t = Q t Q t − 1 ⋯ Q 1 q ( a t ∣ a 0 ) = i = 1 ∏ L Categorical ( a t , i Q ˉ t e a 0 , i )
β t ∈ ( 0 , 1 ) \beta_t \in (0, 1) β t ∈ ( 0 , 1 ) :时刻t t t 的加噪率。
γ t ∈ ( 0 , 1 ] \gamma_t \in (0, 1] γ t ∈ ( 0 , 1 ] :时刻t t t 的累积掩码比例(Mask Ratio),即整条序列中被替换为[MASK] 的标记比例。
a ~ t \tilde{\mathbf{a}}_t a ~ t :根据掩码比例γ t \gamma_t γ t 随机将选定位置替换为[MASK] 后获得的损坏动作序列。
离散扩散马尔可夫前向过程:通俗理解与核心目的
这一步本质上是在训练阶段给模型“出难题/做坏事”,教模型以后怎么把被涂黑的字擦掉还原。离散扩散的前向过程,就是拿着涂改液,按照时间一步步往纸带上随机盖遮罩(涂黑)。这就是数学公式q ( a t ∣ a 0 ) q(\mathbf{a}_t \mid \mathbf{a}_0) q ( a t ∣ a 0 ) 干的事情:它根据当前的时间步t t t (对应涂黑比例γ t \gamma_t γ t ),随机把一部分原本正确的动作 Token 破坏成 [MASK]。
前向加噪过程的最终目的只有一个:制造“半成品(破坏数据)”,拿去训练模型学会“反向去噪/修补(逆过程)”。有了这个训练出来的能力,在实际部署(推断)时:模型拿到的直接就是一条100% 全被 [MASK] 涂黑的空白纸带。模型看一眼摄像头画面,第一轮先填上它最有把握的 20% 动作;第二轮看着这 20% 的已知信息,再填上剩下 80% [MASK] 中的一部分……经过几轮迭代(比如 5 步),原本全黑的纸带就被并行且自适应地恢复成了一条完整的平滑运动轨迹!
基于 Prismatic-7B / Llama 2 VLM 骨干网络,多模态特征输入与注意力掩蔽规则如下:
c = [ X vis , X lang , X prop ] X vis = Projector ( [ SigLIP ( I head ) , DINOv2 ( I head ) , WristViews ] ) X prop = MLP ( q arm ) Z in = [ c ∥ a ~ t ] p θ ( ⋅ ∣ a ~ t , c ) = Softmax ( W head ⋅ f θ ( Z in ) ) \begin{aligned} & \mathbf{c} = \left[ \mathbf{X}_{\text{vis}}, \, \mathbf{X}_{\text{lang}}, \, \mathbf{X}_{\text{prop}} \right] \\ & \mathbf{X}_{\text{vis}} = \text{Projector}\left( \left[ \text{SigLIP}(I_{\text{head}}), \, \text{DINOv2}(I_{\text{head}}), \, \text{WristViews} \right] \right) \\ & \mathbf{X}_{\text{prop}} = \text{MLP}(\mathbf{q}_{\text{arm}}) \\ & \mathbf{Z}_{\text{in}} = \left[ \mathbf{c} \,\Vert{}\, \tilde{\mathbf{a}}_t \right] \\ & p_\theta(\cdot \mid \tilde{\mathbf{a}}_t, \mathbf{c}) = \text{Softmax}\left( \mathbf{W}_{\text{head}} \cdot f_\theta(\mathbf{Z}_{\text{in}}) \right) \end{aligned} c = [ X vis , X lang , X prop ] X vis = Projector ( [ SigLIP ( I head ) , DINOv2 ( I head ) , WristViews ] ) X prop = MLP ( q arm ) Z in = [ c ∥ a ~ t ] p θ ( ⋅ ∣ a ~ t , c ) = Softmax ( W head ⋅ f θ ( Z in ) )
c \mathbf{c} c :拼接后的多模态上下文特征(包含头部与双腕图像特征X vis \mathbf{X}_{\text{vis}} X vis 、语言指令嵌入X lang \mathbf{X}_{\text{lang}} X lang 以及本体状态特征X prop \mathbf{X}_{\text{prop}} X prop )。
a ~ t \tilde{\mathbf{a}}_t a ~ t :带掩码的动作标记序列。
全模态融合注意力 :取消动作标记上的因果掩蔽,对动作标记采用全双向注意力(Full Bidirectional Attention) ,使其可以同时感知所有视觉、语言、本体特征及其他动作标记。
W head ∈ R K × D hidden \mathbf{W}_{\text{head}} \in \mathbb{R}^{K \times D_{\text{hidden}}} W head ∈ R K × D hidden :共享分类头,将隐藏状态直接投影到 256 路动作词表中。
统一多模态骨干网架构的变量与符号拆解
Z in = [ c ∥ a ~ t ] \mathbf{Z}_{\text{in}} = \left[ \mathbf{c} \,\Vert{}\, \tilde{\mathbf{a}}_t \right] Z in = [ c ∥ a ~ t ] (统一输入 Token 序列):
c \mathbf{c} c :多模态上下文特征(把头部/手腕摄像头图像特征、语言指令 Token、机械臂本体状态特征直接拼接在一起)。
a ~ t \tilde{\mathbf{a}}_t a ~ t :带有 [MASK] 的动作标记序列(即长为L L L 的“被部分涂黑的纸带”)。
Z in \mathbf{Z}_{\text{in}} Z in 就是把上下文和带掩码的动作拼接成一条长序列,直接喂给 Transformer。
f θ ( Z in ) f_\theta(\mathbf{Z}_{\text{in}}) f θ ( Z in ) (统一 Transformer 主干网的隐层输出):
f θ f_\theta f θ 表示整个 Prismatic-7B / Llama 2 骨干网络(参数为θ \theta θ )。
输出结果是每个 Token 对应的高维隐层特征向量(Hidden States)。
W head \mathbf{W}_{\text{head}} W head (共享分类头矩阵 / Action Head):
这是一个线性投影矩阵(Linear Projection Layer),维度为K × D hidden K \times D_{\text{hidden}} K × D hidden (其中K = 256 K = 256 K = 256 是离散化档位数,D hidden D_{\text{hidden}} D hidden 是 Transformer 的隐层特征维度)。
它的作用是将动作位置输出的高维抽象特征映射到 256 个档位的原始 Logits 上。
Softmax ( ⋅ ) \text{Softmax}(\cdot) Softmax ( ⋅ ) (归一化函数):把分类头输出的 256 个数值转换成相加等于1 1 1 的概率分布。
p θ ( ⋅ ∣ a ~ t , c ) p_\theta(\cdot \mid \tilde{\mathbf{a}}_t, \mathbf{c}) p θ ( ⋅ ∣ a ~ t , c ) (最终输出的概率分布):代表在给定当前上下文c \mathbf{c} c 和损坏动作序列a ~ t \tilde{\mathbf{a}}_t a ~ t 的条件背景下,模型对动作位置填空结果的后验预测分布。
离散扩散训练目标 (Discrete Diffusion Training Objective)
训练时采样扩散时间时刻的掩码比例γ t ∼ CosineSchedule \gamma_t \sim \text{CosineSchedule} γ t ∼ CosineSchedule ,对动作位置施加掩码,仅对被掩码标记计算交叉熵损失(使用硬标签独热向量监督):
L CE ( θ ) = − ∑ i ∈ M γ t log p θ ( a 0 , i | a ~ t , c ) \mathcal{L}_{\text{CE}}(\theta) = - \sum_{i \in \mathcal{M}_{\gamma_t}} \log p_\theta\left( a_{0, i} \;\middle\vert{}\; \tilde{\mathbf{a}}_t, \mathbf{c} \right) L CE ( θ ) = − i ∈ M γ t ∑ log p θ ( a 0 , i ∣ a ~ t , c )
M γ t \mathcal{M}_{\gamma_t} M γ t :根据掩码比例γ t \gamma_t γ t 选中的被掩码标记索引集合(包含γ t × L \gamma_t \times L γ t × L 个位置)。
单次前向传播同时并行预测所有L L L 个动作位置,所有参数(VLM 骨干网与动作投影头)进行端到端更新,无辅助损失项。
推理流水线:自适应解码与二次重掩蔽 (Adaptive Inference & Secondary Remasking)
推理阶段从全掩码序列a T = [ MASK ] L \mathbf{a}_T = [\text{MASK}]^L a T = [ MASK ] L (对应γ 1 = 1 \gamma_1 = 1 γ 1 = 1 )出发,执行T T T 轮并行细化。
在每个时间步t t t (掩码比例由γ t \gamma_t γ t 余弦递减至γ t + 1 \gamma_{t+1} γ t + 1 ):
贝叶斯反向去噪核 (Bayesian Reverse Step)
对每个位置i ∈ { 1 , … , L } i \in \{1, \dots, L\} i ∈ { 1 , … , L } 计算恢复概率分布与置信度评估:
p θ ( a t − 1 , i ∣ a t , i , c ) = { δ ( a t − 1 , i = a t , i ) , a t , i ≠ [MASK] Categorical ( a t − 1 , i | π θ ( i ∣ c ) ) , a t , i = [MASK] p_\theta(a_{t-1, i} \mid a_{t, i}, \mathbf{c}) = \begin{cases} \delta(a_{t-1, i} = a_{t, i}), & a_{t, i} \neq \text{[MASK]} \\ \text{Categorical}\left( a_{t-1, i} \;\middle\vert{}\; \pi_\theta(i \mid \mathbf{c}) \right), & a_{t, i} = \text{[MASK]} \end{cases} p θ ( a t − 1 , i ∣ a t , i , c ) = { δ ( a t − 1 , i = a t , i ) , Categorical ( a t − 1 , i ∣ π θ ( i ∣ c ) ) , a t , i = [MASK] a t , i = [MASK]
设置两种自适应置信度评估指标之一:
最大置信度: s t , i = max k p θ ( k ∣ a t , c ) 置信度间隙: g t , i = p θ ( k ( 1 ) ∣ a t , c ) − p θ ( k ( 2 ) ∣ a t , c ) \begin{aligned} & \text{最大置信度: } s_{t, i} = \max_k p_\theta(k \mid \mathbf{a}_t, \mathbf{c}) \\ & \text{置信度间隙: } g_{t, i} = p_\theta(k^{(1)} \mid \mathbf{a}_t, \mathbf{c}) - p_\theta(k^{(2)} \mid \mathbf{a}_t, \mathbf{c}) \end{aligned} 最大置信度 : s t , i = k max p θ ( k ∣ a t , c ) 置信度间隙 : g t , i = p θ ( k ( 1 ) ∣ a t , c ) − p θ ( k ( 2 ) ∣ a t , c )
k ( 1 ) , k ( 2 ) k^{(1)}, k^{(2)} k ( 1 ) , k ( 2 ) :概率最高与次高的预测标签。
提交选择与 Gumbel 采样 (Commitment & Gumbel Sampling)
选取置信度评分最高的前( 1 − γ t + 1 ) L (1 - \gamma_{t+1}) L ( 1 − γ t + 1 ) L 个位置构成已保留集合K t \mathcal{K}_t K t 。对该集合中的位置进行带温度衰减的 Gumbel-Max 采样以增加探索能力:
a t + 1 , i ∈ K t ∼ Categorical ( Softmax ( log p θ ( ⋅ ∣ a t , c ) + ε τ t ) ) a_{t+1, i} \in \mathcal{K}_t \sim \text{Categorical}\left( \text{Softmax}\left( \frac{\log p_\theta(\cdot \mid \mathbf{a}_t, \mathbf{c}) + \boldsymbol{\varepsilon}}{\tau_t} \right) \right) a t + 1 , i ∈ K t ∼ Categorical ( Softmax ( τ t log p θ ( ⋅ ∣ a t , c ) + ε ) )
ε ∼ Gumbel ( 0 , 1 ) \boldsymbol{\varepsilon} \sim \text{Gumbel}(0, 1) ε ∼ Gumbel ( 0 , 1 ) :独立同分布的 Gumbel 噪声。
τ t \tau_t τ t :随着时间步逐步衰减的采样温度。
二次重掩蔽与阈值检查 (Secondary Remasking)
为了防止早期步骤中低置信度错误标记累积传播,在提交位置集K t \mathcal{K}_t K t 上运行阈值检查:
R t abs = { i ∈ K t | s t , i < η t abs } ∀ i ∈ R t abs , a t + 1 , i ← [MASK] \begin{aligned} & \mathcal{R}_t^{\text{abs}} = \left\{ i \in \mathcal{K}_t \;\middle\vert{}\; s_{t, i} < \eta_t^{\text{abs}} \right\} \\ & \forall i \in \mathcal{R}_t^{\text{abs}}, \quad a_{t+1, i} \leftarrow \text{[MASK]} \end{aligned} R t abs = { i ∈ K t s t , i < η t abs } ∀ i ∈ R t abs , a t + 1 , i ← [MASK]
η t abs \eta_t^{\text{abs}} η t abs :单调递增的步长依赖门限阈值。置信度低于该阈值的已有标记将被重新重置为[MASK],供后续迭代继续优化,直到γ T = 0 \gamma_T = 0 γ T = 0 最终输出纯净动作块a 0 \mathbf{a}_0 a 0 。