flow-matching机器人策略的denoising漏洞

你可能听说过这样一个说法:给自动驾驶的路牌贴一张精心设计的贴纸,就能让AI把限速60看成限速120。这类"对抗贴纸攻击"这些年已经不新鲜了。但如果我告诉你,同样的招数用在最新一代机器人控制模型上,效果好到近乎离谱,你会不会觉得意外?

这篇论文讲的就是这么一件事。研究团队在机器人的手腕摄像头前贴了一张边长只有32像素的小贴纸,大概占整个画面的2%,物理尺寸相当于2到3厘米见方。结果呢,原本能完成的抓取任务,几乎全部失败了。不是偶尔失手,是在四个测试场景里,成功率从95%到98%直接崩到了个位数甚至零。

更让人意外的是攻击对象的选择。业内一直认为,像π0这样通过"流匹配"(flow matching)生成动作的机器人模型,天生比老一代自回归模型更抗打。有一份权威评测甚至专门指出,π0这类模型面对常规对抗扰动时表现得相当稳健,不像OpenVLA那样一戳就倒。这篇论文的作者们没有接受这个结论,他们怀疑问题出在"怎么攻击"上,而不是模型真的强。事实证明,他们是对的。

先搞懂:机器人是怎么"想"出一个动作的

要理解这个攻击为什么有效,得先明白π0这类模型是怎么工作的。

**VLA模型**:Vision-Language-Action模型的简称,就是那种同时接收摄像头画面和文字指令,直接输出机械臂动作指令的AI系统。你告诉它"把黑色的碗放到盘子里",它看着画面,直接算出手臂该往哪个方向移动、夹爪该不该闭合。

早期的VLA模型,比如OpenVLA,处理动作的方式跟处理语言很像:把连续的动作切成一个个离散的"词",像写句子一样一个个蹦出来。这种方式简单直接,但天生有个毛病,机械臂的动作本来是连续平滑的物理量,你偏要切成离散片段去预测,精度和流畅度都会打折扣。

π0走了另一条路,叫**flow matching(流匹配)**:一种生成技术,核心思路是从一团随机噪声出发,通过反复迭代,一步步把噪声"整理"成一个有意义的结果,这里的结果就是机械臂动作。

具体是怎么整理的?模型内部学了一个叫**velocity field(速度场)**的东西,你可以理解成一个"方向指南针":在噪声演化的每一步,这个指南针都告诉系统"现在应该往哪个方向调整"。系统从纯噪声开始,按这个指南针的指示,走上10步(论文里叫K=10个欧拉步),每一步都让噪声更接近最终想要的那个真实动作,走完10步,噪声就变成了一个具体的机械臂指令:伸手多少度、夹爪张开还是闭合。

这套机制乍一看很优雅,但也埋下了一个隐患。整个过程是环环相扣的,第一步算出来的结果会被第二步接着用,第二步的结果又被第三步接着用,一直传递到第十步。如果第一步就被人做了手脚,这个错误会不会被后面的九步一路放大?

这正是攻击者盯上的地方。

攻击面:为什么不直接改动作,而是改"过程"

在这篇论文之前,已经有人尝试攻击VLA模型了,但方式都比较"表面"。

一种做法叫**UADA**(Universal Adversarial patch based Denoising Attack,一种在最终动作层面下手的通用对抗贴纸攻击):优化一个贴纸,让模型最终吐出来的动作和正常情况差得越远越好。这种攻击盯着的是流程的"终点",也就是那10步走完之后的最终输出。

另一种叫**EDPA**(Embedding-space Disruption Patch Attack,攻击视觉编码器嵌入空间的模型无关攻击):不管最终动作,而是去扰乱图像被编码成的那一串数字向量,让模型"看错"画面内容。这种攻击盯着的是流程的"起点",也就是图像刚被编码成特征的那一刻。

这两种攻击都有效,但效果有限。论文测出来,UADA在32像素贴纸下的平均攻击成功率只有13.2%,EDPA甚至在32像素下完全失效,得把贴纸放大到64像素才勉强达到25.3%。

