EN

Robot-Whisper  ·  VLA  ·  LIBERO-10

神经元看到了 token 看不到的状态,
具身场景下神经元的异常警告!

手还在动,事情已经不对了 —— 最早知道的,不是画面,也不是动作,是模型深处的神经元。我们听懂了这声无言的警告,并赶在结局写定之前,改写了它。

pattern

向内探寻,向外进化。 Seek within. Evolve beyond.

缘起

内部状态知道的,比 token 说出来的多。

先讲一件推理大模型上的旧事:我们做过一个叫 NAD 的探针,在模型给出的多条候选答案之间,不读一个字,光凭神经元的活动就能挑出更可能对的那条。把握与犹豫没有写进 token,但内部状态里有。同一个思想换到具身智能的场景下:VLA 大模型的内部,会不会也有类似的信号呢?

✓ 成功 —— 两只壶先后上炉38 步 · 18.6 s
✗ 失败 —— 悬在第二只壶上方52 步 · 26.0 s · 超时
图 1同一个模拟器状态出发,唯一的区别是扩散头的一条采样噪声:左边两只壶先后上炉、38 步完成;右边放好第一只之后,悬在第二只上方,拖满 52 步超时。分开它们的那件事,从未出现在任何 token 里。
01

一台会做饭的机器人

这台机器人是 π0 型 VLA:看一眼画面,吐出 10 帧关节动作,每秒二十个。任务来自 LIBERO-10 SCENE8 —— 把两只摩卡壶先后放上炉架。

02

它也会「想错」

不是答错题 —— 是手臂悬在半空一格不动,或把壶拿起又放下、在两壶之间来回打转,直到 52 步超时。

去神经元中找

在它的骨干网络里,每步、每层都会点亮一小簇稀疏的神经元激活。如果 NAD 的思想成立,冻结的把握感也该写在这份点名册上。

物理世界

还在动,却把事做岔了。

固定同一个初始状态,只让采样噪声不同,跑 32 条:14 条成功,18 条把同样的动作重复到超时。有的悬停不动,有的原地打转 —— 两副面孔,同一件事:困在 trap 里。而动作流上,什么都看不出来。

32 条同状态 rollout 的累计变化量曲线:蓝色成功轨迹一路攀升到终点,橙色 trap 轨迹十几厘米后拉平不再增长。
图 2物理 trap 说明:把「壶到炉架的距离」每一步的变化累加起来 —— 世界还在被改变,曲线就还在涨。前半段蓝橙走的是同一条路:放好第一只壶(约 +13 cm),然后一起歇脚。分岔在第 30 步上下 —— 蓝 = 成功,重新启动、冲到圆点处完成;橙 = trap,从那次歇脚起再也没涨过一厘米:动作还在继续,世界再没被改变过。
01

动作流照常输出

卡住的每一步,模型照样吐出幅值正常的 10 帧动作 —— 从动作序列上分不出「在干活」和「在空转」。

02

判决在终点

成功要等布尔判定在最后一刻翻真;而「长」既可能是慢成功,也可能是快失败 —— 长度本身两解。

要看见它,得去别处

悬停也好、打转也好,动作流上读不出分别 —— trap 不写在动作里。下一节,我们去神经元里找。

神经元

思考在流动,trap 是凝固。

每个控制步,模型都会点亮一小簇神经元 —— 深层的四层、每层 11 个动作 token,合在一起,构成模型此刻思考的形状,我们称之为 pattern。最初我们试图从「谁被点亮」里读出异常,但身份给不出答案:它只是场景的指纹,换一个初始状态便整体重排。有意义的是它的动力学 —— 顺利时,pattern 随世界一步步更迭,思路在流动;受困时,更迭戛然而止,同一组神经元被反复点亮,思考凝固在同一个瞬间。信号不在内容里,在流动里。

成功与 trap 两条 rollout 的神经元激活热力图对比,浅层 L4 与深层 L14;trap 的深层在 t30 之后拉出水平条纹。
图 3同一初始状态的一对样本:左 = 成功,右 = trap;上 = 浅层 L4,下 = 深层 L14。金线(t30)之后,右下角拉出水平条纹 —— 同样几行神经元,一亮亮到超时。trap 就这样写在神经元内部的信息里。

警示器

把凝固,做成一只警示器。

