0. 简介
TacDyn-WAM 面向插接、旋拧和擦拭等接触密集操作,研究机器人应该预测怎样的未来触觉。传感器中的接触印痕会随位置和力度变化,执行稍有偏差,像素就可能偏离示范。论文通过 TacRep 触觉表示、隐式触觉动力学专家和当前触觉记忆 ,让策略同时利用接触现状与变化趋势。作者报告,模型在 UniVTAC 八项任务上的平均成功率为 81.5% ,五项真机任务达到 71.0% ,增加约六千条轨迹的预训练后提高到 85.0%。理解这项工作,需要把表示学习、未来预测、动作监督和部署时的计算过程分开,再看它们如何连接。
1. 研究问题:接触图像变了,物理趋势是否仍可预测
1.1 摄像头看见位置,触觉补充接触状态
把插头推向插座时,外部摄像头可以帮助机器人找到目标、调整朝向,却很难持续看清插针与插孔内部的接触。两个画面几乎相同的时刻,可能分别对应"已经对准,可以继续推进"和"边缘顶住,需要停下调整" 。安装在夹爪指面的光学触觉传感器,会把弹性表面的局部变形记录成图像,补充接触位置、形变和滑动的线索。但这些图像仍然是传感器观测,不能直接等同于经过标定的三维力场,也不能保证仅凭一帧就恢复完整物理状态。
已有的 视觉---触觉---语言---动作模型(VTLA) 会把触觉作为策略输入,让机器人根据当前或近期的触觉决定下一段动作。世界动作模型进一步加入未来预测,希望动作生成能利用即将发生的变化 。这里的关键是,未来预测的对象必须对控制有用:如果模型花费大量能力重画胶面纹理,却没有抓住接触是否加深、接触区是否转动、物体是否正在滑移,预测图像即使看起来合理,也未必帮助机器人完成任务。
1.2 执行偏差会放大触觉图像的分布变化
论文用拔钥匙和放瓶子的轨迹说明这个矛盾。示范中,钥匙可能在指面中心形成印痕;策略执行时,夹持位置偏了一点,印痕就整体平移。瓶子旋转的总体方向可能保持一致,但接触面积、旋转幅度和释放时间已经不同。摄像头中的场景变化不大,触觉图像却出现大量像素差异。训练数据中的好接触,不会自动覆盖执行时所有偏离接触。 如果未来预测目标依赖精确复原这些像素,部署偏差会同时增加预测难度和策略使用预测的难度。


上面两张图来自同一任务的示范和策略执行,每张图同时展示左右传感器以及有标记、无标记的视图。它们说明接触印痕的演化规律与精确像素外观可以发生分离,但不能据此断言任意执行偏差都可忽略。如果物体已经滑脱、接触拓扑改变,原来的趋势也可能失效。TacDyn-WAM 的出发点是寻找更合适的预测空间,减少对非关键像素细节的依赖;它没有给出对所有触觉分布变化都成立的鲁棒性保证。
1.3 隐式动力学的具体含义
隐式触觉动力学(Implicit Tactile Dynamics) 指的是在学习出的特征空间里预测接触演化,而不要求把未来特征解码为触觉照片。这些特征是向量和空间网格,训练中没有规定某一维必须表示法向力,另一维必须表示摩擦系数。换句话说,模型学习的是适合预测的接触表示,物理含义通过视频结构、预测目标和下游行为体现。读者可以把它理解为记录接触的"变化坐标",同时保留这个类比的边界:特征坐标不等于可测量、可直接解释的物理量。
直觉理解:握着瓶子转动时,手需要感知接触是否跟着转、是否开始打滑。每一个皮肤纹理的外观都重现一遍,并不是完成这件事的必要步骤。TacDyn-WAM 尝试让机器人的预测目标优先承载这类变化信息。
2. 整体框架:四个专家与一条只读触觉记忆
2.1 从 InternVLA-A1 的三个专家开始
TacDyn-WAM 建立在 InternVLA-A1 的 3B 检查点 上。这个基础模型包含理解、视觉生成和动作三个专家:理解专家通过 Qwen3-VL-2B 处理当前相机图像与语言指令,形成前缀块 U U U;视觉生成专家读取由冻结 Cosmos tokenizer 编码的视觉历史块 V V V,预测未来视觉潜变量;动作专家读取机器人状态和带噪动作,输出动作流的速度场。InternVLA-A1 原本就接受大规模预训练,因此论文的"只使用任务示范"应理解为新增训练没有使用大规模视触觉轨迹预训练,不能理解为整套模型从零开始。3