问题出在哪?这两种攻击都没管中间那10步到底发生了什么。它们要么盯着最开始的图像特征,要么盯着最后吐出来的动作,唯独漏掉了中间这条"流水线"本身。这就好比你想让一条生产线出故障,你不去研究流水线内部哪个工位最脆弱,反而只在原材料入口和成品出口这两头做手脚,效果自然打折扣。

这篇论文的思路是,直接对着这条"流水线"的核心部件,也就是那个速度场,下手。他们把攻击目标定义成:让打了贴纸之后的速度场,和没打贴纸时的速度场,差异最大化。这个思路和一篇叫**FlowHijack**的工作(一种训练时的后门攻击方法)不谋而合,那篇论文也发现了"越早注入错误,被放大得越厉害"这个规律。但FlowHijack需要重新训练模型,往训练数据里下毒,让模型学会认一个触发图案。这是一种"改造工厂"级别的攻击,需要拿到模型的训练权限,现实里很难实现。

这篇论文要做的,是在完全不碰模型参数、只在测试时贴一张贴纸的前提下,复现同样的破坏力。这是一个从"重新培训工人"到"往生产线扔一颗石子"的转变,代价小了很多,威胁却一点没减。

核心发现:攻击第一步,比攻击一大片步骤更狠

论文里最反直觉的一个结果,出现在他们测试"到底该攻击哪几步"的时候。

按照常理推断,既然错误会被逐步放大,那攻击越早、覆盖的步数越多,效果应该越好才对。研究团队一开始也是这么想的,先做了个单步测试:只攻击第k步,看看效果怎么样。

结果和预期一致,攻击第0步到第5步(也就是最靠近噪声的那几步)效果拉满,成功率接近100%;攻击第6步以后的步骤,效果直接崩到10%到23%。这说明脆弱性确实集中在denoising过程的早期。

**这条规律的分界点,恰好卡在第5步附近,训练时观察到的速度场偏差曲线和实际任务失败率曲线,在这一点上完全吻合。**

但接下来的实验才是真正让人意外的地方。既然攻击早期几步都有效,那如果同时攻击前3步、前5步会不会更强?研究团队做了个"first-M"实验,同时攻击最早的M个步骤,把每一步的偏差加起来当作总的攻击目标。

数据摆出来的时候,结论反过来了:只攻击第一步(M=1),平均成功率99.8%;扩大到攻击前3步,成功率反而掉到77.5%;攻击前5步,也只有79.7%。攻击范围扩大了,效果却变差了。

这就是论文标题里"less-is-more"效应的来源。

**攻击最早的第一步,比攻击一整片早期步骤都要强,也更省算力。**

为什么会这样?研究团队通过计算不同步骤对应的梯度方向找到了答案,这里要引入一个关键概念。

**梯度冲突**:优化贴纸的时候,每一步denoising对应一个"梯度",可以理解成"往哪个方向调整贴纸能让攻击更强"的建议。如果多个步骤给出的建议方向互相矛盾,加在一起的时候就会互相抵消,最终合力反而变弱。

论文里做了个梯度相似度的可视化,第一步的梯度方向和第九步(最后一步)的梯度方向,余弦相似度是负的,大约-0.35,意味着这两个方向几乎是相反的。步骤之间隔得越远,这种"意见不合"就越严重。

这里可以做一个具体的类比。想象你在指挥一群人推一辆陷在泥里的车,如果所有人都朝同一个方向使劲,车能被推出来;但如果有人朝前推、有人朝斜后方推,力量互相抵消,车反而纹丝不动,甚至比只有一个人推的时候动得还慢。如果不做这个梯度冲突的分析,你可能会一直往攻击目标里加更多步骤,觉得"多多益善",结果做出来的贴纸反而比只优化一步的贴纸更弱,还浪费了好几倍的计算时间。这正是论文用一张"梯度存活率"图表达的东西:随着攻击的窗口从1步扩大到10步,梯度合力的存活比例从100%一路跌到45%,几乎腰斩。

