![]()
你有没有想过一个问题:让机器人做一个倒水的动作,到底需要"想"多少步?
这听起来像个奇怪的问题。但如果你了解一点现在机器人是怎么被训练去干活的,你就会发现这个问题其实特别关键。
现在最先进的机器人操作模型,比如让机械臂抓东西、倒水、叠碗,背后往往用的是一种叫做世界动作模型的技术。
世界动作模型(WAM):一种同时预测未来画面和生成动作指令的模型,机器人靠它"看懂"接下来会发生什么,再决定手该怎么动。
这类模型有个特点,它不是直接告诉机器人"手往左移五厘米",而是通过一种叫扩散去噪的方式,从一堆随机噪声里一步一步"雕刻"出正确的动作。就像雕塑家从一块大理石里凿出雕像,要凿很多刀才能凿出精细的轮廓。这个"凿的次数"就是所谓的去噪步数。
问题来了:现在几乎所有模型都用固定的步数。不管接下来是要做一个"随便抓一下"的粗糙动作,还是"精准对准瓶口倒水"这种精细活儿,模型都老老实实走完同样多的步骤。
这就好比你无论是给朋友倒一杯水,还是给病人精准打点滴,都要求自己闭着眼睛数够十秒才能松手。有些时候三秒就够稳了,你却硬要磨到十秒,浪费时间;有些时候十秒都不够精确,你却提前松手,洒了一地水。
这篇论文要解决的,就是这个"一刀切"步数带来的浪费和风险。
**为什么固定步数是个死结**
我们先弄清楚固定步数到底会造成什么后果。
如果步数设置得少,比如只走一步,模型速度飞快,但碰到需要精细控制的动作,比如把积木稳稳地摞起来,一步走完往往会出错,机械爪没抓稳,东西掉了。
如果步数设置得多,比如固定走十步,精细动作是稳了,但机器人在做"伸手去拿一个孤零零放在桌上的杯子"这种简单动作时,也要磨完十步才出手,响应变慢,计算资源全花在了不需要精细雕琢的地方。
论文里给出的数据很直观:在RoboTwin这个机器人测试平台上,三个主流的世界动作模型,Motus、FastWAM和LingBotVA,原本都是固定步数运行的。固定十步的Motus和FastWAM,固定二十五步加五十步的LingBotVA,任务成功率都不错,但代价是每次决策都要跑完全部步骤,一步都不能少。
那有没有办法让模型自己判断,这个动作简单就少走几步,这个动作精细就多走几步?
之前有人尝试过一种叫AnyFlow的方法,让模型支持可变步数生成。但问题是,这种方法训练时用的监督信号,依赖的是模型自己当前预测出来的中间状态,而不是一个固定不变的参照物。
这就像你想学写字,但没有字帖可以照着描,只能盯着自己上一笔写出来的样子去修正下一笔。如果你上一笔写歪了,下一笔的修正方向也会跟着歪,越练越乱。论文作者在实验里真的观察到了这个现象:用这种自我参照的训练方式,模型的训练目标"抖动"得很厉害,梯度经常出现剧烈波动,导致一步或两步生成的效果反而很差。
那这篇论文提出了什么办法?
**用一个"不会变心"的老师来指路:AnyStep WAM的训练思路**
论文提出的方案叫AnyStep World Action Model,简称AnyStep WAM。它的核心思路,是不让学生模型参照自己不断变化的输出,而是参照一个固定不动、永远不变的"老师"。
具体是怎么做的?
先让一个训练好的、参数被冻结不再更新的教师模型,完整地走一遍从噪声到最终动作的全过程,生成一条精细的参考轨迹。这条轨迹上的每一个中间状态都是确定的、不会变的。
然后,学生模型在训练时,不管你想学一步走完、两步走完还是十步走完,都直接去看这条教师轨迹上对应的两个端点之间的真实位移,拿这个位移当作训练目标。
这里有个关键的技术词汇。
流匹配(Flow Matching):一种生成模型的训练思路,把生成过程看作噪声逐渐"流动"变成真实数据的过程,模型学的是这个流动方向(速度场)。
流映射(Flow Map):在流匹配基础上进一步扩展,不只学习某一瞬间的流动方向,还直接学习"从时间点A跳到时间点B"这一整段的平均位移,这样模型才能支持"一步到位"或"多步细化"两种模式。
为什么要强调"直接用教师轨迹的真实位移"而不是"用导数去推算"?
因为之前MeanFlow和AnyFlow这类方法,推算训练目标时要对学生模型自己的输出求导数,这个导数本身就依赖学生当前的状态,状态一变,导数跟着变,整个训练过程就像在追一个不断移动的目标。而AnyStep用的教师轨迹,从头到尾是写死的,不会因为学生学得好不好而改变。
这就好比学开车,一种方式是教练坐在旁边,车开到哪儿教练就现场调整指导内容;另一种方式是给你一条提前录好的标准行车路线视频,不管你现在开成什么样,视频里那条路永远在那里,你随时可以拿自己的轨迹去对比。第二种方式显然更稳定,不会因为你今天开得歪就把参照物也带歪了。
论文里还做了个很直观的对比实验,统计训练过程中梯度爆炸的比例。用旧方法(有限差分)训练,45.9%的训练步骤梯度都超过了裁剪阈值,几乎一半时间都在"发抖"。换成教师轨迹监督后,这个问题大幅缓解,梯度曲线平稳了很多。
除了这个核心的区间监督,论文还加了几个补充训练项。一个是保证模型在瞬时速度预测上不退化的常规流匹配损失,一个是专门盯着"一步走到底"这种极端情况的端点监督,还有一个叫恢复监督的机制,专门处理"如果先走了一步预览,后面还要接着走"的场景,让模型学会从一个已经生成出来的中间状态继续精细化,而不是每次都从零开始。
所有这些训练调整,并不是去重新训练整个模型,而是用一种叫LoRA的轻量级适配技术。
LoRA(低秩适配):一种不改动原模型全部参数,只在关键层插入一小组可训练的"补丁参数"进行微调的技术,好处是训练成本低,且不同任务或不同步数配置可以共用同一套底座模型。
这样一来,同一个模型,配上共享的LoRA适配层,就能同时支持从一步到十步的所有档位,不用为每个步数单独训练一个模型。
**光会变步数还不够,得知道什么时候该用几步**
训练出一个能支持任意步数的模型只是第一步。真正的难题是:面对一个具体的场景,模型自己怎么知道该用一步还是该用五步?
论文把这个决策问题,归纳成一个"风险收益"的判断框架。
风险,指的是这个动作片段本身有多难、多容易出错。论文用了一个很巧妙的信号来衡量风险:去看教师轨迹本身的"弯曲程度"。
具体来说,如果教师模型在生成这个动作的过程中,每一步的速度方向变化很剧烈,忽左忽右,那说明这个生成过程本身充满不确定性,很难用粗糙的大步子去逼近,这种情况风险就高。反过来,如果教师轨迹走得很直,速度方向基本一致,说明这个动作生成过程很"丝滑",用少步数也能逼近得比较准,风险就低。
论文里用了两个指标来量化这种"弯曲程度":一个看方向上的变化(相邻两步速度方向的夹角差异),一个看幅度上的变化(相邻两步速度大小的相对变化)。两个指标综合起来,给每个场景打一个风险分。
这就好比你开车走山路和走高速。高速路笔直,你稍微松点方向盘的精细控制也不会出大问题;山路弯道多,方向盘上一点点疏忽就可能冲出路面。风险分本质上就是在提前判断"这段路是高速还是山路"。
光知道风险还不够,论文还要判断另一件事:在特定的步数预算下,学生模型的预测到底靠不靠谱。这就是"收益"的部分,论文管它叫学生-教师的保真度。
具体做法是,让学生模型沿着"先走一步预览,再补齐剩下步数"这条实际会在部署时用到的路径,去跟教师模型的对应轨迹做比较,看两者的速度预测有多接近。方向一致、幅度接近,这个保真度分数就高。
论文设计了一个轻量级的调度器,只用一次单步预览产生的特征,就能同时预测出这个场景的风险分和不同步数预算下的保真度分数。
一步预览:模型在正式决定走几步之前,先花一次计算跑一遍"假设只走一步会得到什么结果"的预演,这次预演产生的中间特征后续会被复用,不会白白浪费。
有了风险分和各档步数的保真度预测之后,调度逻辑很简单:风险越高,要求的保真度门槛就设得越严格;然后从所有候选步数里,挑出满足这个门槛要求的最小步数,用这个步数去正式跑一遍完整流程。
而且这个单步预览不是白跑的,它会被"回收"利用。选定步数之后,不需要重新从头算一遍,而是把预览得到的结果重新加噪到对应的时间点,接着走剩下的步骤。整个过程算上预览,总共只用了刚好等于选定步数的计算量,不多花一分钱。
如果没有这套风险收益调度机制会怎样?论文里也做了对比,构建了一个不需要训练、纯靠规则判断的基线方法AnyStep+Gate,靠观察动作是否协调、画面是否稳定来粗略判断步数。结果显示,论文提出的调度器在成功率上比这个规则基线高出0.70到1.88个百分点,同时步数还能再省下21.8%到24.5%。这说明单纯靠表面规则判断,和真正建模"风险有多大、当前步数能不能兜住"这两件事,效果是有差距的。
**实测结果:省下六成计算量,成功率还不掉**
说了这么多设计思路,实际效果到底怎样?
论文在RoboTwin 2.0这个仿真平台上,对Motus、FastWAM、LingBotVA三个主流模型分别做了测试,覆盖50种双臂操作任务,既有干净场景也有加了杂物、光照变化、背景干扰的随机化场景。
结果显示,用了AnyStep之后,平均去噪步数分别减少了60.2%、49.8%、以及LingBotVA视频分支85.28%、动作分支92.64%,而任务成功率几乎没有掉,跟原来固定步数的基线相比,差距控制在0.24个百分点以内。
换算成实际耗时,在同一块A100显卡上,Motus的单次推理耗时从1.932秒降到0.859秒,FastWAM从0.496秒降到0.295秒,LingBotVA从9.732秒直接降到3.247秒。而这套调度器本身带来的额外开销,每次预测只有两到三毫秒,几乎可以忽略。
更让人意外的是一步生成的效果。在只允许模型走一步的极限条件下,用AnyStep训练出来的模型,成功率比原始基线分别高出7.07、12.08、8.94个百分点。这意味着同样是走一步,AnyStep训练出来的模型"一步走对"的能力明显更强,这背后正是教师轨迹监督带来的稳定性红利。
论文还专门跟另一个思路相近的工作Flash-WAM做了对比,后者也是想做一步生成的世界动作模型。结果AnyStep在一步生成上分别领先3.19、7.58、1.30个百分点。
除了仿真环境,论文还在真实机器人上跑了六个任务:倒碗、清理桌面、放置方块、放置杯子、叠方块、叠碗。用的是Unitree G1D双臂机器人。真实世界的结果同样支持之前的结论,平均成功率提升到69.17%、71.67%、70.00%,而平均去噪步数分别减少59.4%、63.9%、85.84%,单次推理速度提升1.67倍到6.14倍不等。
有个细节挺有意思。论文里展示了倒碗任务的分步截图,能看到在抓取和倒水这两个最考验精度的阶段,模型自动选用了更多的去噪步数,而在伸手靠近这种粗放动作阶段,只用了一两步就搞定。这正是论文最开始想解决的那个问题的具体呈现:计算资源被自动分配到了真正需要精细控制的地方。
论文还做了一系列消融实验,把训练目标里的几个组成部分逐一拿掉,观察效果变化。拿掉区间监督这一项,一步成功率下降1.40个百分点,两步成功率从86.21%骤降到78.94%,自适应调度选出的平均步数也从3.98涨到5.27,说明这一项确实是让模型学会"精确预测不同跨度位移"的核心。拿掉端点监督,一步成功率从82.12%掉到75.53%,自适应步数需求也涨到了4.74。拿掉恢复监督,自适应成功率从87.96%小幅降到86.96%。这些数字虽然看起来变化不算特别夸张,但每一项都在朝着"步数变多、精度下降"的方向偏移,说明训练目标里的每个组成部分都在各自发挥作用,少了哪个都会让系统朝着更笨重、更低效的方向倒退。
写在后面
读这篇论文的过程中,最触动我的其实不是那些百分之多少的成功率提升,而是这个问题被提出的方式本身。
大家一直知道扩散模型的去噪步数是个可以调的旋钮,但过去的做法几乎都是把这个旋钮焊死在某个固定值上,靠工程师拍脑袋决定"十步够用"或者"五十步更稳"。这篇论文做的事情,本质上是把这个焊死的旋钮重新拧开,而且不是随便拧,是让模型自己去感知每一个具体场景应该拧到哪个刻度。
这让我想起一个不太相关但结构类似的场景:人在做体力活的时候,身体其实也在不停地做类似的资源分配,搬轻的箱子肌肉发力就随意一点,搬易碎的花瓶手指和手臂的控制精度会自动提高好几个档次。这种调节大部分时候是无意识的,但背后一定有某种"风险评估"在起作用。论文里用教师轨迹的弯曲程度去衡量风险,某种意义上是在给机器人装一个类似的直觉系统,虽然这个直觉是靠数据统计出来的,不是天生的。
还有一点值得琢磨。论文特别强调,他们用的教师轨迹目标是"冻结"的,不随学生训练过程变化。这个设计选择表面上很简单,但它其实点出了一个更普遍的教训:任何用自身输出来监督自身训练的系统,都天然带着一种潜在的不稳定性,除非有某种外部的、不动的参照点来锚定它。这个道理其实不只适用于机器人模型的训练,很多需要自我迭代改进的系统,可能都需要类似的"锚"。
论文里没有细说的一点是,风险预测和收益预测用的是同一个轻量调度器,那如果未来场景变得极端复杂,比如需要处理软体物体或者液体这种连教师模型本身都判断不准的情况,这套风险评估会不会也跟着失灵?这个问题论文没有展开讨论,但可能是接下来值得追问的方向。
Q&A
Q1:AnyStep WAM是什么?
A:AnyStep WAM是一种能让机器人操作模型根据动作难度自动调整去噪步数的技术框架,简单动作少走几步、精细动作多走几步,在RoboTwin仿真平台上能减少49.8%到85.28%的去噪步数,同时保持任务成功率基本不变。
Q2:AnyStep WAM为什么用教师轨迹而不是学生自己的输出做训练目标?
A:因为用学生自身输出算导数当训练目标,会导致目标随学生状态不断变化,训练时梯度容易剧烈波动,论文实验显示旧方法45.9%的训练步梯度超过裁剪阈值。用冻结不变的教师轨迹作参照,目标稳定,训练更平稳。
Q3:AnyStep WAM在真实机器人上效果如何?
A:在Unitree G1D双臂机器人的六个真实任务上,平均任务成功率提升到69.17%到71.67%,去噪步数减少59.4%到85.84%,单次推理速度提升1.67到6.14倍。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.