FAST 论文解读:把700个动作token压到53个之后

FAST论文里有一组很醒目的数字:双臂叠衣任务中,同样一秒的动作,逐点量化要700个token,FAST约为53个。

这件事有意思的地方,不只是长度缩短了。机器人动作本来是连续的,为什么要先拆成这么多离散符号?压得更短,细微动作会不会丢?名字叫FAST,机器人是不是也能反应得更快?

三个问题的答案并不相同。下面先算700是怎么来的,再用一条50点曲线拆开DCT、量化和BPE,最后回到论文里的训练与推理结果。

论文依据:FAST,arXiv:2501.09747v1。表格成绩来自论文,曲线与符号合并是本文的离线演示。

1. 700个token,怎么数出来的

视觉-语言-动作模型,也就是VLA,根据图像、语言指令和机器人状态生成动作。动作可以是关节目标,也可以是末端位姿变化、夹爪状态等,不必都写成关节角度。

若沿用语言模型逐个预测token的方式,就要先把连续动作变成离散符号。一种直接做法是把每个维度划成256档:某个数落在哪个格子,就用对应编号表示。每个时间步、每个动作维度都这样处理,再将编号连接起来。

以一秒为一个动作块,7维、每秒5步需要35个token;14维、每秒50步的双臂动作则需要700个。维度和频率一起增长,很快就把一个短动作变成了长序列。要判断采样变密本身的影响,还需要把其他条件固定下来。

论文因此做了一个更干净的合成实验:保持三次样条曲线的复杂度,只改变每条序列的采样点数,从25增加到800,让自回归Transformer学习。结果显示,逐点量化方案的预测误差随采样变密而增大,模型容易退化为复制前一个token。

采样越密,相邻两项越容易相同或接近。对模型来说,复制上一项就能猜中不少位置,这是一条很省事的学习路径。可轨迹终究要转向、停下或者改变幅度,一路复制,整段动作的形状就会走偏。

论文在所测20 Hz、50 Hz灵巧操作任务上也观察到朴素量化方案失败。这提示了一个比继续加大模型更靠前的问题:我们交给它的学习目标,是不是被大量相邻重复值占满了?FAST先改这一层。

2. DCT做的事,先用一条曲线看

FAST选择了离散余弦变换,简称DCT。JPEG图像压缩也使用这种工具,但这里处理的是动作随时间的变化。

DCT可以理解为换一种写法:原来逐个记录50个采样值,现在用一组不同频率的余弦形状描述同一条曲线。平缓的整体变化往往主要体现在低频系数里,细小、快速的变化出现在更高频的系数里。

完整DCT做完,50个采样点仍是50个系数。数量没少,数值的分布变了:平滑曲线往往只需要几个较大的低频系数,其余很多项接近零。保留全部系数,就能逆变换回原曲线;要压缩,还得继续处理这些小数。

为了看清这一步,我构造了一条50点的平滑上升曲线,再加上一点小幅起伏。它已处于归一化动作尺度,没有对应某台机器人的关节。演示采用正交归一DCT-II,然后把每个系数乘以缩放因子γ,取整,再除以γ进行逆变换。

图 1:本地合成演示。上图比较原始曲线与γ=10时的重建,下图显示50个DCT系数的幅值,红点是取整后仍非零的4项。这里没有运行BPE,也没有训练策略模型。

三组缩放因子的实际计算结果如下:

γ 量化后非零系数 重建RMSE 最大绝对误差
5 2 / 50 0.02210 0.04903
10 4 / 50 0.01370 0.03306
40 9 / 50 0.00264 0.00603

误差单位是合成数据的归一化动作单位,不是角度、毫米或真机控制误差。

沿着表格往下看,γ从5调到40,非零项从2个增加到9个,最大误差从约0.049降到0.006。多留下几个系数,曲线上的细微起伏也就多保留一些。γ=10在两者中间,也恰好是论文单数据集实验的默认值。

因此γ不能单看压缩效果来选。对于这条平滑曲线,少掉一点起伏很好理解;换到抓取接触附近,同样大小的误差是否能接受,就得回到动作的实际单位和任务要求。

不过,表里的"4个非零系数"还不能读成"4个token"。50个位置都在,零值也占位置,非零项还要记录具体数值。接下来才轮到BPE把这串整数收短。