这个结论还有一层更深的意味,它和训练时的后门攻击规律正好相反。FlowHijack那篇论文里提到,如果后门攻击只用很窄的早期窗口去训练,反而学不出稳定的恶意行为,必须用一个较宽的早期窗口才能让模型稳定地记住这个后门。同样是"攻击早期",训练时的后门攻击需要覆盖面广,测试时的输入扰动却需要极度聚焦。这个反差的根源在于,训练时是在雕刻模型内部的权重,本质上是在"教"一个新行为,需要足够的信号量才能学会;而测试时贴纸攻击不改权重,只是找一个最优的输入扰动,这时候贪多反而会自己打自己。

具体怎么攻击:只需要一步的前向和反向传播

搞清楚"攻第一步最强"这个道理之后,攻击的实现方式反而变得异常简单。

论文用的是**PGD(Projected Gradient Descent,投影梯度下降)**:一种常见的对抗攻击优化算法,简单说就是反复微调贴纸的像素值,每次都朝着让攻击效果变强的方向挪一点,挪完之后再把像素值限制在合法范围(0到1之间)内,如此循环很多轮。

具体到DRIFT这个攻击(论文给这个方法起的名字,全称是Denoising Redirection via Input perturbation of the Flow-matching Trajectory,意思是通过扰动输入来让流匹配的去噪轨迹偏离原本方向),优化目标就是最大化第0步时,打了贴纸和没打贴纸这两种情况下速度场的差异。

因为只盯着第一步,每次迭代只需要跑一次模型的前向传播和反向传播,不需要把整个denoising过程(10步)都走一遍再回传梯度。论文里提到,这让优化成本直接降低到原来的1/K,K是denoising的总步数。用一块24GB显存的3090显卡,跑500轮迭代就能训出一张贴纸。

这个效率提升不是锦上添花的小优化,而是这个攻击能不能落地的关键。如果攻击目标是全部10步,每次迭代反向传播的计算量会大十倍,训练一张贴纸可能要多花好几个小时。攻击者如果想快速试验不同的贴纸大小、不同的初始化方式,成本会直线上升。反过来,如果攻击方法本身就更弱,那速度快也没用。这里巧妙的地方在于,攻击第一步这个选择同时满足了"更快"和"更强"两个条件,这在工程实践里其实很少见,通常是要在效果和成本之间做取舍的。

实测效果:几乎打穿所有能做的任务

论文在LIBERO这个机器人任务测试集上做了系统评测,这个测试集分四个子集,分别是Spatial(考验空间关系判断)、Goal(考验目标理解)、Object(考验物体识别)、Long(考验长序列任务),每个子集10个任务,每个任务跑10次。

贴纸只在Spatial这个子集上训练,然后原封不动地拿去测另外三个子集,也就是说Goal、Object、Long对贴纸来说是完全没见过的新场景。

结果如下表所示:

| 攻击方法 | Spatial成功率 | Goal成功率 | Object成功率 | Long成功率 | 平均 |

|---|---|---|---|---|---|

| 随机贴纸(未优化) | 0.7% | 5.2% | 0.3% | 8.8% | 3.7% |

| UADA(动作空间攻击) | 11.6% | 12.0% | 7.5% | 21.5% | 13.2% |

| EDPA(嵌入空间攻击,64px) | 23.1% | 28.2% | 18.7% | 31.0% | 25.3% |

| **DRIFT(本文方法)** | **100.0%** | **99.7%** | **100.0%** | **99.6%** | **99.8%** |

数字摆在这里,对比一目了然。一张32像素的贴纸,只训练在一个场景上,就能在四个完全不同的任务集上把成功率干到99.8%的平均水平。而且论文特意提到,π0在没贴纸的情况下清洁成功率是95%到98%,这意味着DRIFT几乎摧毁了模型原本能完成的每一个任务。

这个攻击对π0的继任者π0.5也有效,虽然π0.5看起来更抗打一些,需要把贴纸放大到64像素才能达到类似的破坏力(平均99.3%)。

失败的样子:机器人假装抓住了空气