论文新增 隐式触觉动力学专家(ITDE) ,把触觉预测块 T T T 加入分层联合注意力。它还有一条独立的 触觉理解记忆(Tactile Understanding Memory) ,记作 M M M,负责提供当前接触信息。最终,动作专家既能读取视觉与触觉专家中的预测信息,也能直接读取触觉记忆。这里的"专家"是参数分离的 Transformer 分支,通信依靠联合注意力和可见性掩码;论文没有采用由稀疏路由器给不同样本选择专家的常规 MoE 机制。
2.2 输入、输出与时间尺度
在论文的仿真实验中,每一步输入包含头部和腕部相机在 t − 15 t-15 t−15、 t t t 的图像、两个触觉传感器最近四帧的背景差分图、当前机器人状态,以及任务指令。视觉分支预测 t + 15 t+15 t+15 的视觉潜变量,触觉分支预测 t + 5 t+5 t+5、 t + 15 t+15 t+15、 t + 25 t+25 t+25 三个时刻的特征,动作分支生成长度为 50 的动作块。这里的数字是数据时间索引中的帧偏移,不能直接写成五秒、十五秒或二十五秒;换算成物理时间需要知道数据采样频率和对齐方式。
C t = ( U , V , { x t − 3 : t k } k = 1 K , s t ) , z ^ t + 15 v = f v i s ( C t ) , ( z ^ t + h k , Δ z ^ t + h k ) = f t a c ( C t ) , a ^ t = f a c t ( C t ) . C_t=\left(U,V,\{x^k_{t-3:t}\}{k=1}^{K},s_t\right),\qquad \hat z^v{t+15}=f_{\mathrm{vis}}(C_t),\quad (\hat z^k_{t+h},\widehat{\Delta z}^k_{t+h})=f_{\mathrm{tac}}(C_t),\quad \hat a_t=f_{\mathrm{act}}(C_t). Ct=(U,V,{xt−3:tk}k=1K,st),z^t+15v=fvis(Ct),(z^t+hk,Δz t+hk)=ftac(Ct),a^t=fact(Ct).
式中 K K K 是触觉传感器数量,实验中的单个双指夹爪对应两个传感器, s t s_t st 是当前机器人状态。 a ^ t \hat a_t a^t 表示整段动作而非一个关节角, h h h 属于三个预测时距组成的集合 { 5 , 15 , 25 } \{5,15,25\} {5,15,25}。未来相机帧和未来触觉帧在训练时充当目标,推理时只能使用已经观测到的历史。进一步看,三个分支共享任务上下文,但预测空间不同:视觉目标留在 Cosmos 空间,触觉目标位于 TacRep 空间,动作则遵循机器人控制接口。
2.3 先建立一份模块职责表
初读架构时,容易把 TacRep、AnyTouch2 和 ITDE 都当成"触觉编码器",从而看不出为何需要两条触觉路径。它们解决的问题不同:TacRep 定义用于预测的目标空间,ITDE 在这个空间内推断未来,AnyTouch2 则为当前接触理解提供已有的触觉特征。下面的表按照职责整理这些模块,冻结状态特指第一阶段之后的策略训练。记住这一点,后面讨论梯度时就不会把"冻结编码器"误读成"触觉分支完全不学习"。
| 模块 | 主要职责 | 在后续策略训练中的状态 |
|---|---|---|
| 理解专家 U U U | 编码当前 RGB 与指令 | 分阶段冻结,最终联合训练时可训练 |
| 视觉专家 V V V | 预测未来视觉潜变量 | 分阶段冻结,最终可训练 |
| TacRep 编码器 E E E | 提供触觉历史特征及未来监督目标 | Stage 1 后冻结 |
| ITDE T T T | 预测多时距触觉表示及变化 | Stage 2、4 训练 |
| AnyTouch2 | 给理解路径提供触觉特征 | 冻结 |
| 记忆压缩、Q-Former、K/V 投影 | 整理当前接触并供专家读取 | Stage 3、4 训练 |
| 动作专家 A A A | 用条件流匹配生成动作块 | Stage 3、4 训练 |
2.4 沿着一次插接操作理解两条触觉路径
以夹爪拿着插头接近插座为例,相机和指令先确定"拿着什么、要去哪里",当前状态说明机械臂正处于哪个姿态。同一段四帧触觉则被送进两条路径:记忆路径保留目前接触区的位置和形变,预测路径利用历史变化推断接下来几个时距的特征。两者提供的信息可以互补,例如当前夹持看起来稳定,近期印痕却已经持续偏移。这个例子只是帮助理解模块职责,论文没有把某个特征维度标成"即将滑脱",也没有设置一条手写规则,让机器人检测到该维度便自动增加夹力。
动作专家通过训练学会如何使用这些信息。它逐层读取理解前缀、视觉块、触觉块和记忆,而不是等一张未来触觉图片生成后,再交给另一个识别器判断是否安全。特征预测与动作生成之间的接口是 token 和注意力。 下图用简化的信息流帮助读者找到各模块;完整访问关系仍以第七节的掩码为准。

3. 数据入口:先去掉固定背景,再建立同步样本
3.1 背景差分保留有符号的接触变化
光学触觉的原始图像含有固定胶面纹理、光照渐变和镜头暗角。论文为每个传感器保存一张夹爪张开、没有接触时的背景图 b k b^k bk,随后在原生分辨率上做减法,再缩放图像。这意味着模型输入保留接触造成的亮暗变化,同时把不接触区域移到统一的中灰值。减法必须先转浮点数。 如果直接在无符号八位整数图像上计算,负差值可能溢出,原本微弱的接触变化就会变成错误的大数值。
x t k = clip ( r t k − b k + 130 255 , 0 , 1 ) . x_t^k=\operatorname{clip}\!\left(\frac{r_t^k-b^k+130}{255},0,1\right). xtk=clip(255rtk−bk+130,0,1).

