论文笔记:一次前向就出整块动作:DriftingVLA 拆解

论文:DriftingVLA: Native One-Step Vision-Language-Action Generation via Per-Dimension Temporal Drifting

作者:Yuxuan Gao, Shiqi Zhang, Yedong Shen, Yifan Duan, Wenhao Yu, Xin Zhang, Siyuan Cao, Jiajun Deng, Yanyong Zhang(中国科学技术大学 + 联适导航)

发布:arXiv:2608.29749,2026-08-30,预印本(arXiv 页面未标注会议或期刊)

论文主页:https://arxiv.org/abs/2608.29749

PDF:https://arxiv.org/pdf/2608.29749

阅读前提:了解 Shallow-π(层压缩)与 SnapFlow(步压缩、1-NFE + 一致性/捷径目标)即可,本篇从零讲起。


一、背景:VLA 的动作到底慢在哪

1.1 π0.5 的十次串行前向

以 π0.5 为代表的流匹配(flow matching)VLA,结构是"VLM 主干 + 动作专家"。主干把图像、指令、机器人状态编码成一段多模态上下文(prefix);动作专家则接收带噪动作和一个时间步 τ,输出速度场——告诉当前动作"应该往哪个方向、以多快的速度走"。

推理时从纯高斯噪声出发,沿速度场做 K 步欧拉积分,π0.5 默认 K = 10:

A ← 噪声
重复 10 次:A ← A + (1/10) · vθ(A, c, τ)

也就是说,同一个动作块要串行算 10 次动作专家。论文在引言里点得很准:多模态 prefix 可以缓存复用,所以重复开销集中在动作专家,但这段计算正压在机器人实时控制的关键路径上——机器人每出一个动作块,都得等这 10 次前向走完。

1.2 已有"一步"方案省了什么,又留下了什么

在这个问题上,已经有两类做法。

第一类是 SnapFlow:把多步 flow 渐进式自蒸馏成 1-NFE 的 shortcut 预测器。它冻结 VLM 主干,只训动作专家和一个零初始化的目标时间嵌入(约 10% 参数),单卡 30k 步就能完成,π0.5 上端到端从 274 ms 降到 83 ms。误差靠一致性约束和"两步欧拉平均"的捷径目标压小。

第二类是 MeanFlowVLA:让网络直接预测"区间平均速度",同样是从 flow 速度场出发做改造。

它们都证明了一件事:flow VLA 可以大幅加速。但论文对它们的评价也很直接——这些方法的一步生成器仍然是从 flow matching 的传输过程里派生出来的。这留下两个隐患:

  1. 误差是"被容忍"的近似:一步跳跃的偏差没有被结构性消除,只是被目标函数压小;
  2. 接口是"借来的":动作专家仍是按"预测局部速度"训练出来的参数化,不是为"直接出动作"而生的。

还有一个更朴素的做法——直接把 10 步砍成 1 步,不换训练方式。论文用实验证明了这条路不通:在 LIBERO 上从 97.10 掉到 94.02,在 RoboTwin 2.0 上从 79.58 直接腰斩到 63.76(论文表 III 与图 4)。

于是本文提出一个反问:与其改造求解器,能不能换一种生成范式——训练时就把分布修好,部署时只查一次表?


二、中心思想

用三句话概括这篇论文的想法。

第一,把迭代从"推理时"搬到"训练时"。 动作分布的修正发生在参数优化过程里,并且被吸收进生成器本身。训练结束后,生成就是一次从噪声到动作块的直接映射,推理时不再需要任何漂移、采样或积分。论文自己对此的表述是:“它的一步行为是训练配方的属性,而不是推理时的近似技巧。”

第二,保留预训练的多模态表征,但重学动作接口。 VLM 主干从 π0.5 初始化——视觉-语言先验很值钱;动作专家连同连续动作的输入/输出投影则全新初始化——因为它原来的参数是为"估速度"特化的,留着反而是包袱。之后两组参数一起训练。