光看成功率数字还不够直观,论文还做了一个细致的轨迹分析,揭示了被攻击的机器人到底是怎么"失控"的。

他们追踪了机械臂末端执行器(也就是夹爪那个点)的运动轨迹,对比正常情况和贴了贴纸的情况。正常情况下,机械臂会走一条直接的路线,接近目标物体,靠近之后再闭合夹爪,抓取,完成任务。

贴了贴纸之后,情况变得很诡异。**机械臂几乎立刻就把夹爪闭合了,在头7步控制指令之内就完成了闭合动作,平均只用了3.8步,远远早于正常情况下平均46步才闭合的节奏。**而且机械臂并没有停下来不动,它还在移动,平均移动距离甚至超过了正常轨迹,但它从来没有真正靠近过目标物体,离物体最近的时候也有18.6厘米的距离。

论文管这个现象叫"phantom grasp",翻译过来是"幻影抓取",机械臂夹着一把空气,煞有介事地在场景里移动,却完全没有执行"靠近、抓取"这套本该有的动作逻辑。

这个现象其实很像人在极度慌乱时会做出的动作,手已经做出了抓东西的姿势,但眼睛根本没看清要抓的是什么、在哪里,动作和感知完全脱节了。研究团队进一步用注意力可视化验证了这个猜测,他们提取了模型内部对"bowl"(碗)这个词的注意力分布,看它在图像的256个区域里分配了多少关注度。正常情况下,贴纸所在的那块区域(占图像面积3.5%)只拿到了1.7%的注意力,低于按面积算的均摊份额,说明模型确实没怎么关注那里。但贴了贴纸之后,这块区域一下子吸走了28%到33%的注意力,相当于面积占比的8到9倍。

模型的"眼睛"被贴纸死死勾住了,根本没工夫去看真正的目标物体在哪里,这解释了为什么夹爪会提前闭合、机械臂会盲目移动。这不是精心设计的"定向操控",论文强调这是一种untargeted(无目标)攻击,不是让机器人去抓一个特定的错误物体,而是单纯让它"失能",这符合论文设定的安全威胁场景:攻击者不需要精确操控机器人做什么,只需要让它可靠地干不成活。

扩展验证:加密强度、隐蔽性、跨模型迁移

论文还做了几组补充实验,进一步验证这个攻击的边界条件。

第一组测的是**扰动预算**,也就是限制贴纸像素值相对初始图案能改变多少。测试发现,成功率随着这个预算上升,呈现出一种断崖式的"相变",而不是平滑过渡。预算限制在0.05以下时,成功率基本为零(低于8.2%),一旦超过0.1这个门槛,成功率立刻跳到97%以上。这说明贴纸想要撬动这个denoising过程的第一步,需要跨过一个最低强度门槛,一旦跨过,攻击效果几乎是全有或全无的开关式反应。

第二组测的是隐蔽性,研究团队试了把贴纸限制成灰度图(不带彩色),发现灰度贴纸同样能打到100%成功率,只是需要大约两倍于彩色贴纸的扰动预算。灰度贴纸的好处是能更好地融入机械爪本身偏暗的颜色,看起来更不显眼,不容易被人一眼发现异常。

第三组测的是跨模型迁移,也就是在π0上训练出来的贴纸,能不能直接拿去攻击π0.5,反过来也测了一遍。结果发现迁移效果都比较有限,从π0迁移到π0.5,即使放大到64像素也只有8.9%的成功率;反过来从π0.5迁移到π0则有24.7%。这说明脆弱性这个特点是两个模型共享的,但具体针对哪个模型雕刻出来的贴纸细节是高度定制化的,不能简单地一套贴纸打天下,攻击者仍然需要拿到目标模型的梯度信息才能真正生效。这也从侧面印证了论文设定的威胁模型的合理性,攻击需要白盒访问权限,不是随便拿一张网上下载的贴纸就能通用。

一个初步的防御尝试:JPEG压缩

论文最后也没忘记探讨防御手段,试了一个几乎不需要额外训练成本的办法,也就是**JPEG压缩**:一种常见的图像有损压缩格式,通过丢弃一些人眼不敏感的图像细节来缩小文件体积。