下面这段代码是对论文公式的教学实现,完整函数位于同目录文件中。输入假定是数值范围为零到二百五十五的原始图像,背景应当来自同一传感器,并使用相同空间布局。它与取绝对差不同:绝对差会丢掉变化方向,而加中灰偏置可以同时保留正负残差。该函数只完成差分,不包含 resize 和网络所需的归一化;把这几个步骤拆开,方便检查究竟是哪一步改变了触觉分布。
python
def tactile_residual(raw, background):
return ((raw.float() - background.float() + 130.0) / 255.0).clamp(0, 1)
3.2 两条触觉路径使用不同的输入归一化
差分图进入两个冻结编码器前,还需要分别执行各自的输入协议:TacRep 使用 384×384 和 ImageNet 归一化,AnyTouch2 使用 224×224 和 CLIP 归一化 。相同的原始触觉历史会生成两套特征,这不是把同一张输入预先变成同一个张量再随意复用。真机 Xense 数据已经存储差分图,论文采用减去逐帧中位数、再加上 130 / 255 130/255 130/255 偏置的方法调整零点;这里要核对传感器输出范围,不能再照搬原始八位图像的背景减法,避免重复处理。
3.3 构造训练样本时,未来帧只进入目标路径
一个完整样本应能同时取到当前及过去的视觉观测、最近四帧触觉、三个时距的未来触觉、未来视觉帧,以及未来五十步动作。在轨迹尾部,需要用有效掩码或裁剪采样范围处理不足的未来数据,不能从下一条轨迹补帧。相机、触觉和动作若存在时钟偏移,模型会学到错误的对应关系,例如把"已经发生滑移后的图像"与"滑移前的调整动作"配在一起。这里的关键是同步语义,文件中有相同数量的帧并不能证明它们物理上对齐。
4. TacRep:先学出适合预测接触的表示空间
4.1 时空块如何变成 token
TacRep 从蒸馏版 V-JEPA 2.1 ViT-B 初始化,将四帧触觉视频送入时空编码器。每两个相邻帧组成一个 tubelet,空间 patch 大小为十六,因此 384×384 输入形成 2 × 24 × 24 2\times24\times24 2×24×24 的 token 网格。视频路径与单帧图像路径具有不同的 patch 和模态嵌入,但共享 Transformer 主体。Meta 的公开 V-JEPA 仓库已经提供这类视频 patch embedding;下面摘取其真实实现的核心部分,帮助理解时间维度如何进入网络,而不是把四帧各自编码后简单平均。4
python
self.proj = nn.Conv3d(
in_channels=in_chans,
out_channels=embed_dim,
kernel_size=(tubelet_size, patch_size, patch_size),
stride=(tubelet_size, patch_size, patch_size),
)
def forward(self, x, **kwargs):
B, C, T, H, W = x.shape
x = self.proj(x).flatten(2).transpose(1, 2)
return x
三维卷积同时跨越时间和空间,输出再展平为 Transformer 使用的序列。代码中的 T T T 在这里是输入视频帧数,和前文表示触觉块的符号 T T T 属于不同语境。进一步看,tubelet 已经使每个 token 包含相邻帧信息,但这不等于模型自动学会了有用动力学;训练目标仍然决定编码器保留什么。论文的做法是在遮挡后的触觉片段上预测特征,并让完整片段的目标编码器给出参照,随后再约束局部空间结构。
4.2 TDP:被遮挡区域的目标来自 EMA 编码器
触觉动力学预测(TDP) 使用学生上下文编码器 E θ E_\theta Eθ 和目标编码器 E θ ˉ E_{\bar\theta} Eθˉ。学生只看到未遮挡的时空 token,轻量预测器 P ϕ P_\phi Pϕ 根据上下文及遮挡位置预测被遮挡部分的特征;目标编码器读取完整片段,输出停止梯度的监督目标。它没有人工标注"这里在滑动"或"这里受力多少",监督来自触觉视频本身。除遮挡区域外,可见区域也接受预测约束,权重为 0.5,有助于保留整幅特征的稠密结构。
L T D P , m a s k = E M ∥ P ϕ ( E θ ( X ∖ M ) , M ) − sg \[ E θ ˉ ( X ) M ∥ 1 ] , L T D P = L T D P , m a s k + 0.5 L T D P , v i s i b l e . \mathcal L_{\mathrm{TDP,mask}}= \mathbb E_{\mathcal M}\left \\left\\\|P_\\phi(E_\\theta(X\\setminus\\mathcal M),\\mathcal M) -\\operatorname{sg}\[E_{\\bar\\theta}(X){\mathcal M}\right\|1 \right],\qquad \mathcal L{\mathrm{TDP}}= \mathcal L{\mathrm{TDP,mask}}+0.5\mathcal L_{\mathrm{TDP,visible}}. LTDP,mask=EM∥Pϕ(Eθ(X∖M),M)−sg\[Eθˉ(X)M∥1],LTDP=LTDP,mask+0.5LTDP,visible.

