Causal-JEPA: Learning World Models through Object-Level Latent Interventions
Paper: arXiv:2602.11389 Code: galilai-group/cjepa Code reference:
main@14158308(2026-03-06)
1. Motivation (研究动机)
这篇论文要解决的不是“如何把视频压成 object slots”本身,而是一个更细的 world model 问题:即使模型已经拿到了 object-centric representation,它仍然可能没有学会物体之间的交互因果结构。作者认为,传统的对象中心世界模型把场景分解成若干 slot 之后,常常默认 slot 表征已经足够支持预测、推理和控制;但在动态场景里,一个物体的未来状态通常不是只由自己的历史决定,而是由邻近物体、动作、proprioception 等变量共同决定。若训练目标允许模型走捷径,它可以只拟合每个 slot 的自我动力学或短期平滑性,而不是学习“哪个物体影响哪个物体”。这正是 CLEVRER 反事实问答和 Push-T 接触操控这类任务会暴露出来的缺口:模型看起来能预测平均轨迹,却在需要判断“如果某个物体不存在 / 被移走 / 碰撞关系改变会怎样”时失败。
已有方法主要有三类瓶颈。第一类是 reconstruction-based object-centric world model,例如 SlotFormer、OCVP-Seq 等,会用像素或 slot 重建损失训练 predictor。重建目标能提供强监督信号,但也会把模型容量消耗在视觉细节、背景或对象外观上;当作者移除 reconstruction loss 时,SlotFormer 在 CLEVRER 的平均 per-question accuracy 从 79.44% 掉到 44.94%,counterfactual per-question 从 47.29% 掉到 11.10%,说明这些方法对 decoder/reconstruction 信号高度依赖。
第二类是 patch-based latent world model,例如 DINO-WM,在 Push-T 上保留了强大的 DINOv2 patch 表征,性能高但 token 数量大:表中 DINO-WM 使用 token-feature,而 C-JEPA 的 object token 只有 ,后者约为前者 token-feature 预算的 1.02%。第三类是普通 JEPA 或 masked prediction 方法,它们通常在 image patches 或 dense features 上做 masking,没有把“一个对象被遮住时必须由其他对象解释”作为目标层面的 inductive bias。
本文的核心问题可以表述为:如何在不引入像素重建 decoder、不需要显式 causal graph 标注的情况下,让 object-centric world model 在 latent space 中被迫使用交互信息?作者选择的入口是训练目标,而不是额外的图结构或任务监督。C-JEPA 把 object-level masking 看成 latent observability intervention:训练时选择若干对象 slot,在历史窗口中去掉它们的可观测状态,只保留最早时刻的 identity anchor;predictor 必须根据其他对象、时间上下文和辅助变量来补全这些被遮住对象的历史状态,同时预测未来状态。这样,模型如果只依赖被遮住对象自己的历史,就没有可用信息;想降低 masked-history loss,就必须学习对象之间的 predictive dependency。
这个问题值得研究的原因有三点。第一,world model 的下游用途通常不是重建视频,而是推理和控制;如果 latent dynamics 只学会平滑外推,就无法支撑反事实问题、接触动力学或长视野规划。第二,object-centric representation 的效率优势只有在 predictor 也足够强时才有意义;Push-T 结果显示,单纯把 DINO-WM 从 patch token 换成 object token 的 OC-DINO-WM 只有 60.67% success rate,而加入 JEPA 后的 OC-JEPA 到 76.00%,再加入 object-level masking 的 C-JEPA 到 88.67%。第三,C-JEPA 给出了一种比“先学 graph 再预测”更轻量的 causal inductive bias:它不声称识别真实 causal graph,而是通过 masked completion 让 attention/predictor 学到 influence neighborhood,即对预测某个对象状态足够的最小信息邻域。
Figure 1 解读:这张图概括了本文的训练闭环。输入视频先经过冻结的 object-centric encoder 变成 slot 序列;C-JEPA 不解码像素,而是在 slot latent 上选择部分对象做历史遮蔽,并对未来 token 全部用 query/mask token 表示。Transformer predictor 同时完成两件事:恢复被遮蔽的历史 slot,以及预测未来 slot。关键是,历史恢复项让模型不能只“顺着自己的 slot 轨迹外推”,因为被遮住对象的中间历史不可见;它必须从其他对象和辅助变量里恢复交互依赖。
2. Idea (核心思想)
C-JEPA 的根本新意是把 JEPA 的 masked latent prediction 从 patch/token 级别提升到 object slot 级别,并把这种 masking 解释为对“可观测性”的 latent intervention。也就是说,训练并不改变真实动力学,也不真的删除物体;它只删除 predictor 可访问的某些对象历史状态,从而构造一种 counterfactual-like 的学习问题:如果目标对象的历史不可见,哪些其他对象和变量足以推断它?
关键创新可以压缩成三句话。第一,模型使用冻结的 object-centric encoder 把每帧图像 编码为 个 slot ,再把 object slots 与可选辅助变量 组成 entity tokens 。第二,训练时对选中的对象集合 做跨时间 object-level masking,只保留最早时刻 的 identity anchor,并用 masked transformer 联合预测 history completion 与 future prediction。第三,作者用一个 influence-neighborhood 的形式化分析说明:在 MSE masked completion 下,最优 predictor 等价于条件期望 ,因此忽略交互邻域的 predictor 无法达到最小误差。
它和已有方法的本质差异在目标层面。SlotFormer / OCVP-Seq 主要靠重建或 autoregressive slot prediction 来维持动态一致性;OC-JEPA 是一个重要对照,它只 mask future token,相当于普通 joint latent prediction,没有在历史窗口对对象做 intervention。C-JEPA 则额外遮住历史中的对象状态,使模型在训练时反复遇到“目标对象不可见,但其他对象可见”的问题。与 DINO-WM 相比,C-JEPA 放弃 dense patch token 的高预算,转向低 token 数 object slots;与显式 graph neural world model 相比,它不要求固定图结构,而是让 bidirectional attention 在 masked objective 下形成 soft interaction pattern。
3. Method (方法)
3.1 Problem setting:从像素视频到 entity-token dynamics
论文考虑一个视频动力系统,像素观测为 。冻结或预训练的 object-centric encoder 把每帧映射为 slot set: 这里 是固定 slot 数, 是 slot 维度;slot set 对对象顺序是 permutation-equivariant 的。模型使用长度为 的 history window ,并预测长度为 的未来;完整预测区间为 。若任务包含 action 或 proprioceptive state,作者不把它们简单拼到视觉 token 里,而是作为辅助变量 加入 entity set: 这种设定有两个重要后果。其一,C-JEPA 的 predictor 只在 latent/entity space 里工作,不需要 pixel decoder;这降低了训练目标被视觉细节牵引的风险。其二,action/proprioception 作为独立 entity token 能参与 attention,与 object slots 建立关系,而不是被埋在单个视觉 token 的 channel 维度里。Figure 4 的辅助变量实验正是验证这一点。
3.2 Object-level masking:把可观测性干预变成训练信号
Figure 2 解读:图中每个时间步都有多个 object slots。C-JEPA 不是随机遮掉一些 patch,而是选择若干对象 slot,并在历史窗口里遮掉这些对象除最早锚点外的状态。保留 的 identity anchor 是为了告诉 predictor “要预测的是哪个对象”,否则 slot ordering 的 permutation equivariance 会让目标身份不明确。未被遮蔽的对象历史仍然可见,未来 token 则全部需要预测,因此模型必须把可见对象、辅助变量和时间信息联合起来推断被遮蔽对象。
形式上,对选中对象 ,C-JEPA 在时间 使用 mask/query token 替换原始 latent,但保留来自最早时刻 的身份信息: 其中 是线性投影, 是 identity anchor, 是可学习 embedding 与 temporal positional encoding 的组合。直觉上,这个 token 的语义是:“请预测在时间 ,这个由 anchor 标识的对象应该是什么状态”。这个设计避免了两个失败模式:如果没有 anchor,模型可能不知道被 mask 的 slot 对应哪个对象;如果不 mask history,模型可以直接利用目标对象自身过去状态做局部外推,而不学习其他对象如何影响它。
released code 中的 src/cjepa_predictor.py 对这一逻辑实现得很直接。MaskedSlotPredictor.prepare_input() 先取第一帧 anchors,经过 id_projector 得到 identity queries;再构造默认 query grid:mask_token + time_pos_embed + anchor_query。随后它把 的所有 slot 都覆写为真实数据,并只对未 mask 的 slots 覆写 的真实历史;被 mask 的 slots 在这些时间步保持 query token,所有 future slots 也保持 query token。
def build_cjepa_input(history, predictor):
B, T_hist, S, D = history.shape
T_total = predictor.history_frames + predictor.pred_frames
is_masked, mask_idx = predictor.get_mask_indices(B, history.device)
anchors = history[:, 0] # (B, S, D)
anchor_query = predictor.id_projector(anchors) # (B, S, D)
query = (
predictor.mask_token.expand(B, T_total, S, D)
+ predictor.time_pos_embed.expand(B, T_total, S, D)
+ anchor_query[:, None].expand(B, T_total, S, D)
)
x_in = query.clone()
x_in[:, 0] = history[:, 0] + predictor.time_pos_embed[:, 0]
visible_slots = torch.where(~is_masked)[0]
if len(visible_slots) > 0 and T_hist > 1:
pos = predictor.time_pos_embed[:, 1:T_hist].expand(B, T_hist - 1, S, D)
x_in[:, 1:T_hist, visible_slots] = history[:, 1:, visible_slots] + pos[:, :, visible_slots]
return x_in, mask_idx3.3 Predictor 与 loss:masked-history completion + future prediction
C-JEPA predictor 是 ViT-style masked transformer,使用 bidirectional / non-causal self-attention。论文写作中,masked sequence 记为 ,输出为: 训练目标是在完整区间 上对所有被 mask 的 token 做 latent MSE: 作者进一步把它解释为 history term 与 future term 的组合: 这两个项承担不同角色。 是正常 world model 需要的前向预测,保证模型能 rollout; 是本文的关键,它压制“只使用目标对象自身历史”的捷径。当某个对象的中间历史状态被遮住时,模型要恢复它,只能从其他对象、动作、proprioception 和全局时间结构中找信息。因此,interaction reasoning 不再是下游评测才需要的能力,而是训练损失本身所要求的能力。
released code 的 CLEVRER 训练循环与公式基本一致:src/train/train_causalwm_from_clevrer_slot.py 中 compute_loss() 把 batch embedding 切成 history 和 target;训练模式调用 predictor(history) 得到 (pred_embedding, mask_indices),然后对 pred_history[:, :, mask_indices, :] 和 history[:, :, mask_indices, :] 做 MSE,对 pred_future 和 target 做 MSE,总 loss 为二者之和。
def cjepa_train_loss(predictor, embed, history_size, num_preds):
history = embed[:, :history_size] # (B, T_h, S, D)
target = embed[:, history_size:history_size + num_preds] # (B, T_p, S, D)
pred_all, mask_idx = predictor(history) # (B, T_h+T_p, S, D)
pred_hist = pred_all[:, :history_size]
pred_fut = pred_all[:, history_size:history_size + num_preds]
if len(mask_idx) > 0:
loss_hist = F.mse_loss(pred_hist[:, :, mask_idx], history[:, :, mask_idx].detach())
else:
loss_hist = torch.zeros((), device=embed.device)
loss_future = F.mse_loss(pred_fut, target.detach())
return {"loss": loss_hist + loss_future,
"loss_masked_history": loss_hist,
"loss_future": loss_future}3.4 Inference:训练时双向补全,测试时全可见历史前向预测
训练时 transformer 是 bidirectional 的,这会让人担心它是否能转移到前向 world model 使用。论文的做法是:训练阶段用 masked-history completion 学 interaction structure;推理阶段不再遮蔽历史,而是给定 fully observable history,用 mask/query token 表示未来,直接预测 future slots。released code 的 MaskedSlotPredictor.inference() 也体现了这个差异:history part 是真实历史加 time positional embedding;future part 是 mask_token + future_time_pos + anchor_query;最后只返回未来预测。
@torch.no_grad()
def cjepa_inference(predictor, history):
B, T_hist, S, D = history.shape
T_pred = predictor.pred_frames
pos = predictor.time_pos_embed[:, -(T_hist + T_pred):]
anchor_query = predictor.id_projector(history[:, 0])
input_history = history + pos[:, :T_hist]
input_future = (
predictor.mask_token.expand(B, T_pred, S, D)
+ pos[:, T_hist:T_hist + T_pred].expand(B, T_pred, S, D)
+ anchor_query[:, None].expand(B, T_pred, S, D)
)
x = torch.cat([input_history, input_future], dim=1)
y = predictor.to_out(predictor.transformer(rearrange(x, "b t s d -> b (t s) d")))
y = rearrange(y, "b (t s) d -> b t s d", t=T_hist + T_pred, s=S)
return y[:, T_hist:]直觉上,C-JEPA 并不是把未来信息泄露到 inference。它在训练中使用 bidirectional attention 是为了让 masked completion 形成关系约束;测试时未来 token 仍是 query,只有过去真实可见。论文的 Remark 也强调:influence neighborhood 在训练中抽象掉了时间方向,但 under shared-dependency assumptions,预测一个对象状态所需的变量集合与前向动态中的交互变量一致,因此该结构可以迁移到 forward prediction。
3.5 Auxiliary variables as nodes:动作和 proprioception 不只是拼接特征
Figure 3 解读:图中比较两种注入 action/proprioception 的方式:一种是把辅助变量 concatenate 到视觉/object latent 中,另一种是把它们作为独立 entity nodes 输入 predictor。C-JEPA 采用后者,因为 action 和 proprioception 在控制任务中是“会影响对象未来状态的变量”,让它们作为 token 参与 attention 更接近 object-level causal/influence 建模。论文实验显示,显式辅助节点优于简单拼接,支持这种建模选择。
Push-T 训练脚本使用 src/train/train_causalwm_AP_node_pusht_slot.py 与 MaskedSlot_AP_Predictor。该版本会把 object slots、proprio token、action token 组合成扩展 entity sequence;mask indices 的选择排除了最后两个辅助 token(代码中 rng.choice(self.num_slots-2, ...)),即只 mask object slots,不 mask action/proprio。loss 上,历史 masked object slots 用 MSE;未来 object slots 用 MSE 或 Hungarian matching(最佳 launch script 设置 use_hungarian_matching=false);如果有 proprio token,还额外加入 future proprio MSE。
def pusht_ap_node_step(model, pixels_embed, proprio_embed, action_embed, cfg):
# pixels_embed: (B, T, N_obj, D); proprio/action are projected to token dim
entity_embed = torch.cat([pixels_embed, proprio_embed[:, :, None], action_embed[:, :, None]], dim=2)
history = entity_embed[:, :cfg.dinowm.history_size]
target = entity_embed[:, cfg.dinowm.history_size:cfg.dinowm.history_size + cfg.dinowm.num_preds]
pred_all, mask_idx = model.predict(history) # mask_idx excludes AP nodes
pred_hist = pred_all[:, :cfg.dinowm.history_size]
pred_future = pred_all[:, cfg.dinowm.history_size:cfg.dinowm.history_size + cfg.dinowm.num_preds]
n_obj = pixels_embed.shape[2]
loss_hist = F.mse_loss(pred_hist[:, :, mask_idx], history[:, :, mask_idx].detach())
loss_future_obj = F.mse_loss(pred_future[:, :, :n_obj], target[:, :, :n_obj].detach())
loss_proprio = F.mse_loss(pred_future[:, :, n_obj:n_obj+1], target[:, :, n_obj:n_obj+1].detach())
return loss_hist + loss_future_obj + loss_proprio3.6 Formal view:influence neighborhood 不是完整因果识别,但足够解释训练偏置
论文的形式化部分刻意避免声称 C-JEPA 能识别真实 causal graph。作者定义的是 influence neighborhood :在 masked completion 任务中,对预测对象 在时间 的状态足够的最小变量集合。关键定理是,在 masked history prediction loss 下,对象 的最优 MSE predictor 满足: 这说明 masked object 不可见时,最优 predictor 必须利用能降低条件不确定性的邻域变量;任何忽略 信息的 predictor 都不能达到最小期望重建误差。与 Markov blanket 或 causal parents 相比,influence neighborhood 更弱、更 operational:它依赖当前 representation 和 masked prediction task,不需要观测真实图结构,也不保证 causal sufficiency。这个限定很重要,因为本文的“Causal”主要指 objective-induced causal inductive bias,而不是可识别的结构因果模型。
3.7 Figure-level comparison:C-JEPA 相对 patch-based 与 object-centric baseline 的位置
Figure 4 解读:这张图展示了 baseline world model 的输入组织差异。DINO-WM 保留 DINOv2 patch tokens,token 多、表达强;object-centric 版本把图像压成少量 slot,效率高但可能损失交互细节;C-JEPA 的关键补偿机制是 masked objective,而不是增加 token 数。结合 Push-T 表格可以看到:OC-DINO-WM 的 60.67% success rate 说明 object abstraction 单独不够,C-JEPA 的 88.67% 说明 objective-level interaction bias 可以大幅补回性能。
Figure 5 解读:slot visualization 用来说明 encoder 确实把场景分成对象级 latent,而不是任意 dense features。该图也提示了本文的一个上限:如果 object-centric encoder 本身质量不好,slot 不稳定或对象绑定失败,C-JEPA 的 masking objective 再好也会受到限制;作者在 conclusion 中明确把性能依赖 encoder quality 列为 limitation。
3.8 论文公式与 released code 实现差异
论文与 released code 的主线是一致的:object-level history masking + future latent prediction;但有几个实现细节需要读者注意。
第一,论文正文/附录描述 masking budget 时常写成“randomly masking between zero and four object slots for CLEVRER / between zero and two for Push-T”,而 released code 的实际训练脚本为具体实验选择固定 num_masked_slots:scripts/clevrer/train_cjepa_from_slot.sh 对 CLEVRER VideoSAUR 设为 4,README checkpoint table 中 SAVi 最佳为 2/7;
scripts/pusht/train_cjepa_from_slot.sh 对 Push-T 最佳设为 1/4。第二,src/cjepa_predictor.py 的 get_mask_indices() 在函数内部每次构造 np.random.RandomState(self.seed),因此在同一 seed 和同一 下会重复选择同一组 slot indices,而不是每个 batch/per-sample 动态重采样;这与论文文字中“random masking”的直觉不完全一致。
第三,训练配置数字必须看 launch scripts,而不是 YAML defaults:例如 configs/config_train_causal_clevrer_slot.yaml 默认有 trainer.max_epochs=100、history_size=3、num_preds=1,但实际 CLEVRER from-slot launch 覆写为 max_epochs=30、history_size=6、num_preds=10、frameskip=2;
Push-T launch 覆写为 max_epochs=30、history_size=3、num_preds=1、frameskip=5、num_masked_slots=1。
Code reference:
main@14158308(2026-03-06) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| object-level masked JEPA predictor | src/cjepa_predictor.py | MaskedSlotPredictor, prepare_input, inference, forward |
| identity anchor + temporal query grid | src/cjepa_predictor.py | id_projector, mask_token, time_pos_embed |
| CLEVRER slot training loss | src/train/train_causalwm_from_clevrer_slot.py | ClevrerSlotDataset, get_world_model, compute_loss |
| Push-T action/proprio nodes | src/train/train_causalwm_AP_node_pusht_slot.py | get_data, get_world_model, AP-node loss block |
| actual CLEVRER launch config | scripts/clevrer/train_cjepa_from_slot.sh | max_epochs=30, history_size=6, num_preds=10, num_masked_slots=4 |
| actual Push-T launch config | scripts/pusht/train_cjepa_from_slot.sh | max_epochs=30, history_size=3, num_preds=1, num_masked_slots=1 |
| Push-T CEM planning | scripts/pusht/test_planning.sh, src/plan/solver/cem.yaml | horizon=5, receding_horizon=5, action_block=5, num_samples=300, topk=30, n_steps=30 |
| VQA rollout/evaluation | scripts/clevrer/rollout_from_slot.sh, scripts/clevrer/train_aloe.sh, scripts/clevrer/test_aloe.sh | rollout 128 frames to 160 frames; ALOE train/test |
4. Experimental Setup (实验设置)
4.1 Datasets and tasks
CLEVRER 是视觉物理推理 benchmark,视频长度 128 frames,空间分辨率 。论文使用官方 split:10,000 training videos、5,000 validation videos、5,000 test videos。由于官方 EvalAI test server 当时不可用,作者在 validation set 上按 test protocol 报告结果;所有模型只用 training split 训练,validation 被当作 held-out test。VQA 题型包括 descriptive、counterfactual、explanatory、predictive;descriptive 只按 per-question 评测,其余题型同时报告 per-option 与 per-question。
Push-T 是 contact-rich robotic manipulation benchmark,评测目标是控制 agent 推动物体到目标姿态。论文沿用 DINO-WM 的 planning pipeline:给定当前 observation 和 goal observation,在 learned latent space 中用 CEM 优化未来动作序列,并用最终 latent 与 goal latent 的 cost 作为规划目标。成功标准是 final position error 小于 20(workspace range ),且 final orientation error 小于 。
4.2 Encoders and representations
主要 object-centric encoder 是 VideoSAUR,它在 frozen DINOv2 features 上聚合 object-centric latents。CLEVRER 还额外报告 SAVi encoder,以便与 SlotFormer、OCVP-Seq 等 prior object-centric baselines 公平比较。附录给出的 encoder 细节包括:CLEVRER VideoSAUR 使用 slots,batch size 32,temporal similarity loss weight 0.3;
Push-T VideoSAUR 使用 slots,batch size 64,temporal similarity loss weight 0.25,并在一个对象随机运动的 Push-T dataset variant 上训练。
SAVi CLEVRER encoder 使用 6-frame clips、 resolution、slot dimension 128、 slots、2 次 Slot Attention iteration、Adam learning rate 、8 epochs、gradient clipping 0.05、batch size 32 train / 64 validation、KL weight 。
4.3 Baselines
CLEVRER VQA 只比较 object-centric world models,因为 ALOE evaluation 假设输入是 object-centric trajectories。主要 baselines 包括 SlotFormer、OCVP-Seq、去掉 reconstruction loss 的对应变体、以及 OC-JEPA。OC-JEPA 与 C-JEPA 结构相同,但 history masking disabled,即 ,用于隔离 object-level masking 的贡献。Push-T baselines 包括 DINO-WM、DINO-WM-Reg.、OC-DINO-WM 和 OC-JEPA。OC-DINO-WM 只把 patch representation 换成 object-centric encoder,但保留 DINO-WM predictor/objective;OC-JEPA 则加入 JEPA-style latent predictor 但不做 history object masking。
4.4 Evaluation metrics
CLEVRER 使用 VQA accuracy:Average per question 是整体问题级准确率;Counterfactual / Explanatory / Predictive 分别报告 per-option 和 per-question accuracy;Descriptive 报告 per-question accuracy。Counterfactual per-question 是最关键指标,因为它要求模型在物体交互变化或假设条件下回答问题,最能检验 interaction-aware latent dynamics。
Push-T 使用 planning success rate (%)。每个 episode 通过 world model rollout 评估 CEM 采样的动作序列,最后按位置和朝向阈值判定成功。论文同时关心 token budget,因为 planning 里 predictor rollout 是主要计算瓶颈;因此 patch tokens 与 object tokens 的对比不仅是表示形式差异,也是计算效率差异。
4.5 Training config and reproducibility anchors
C-JEPA predictor 的通用架构为 6-layer Transformer,16 heads,MLP dimension 2048,per-head dim 64,dropout 0.1,slot dimension 128。论文附录写明 predictor、action encoder、proprio encoder 使用 Adam,learning rate ,训练 30 epochs,batch size 256,在 pre-extracted object embeddings 上单 GPU 训练。released launch scripts 进一步给出实际实验配置:
CLEVRER from-slot C-JEPA(scripts/clevrer/train_cjepa_from_slot.sh):batch_size=256,trainer.max_epochs=30,num_masked_slots=4(VideoSAUR main/best setting;
SAVi checkpoint table 的最佳为 2/7),predictor_lr=5e-4,dinowm.history_size=6,dinowm.num_preds=10,frameskip=2,videosaur.NUM_SLOTS=7,videosaur.SLOT_DIM=128,predictor.heads=16。VQA evaluation 先用 C-JEPA checkpoint 把 128-frame slots rollout 到 160-frame slots,再训练/测试 ALOE;
ALOE 使用 25 time steps、最多 6 objects、slot feature 128、12-layer transformer encoder、8 heads、feedforward dim 512、shared embedding dim 16、MLP hidden size 128、Adam initial LR 、cosine decay 和前 10% warmup、400 epochs。
Push-T AP-node C-JEPA(scripts/pusht/train_cjepa_from_slot.sh):batch_size=256,trainer.max_epochs=30,num_masked_slots=1,predictor_lr=5e-4,proprio_encoder_lr=1e-4,action_encoder_lr=5e-4,dinowm.history_size=3,dinowm.num_preds=1,dinowm.proprio_embed_dim=128,dinowm.action_embed_dim=128,frameskip=5,videosaur.NUM_SLOTS=4,videosaur.SLOT_DIM=128,predictor.heads=16,use_hungarian_matching=false。
Push-T planning(scripts/pusht/test_planning.sh 与 src/plan/solver/cem.yaml):evaluation seeds 为 0, 1, 2;plan_config.horizon=5,receding_horizon=5,action_block=5,总动作序列长度 ;eval.eval_budget=50,goal_offset_steps=25;CEM num_samples=300,topk=30 elites,n_steps=30 iterations,device 为 CUDA。
5. Experimental Results (实验结果)
5.1 CLEVRER main comparison:C-JEPA 不靠 reconstruction,也能提升反事实推理
SAVi encoder 下的主表显示,C-JEPA 在平均准确率和 counterfactual 指标上都是最强:
| Model | Avg per que. (%) | Counterfactual per opt. (%) | Counterfactual per que. (%) |
|---|---|---|---|
| SlotFormer | 79.44 | 79.28 | 47.29 |
| SlotFormer (- recon. loss) | 44.94 | 55.62 | 11.10 |
| OCVP-Seq | 83.11 | 83.21 | 56.06 |
| OCVP-Seq (- recon. loss) | 80.09 | 77.46 | 43.00 |
| OC-JEPA | 77.28 | 76.69 | 41.10 |
| C-JEPA | 83.88 | 85.16 | 60.19 |
完整结果中,C-JEPA 还达到 Explanatory per-option 95.34、Explanatory per-question 87.27、Predictive per-option 87.46、Predictive per-question 77.25、Descriptive 87.81。与 OC-JEPA 相比,平均准确率提升 6.60 points,counterfactual per-option 提升 8.47 points,counterfactual per-question 提升 19.09 points。这个差异很关键:如果提升主要来自更强的 slot encoder 或 transformer 容量,那么 OC-JEPA 应该接近 C-JEPA;但 OC-JEPA 只有 future masking,没有 history object intervention,counterfactual per-question 停在 41.10%。因此最能解释增益的是 object-level history masking 让模型在训练中必须解决 interaction-dependent completion。
另一个观察是 reconstruction loss 的角色。SlotFormer 去掉 reconstruction loss 后 collapse 得很厉害;OCVP-Seq 去掉 reconstruction 后也从 83.11 掉到 80.09,counterfactual per-question 从 56.06 掉到 43.00。C-JEPA 没有 pixel/feature decoder,却能达到 83.88 和 60.19,说明 masked latent prediction 可以替代部分重建监督,并更集中地服务于交互推理。
5.2 Masking budget ablation:遮得太少学不到交互,遮得太多会丢信息
VideoSAUR encoder 下,不同 masked object 数量的结果为:
| Model | | Avg per que. (%) | CF per opt. (%) | CF per que. (%) | |---|---:|---:|---:|---:| | OC-JEPA (V) | 0 | 82.79 | 79.53 | 47.68 | | C-JEPA (V) | 1 | 83.95 | 80.34 | 49.67 | | C-JEPA (V) | 2 | 84.56 | 80.61 | 50.25 | | C-JEPA (V) | 3 | 87.61 | 86.49 | 63.60 | | C-JEPA (V) | 4 | 89.40 | 88.67 | 68.81 |
SAVi encoder 下的趋势略不同: 最好,平均 83.88,counterfactual per-question 60.19; 反而降到平均 73.28、counterfactual per-question 34.06。作者的解释是,最优 masking regime 依赖 encoder robustness:VideoSAUR 的 object slots 更稳定,因此能承受更强遮蔽;SAVi 在高 masking budget 下丢失太多可用依赖,模型无法可靠恢复对象状态。
masking 形态也做了对比。CLEVRER full ablation 中,object-level、token-level、tube-level 都可以在某些 budget 上取得高分,但它们的 inductive bias 不同。Object 4/7 达到 Avg 89.40、CF per-question 68.81;Tube 56% 达到 Avg 89.46、CF per-question 69.81;Token 56% 达到 Avg 89.32、CF per-question 68.88。论文仍强调 object-level masking 的优势不是每个数字都绝对最大,而是它更结构化、可控,并直接对应“某个对象不可观测时由其他对象推断”的 causal/intervention 语义。Push-T 的 masking strategy 表更明显:1/4 budget 下 Object 88.67%,Token 84.67%,Tube 55.33%;2/4 下 Object 82.67%,Token 84.00%,Tube 5.33%,说明 tube-level 在控制任务中过强破坏时序信息,object-level 更稳定。
5.3 Push-T planning:object abstraction 需要 C-JEPA objective 才能接近 patch model
Push-T 结果如下:
| Token budget | Model | Success Rate (%) |
|---|---|---|
| DINO-WM | 91.33 | |
| DINO-WM-Reg. | 88.00 | |
| OC-DINO-WM | 60.67 | |
| OC-JEPA | 76.00 | |
| C-JEPA | 88.67 |
这张表的结论不是“C-JEPA 超过 DINO-WM”,而是“在约 1.02% token-feature budget 下,C-JEPA 接近 DINO-WM”。OC-DINO-WM 的 60.67% 说明把 representation 变成 object-centric 会损失大量动态信息,尤其是 contact-rich 控制中的细粒度交互。OC-JEPA 到 76.00%,说明 joint latent prediction 比直接套用 patch-world-model objective 更适合 object slots。C-JEPA 进一步到 88.67%,说明 history object masking 是关键补偿项。
论文还报告了规划效率:在相同设置和单张 L40S GPU 上,评估 50 trajectories 的平均时间为 C-JEPA 673 seconds,DINO-WM 5,763 seconds,约 8.6 倍速度差。这来自 predictor rollout 的 token 数差异:C-JEPA 以少量 object/entity tokens 做 rollout,而 DINO-WM 在 dense patch token 上做 rollout。对 model predictive control 来说,这个效率差异非常实际,因为 CEM 每次 replanning 都要评估大量候选动作序列;world model 越轻,规划可承受的 samples/iterations 越多。
5.4 Auxiliary-variable integration:AP node 优于 concat
Figure 3 对 action/proprioception 的建模方式做了实验比较。论文结论是,把辅助变量作为单独 entity nodes 优于把它们 concatenate 到 object latents。原因是 action/proprioception 在控制任务中不是静态上下文,而是会改变未来对象状态的外生变量;作为独立 token,它们可以被不同 object slots 以 attention 方式选择性使用。released code 中,AP-node predictor 排除最后两个 auxiliary tokens 的 mask,只对 object tokens 做 object-level masking,这与论文意图一致:动作和 proprioception 作为可见条件变量,而不是被预测目标对象的一部分。
5.5 Limitations and caveats
作者明确指出了几个限制。第一,性能依赖 object-centric encoder 的质量;如果 slot binding 错误、对象分割不稳定或 encoder 不能覆盖关键交互对象,C-JEPA 的 predictor 无法凭空恢复正确 dynamics。SAVi 在高 masking budget 下性能下降就是这个限制的实证表现。第二,论文形式化的是 influence neighborhood,而非真实 causal graph;它说明 masked objective 会诱导使用交互相关变量,但不提供 causal identifiability 保证,也没有在带显式 temporal causal graph 的数据集上验证 neighborhood 是否对应真实图。第三,实验仍集中在合成物理推理和 Push-T 控制,尚未证明在更复杂、真实、多模态或长时域交互环境中同样稳定。
综合来看,C-JEPA 的贡献在于把“对象之间的交互必须被使用”写进了 self-supervised latent prediction objective。它不是通过更多 supervision、像素 decoder 或显式 graph 来获得因果感,而是通过 object-level observability intervention 让模型无法回避交互依赖。实验上,最强证据是 CLEVRER counterfactual per-question 的大幅提升,以及 Push-T 中在 1% token-feature budget 下接近 patch-based DINO-WM 的规划成功率。工程上,读者复现时应优先看 launch scripts 与 commit main@14158308,因为 YAML defaults 与实际实验覆写并不总是一致;同时要记住 released code 的 mask indices 是固定 seed 下重复选择,和论文“随机 mask budget”的文字直觉存在差异。