先说人话:把每一步点亮的那簇神经元,看成高维空间里的一个点。一条 rollout 走下来,这些点连成一条轨迹。机器人在干活时,轨迹一直往前走;一旦陷入 trap,轨迹就停在原地不动了 —— 哪怕手臂还在挥。所以警示器不需要看懂任务,只要给这条轨迹装一只测速计:速度掉到接近零,就说明它已经停了。

  1. ds

    这一步走了多远

    比较相邻两步点亮的神经元:重合得越多,说明这一步几乎没挪动。用「1 − 交集/并集」量出这段位移,平均成一个数,记作 ds —— 就是轨迹的瞬时速度。它不关心是哪些神经元在亮,只关心换了多少

  2. r(t)

    拿它自己当尺子

    每条轨迹的巡航速度天生不同,没有统一刻度可比。所以用它自己开头 8 步的平均速度当作 1,再拿最近 4 步的平均速度去除 —— 得到的比值 r(t) 就是「现在比一开始慢了多少」。r(t) 掉到 1 以下,就是正在减速;一路往下掉,就是快停住了。

    r(t) = W−1Σs = t−W+1…t dsW0−1Σs = 1…W₀ ds, W = 4, W0 = 8
  3. θ·K

    什么时候拉响

    连续 3 个控制步 r(t) < 0.95(即比自己起步时慢了 5% 以上),就判定它已经停住,报警。不设豁免、不看情境;这四个常数在救援实验之前就冻结,换数据也不重调。

这只警示器不认识任务,只认得轨迹 —— 它自始至终只问一句:这条轨迹,还在动吗?我们做一个比喻,就像是给模型贴了一台心电监护:心跳一停,它就出声。

图 4352 条 rollout 的速度图(横轴 r(t) = 当前有多快,纵轴 Δr = 还在加速还是减速):成功的稳在巡航区,打转的绕圈,停滞的一路俯冲、最后停死在原地,金环在报警处闪现。样例轨道为示意;背景散点与两个区域为实测。点按可暂停。蓝 = 成功终态,绕着巡航区;实心橙 = 停滞类,塌在左侧 r≈0.45 处 —— 停住不动了;空心橙 = 打转类 —— 轨道是极限环,一直在动,终态混进巡航区,也正是最难分的一族。金点 = 报警时刻,全在坠落沿途。

结果

检测出八成的失败。

在线测试,跨不同任务、不同初始状态,共 864 条 rollout。警示器不看画面、不看动作、不看任务标签 —— 只盯 pattern。

81.2%在线判对 · 864 条 rollout
+19.7 pts高出多数类基线(61.5%)
80%失败召回 · 误报 17%
成功
失败
图 5检测实况:左 = 同一初始状态那对 rollout 的真实 pattern 曲线随播放生长 —— 青 = 成功,稳在 θ 上方、38 步完成;红 = 失败,连续三步跌破 θ,q34 报警(金环),随后沉到超时。右 = 两段同步画面。进度条可拖。

两个区之间,是缓坡,不是悬崖

巡航区和停滞点之间,隔着一段宽阔的缓坡:θ 画在坡上哪儿,误报率都平滑变化,没有断崖。这套常数挪一挪,结论不塌。

被点名的,都擦过边缘

误报几乎全来自慢成功 —— 那些减速、擦着停滞点的边缘、又自己爬回巡航区的轨道。警示器在它们最慢的那几步点名,并不冤枉:那一刻,它们确实正滑向 trap。所以警报读作「正在下坠」,而不是「必然坠毁」—— 急救实验用的正是这个读法。

352 条留档分支的判决矩阵:失败 235 条中报警抓住 184、漏掉 51;成功 117 条中安静放行 98、误报 19。
图 6判决矩阵(352 条留档分支):失败 235 条,报警抓住 184、漏掉 51;成功 117 条,安静放行 98、误伤 19
报警时刻直方图:集中在 q18 到 q36,中位 q28;橙色为失败上的报警,金色为慢成功上的误报。
图 7报警落点集中在 q18–q36,中位 q28 —— 距超时还有一半路程,来得及干预。
安静的成功与被误报的成功的时长分布:中位 37 对 41 个控制步。
图 8警报点名的是「慢」:被误报的成功(金)中位 41 步才完成,安静的成功(蓝)中位 37 步。
误报率随阈值的变化曲线:在 864 条合并数据上平滑上升,工作点附近没有突变。
图 9误报率随 θ 平滑上升(864 条合并)—— 工作点附近没有悬崖,常数不在刀尖上。