思路很直观,贴纸之所以能生效,靠的是像素级别的精细扰动,如果把图像先做一次有损压缩,那些精心计算出来的细微扰动可能就被压缩过程顺带抹掉了。

实验测了不同压缩质量(Q值从95降到10)下的攻击成功率变化。结果显示,压缩质量越低(压缩越狠),攻击成功率下降越明显。当压缩质量降到50以下时,Spatial、Goal、Object这三个子集上的攻击成功率基本被压到接近零。

但Long这个长序列任务子集是个例外,即便压缩强度拉满(Q=10),攻击成功率依然维持在16%到21%左右,是其他三个子集同等压缩强度下的大约4倍。

这提示一个不太让人放心的现实。JPEG压缩这种简单防御,对短平快的任务可能管用,但面对需要连续执行很多步骤的长序列任务,防御效果会打折扣。这可能是因为长任务里贴纸扰动能反复起作用的机会更多,压缩掉一部分信息之后,剩下的信息量依然足够触发局部性的失误累积。这也是论文比较诚实的一点,没有把JPEG压缩包装成万能解药,而是明确提醒这还需要进一步研究。

写在后面

读完这篇论文,最触动我的其实不是攻击成功率有多高,而是那个"less-is-more"的发现背后透出的思维方式。

大部分人做安全攻防研究,直觉都是"覆盖面越广越保险",这篇论文用扎实的梯度分析告诉你,有时候更聚焦反而更强,多做未必是好事。这个道理其实超越了机器人安全这个具体领域,很多工程决策里都藏着类似的陷阱:你以为多加几个特征、多跑几轮训练、多堆一些正则项就能更稳,但如果这些操作之间存在方向性冲突,加法反而变成了减法。

另一个让我反复琢磨的细节是那个"phantom grasp"现象。机器人没有被诱导去做一个错误但完整的动作,而是被打断在了"意图形成"和"意图执行"之间的某个环节,夹爪闭合了,但抓取这件事根本没发生。这种失败模式比"抓错东西"更让人不安,因为它意味着系统连自己"失败了"这件事都可能感知不到,如果这套系统装在真实的工业机械臂或者家庭服务机器人上,这种静默的功能性失效比明显的错误动作更难被及时发现。

这篇论文没有解决的问题也很明显:它证明了漏洞存在,也给出了一个初步的、效果参差的防御方案,但对于flow-matching这类模型该怎么从架构设计层面堵上这个denoising早期步骤的漏洞,还完全是空白。如果第一步denoising天生就是整个链条里最脆弱的环节,那是不是应该有专门针对这一步的鲁棒性训练?这个问题留给读者,也留给这个领域接下来的研究者。

Q&A

Q1:DRIFT攻击是什么?

A:DRIFT是一种针对flow-matching机器人策略(如π0、π0.5)的测试时对抗贴纸攻击,通过在机械臂手腕摄像头视野内贴一张32像素的小贴纸,专门干扰denoising去噪过程的第一步,导致机器人任务几乎全部失败,成功率接近100%。

Q2:为什么只攻击第一个denoising步骤反而比攻击多个步骤更有效?

A:因为多个步骤的攻击梯度方向存在冲突,第一步的梯度和最后一步的梯度余弦相似度约为-0.35,方向几乎相反,加在一起会互相抵消,导致攻击窗口越宽,实际攻击成功率反而越低,从单步的99.8%降到攻击前5步的79.7%。

Q3:这种对抗贴纸攻击有没有防御办法?

A:论文测试了JPEG压缩这种简单防御手段,发现在压缩质量降到50以下时能把大部分任务的攻击成功率压到接近零,但对长序列任务(Long子集)效果有限,即使最强压缩下成功率仍有16%到21%,说明这还不是一个可靠的通用防御方案。

作者声明:作品含AI生成内容
举报/反馈
分享到: 微博 QQ 空间
对本文内容有合作意向?
我们将在 1 个工作日内与您联系
留言咨询