Cosmos3 · 抓错目标的诊断实验

说“抓牛奶”,为什么抓了奶酪盒?

我们在找原因,还没有找到稳定有效的修复方案。

问题是什么?

桌上有牛奶和奶酪盒。我们说:“抓牛奶。”

它有时抓对;但换一种摆放方式,它就去抓奶酪盒了。

我们想知道:为什么它没有按指定的物体去抓?

目前怎样查原因?

  1. 找一次它会抓错的情况。
  2. 保持起始画面和指令相同。
  3. 只改变模型内部的一处计算,再让机械臂执行。
  4. 看它是否从抓奶酪改成抓牛奶。

这样,才能把抓取结果的变化与这处内部计算联系起来。

这次实际改了什么?

模型内部既处理眼前画面,也计算未来画面。

我们的怀疑是:计算未来画面那部分传来的信息,可能影响了它选目标。

所以,暂时屏蔽这部分向当前画面部分传递信息的一组连接,再看它抓谁。

屏蔽未来画面部分向当前画面部分传递信息的连接右边是计算未来画面的部分,左边是处理眼前画面的部分。原本从右到左的信息传递连接用红色虚线和叉表示暂时屏蔽。这里只画本次改变的一组连接。处理眼前画面的部分计算未来画面的部分暂时屏蔽信息原本从右向左传递
只画本次改动的连接;其他连接没有全部展开。

结果是什么?

有些情况改抓牛奶了,另一些仍抓错。

找到了一处会影响抓取行为的连接,但还不知道它为什么导致抓错,也没有把问题稳定修好。我们还在诊断阶段。

屏蔽后行为发生变化是已观察到的结果;“未来画面的信息影响目标选择”仍是待检验的解释。

查看其他实验、执行视频与技术细节

下面保留已有研究记录,包含另一次“末层换文字”实验;它与上面屏蔽连接的实验不同。

核对完整单层图、真实数组和计算来源
一层Transformer:Attention与MLP的更新量分别加回原状态 输入向量x进入Attention,Attention更新量与保留的x相加得到r。r进入MLP,MLP更新量与保留的r相加,得到下一层输入。两条侧线表示保留已有状态的残差连接。 本层输入 x其中一项:−0.109375 保留原值 x Attention:取信息算出的更新量−0.515625 +第一次相加:−0.625000 保留 r MLP:内部重组算出的更新量+0.083008 +第二次相加 本层输出 → 下一层其中一项:−0.542969
侧线表示“把已有状态保留下来再相加”,也叫残差连接。图只跟踪当前画面的一个位置。

真实数字,沿着同一项看

来自已有原生运行的第1次去噪、第1层:当前画面第1个位置,4096个数中的第4项。这是计算示例,不是最新第36层干预的数值。

计算到哪里实际保存值
进入本层 x−0.109375
Attention更新量−0.515625
第一次相加 r−0.625000
MLP更新量+0.083008
第二次相加:本层输出−0.542969

Attention和MLP使用整串向量计算,表里只抽出同一项。两次加法已用保存数组逐项核验;末行包含模型内部BF16精度的舍入。

照片没变,网络对照片的内部表示变了。这一个数字不是“牛奶概率”,也不是距离。它只是整个表示中的一个分量。

同一层各位置读取的是进入本层时的状态,再分别更新。动作位置不会先等本层画面位置更新完,再读取它的新状态;更新后的画面信息可在下一层被读取。

查看这组数字的来源与精确值

已有抓包:V195_A195_native / t00-L00.pt。取 propagation 中各张量的 [0, 3];每张量形状为 50 × 4096。真实捕获与残差核验代码。

原值 −0.109375;Attention更新量 −0.515625;第一次相加 −0.625;MLP更新量 +0.0830078125;本层输出 −0.54296875。实际关系:r = BF16(x + Attention更新量),输出 = BF16(r + MLP更新量)。MLP输入还经过归一化,简图中略去。

这里只读取已有数组,没有重新跑模型、训练或机械臂。最新实验是在第36层的动作位置替换文字读取,再比较正常与固定MLP响应,结果见下方内部实验。

1. 猜了什么?怎样试?

猜想是:末层读到另一目标后,后面的MLP会不会把变化抵消,让它坚持原来的动作?MLP就是这一层注意力之后的另一段计算。

先选同一初态下确实能“说牛奶抓牛奶、说奶酪抓奶酪”的配对案例。牛奶已移15厘米;使用 milk box 和 cream cheese 两种同长度名称,未来噪声198、动作噪声195。它们提供两份真实的文字状态。

前35层照常计算
视觉/动作状态保留
→第36层:让16个动作位置
读取另一指令的文字数组
→MLP照常更新
或保持同输入原输出
→输出真实动作
交给MuJoCo