第三,把"动作块怎么分组"当成一等设计变量。 漂移场是靠样本之间的距离构造的,而动作块是 H×D 的张量:横轴是时间,纵轴是语义完全不同的动作通道(平移、旋转、夹爪……)。怎么切分直接决定距离尺子的含义,论文为此专门设计了 PDTD。

生活化地说:

  • 10 步 flow 像拿铅笔在草稿纸上擦改十遍才敢交卷;
  • SnapFlow 像同一个画家练"一笔画完"——画的还是那条线,只是把十笔合成一笔并校准笔势;
  • DriftingVLA 则干脆不练笔势,改练"看到题直接报答案":每次同时写 8 份草稿,最像标准答案的往回拉、彼此不像的往外推,练久了纠错内化成手感,考试时只写一次。

三、主要方法

3.1 第一步:换掉动作接口

π0.5 里的动作专家,输入是"VLM 特征 + 带噪动作 + 时间步 τ",输出是速度。DriftingVLA 把接口改写成:

 = fθ(Z, c),   Z ~ N(0, I),   Z ∈ R^{H×D}
  • c 是多模态条件(VLM 编码的 prefix);
  • Z 是与动作块同形状的纯高斯潜变量,不再是对示范动作和噪声做插值得到的 x_t;
  • fθ 的输出被直接解释为最终动作块,而不是"沿生成轨迹的一小步更新"。

时间步 τ 在接口公式里不再出现。至于实现层面是否删掉了时间嵌入模块、是否仍喂一个固定 τ,论文没有说明——这一点后面会专门讲。

初始化方式在论文第 IV-A 节写得明确:θ_VLM 从预训练 π0.5 加载,动作专家连同它的连续动作输入/输出投影全新初始化(原文用 “freshly initializing”),后训练时两组参数联合优化,不是冻结 VLM。原文没有使用 “randomly initialized” 或 “zero-initialized” 的措辞,也没有交代学习率、优化器、是否分层设置。

重初始化不是拍脑袋,论文用三组消融给了诊断(表 III):

  • 直接拿 π0.5 跑 1 步(只截断求解器):LIBERO 94.02,RoboTwin 63.76;
  • 用 flow 权重 warm-start 新目标:LIBERO 93.33;
  • 冻结 VLM、只训新动作头:94.57;
  • 三者都做对:98.32。

换句话说,截断求解器不行、沿用旧动作权重不行、冻住 VLM 也不行。这也解释了为什么它不适合"低成本给现成模型提速"的诉求。

3.2 第二步:用"漂移场"代替速度回归

这是全文的核心训练机制。先讲它在干什么,再讲公式。

给定一条训练样本(条件 c_i 和对应的示范动作块 A_i),模型采 G = 8 个独立潜变量,生成 8 个"兄弟"动作块。它们共享同一次 VLM 编码(同一条条件只编码一次),所以贵的部分没有变 8 倍。

然后构造漂移:

  • 正参考是数据集里的真实示范动作块——把生成样本往它身上吸引;
  • 负参考是其他的兄弟样本——把生成样本互相排斥。

排斥项不是花架子:没有它,8 个兄弟很容易塌成同一个模式(都写成同一种错误),也就是模式坍缩。

这些力被合成为一个"漂移位移" V,再用 stop-gradient 冻结成回归目标:

x̃ = sg(x + V)
L = ‖x − x̃‖²

stop-gradient 的意思是:目标那一侧的 x + V 只当标准答案,不让梯度从目标回传。否则模型会一边改预测、一边改目标,像自己拽自己头发。

这个目标有个漂亮的平衡性质:当生成分布已经等于数据分布时,漂移场 V 归零,目标就等于自身,损失趋于 0。也就是说,训练的目标不是"拟合一个速度",而是"把分布推到数据分布上"。