论文采用两种多块遮挡视图,分别使用较多小区域和较少大区域,并让遮挡覆盖整个四帧时间范围。这减少了从相邻帧同位置直接复制的机会,使模型需要利用其他可见区域的时空联系 。但严格地说,遮挡预测目标并不能证明模型必然恢复了真实接触方程,静态相关性也可能有帮助。TacRep 对时间变化的有效性需要由预测表现和策略消融支持。 把训练动机与已经证明的性质分开,才能准确理解论文的证据范围。
4.3 从真实 V-JEPA 代码看学生、目标与动量更新
在 V-JEPA 2.1 的公开训练器中,上下文编码与预测器调用如下。代码中的 masks_enc 指定学生保留的 token 索引,masks_pred 指定需要预测的位置;学生编码器没有读取完整片段中所有位置的特征。预测器返回预测区域与上下文区域的结果,分别用于损失。该片段来自基础项目,说明论文继承的 JEPA 机制,不代表作者已经公开了 TacRep 专用训练器;后者还包含触觉数据、分层解冻和 DINOv2 关系蒸馏。
python
# 真实基础代码:facebookresearch/vjepa2
# app/vjepa_2_1/train.py,forward_context,节选
z = encoder(clips, masks_enc, gram_mode=False, training_mode=True)
z_pred, z_context = predictor(
z, masks_enc, masks_pred, mod=modality
)
if normalize_predictor:
z_pred = normalize_nested(z_pred, embed_dim)
if predict_all:
z_context = normalize_nested(z_context, embed_dim)
return z_pred, z_context
目标编码器通过 指数滑动平均(EMA) 更新,而不是跟随这一步的目标误差直接反向传播。论文把动量从 0.999 线性提高到 0.9999,让目标空间逐渐缓慢变化。下面的真实代码在优化学生之后,按比例混合学生与目标参数。训练完成后保留 EMA 编码器作为冻结的 TacRep,预测器与 DINOv2 教师不进入后续策略。这意味着后续 ITDE 的未来目标拥有相对稳定的坐标系,不会随动作训练任意移动。
python
# 真实基础代码:facebookresearch/vjepa2
# app/vjepa_2_1/train.py,momentum update,节选
m = min(next(momentum_scheduler), ema[1])
with torch.no_grad():
params_k = []
params_q = []
for param_q, param_k in zip(
encoder.parameters(), target_encoder.parameters()
):
params_k.append(param_k)
params_q.append(param_q)
torch._foreach_mul_(params_k, m)
torch._foreach_add_(params_k, params_q, alpha=1 - m)
难点提示:学生在不断改进描述接触的方式,EMA 教师像一个更新较慢的参照版本。每一步都有可追踪的目标,目标又会逐渐吸收学生的进步。EMA 是稳定训练的组成部分,不能单独视为防止表示退化的完整理论保证。
4.4 RSD:对齐邻居关系,保留各自的特征坐标
TDP 主要约束可预测的时空结构,论文再引入 关系结构蒸馏(RSD) ,用冻结的 DINOv2 ViT-B 为局部空间关系提供参照。师生分别处理四个未遮挡单帧,并把特征池化到七乘七网格。每个 patch 的特征先单位化,再比较附近两个 patch 的余弦相似度。教师和学生不必拥有相同维度,也不必输出相同向量;需要接近的是局部关系。 这样能借用 DINOv2 的空间结构,同时减少把动态表示直接拉回静态图像特征值的冲突。5
L R S D = 1 ∣ N ∣ ∑ ( i , j ) ∈ N SmoothL1 ( z i ⊤ z j − d i ⊤ d j ) , L S t a g e 1 = L T D P + 0.1 L R S D . \mathcal L_{\mathrm{RSD}}= \frac{1}{|\mathcal N|}\sum_{(i,j)\in\mathcal N} \operatorname{SmoothL1}(z_i^\top z_j-d_i^\top d_j),\qquad \mathcal L_{\mathrm{Stage1}}=\mathcal L_{\mathrm{TDP}}+0.1\mathcal L_{\mathrm{RSD}}. LRSD=∣N∣1(i,j)∈N∑SmoothL1(zi⊤zj−di⊤dj),LStage1=LTDP+0.1LRSD.
下面是教学文件中关系蒸馏的核心运算,输入已经转换为 [B,49,D]。完整函数会在七乘七网格上选出横向、纵向距离均不超过二的邻居,并去掉重复和自比较项。教师先 detach,学生保持梯度;特征关系通过矩阵乘法得到,因此两个网络的特征维数可以不同。这个例子揭示了关系蒸馏的工程价值:共享的是空间相似性约束,代码中没有任何要求学生向量逐维复制教师向量的地方。
python
# 教学实现:tacdyn_mechanisms.py,local_relation_loss,核心节选
student = F.normalize(student.float(), dim=-1)
teacher = F.normalize(teacher.detach().float(), dim=-1)
student_relations = student @ student.transpose(-1, -2)
teacher_relations = teacher @ teacher.transpose(-1, -2)
return F.smooth_l1_loss(
student_relations[:, neighbors], teacher_relations[:, neighbors], beta=1.0
)
直觉理解:两个地图可以使用不同坐标原点,但仍然表达相同的街区邻接关系。RSD 让触觉表示保留局部结构,而不规定每个位置必须拥有教师的绝对坐标。DINOv2 提供的是学习到的关系先验,不能把它当作接触几何的真实标注。
4.5 第一阶段的预测与第二阶段的预测有什么不同
这里要厘清的是,第一阶段的"预测"发生在给定触觉片段内部:学生少看一部分 token,目标编码器看完整片段,双方在特征空间比较。片段内四帧对于这次训练都是已有数据,没有另取 t + 5 t+5 t+5、 t + 15 t+15 t+15、 t + 25 t+25 t+25 来监督 ITDE。第二阶段才把已经学好的 TacRep 冻结,用历史片段预测观测边界之后的触觉。先学怎样描述接触,再学接触会怎样演变,是这两个阶段的依赖关系;两者都不要求动作标签,但目标来源和输入可见范围不同。
如果把二者混成一个训练框,很容易误以为 TacRep 自己已经完成三时距未来预测,或者以为后续 ITDE 只需跟着动作损失训练。事实上,TacRep 的 EMA 编码器在第一阶段结束时才被固定下来,随后同一个 E E E 一方面编码历史,另一方面编码真实未来帧,建立历史特征与未来目标之间的统一坐标。下图突出学生、EMA 和空间教师三种更新方式,方便检查哪些箭头表示数据流,哪些表示梯度,哪些只表示参数的动量同步。