“固定MLP”指的是:保持它在这次相同输入、未换文字情况下的输出,而不是拿旧轨迹的数组硬塞进去。这样检验它对文字替换的响应是不是关键。

查看这批实际输入与干预范围
本批固定初态的两路真实模型输入图像
实际两路视觉输入。相同机器人初态、图像和噪声配对;首轮只替换零编号L35的文字后缀K/V,UND第48–121行,供16个动作位置读取。其他位置的输出和其他层保持原计算。

两句指令分别是 pick up the milk box and place it in the basket 和 pick up the cream cheese and place it in the basket,各11个prompt token。本轮不是移入完整“牛奶概念”,而是替换这一接口的真实文字数组。

首轮30次去噪全程干预,生成16步动作;之后7轮按原指令正常推理,每条共执行128步。因此,结果只检验这段首轮、末层局部干预的充分性。随机对照只匹配投影W之前的实际BF16变化强度,投影后强度未完全相同。

2. 机械臂实际抓谁?

两个方向都做了:牛奶指令读奶酪文字,奶酪指令读牛奶文字。各加自身替换、固定MLP和随机方向对照,8条全部执行,没有挑视频。

内部怎样改原指令:牛奶盒原指令:奶酪盒
自身替换对照牛奶 · 64–68奶酪盒 · 67–71
换另一指令的文字数组牛奶 · 64–68奶酪盒 · 67–71
换文字+固定同输入的MLP响应牛奶 · 64–68奶酪盒 · 67–71
随机方向对照牛奶 · 64–68奶酪盒 · 67–71

全都仍抓原指令的目标。替换文字没有让它换目标,固定MLP响应也没有。表内数字是首次满足抓起标准的连续记录窗口,不是成功率。

一次只播放一条真实MuJoCo录像。“抓起”要求双侧指垫接触、抬高超过2厘米并连续5条记录。这8条都没有满足完整放篮任务判据;不要把抓起说成任务成功。

3. 内部到底发生了什么?

改动进去了,而且经过MLP后没有简单消失。我们保存了注意力、MLP及最终输出等真实数组,并用它们重建核对残差相加。

首个去噪时刻的替换方向注意力变化与MLP变化的方向关系两段变化相加后的长度
相对注意力变化
牛奶盒 → 奶酪盒-0.0352.17 倍
奶酪盒 → 牛奶盒-0.0432.13 倍

方向数值−1表示完全反向,0表示垂直,+1表示同向。本次接近0;两段相加后的变化更大。不像“MLP把文字变化原样反向抹掉”那么简单。

但变化更大不代表更懂牛奶。这些数值只是数组的方向和长度,尚不能读成“牛奶想法”或“奶酪想法”。实际抓取没有切换,才是这轮假设未通过的关键证据。

展开真实热力图与精确核验
240处真实同调用数组:注意力与MLP变化余弦,以及实际舍入后的层输出差异
每行一条实际条件,每列一次去噪。左图:两段变化的方向关系,自身对照零变化所以留白;右图:同调用中正常MLP候选BJ的BF16层输出差异L2,平均16个动作位置;固定MLP的C行画的是BJ候选,并非该条件实际返回的BC。两种数组均保留供核验。这不是脑区图,也不是物体识别概率。

上表只取首个去噪时刻:正常MLP与固定MLP两种执行的输入、原生/替换注意力输出、两种MLP输出和pre-W端点,两方向均逐字节匹配。后续输入会沿各自轨迹改变,不能把整段跨轨迹差异当成完全相同输入的比较。

实际舍入后的层输出变化,牛奶→奶酪为0.069892,固定MLP后为0.049843;反方向为0.066869和0.045681。均为首时刻16个动作位置的平均L2,无物理单位。余弦表用全部位置联合计算;加和长度表未包含BF16残差舍入,实际舍入另存数组。

核验240处真实捕获、64份预测记录、1024条官方动作转换、49对后续整份噪声。自身替换两条的整段机械臂状态和控制输入与自然参考逐字节一致。分析在CPU上进行,没有重新生成模型输出。

真实NPZ数组 · 完整分析JSON · 分析核验记录

4. 哪一步往前走了,哪一步还没做到?

往前走了:从“语言会让向量变化”,走到了“直接改变某个内部接口,再看MLP和真实抓取”。这批结果削弱了末层MLP简单抵消的解释,也表明只改这处不足以换目标。

没做到:还没找到原始失败由哪个head、哪段MLP或哪个去噪时刻造成;没定位出语言区/运动区;也没证明它背了训练动作。

下一步只问一个问题:目标选择是否在更早的层已经稳定,导致最后一层的局部改动太晚?这是待验证的猜想,要用更早层的替换和真实执行检查,随后回到原始“milk/15厘米”失败。不能凭这一轮直接下结论。