需要强调:这不是知识蒸馏。全文没有一处把自身称为 distillation;相反,论文在贡献列表里明确写了一句"实现一步部署,无需数值积分,也无需 flow 轨迹蒸馏"。它的正样本来自数据集示范,负样本来自模型自己,既没有教师模型的输出对齐,也没有教师网络、温度、KL 或判别器。更准确的类比是"分布匹配式自训练"。这与 SnapFlow 那种"用自己两步的平均教自己一步"的自蒸馏,在监督信号来源上完全不同。

3.3 第三步:PDTD——按动作维度切轨迹

有了漂移场,下一个问题是:拿什么当"一个样本"来算距离?

动作块是 H×D(H 是预测时域,D 是每步动作维度)。论文比较了三种切法:

(a) 整块压平(Chunk-wise):把 H×D 拉成一个长向量,作为一个漂移单元。时序完整,但所有通道共享同一把距离尺子:夹爪这种 0/1 量级的通道,其差异会污染平移通道收到的漂移信号;反过来,平移通道数值大,又会淹没夹爪。像用一个总音量旋钮同时调十件乐器。

(b) 按时间片(Step-wise):每个时刻的 D 维向量单独算。分组更细,但每个通道的完整时序被切碎,而且同一时刻的异构通道仍然混在一起。

© PDTD(本文):把每个动作通道的整条时间轨迹作为一个漂移单元——每条长 H 的轨迹有自己的距离尺子、自己的亲和度、自己的力归一化,同时保留完整时间演化。

一个必须讲清楚的点:PDTD 只分解"几何",不分解"生成器"。原文的说法是"PDTD 分解的是漂移几何,而不是动作生成器"——完整动作块仍由共享的 VLM 与动作 Transformer 联合生成,跨维度的协调依赖(比如双臂任务里两只手要配合)没有被切断。用比喻说:分科批改作业,但整份答卷仍由同一个学生一次写完。

消融数据支持这个设计(表 III):同样的漂移目标,只换分组方式,LIBERO 上整块 95.28、按时间片 93.10、PDTD 98.32;RoboTwin 2.0 上分别是 74.17、70.43、81.09。真机上排序一致:67.78、66.11、77.67。三套评测都指向同一个结论,说明这不是实现细节的波动。

另外,VLA 常为兼容不同本体或变长时域做 padding。PDTD 的所有统计(距离、尺子、亲和度、力)只在有效坐标上算:无效的动作维度和无效的未来时间步既不参与距离,也不参与归一化,否则常数零的填充会污染尺子。

3.4 训练与推理各自长什么样

训练(第 IV-D 节、V-A 节):每个条件采 8 个潜变量,共享一次 VLM 编码,动作专家并行生成 8 个兄弟;按 PDTD 重排成"每通道一条轨迹";算距离、亲和度、吸引/排斥力、归一化漂移场;用冻结目标做回归;梯度同时更新 VLM 与动作专家。配置是 50k 优化步、8 张 A800(每卡 batch 4,全局 32)、3 个随机种子;真机每个任务 100 条遥操作示范。

推理(第 IV-D 节 c):编码一次多模态上下文;采一个潜变量;动作专家前向一次;执行动作块的前若干步。原文写得很直白:"部署时,上述所有分布层面的机制都被移除。"没有兄弟集、没有成对交互、没有漂移场、没有数值积分。总前向次数是 1 次 VLM + 1 次动作专家,与"朴素 1 步"的调用次数相同,差别全在参数与训练目标。

3.5 一个原文没有交代的细节:时间嵌入

按 π0.5 的官方实现(openpi/LeRobot),动作专家的时间步是通过 adaRMSNorm 注入的:时间向量作为条件,在每一层的两个归一化处生成 scale / shift / gate。如果真要"去掉时间",理论上需要把 adaRMSNorm 退回普通 RMSNorm,并删掉时间 MLP,否则把条件置零会让门控残差整体关掉。

但DriftingVLA 原文对此没有任何描述。它只写了"保留 π0.5 的两塔架构"和"重新初始化动作专家及其动作输入/输出投影",接口公式里不含 τ。是否删除时间模块、是否喂固定 τ、归一化层是否改动、初始化用什么分布、带宽取值多少、每步动作维度 D 是多少——原文均未说明。这些不能从"保留架构"推出来,复现时需要自己决定。