空转,就是判决

卡住 → 观测不变 → 模型输入不变 → 神经元激活不变 —— 这只报警器听的,是「世界停了」在神经元里的回声。但对一台本该把壶放上炉架的机器人,世界不该停:每一步它都在输出幅值正常的动作,而世界纹丝不动 —— 说明动作本身就是不合理的。「世界停了」不是外界的天气,是模型自己造出的停滞点:模型 → 动作 → 世界 → 观测 → 模型,整个环锁死在原地。报警器听到的,正是这个环空转的声音 —— 也因此它可靠、便宜、跨场景:判决不需要读懂任务,只需要听出空转。

864 条 rollout · 4 · 稀疏神经元激活 layers 12–15 × 11 action tokens · 第 9 去噪步 · 1 控制步 = 10 帧 = 0.5 s · LIBERO-10 SCENE8

急救!!

报警那一步,做一下干预。

检测是离线的裁判,救援是在线的赌:让冻结的检测器盯一条直播 rollout,q32 拉响 → 冻结状态 → 只加一些干扰,比如大幅度改换采样噪声 → 继续。其余一切不动。一脚把轨迹踢出停滞点的引力范围,看它能不能自己爬回巡航。

原噪声
重采样待报警 …
图 10同一场急救的实时回放。左 = r(t) 逐步生长:墨色主干跌向阈值,金环 = q32 报警;橙 = 原噪声的未来,沉到 52 步失败;青 = 重采样分支,q34 回到阈上、8 步完成 —— 报警后的两条分支均为实测(青线自 q33 起为服务器激活日志重算),报警前走势为示意。右 = 两个未来的同步画面,重采样格在报警前处于待命。进度条可拖。

总览

50 秒,总览整个故事

浏览器实时绘制的无声矢量短片 —— 曲线为示意,数字均为实测。另有单页版

总结

常数、页面与引用

一只冻结的报警器,一次当场的救回。

检测与救援脚本:两段采集脚本 —— 四个常数先于救援运行冻结

引用: 若你使用或讨论这项工作,请引用本页;本页开篇提到的 NAD 探针请一并引用 Chen et al., 2025。下方 BibTeX 可一键复制。

Robot-Whisper QQ 交流群二维码,群号 1107443823
QQ 群 · 1107443823
Robot-Whisper 微信交流群二维码
微信群 · robot-whisper 交流群1二维码定期更新;若已过期,请加 QQ 群或来信
@misc{cckfdu2026robotwhisper,
  title  = {Robot-Whisper: Neurons See the State the Tokens Don't —
            An Embodied Anomaly Alarm Read from Neuron Activations},
  author = {Chen, Kang},
  year   = {2026},
  howpublished = {\url{https://cckfdu.com/demo/robot-whisper/}},
  note   = {Technical demo. Code: https://github.com/Cck123123/Robot-Whisper},
}

@misc{chen2025nad,
  title  = {Do LLMs Signal When They're Right? Evidence from Neuron Agreement},
  author = {Chen, Kang and Wang, Yaoning and Xiong, Kai and Feng, Zhuoka and
            Sun, Wenhe and Chen, Haotian and Cao, Yixin},
  year   = {2025},
  eprint = {2510.26277},
  archivePrefix = {arXiv},
  primaryClass = {cs.CL},
  note   = {Neuron Agreement Decoding (NAD). ICML 2026 (Spotlight)},
  url    = {https://arxiv.org/abs/2510.26277},
}
detector   neuron-set overlap distance, layers 12–15 × 11 action tokens, denoise 9
r(t)       mean(last W=4) / mean(own first W0=8)
alarm      K=3 consecutive control steps with r(t) < θ=0.95
frozen     constants fixed before the rescue run; never tuned on it
corpus     864 rollouts · one frozen set of constants
result     81.2% correct online   (majority baseline 61.5%)
alarms     archived batch: 203 = 184 hits + 19 false alarms · q18–q36, median q28
recall     80% of failures · false-alarm 17%
rescue     alarm q32 → resample noise → 3/8 succeed · 8 vs 52 steps · 26.0 s → 3.9 s
limits     other init 0/8 · random-step also 3/8 · magnitude picks no winner (n=1)

向内探寻,向外进化。Seek within. Evolve beyond.