3. 六个零,为什么最后只占两个符号

把这一步放回完整流程,DCT之前还有归一化:FAST按每个动作维度的第1和第99百分位缩放,将两个分位点分别映射到−1和1。不同单位、不同范围的动作因此进入较统一的数值表示,分位点之外的值仍可能超出这个区间。

接下来是刚才演示的DCT和取整。论文把每个维度分别变换,再将量化系数展平成一条整数序列。

展平的顺序也有讲究。设想只有两个动作维度,每个维度有低、中、高三项系数。可以先写完第一个维度再写第二个,也可以先写两个维度的低频项,再写它们的中频、高频项。FAST选后者,即频率优先的排列。这样自回归模型先生成描述各维度总体形状的部分,再补更细的变化。论文报告,这样得到的策略执行更稳定。

最后轮到BPE,即字节对编码。可以把它理解为一个在符号序列上学习常见组合的词表:经常相邻出现的符号组合,可以用一个新符号表示。动作系数里有重复零值,也有跨维度反复出现的组合,BPE可以利用这些规律缩短序列。

用一串很小的整数就能看清这个过程。假设词表已有两条合并规则:两个相邻的0写成Z,两个相邻的Z再写成W。从左往右合并:

text 复制代码
原序列:  4 0 0 0 0 0 0 -2    8个符号
合并00:  4 Z Z Z -2          5个符号
合并ZZ:  4 W Z -2            4个符号

W展开为四个0,Z展开为两个0,八项就完整回来了。原序列只有两个非零整数,最后却是四个符号,这正是前面不能把"非零项"当成"token数"的原因。

这两次合并没有再改动任何整数。精度损失发生在前面的取整,BPE只换了写法。它能利用连续的零,也能利用数据里反复出现的其他相邻组合。

这是手动给定两条规则的BPE合并演示,输入独立于上面的50点曲线。实际词表需要从数据学习;此处未运行官方FAST tokenizer。本地演示执行了这两次合并,展开后与原序列一致。

图 2:依据论文Algorithm 1与Figure 4重绘。编码从连续动作走向token,解码逆向返回连续动作;量化使最终还原成为近似还原。

如果做到DCT和量化就停下,模型仍要逐个预测那些零,长序列还在。论文附录去掉BPE后,表现低于完整方案,和这个过程能对上:先把信息集中,再把重复表达合并,两步都要做。

4. 从小例子回到700和53

论文用四个数据集比较了相同一秒动作块的token数量。下面重绘原表,便于看到逐点量化与FAST的差别。

图 3:FAST v1 Table I数据重绘。各数据集任务、维度与频率不同,不能把横向变化当作只改变频率的受控实验。

BridgeV2从35个token降到20个,约压缩1.75倍;DROID从105降到29,约3.6倍;Table Bussing从140降到28,为5倍;T-Shirt Folding从700降到53,约13.2倍。

最直观的变化发生在双臂叠衣任务:原本要逐个生成700个token,现在约为53个。这让自回归模型少处理了大量相邻冗余。模型需要学习的仍是同一段动作,只是目标序列不再被逐点描述拉得那么长。

这比单纯降低采样率更有吸引力。平缓的部分可以压得短,动作复杂、精度要求高的部分则保留更多符号。序列长度开始取决于需要留下多少变化,未必跟着采样点数一同增长。

作者还训练了通用tokenizer FAST+,使用约100万个一秒长的真实机器人动作片段构造通用BPE词表。不同机体和动作空间因而有机会复用同一套编码工具,减少每个数据集重新训练词表的工作。它服务于策略的动作表示,图像、指令与动作之间的关系仍由策略模型学习。

5. 名字叫FAST,推理却用了750毫秒

看到700降到53,很容易顺手推一句"机器人反应也快了"。论文后面的耗时数据,却需要分开读。

论文把FAST接入π₀体系形成π₀-FAST,在包含10000小时数据的大规模跨机型训练中,以约五分之一的GPU小时达到与对照π₀相近的策略性能。这个比较衡量的是达到相近表现所需的训练资源。