四、特点:优点与局限

4.1 优点

精度不降反升。 LIBERO 四个套件平均 98.32%,比跑 10 步的 π0.5(97.10)高 1.22 点,比复现的 SnapFlow(97.48)高 0.84 点;最难饱和的 LIBERO-Long 上差距更明显(94.33 对 92.40 / 93.07)。RoboTwin 2.0 五十个任务平均 81.09(Easy 84.61、Hard 77.56),高于 π0.5 的 79.58 与 SnapFlow 的 78.53,且 Hard 分裂同样领先。真机六个任务(两个单臂、四个双臂)平均 77.67%,比 π0.5 高 3.45,比 SnapFlow 高 8.23,比 MeanFlowVLA 高 12.56;六个任务里五个最优,只有桌面清理任务略低于 π0.5。

速度收益明确。 在 LIBERO-Spatial 上、batch 1、H=50、A800 条件下,动作块推理延迟从 227.61 ms 降到 67.67 ms,3.36 倍,延迟下降约 70%(图 6)。

异构通道的处理是它的差异化亮点。 真机上单臂子集从 86.00 升到 89.67,双臂子集从 68.34 升到 71.67——分通道监督没有破坏双臂协调,这是"只分解几何、不分解生成器"的直接证据。

训练开销反直觉地低。 虽然要生成 8 个兄弟,但因为 VLM 编码共享,G 从 2 增到 8 只多 3.78% 的算力(87.92 → 91.24 GPU-hours,峰值显存 45.99 → 50.38 GiB),而 π0.5 的参考训练是 108.49 GPU-hours。也就是说,"多个兄弟"听着贵,实际不贵。

部署端干净。 没有 EMA 副本、没有判别器、没有额外损失网络、没有新头。漂移场是用样本距离解析算出来的,本身不带可学习参数。推理就是"编码一次 + 生成一次"。

4.2 局限与风险

训练侧仍有成本。 兄弟采样要额外算力与显存,虽然部署端没有开销;论文也把它列为局限。

场景覆盖有限。 只在操作类任务上验证(LIBERO、RoboTwin 2.0、六个真机任务),未覆盖更大规模的多本体 VLA、长时域和交互式场景。

几何是固定的。 每个动作维度的整条时间轨迹被硬性分为一组,没有自适应或可学习的分组方式,论文把它列为未来工作。

不适合叠加在已蒸馏好的学生上。 它要求动作接口重新初始化,而 Shallow-π 的收益恰恰来自压过的动作头;warm-start 又只有 93.33。二者叠加很容易把已有收益清零。同时它与 SnapFlow 属于同一个"步数压缩"维度,串联没有意义——正确组合是"层压缩 × 其中一种步压缩"。

换模型的泛化性未验证。 论文只做了 π0.5,扩展到其他 flow VLA 被列为 future work,没有实验证据。

实现细节缺失。 时间嵌入去留、初始化分布、带宽集合与 ε 取值、D 的具体数值、训练时的 H、以及两组参数是否用不同学习率,原文均未说明。对想复现的人,这些是必须自己补的空缺。


五、一句话总结

SnapFlow 压缩的是"走这条路的走法"——同一条 flow 轨迹,少走几步并校准;DriftingVLA 压缩的是"画这条路的方式"——不再学速度场,直接用分布漂移把"噪声到动作块"的映射练进参数。前者是求解器层面的优化,后者是生成范式与训练目标的替换。

代价是它必须重学动作接口、且只验证了 π0.5;收益是推理真的只剩一次前向,而且在 LIBERO、RoboTwin 与真机上都拿到了一步方法里最好的成绩。


论文主页:https://arxiv.org/abs/2608.29749
PDF:https://arxiv.org/pdf/2608.29749

Logo

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

更多推荐