5. ITDE:用一次前向计算预测多时距接触
5.1 从四帧历史到每个传感器八十个 token
冻结的 TacRep 视频路径会为一个传感器生成两个时间切片的特征图,每个时间切片池化成四乘四网格,共得到 32 个上下文 token 。模型再为三个未来时距分别追加十六个可学习查询,总计 48 个未来查询 ,因此 ITDE 每个传感器处理八十个 token。它们携带空间、模态和连续时间嵌入,进入深度二十八层、隐藏维度一千零二十四、约 0.4B 参数的 Transformer。当前机器人状态通过零初始化条件模块在每层之后注入,帮助预测结合当前机械状态。

这里的未来查询是需要被训练的输入向量,可以理解为"请预测某个未来位置"的占位,而不是从未来图像编码出的 token 。未来真实触觉只进入目标分支,不能与这些查询混在一起。进一步看,ITDE 与视觉、动作专家具有兼容的逐层注意力几何结构,但参数和预测目标保持分离。它在一次前向计算中同时处理全部时距,没有先生成第五帧、再递归生成第十五帧的过程,所以不能把三个时距误画成三个串行去噪阶段。
5.2 Future 与 Delta 分别回答两个问题
ITDE 对每个未来时距同时预测 Future 表示 和 Delta 表示。前者回答"到时候的接触特征是什么",后者回答"相对于现在改变了多少"。真实目标来自冻结 TacRep 的单帧路径:当前帧和未来帧分别编码、池化到七乘七网格,并对每个 patch 的向量做归一化,然后再计算相减。这意味着 Delta 是特征坐标中的变化,不是光流,也不是牛顿或毫米单位的物理增量。两个输出由独立读出头负责,论文没有要求网络输出必须通过代数相减硬绑定。
z t + h k = norm ( pool 7 × 7 ( E ( x t + h k ) ) ) , Δ z t + h k = z t + h k − z t k , h ∈ { 5 , 15 , 25 } . z^k_{t+h}=\operatorname{norm}\!\left(\operatorname{pool}{7\times7}(E(x^k{t+h}))\right),\qquad \Delta z^k_{t+h}=z^k_{t+h}-z^k_t,\qquad h\in\{5,15,25\}. zt+hk=norm(pool7×7(E(xt+hk))),Δzt+hk=zt+hk−ztk,h∈{5,15,25}.
只预测终点可能鼓励模型记住常见结束状态,只预测变化又依赖起点才能解释。多时距监督则增加了中间过程的信息:一次挤压可能先加深、后松开,如果只比较较远终点,前后特征接近,整个事件容易被隐藏。三个时距仍然是离散检查点。 如果接触变化完整地发生在两个检查点之间,这个设计仍可能漏掉事件,所以它提高的是时间约束的密度,并没有连续观测全部物理演化。
5.3 训练读出头提高分辨率,策略直接读取内部触觉块
每个时距只有十六个紧凑未来 token,但监督网格有四十九个位置。论文用两套独立的读出头解决分辨率差异:每套包含四十九个可学习空间查询,通过交叉注意力读取该时距的十六个 token,再线性映射到 TacRep 维度。Future 输出还要进行与目标相同的归一化,Delta 输出直接回归特征变化。读出头仅用于训练。 部署时,动作专家读取 ITDE 内部的上下文与未来 token 组成的 T T T,无需先把它们扩展成两套七乘七特征。
5.4 动态 patch 加权,防止静止背景主导损失
触觉图像的大部分区域可能没有明显变化,直接平均所有 patch 会使"维持原样"成为便宜的预测。论文按照真实特征变化的模长提高动态区域权重,再分别计算 Future 和 Delta 的 Smooth L1 损失。每个传感器、每个时距的权重在 batch 与 patch 维度上归一化,均值先调整为一,再截断至最多五。这里的关键是,权重来自训练目标,不是来自模型自己声称哪里在变化;否则模型可能通过错误变化估计来影响自身受罚区域。
w ~ h , p = 1 + α ∥ Δ z t + h , p ∥ 2 , w h , p = min ( w ~ h , p mean B , p w ~ h , p , 5 ) , α = 2 , \tilde w_{h,p}=1+\alpha\|\Delta z_{t+h,p}\|2,\quad w{h,p}=\min\left(\frac{\tilde w_{h,p}}{\operatorname{mean}{B,p}\tilde w{h,p}},5\right),\quad \alpha=2, w~h,p=1+α∥Δzt+h,p∥2,wh,p=min(meanB,pw~h,pw~h,p,5),α=2,
L t a c = 1 2 ∣ H ∣ P ∑ h ∈ H ∑ p = 1 P w h , p SmoothL1 ( z \^ t + h , p , z t + h , p ) + SmoothL1 ( Δ z \^ t + h , p , Δ z t + h , p ) . \mathcal L_{\mathrm{tac}}=\frac{1}{2|\mathcal H|P} \sum_{h\in\mathcal H}\sum_{p=1}^{P}w_{h,p}\left \\operatorname{SmoothL1}(\\hat z_{t+h,p},z_{t+h,p})+ \\operatorname{SmoothL1}(\\widehat{\\Delta z}_{t+h,p},\\Delta z_{t+h,p})\\right. Ltac=2∣H∣P1h∈H∑p=1∑Pwh,pSmoothL1(z\^t+h,p,zt+h,p)+SmoothL1(Δz t+h,p,Δzt+h,p).
上式省略了 batch、传感器及特征维度的平均记号,教学实现把它们全部写成明确的张量维度。future 和两个预测的布局是 [B,K,3,49,D],当前特征是 [B,K,49,D]。目标生成放进 no_grad,保证训练只更新预测路径。归一化后再截断,严格说最终权重均值可能小于一;这是截断的结果,无需为了表面保持均值为一而再次归一化,否则可能破坏最大值约束。完整可运行函数在配套文件中,下面展示主体计算。
python
with torch.no_grad():
target = F.normalize(future.float(), dim=-1)
present = F.normalize(current.float(), dim=-1).unsqueeze(2)
delta = target - present
weights = 1.0 + 2.0 * delta.norm(dim=-1)
weights = weights / weights.mean(dim=(0, 3), keepdim=True).clamp_min(1e-8)
weights = weights.clamp_max(5.0)
future_error = F.smooth_l1_loss(
F.normalize(pred_future.float(), dim=-1), target, reduction="none"
).mean(-1)
delta_error = F.smooth_l1_loss(pred_delta.float(), delta, reduction="none").mean(-1)
loss_tactile = (weights * (future_error + delta_error)).mean() / 2
难点提示:把没有变化的区域和发生滑动的区域放在同一份考卷里,静止区域通常数量更多。动态加权相当于保留基础题,同时给关键变化题更高分值;它调整训练注意力,但不能代替对滑动、接触失效等事件的实际验证。
5.5 从张量形状检查上下文、查询与监督目标
实现 ITDE 时,一个常见错误是把四十九个监督 patch 当成四十九个主干 token,从而改变论文的注意力成本。实际上,每个传感器进入 ITDE 的是三十二个历史上下文 token 与四十八个未来查询,合计八十个;每个时距的十六个 token 在训练读出端才展开为四十九个位置。下面的布局以 batch 大小 B B B、传感器数 K K K、ITDE 隐藏维度 d = 1024 d=1024 d=1024 和 TacRep 特征维度 D D D 表示,省略部分投影细节,方便在数据加载和读出模块之间检查形状。
| 张量或模块 | 典型布局 | 应检查的含义 |
|---|---|---|
| 历史上下文 | [B,K,32,d] |
两个时间特征图,各池化到十六个空间位置 |
| 未来查询 | [B,K,3,16,d] |
三个时距,每个时距十六个可学习查询 |
| 联合触觉块 | [B,K*80,d] |
保留传感器、空间和时间嵌入后展平 |
| Future / Delta 预测 | 各为 [B,K,3,49,D] |
两套独立读出头各自生成完整监督布局 |
| 当前帧目标 | [B,K,49,D] |
单帧编码后单位化,供构造 Delta 使用 |
| 未来帧目标 | [B,K,3,49,D] |
三个真实未来帧分别走冻结目标路径 |
| 记忆压缩种子 | [B,K,10,d_m] |
每传感器一个全局和九个局部 token,随后跨传感器融合 |
这里的 d m d_m dm 表示记忆模块的特征宽度,表格没有假定它与 ITDE 宽度相同。还要分开时间位置编码、传感器标识和空间位置编码:同一个空间位置在不同手指、不同未来时距中不能混为一谈。比如双传感器触觉主干共有一百六十个 token,但每套读出需要覆盖两个传感器、三个时距、四十九个 patch;主干紧凑与监督细致可以同时成立,这也是训练时保留读出头、部署时移除它们的原因。
6. 当前触觉记忆:让策略直接接触现在的信息
6.1 AnyTouch2 的职责与 TacRep 不同
未来预测特征不一定保留当前接触的全部细节,因此论文并行保留一条理解路径。它使用冻结的 AnyTouch2 编码同样的四帧触觉历史,再把结果压缩成紧凑记忆。AnyTouch2 的公开论文和项目说明,它面向光学触觉的静态属性与动态感知,学习跨帧形变及与力相关的信息。把它叫作"纯静态编码器"并不准确;在 TacDyn-WAM 中,它被分配到当前接触理解路径,而 TacRep 被专门训练为未来预测的目标空间,这是模块使用职责的区别。6
每个传感器的 AnyTouch2 输出有数百个 token,直接让全部专家在每层读取会增加开销。论文先构造十个压缩 token:一个由类别嵌入得到的全局 token,加上最新时间特征图经三乘三池化得到的九个局部 token,再通过交叉注意力回读完整特征序列。随后,两层 Compact Tactile Q-Former 用自注意力融合不同传感器,用交叉注意力读取任务前缀 U U U。这意味着记忆既包含接触局部细节,也可以结合当前指令进行组织。
6.2 "只读"约束的是专家内的更新方式
记忆 M M M 不加入任何专家的残差流,每层仅通过轻量投影生成附加的 Key 和 Value ,不生成 Query。允许访问它的专家可以读取,但不能通过联合注意力把结果写回记忆 token。只读不等于训练参数冻结,也不等于跨时间永远不变。 记忆压缩器、Q-Former 和 K/V 投影在后续阶段会学习;每次新观测进入时,也会重新计算当前记忆。只读描述的是一次模型计算中,记忆相对于专家注意力的接口约束。
K M ( l ) = M W K ( l ) , V M ( l ) = M W V ( l ) , Attn ( Q , K , V ) = softmax ( Q K ⊤ d k + B ) V . K_M^{(l)}=M W_K^{(l)},\qquad V_M^{(l)}=M W_V^{(l)},\qquad \operatorname{Attn}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}+B\right)V. KM(l)=MWK(l),VM(l)=MWV(l),Attn(Q,K,V)=softmax(dk QK⊤+B)V.
式中 l l l 是层编号, B B B 是允许访问关系对应的注意力偏置,禁止位置可由负无穷屏蔽。虽然 M M M 没有 Query,动作专家输出仍依赖 K M K_M KM 和 V M V_M VM,所以动作损失能够反向更新记忆生成模块。进一步看,这个设计避免新增第五个完整专家,把参数增加控制在论文所述约百分之一的量级。它也提供一个清晰接口:哪个专家可以读取当前触觉,完全由当前阶段的掩码决定。
直觉理解:只读记忆像每轮重新整理的一张接触记录卡。其他模块可以查看卡片上的内容,但不会在阅读过程中改写它;负责整理卡片的方法仍然可以通过训练改进。冻结 AnyTouch2 和训练整理模块,是可以同时成立的。
7. 联合注意力:分离参数,逐层交换信息
7.1 从矩阵读懂谁可以读取谁
每层中,理解、视觉、触觉和动作专家分别计算 Query、Key、Value,再在统一注意力计算中按掩码交换信息。最终阶段, U U U 只读取自身; V V V 与 T T T 都能读取 U U U、 M M M 和两个世界模型块; A A A 读取全部上下文,并遵循动作块内部的因果规则。下面的表中行表示 Query,列表示 Key,横线表示记忆根本没有 Query 行。前向读取方向和反向梯度方向要分开理解:动作读取触觉后,动作损失仍能沿着读取路径更新可训练的触觉模块。
| Query / Key | U U U | M M M | V V V | T T T | A A A |
|---|---|---|---|---|---|
| U U U | 允许 | 禁止 | 禁止 | 禁止 | 禁止 |
| M M M | --- | --- | --- | --- | --- |
| V V V | 允许 | 允许 | 允许 | 允许 | 禁止 |
| T T T | 允许 | 允许 | 允许 | 允许 | 禁止 |
| A A A | 允许 | 允许 | 允许 | 允许 | 块内因果 |
7.2 世界预测不读取待生成动作的含义
从最终掩码看,视觉和触觉块不读取带噪动作块,所以当前观测确定后,它们的输出可以在动作去噪的多个时间步之间缓存。这也限定了论文中"世界模型"的能力范围:ITDE 不是一个输入任意候选动作、输出相应未来接触的显式反事实模拟器。 它从观测历史、任务上下文和当前状态中推断演化,主要学习数据中的行为分布。不能直接把这个架构画成搜索多条动作、逐条模拟触觉后挑选最优方案的 MPC 系统。
这一区别关系到模型适用场景。给定同一个当前接触,向左拉与向右拉可能引起不同未来,如果预测器没有接收这两个候选动作,就不能仅凭现有接口可靠地区分两种干预后果。论文用当前状态、视觉历史和语言缓解未来的不确定性,并让动作专家读取预测信息;这种设计在示范分布中的策略学习可以有价值,但跨行为策略的预测与多模态未来仍需要额外实验。这里要避免把"使用预测特征生成动作"扩大解释成"已具备通用物理规划"。
7.3 分阶段开放连接保护已有专家
ITDE、触觉记忆和读出头初始没有训练,如果一开始就让全部专家读取这些输出,可能破坏基础模型已有能力。论文采用逐阶段开放的注意力掩码:先让触觉专家读取预训练的视觉与语言上下文,再训练动作专家使用触觉,最后开放两个世界模型与记忆之间的剩余连接。下图来自论文原图,粗边框表示新开放连接,颜色块表示可见性。读图时应当看行列和阶段,不能只凭"连接更多"判断训练已经完成。