推理时却有不同的成本结构。在论文的NVIDIA 4090设置上,π₀-FAST每个一秒动作块约需750毫秒;扩散式π₀通常在100毫秒以内。前者仍需用完整的2B语言模型骨干自回归生成约30---60个token,后者用300M动作专家进行10步迭代。两条路线的模型构成和生成方式都不同。

论文评测的静态操作任务没有被这个延迟显著拖累。可如果目标会快速移动,750毫秒里画面已经变了多少,就值得单独测。选择这条路线时,训练预算和动作更新时限要分开算:GPU小时省下来是一项收益,推理等多久是另一项成本。

6. 解码出的动作,怎样接到Q1

Q1 SDK中的 JointCommand 包含关节名称,以及位置、速度、力矩、刚度、阻尼五个数值字段。看到这些字段,很容易想到:能不能把每个字段都塞进动作向量,用FAST编码,再把输出直接送下去?

先决定策略到底预测什么。只预测关节位置,就按关节位置组织训练数据;预测末端变化,还要有相应的转换。刚度和阻尼是否由模型负责也要事先定下来,不能因为协议有这两个字段,就一并塞进动作向量。

随后再把解码、反归一化和机体适配接到 JointCommand。这个出口要明确关节名称、排列顺序、单位和限位,让模型中的每个动作维度都对应到正确的物理量。

时间也有三层:动作序列每秒有多少个采样点,模型每秒重新推理几次,HAL每秒下发多少帧。一个模型可以一次预测一秒的动作,不必每个动作点都重新推理;低层控制器又可以用更密的节奏执行它。

举一个教学配置:策略动作网格是20 Hz,每个点间隔50毫秒;HAL按500 Hz接收指令,每帧2毫秒。两个策略点之间有25个HAL周期,要由插值、保持或低层规划填充。时间网格分清之后,才有地方讨论控制器怎样执行这条压缩后还原的轨迹。

Q1文档建议HAL关节指令以500---1000 Hz下发,时间戳严格递增,并规定单帧位置增量不得超过0.2 rad。接入设计必须同时容纳策略的动作网格和下发层的约束。

FAST这篇论文最值得带进开发过程的,是一次检查动作表示的机会。如果相邻动作几乎一样,却仍要模型逐项预测几百次,表示本身就值得调整。

实际选型可以从重建误差开始:接触、停止和转向附近的动作能否保住?确认这一点,再比较token长度、训练成本和推理延迟。700压到53很漂亮,但最后要执行的,始终是解码出来的那段动作。

阅读范围:本文复核了论文表格,运行了DCT量化与符号合并教学脚本;未复现策略训练,也未在Q1部署FAST。DCT演示采用正交归一DCT-II,误差只对应本文合成曲线。


主要依据:FAST v1论文、作者研究介绍、启元SDK下载。论文数据引自Table I及§VI;合成曲线与符号合并用于解释原理。相关开发实践欢迎在启元开发者社区交流。

相关推荐
音视频牛哥9 小时前
“人工智能+”走向产业深处:音视频产业的机遇、挑战与技术选择
人工智能·音视频·具身智能·whip/whep·人工智能+·smartmediakit·国务院人工智能+行动
是Yu欸20 小时前
机器人如何把二维画面变成三维动作?ECCV 2026 3DWay 论文解读
3d·机器人·论文解读·具身智能·eccv 2026
cnbestec21 小时前
跨本体策略迁移对照:Stretch 3移动操作机器人与franka机器人FR3(franka七自由度机械臂)实验解析
具身智能·hello robot机器人·stretch 3机器人·hello robot·franka 科研平台·stretch 4·franka机械臂
深蓝学院2 天前
TRO顶刊|隐蔽攻击下的多机器人安全学习控制:小规模学习,大规模泛化
机器人·具身智能
是Yu欸2 天前
面向启元 Q1 的手势交互:12 组 MobileNetV3 微调实验与 Skill 接入方案
交互·模型微调·具身智能
Godspeed Zhao3 天前
具身智能中的无线技术——无线线束2
具身智能
CV@CV5 天前
世界模型与智能体协同推理逻辑
人工智能·算法·边缘计算·量子计算·具身智能
行如流水5 天前
UniWAM:让“理解、预见、行动“在同一个 Transformer 里
具身智能
禁默5 天前
2026年具身智能“双线分流“:机器人进厂,也回家
机器人·具身智能