8. 四阶段训练:每阶段究竟监督什么
8.1 第一阶段学表示,第二阶段学未来触觉
Stage 1:TacRep Training 使用触觉片段进行 TDP 和 RSD,不要求动作标签。学生编码器从 V-JEPA 2.1 初始化,预测器与最后四层首先训练,中间四层在训练步数达到总量的百分之二十后以更低学习率解冻,前四层与 patch embedding 始终冻结。结束时保留 EMA 编码器。Stage 2:Tactile World Grounding 随后固定 TacRep、其他基础专家,训练 ITDE、未来查询、条件注入及读出模块,用真实未来帧经 TacRep 得到的 Future 和 Delta 作为监督。
因此,第二阶段虽然不用动作损失,却必须有时间连续的触觉序列,不能拿独立单帧凑出任意前后关系。对一个训练样本而言,当前四帧进入 ITDE,上下文视觉和语言可以被它读取;未来三个时距的触觉图只进入冻结目标编码器。模型预测错了,误差回到 ITDE 和读出头,不会把未来帧作为输入偷偷送进上下文。这也回答了最直接的训练问题:新增触觉预测能力有独立的未来观测监督,并非只靠最终动作轨迹间接学出。
8.2 第三阶段让动作专家学会使用两条触觉路径
Stage 3:Tactile--Action Alignment 冻结 ITDE 和基础理解、视觉专家,训练触觉记忆相关模块及动作专家。目标是让动作生成学会读取已成形的预测触觉块,以及当前接触的压缩记忆。此时主要监督是示范动作的条件流匹配损失,和读者熟悉的行为克隆一样,数据需要提供随后应执行的动作;区别在于网络训练回归的是带噪动作路径上的速度,而不是直接对一个确定动作输出做普通均方误差。
ϵ ∼ N ( 0 , I ) , σ ∈ 0 , 1 , a t σ = σ ϵ + ( 1 − σ ) a t , u t = ϵ − a t , L a c t = E σ , ϵ ∥ v θ ( a t σ , σ ∣ C t ) − u t ∥ 2 2 . \epsilon\sim\mathcal N(0,I),\quad \sigma\in0,1,\qquad a_t^\sigma=\sigma\epsilon+(1-\sigma)a_t,\quad u_t=\epsilon-a_t,\qquad \mathcal L_{\mathrm{act}}=\mathbb E_{\sigma,\epsilon} \left\|v_\theta(a_t^\sigma,\sigma\mid C_t)-u_t\right\|_2^2. ϵ∼N(0,I),σ∈0,1,atσ=σϵ+(1−σ)at,ut=ϵ−at,Lact=Eσ,ϵ∥vθ(atσ,σ∣Ct)−ut∥22.
下面代码直接摘自 InternVLA-A1 的 3B 实现 。time 是流匹配时间,不是机器人控制时刻;噪声加入动作,而视觉、语言和触觉作为条件参与预测。真实示范动作通过 u_t 定义监督目标,触觉不需要与这个目标拥有相同维度。进一步看,阶段三 ITDE 已冻结,所以动作误差不会更新它的权重;记忆路径中可训练的压缩器和 K/V 投影仍可得到梯度,动作专家则学习如何使用两条触觉路径。310
python
# 真实基础代码:InternRobotics/InternVLA-A-series,InternVLA-A1 分支
# src/lerobot/policies/InternVLA_A1_3B/modeling_internvla_a1.py,节选
if noise is None:
noise = self.sample_noise(actions.shape, actions.device)
if time is None:
time = self.sample_time(actions.shape[0], actions.device)
time_expanded = time[:, None, None]
x_t = time_expanded * noise + (1 - time_expanded) * actions
u_t = noise - actions
# 中间经过条件编码、专家联合注意力与动作投影
loss_action = F.mse_loss(u_t, v_t, reduction="none")
8.3 第四阶段同时约束动作、视觉和触觉
Stage 4:Joint Training 开放最终注意力连接,联合训练可训练专家和新增模块,同时保持 TacRep、AnyTouch2 及 Cosmos tokenizer 冻结。损失由动作流匹配、未来视觉潜变量回归、未来触觉表示预测共同组成。动作损失要求策略生成合适动作,视觉和触觉目标继续约束世界模型块承载预测信息。保留触觉损失可以抑制触觉块仅编码动作捷径的倾向,但这种辅助约束没有自动排除所有捷径,仍需依靠移除模块、替换目标空间等消融检查作用。
L j o i n t = L a c t + λ v i s L v i s + λ t a c L t a c , L v i s = ∥ z ^ t + 15 v − z t + 15 v ∥ 2 2 . \mathcal L_{\mathrm{joint}}= \mathcal L_{\mathrm{act}}+\lambda_{\mathrm{vis}}\mathcal L_{\mathrm{vis}} +\lambda_{\mathrm{tac}}\mathcal L_{\mathrm{tac}},\qquad \mathcal L_{\mathrm{vis}}=\|\hat z^v_{t+15}-z^v_{t+15}\|_2^2. Ljoint=Lact+λvisLvis+λtacLtac,Lvis=∥z^t+15v−zt+15v∥22.
仿真实验采用 λ v i s = 0.01 \lambda_{\mathrm{vis}}=0.01 λvis=0.01、 λ t a c = 500 \lambda_{\mathrm{tac}}=500 λtac=500,真机预训练的触觉权重为三百。看到五百这个数字,不能直接判断触觉任务"重要五百倍":不同损失的归一化方式、特征尺度和梯度量级差异很大。论文说明,触觉权重根据与动作损失的梯度幅度匹配设置。工程上应该记录各参数组的梯度范数、预测误差和闭环成功率,不能脱离损失定义照抄一个权重,也不能仅凭总损失下降认定触觉预测已经有效。
8.4 把监督、参数和训练长度放在同一张表中
下面整理了论文附录中的 UniVTAC 训练设置。所有阶段使用 AdamW、bfloat16、预热后余弦衰减,以及按参数组范数为一的梯度裁剪。第一阶段中,不同新旧参数组使用不同学习率;第二、三阶段的 epoch 会按任务长度调整,使短轨迹任务获得相近的优化步数。这里的关键是训练顺序及初始化关系:每一步都需要前一阶段产物,不能把四行配置理解为四个互不相关的独立训练任务。
| 阶段 | 监督目标 | 主要更新参数 | Batch | 长度 |
|---|---|---|---|---|
| Stage 1 | 遮挡特征、可见特征、局部关系 | 学生编码器部分层与预测器;目标编码器 EMA 更新 | 64 | 20 epochs |
| Stage 2 | Future 与 Delta | ITDE、输入与条件模块、读出头 | 128 | 约 15 epochs,按任务调整 |
| Stage 3 | 动作流匹配 | 动作专家及状态动作投影、记忆模块 | 128 | 约 5 epochs,按任务调整 |
| Stage 4 | 动作、未来视觉、未来触觉 | 理解、视觉、触觉、动作专家及新增可训练模块 | 64 | 12,000 steps |