Self-Supervised Learning from Images with a Joint-Embedding Predictive Architecture

Paper: arXiv:2301.08243 Code: facebookresearch/ijepa Code reference: main @ 52c1ae95 (2023-06-13)

1. Motivation (研究动机)

这篇论文要解决的核心矛盾是:视觉自监督学习既要学到足够语义化的表征,又不能把语义学习建立在过强的手工先验或像素级重建细节上。作者把当时主流路线概括为两类:一类是 Joint-Embedding Architecture,例如 SimCLR、BYOL、DINO、iBOT、MSN,通过把同一图像的不同增强视图拉近来学习 invariance;另一类是 generative / reconstruction 方法,例如 MAE、data2vec、Context Autoencoder,通过从被遮挡输入中重建像素、token 或低层信号来学习 representation。前者的问题是需要人为指定哪些增强不应改变语义,例如 crop、color jitter、blur 等,这些增强对分类有利,却可能破坏计数、深度、局部几何等任务所需信息;后者的问题是像素空间有太多不可预测的低层细节,模型为了降低 reconstruction loss 可能把容量花在纹理、背景、边缘和颜色,而不是抽象对象结构。

I-JEPA 的目标是提供第三条路线:不靠手工 view augmentation,也不要求模型复原像素,而是在 latent representation space 中做预测。具体来说,给定同一张图像中的一个可见 context block,模型要预测若干 target blocks 的 target-encoder 表征。这样,任务仍然是 predictive 的:模型必须从局部上下文推断不可见区域;但预测目标不是 RGB 像素,而是经过 target encoder 后的 patch-level representation,因此损失函数会偏向可预测、稳定、语义层级更高的信息。

这个问题值得研究,是因为它直接关系到 Yann LeCun 长期倡导的 JEPA/world-model 路线是否能在真实视觉任务上工作。一个好的 world model 不应逐像素复制未来,而应预测世界状态中对行为、理解和泛化有用的抽象变量。I-JEPA 在静态图像上做的是一个受限版本:从部分可见图像预测不可见区域的 latent state。如果这种训练能同时保留高层语义与局部结构,就说明“latent prediction + joint embedding”可以绕开对比学习的数据增强工程,也能避免 generative reconstruction 的低层细节负担。论文的实验也围绕这一点展开:不仅看 ImageNet linear / low-shot 分类,还看 CIFAR100、Places205、iNat18、Clevr/Count、Clevr/Dist 等迁移任务,检验表示是否兼具语义与局部信息。

Figure 1 解读:这张图给出论文的立场:I-JEPA 在 ImageNet linear evaluation 上接近或超过同类不使用 view augmentation 的方法,同时计算量更低。它不是单纯追求分类精度,而是展示 latent prediction 可以比 pixel reconstruction 更快学到有用语义表示;这为后面“不要在像素空间预测、要在 embedding space 预测”的设计提供动机。

2. Idea (核心思想)

核心 insight 是:如果把预测目标从像素换成 target encoder 的 patch-level embedding,并且让 target blocks 足够大、context 足够分散且信息充分,那么模型被迫学习“区域中应该有什么语义结构”,而不是学习“区域像素长什么样”。I-JEPA 因此把 masked image modeling 从 reconstruction problem 改写成 latent prediction problem:context encoder 只看可见 patches,predictor 结合位置 mask tokens 预测不可见 target blocks 的表征,target encoder 用 EMA 提供稳定但不断演化的目标。

和 MAE 的根本差异在于预测空间不同。MAE 从可见 patches 重建被遮挡像素,decoder 必须处理颜色、纹理、局部边缘等高熵细节;I-JEPA 从可见 context 预测 target-encoder output,损失在 representation space 中计算,目标天然更抽象。和 DINO / iBOT / MSN 等 invariance-based 方法的差异在于任务来源不同:I-JEPA 不需要手工构造两个增强视图并假设它们语义相同,而是直接用同一图像内的空间预测任务学习表示,因此更少引入“哪些变换应不变”的人工偏置。

Figure 2a–2c 解读:Figure 2 把三类自监督架构并排比较。Joint-Embedding Architecture 直接让 compatible 输入 的 embedding 接近,并用 negative samples、stop-gradient 或 variance/covariance regularization 防止 collapse;Generative Architecture 通过 decoder 从 重建 ,通常在 input/token space 中受损失约束;JEPA 则介于两者之间,用 predictor 从 的 embedding 预测 的 embedding,并可通过条件变量 指定要预测的位置或其它 latent 条件。I-JEPA 是 Figure 2c 在图像 patch 上的实例化。

3. Method (方法)

3.1 Overall framework:三套网络与一个 latent prediction 目标

I-JEPA 使用三套 ViT 组件:context encoder 、target encoder 、predictor 。输入图像 被切成 个 non-overlapping patches。target encoder 处理完整图像并输出 patch-level 表征 ;context encoder 只处理 context mask 保留下来的 patches,得到 ;predictor 接收 和待预测位置的 mask tokens,输出 target block 对应 patch 的预测

Figure 3 解读:图中左侧完整图像进入 target encoder,产生每个 patch 的 latent target;右侧 context block 进入 context encoder,只编码可见区域。彩色 positional mask tokens 告诉 predictor 需要预测哪些 target block 的位置。关键点是 target 表征来自完整图像的 target encoder 输出,但训练时只在这些输出上取 target blocks;context encoder 不看到这些 blocks,因此任务不是复制输入,而是从上下文推断 latent target。

直觉上,I-JEPA 有两个相互制衡的设计:target encoder 让目标足够抽象,避免像素级不可预测细节;multi-block masking 让任务足够困难,避免只靠附近纹理插值。EMA target encoder 则提供稳定 teacher-like target,降低 joint-embedding 训练中的 collapse 风险。由于 context encoder 和 target encoder 架构相同且 target encoder 由 context encoder EMA 更新,模型不是固定教师蒸馏,而是在训练过程中逐步提升目标空间。

3.2 Targets:在 target-encoder 输出上遮挡,而不是在输入上遮挡

给定输入图像 ,target encoder 输出所有 patch 的 representation: 随后随机采样 个 target blocks。论文默认 ,target block scale 在 ,aspect ratio 在 。第 个 block 的 mask 记为 ,对应 target representation 为: 这一点看似细节,实则是论文最重要的机制之一:target blocks 是在 target-encoder output 上取出来,而不是先裁出输入区域再编码。若先遮挡输入,target encoder 只能看到局部图像,目标更偏低层;若先完整编码再在输出上取 blocks,target patch representation 可以利用全图上下文,语义层级更高。Appendix 的 ablation 直接证明:ViT-H/16 预训练 300 epochs 后,在 ImageNet-1K 1% linear probe 上,output masking 得到 67.3 Top-1,input masking 只有 56.1。

3.3 Context:大 context block 去掉 target overlap,制造非平凡预测

context block 从同一图像中采样,默认 scale 为 ,aspect ratio 固定为 ,对应 mask 为 。由于 target blocks 和 context block 独立采样,二者可能重叠;I-JEPA 会从 context 中移除所有与 target blocks 重叠的区域,使 predictor 不能直接看到答案。context encoder 只处理保留下来的 patches:

Figure 4 解读:蓝色/可见区域表示 context,彩色块表示待预测 target blocks。target blocks 相对大,通常覆盖语义部件或对象区域;context block 大但扣掉 target overlap 后变得稀疏。这个设计避免了两种失败:如果 target 太小,任务可能退化成局部纹理补全;如果 context 太小或太集中,预测缺少足够信息,训练信号会变噪。

released code 中这一逻辑由 src/masks/multiblock.pyMaskCollator 实现。_sample_block_size() 根据 scale 和 aspect ratio 采样 block 尺寸;_sample_block_mask() 采样位置并返回 mask 与 complement;__call__() 对每个 batch 先采样多个 prediction masks,再把这些 target complements 作为 acceptable regions 约束 encoder mask,从而在 allow_overlap: false 时删除 target overlap。为了便于同一 GPU 上 batch collate,代码会把 context masks 和 prediction masks 截断到各自 batch 内的最小 keep 数。

3.4 Predictor:位置条件化的窄 ViT

对于第 个 target block,predictor 接收 context encoder 输出 与该 block 每个 patch 的 mask token ,输出: mask token 由一个共享 learnable vector 加上固定位置 embedding 参数化。由于有 个 target blocks,论文描述为对每个 target block 调用 predictor 一次。released code 的 VisionTransformerPredictor.forward() 等价地把 context tokens 映射到 predictor_embed_dim=384,加上 context 位置 embedding;再对 prediction mask 取位置 embedding,与 mask_token 相加得到 pred_tokens;最后把 context tokens 与 pred tokens concat,经过 predictor transformer blocks,只返回 pred-token 部分并投影回 encoder embedding dimension。

3.5 Loss 与 EMA target encoder

论文给出的损失是 predicted patch-level representation 与 target patch-level representation 的平均 距离: 优化时,predictor 参数 与 context encoder 参数 通过梯度下降更新;target encoder 参数 不反传,而是通过 EMA 更新: 论文默认 EMA momentum 从 线性升到 。released code 在 src/train.py 中先 target_encoder(imgs),对输出做 F.layer_norm,再用 apply_masks(h, masks_pred) 取 target regions,并用 repeat_interleave_batch 对齐 context/pred mask 组合;context 分支执行 encoder(imgs, masks_enc)predictor(z, masks_enc, masks_pred);loss 使用 F.smooth_l1_loss(z, h) 并做 distributed AllReduce。论文公式与 released code 实现差异:论文正文写的是平均 squared ,而官方代码在 target 特征上先做 layer normalization,并用 Smooth L1 loss;这会让训练对异常残差更稳健,也说明 note 中的伪代码不能只按论文公式写成裸 MSE。

3.6 Source-grounded pseudocode

class MultiBlockMaskCollator:
    def __call__(self, batch):
        imgs = default_collate(batch)
        pred_size = sample_block_size(scale=(0.15, 0.2), aspect=(0.75, 1.5))
        enc_size = sample_block_size(scale=(0.85, 1.0), aspect=(1.0, 1.0))
        all_pred_masks, all_enc_masks = [], []
        for image in imgs:
            pred_masks, pred_complements = [], []
            for _ in range(4):
                mask, complement = sample_block_mask(pred_size)
                pred_masks.append(mask)
                pred_complements.append(complement)
            acceptable = pred_complements  # allow_overlap=False in released configs
            enc_mask, _ = sample_block_mask(enc_size, acceptable_regions=acceptable)
            all_pred_masks.append(pred_masks)
            all_enc_masks.append([enc_mask])
        return imgs, collate_and_truncate(all_enc_masks), collate_and_truncate(all_pred_masks)
def predictor_forward(context_tokens, context_masks, pred_masks, predictor):
    B = len(context_tokens) // len(context_masks)
    x = predictor.predictor_embed(context_tokens)
    x = x + apply_masks(predictor.pos_embed.repeat(B, 1, 1), context_masks)
    pos = apply_masks(predictor.pos_embed.repeat(B, 1, 1), pred_masks)
    pos = repeat_interleave_batch(pos, B, repeat=len(context_masks))
    pred_tokens = predictor.mask_token.repeat(pos.size(0), pos.size(1), 1) + pos
    x = torch.cat([x.repeat(len(pred_masks), 1, 1), pred_tokens], dim=1)
    for block in predictor.predictor_blocks:
        x = block(x)
    x = predictor.predictor_norm(x)
    return predictor.predictor_proj(x[:, -pred_tokens.size(1):])
def ijepa_train_step(imgs, masks_enc, masks_pred, encoder, target_encoder, predictor, optimizer, momentum):
    with torch.no_grad():
        h = target_encoder(imgs)
        h = F.layer_norm(h, (h.size(-1),))
        h = apply_masks(h, masks_pred)
        h = repeat_interleave_batch(h, B=len(imgs), repeat=len(masks_enc))
    z = encoder(imgs, masks_enc)
    z = predictor(z, masks_enc, masks_pred)
    loss = F.smooth_l1_loss(z, h)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
    with torch.no_grad():
        for q, k in zip(encoder.parameters(), target_encoder.parameters()):
            k.data.mul_(momentum).add_((1.0 - momentum) * q.detach().data)
    return loss

Code reference: main @ 52c1ae95 (2023-06-13) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
读取 YAML experiment config 并启动本地训练main.pyprocess_main, parser --fname --devices
分布式 / SLURM 启动main_distributed.pysubmitit entrypoint;README 给出 2 nodes × 8 tasks 复现实验
context encoder / predictor / optimizer 初始化src/helper.pyinit_model, init_opt
I-JEPA 训练循环、target branch、context branch、EMAsrc/train.pymain, nested forward_target, forward_context, loss_fn
Multi-block context/target mask samplingsrc/masks/multiblock.pyMaskCollator, _sample_block_size, _sample_block_mask
mask index 应用到 patch tokenssrc/masks/utils.py, src/utils/tensors.pyapply_masks, repeat_interleave_batch
predictor 的 mask token + positional conditioningsrc/models/vision_transformer.pyVisionTransformerPredictor.forward
ViT-H/14 ImageNet-1K 主实验配置configs/in1k_vith14_ep300.yamlmodel_name=vit_huge, patch_size=14, pred_depth=12, pred_emb_dim=384
ViT-H/16 448px 低标注强模型配置configs/in1k_vith16-448_ep300.yamlcrop_size=448, patch_size=16, epochs=300

4. Experimental Setup (实验设置)

Datasets and scale. 预训练主要使用 ImageNet-1K 和 ImageNet-22K。ImageNet-1K 是 1000 类、约 1.28M 训练图像与 50k validation 图像;ImageNet-1K 1% low-shot 使用约每类 12 或 13 张标注图像。ImageNet-22K 用于数据规模扩展,常用规模约 14M 图像、约 22K 类;官方 released code 对 IN22K config 明确注明 dataloader 未实现,需要用户按自己的存储格式补齐。迁移评估包括 CIFAR100(100 类,50k train / 10k test)、Places205(205 scene classes,约 2.5M train images)、iNaturalist18(细粒度自然物种分类,约 437k train images)、Clevr/Count 与 Clevr/Dist(CLEVR synthetic scenes,常用 70k train / 15k val / 15k test),其中 Clevr/Count 测 object counting,Clevr/Dist 测 depth/distance prediction。

Baselines. 不使用 view data augmentation 的主要对比包括 MAE、data2vec、CAE;使用额外 hand-crafted view augmentations 的对比包括 SimCLR v2、BYOL、DINO、iBOT、MSN。论文有意把这两组分开,因为 I-JEPA 的主张不是“比所有 contrastive/invariance 方法都高”,而是在不依赖手工增强的情况下获得语义 representation,并缩小或超过 augmentation-based 方法在部分任务上的差距。

Evaluation metrics. ImageNet linear evaluation 是冻结 encoder 后用全 ImageNet-1K 训练集训练线性分类器,报告 Top-1 accuracy;ImageNet-1% 是只用 1% labels 做 fine-tuning 或 linear probing,按各方法最优协议报告 Top-1;transfer classification 在 CIFAR100、Places205、iNat18 上冻结 backbone 做 linear probe;Clevr/Count 与 Clevr/Dist 也是冻结 backbone 后训练线性头,分别报告 object counting / depth prediction 的任务分数;scaling 图用 ImageNet-1K 1% semi-supervised accuracy 对 pretraining GPU hours 作横轴比较。

Training config from released experiment files. 主 ImageNet-1K ViT-H/14 配置来自 configs/in1k_vith14_ep300.yamlmodel_name=vit_hugecrop_size=224patch_size=14pred_depth=12pred_emb_dim=384num_pred_masks=4num_enc_masks=1pred_mask_scale=(0.15,0.2)enc_mask_scale=(0.85,1.0)aspect_ratio=(0.75,1.5)allow_overlap=falseepochs=300,per-process batch_size=128,README 说明复现实验应在 16 A100 80G 上运行以获得 effective batch size 2048。

优化器是 AdamW;config 中 start_lr=0.0002lr=0.001final_lr=1e-6warmup=40weight_decay=0.04final_weight_decay=0.4、EMA 从 0.9961.0use_bfloat16=true。ViT-H/16 448px 配置来自 configs/in1k_vith16-448_ep300.yaml,关键差异是 crop_size=448patch_size=16、per-process batch_size=16

IN22K 配置来自 configs/in22k_vith14_ep66.yamlconfigs/in22k_vitg16_ep44.yaml:对应 ViT-H/14 66 epochs 与 ViT-G/16 44 epochs,但 paper/table 以等效 IN1K epochs 报告为 900 与 600。

Downstream protocol. 因为 I-JEPA 预训练不使用 [cls] token,评估时不直接套用 DINO/iBOT 的 [cls] recipe,而是用 average-pooled patch representations。linear evaluation 在 ImageNet 上使用 LARS、batch size 16384、50 epochs,学习率 step-wise decay 每 15 epochs 除以 10,并 sweep reference LR [0.01,0.05,0.001] 与 weight decay [0.0005,0.0]

ImageNet-1% low-shot 采用类似 MAE 的 50-epoch AdamW fine-tuning、cosine LR、batch size 512、layer decay 0.75、label smoothing 0.1、RandAugment;但相对 MAE 不用 mixup、cutmix、random erasing 或 drop path。Full ImageNet fine-tuning 用 50 epochs AdamW、base LR 、batch size 528、mixup 0.8、cutmix 1.0、drop path 0.25、weight decay 0.04、layer decay 0.75。

5. Experimental Results (实验结果)

5.1 Main ImageNet results

SettingMethod / ArchEpochsTop-1
ImageNet linear evaldata2vec ViT-L/16160077.3
ImageNet linear evalMAE ViT-H/14160077.2
ImageNet linear evalCAE ViT-L/16160078.1
ImageNet linear evalI-JEPA ViT-B/1660072.9
ImageNet linear evalI-JEPA ViT-L/1660077.5
ImageNet linear evalI-JEPA ViT-H/1430079.3
ImageNet linear evalI-JEPA ViT-H/1630081.1
ImageNet linear evaliBOT ViT-L/1625081.0
ImageNet-1%data2vec ViT-L/16160073.3
ImageNet-1%MAE ViT-H/14160071.5
ImageNet-1%I-JEPA ViT-H/1430073.3
ImageNet-1%I-JEPA ViT-H/1630077.3
ImageNet-1%MSN ViT-B/430075.7

这些数字支持两个结论。第一,在不依赖 view augmentation 的方法中,I-JEPA 明显优于 MAE / data2vec / CAE,尤其 ViT-H/14 只用 300 epochs 达到 79.3 linear Top-1,而 MAE ViT-H/14 1600 epochs 为 77.2。第二,扩大输入分辨率后,I-JEPA ViT-H/16 在 linear eval 上达到 81.1,略高于 iBOT ViT-L/16 的 81.0;在 1% labels 上达到 77.3,高于 MSN ViT-B/4 的 75.7。这里最重要的不是绝对 SOTA,而是 I-JEPA 在不使用手工 view augmentation 的前提下可以逼近甚至超过依赖这些增强的强 baseline。

Figure 5 解读:横轴是 pretraining GPU hours,纵轴是 ImageNet-1K 1% semi-supervised performance。论文强调 I-JEPA 虽然要额外计算 target encoder latent targets,单步约慢 7%,但收敛需要的迭代远少于 reconstruction 方法,因此总体 compute 更省。相对 iBOT 这类多视图增强方法,I-JEPA 也避免了多 view 处理和复杂增强开销。

5.2 Transfer and local prediction

Taskdata2vecMAEI-JEPADINOiBOT
CIFAR100 linear probe81.677.387.584.988.3
Places205 linear probe54.655.058.457.960.4
iNat18 linear probe28.132.947.655.957.3
Clevr/Count85.390.586.786.685.7
Clevr/Dist71.372.472.453.462.8

I-JEPA 在 CIFAR100 和 Places205 上超过 DINO,并显著高于 MAE/data2vec;在 iNat18 上仍落后 iBOT/DINO,但比不使用 augmentation 的方法高很多。低层任务更能说明设计权衡:I-JEPA 的 Clevr/Dist 达到 72.4,与 MAE 并列且显著高于 DINO 53.4 和 iBOT 62.8;Clevr/Count 为 86.7,略低于 MAE 90.5,但高于 DINO/iBOT。这说明 I-JEPA 的 latent prediction 没有像强 invariance 方法那样完全丢弃局部结构,对 depth/distance 这类空间任务尤其有帮助。

5.3 Scaling dataset and model size

PretrainArchCIFAR100Places205iNat18Clevr/CountClevr/Dist
IN1KViT-H/1487.558.447.686.772.4
IN22KViT-H/1489.557.850.588.675.0
IN22KViT-G/1689.559.155.386.773.0

数据规模从 IN1K 扩大到 IN22K 后,ViT-H/14 在 CIFAR100、iNat18、Clevr/Count、Clevr/Dist 上均提升,Places205 略降到 57.8。模型从 ViT-H/14 扩大到 ViT-G/16 后,语义分类任务继续改善,例如 Places205 59.1、iNat18 55.3;但局部任务没有同步提升,Clevr/Count 回到 86.7,Clevr/Dist 降到 73.0。论文解释与 patch size 有关:ViT-G/16 使用更大的 patches,对局部 prediction tasks 可能不利。

5.4 Ablations:masking、target space、predictor bottleneck

最强的 ablation 是 masking strategy。ViT-B/16 预训练 300 epochs 后,在 ImageNet-1K 1% linear probe 上,multi-block masking 得到 54.2;rasterized quadrant 只有 15.5;单 block target 为 20.2;random patches 为 17.6。进一步改变 multi-block 设置时,target scale 从 使 Top-1 从 19.2 提升到 54.2,但继续变大到 下降到 38.9 和 33.6;context scale 从 增加到 时 Top-1 从 31.2 提升到 54.2;target block 数从 1、2、3、4 增加时 Top-1 分别为 9.0、22.0、48.5、54.2。这组结果精确支持论文的设计原则:target 要足够语义化、数量要足够多,context 也要足够 informative。

另一组 ablation 说明 target space 非常关键。ViT-L/16 预训练后,预测 target-encoder output 得到 66.9,而预测 pixels 只有 40.7;ViT-H/16 中 output masking 为 67.3,input masking 为 56.1。这不是小差异,而是决定 I-JEPA 是否学习语义表示的核心。predictor 结构也不能随意:ViT-L/16 中 predictor depth 12 得到 66.9,高于 depth 6 的 64.0;predictor width 384 得到 70.7,高于 1024 的 68.4,说明窄 predictor bottleneck 可能阻止 predictor 过度记忆低层细节,迫使 encoder 学更可迁移的抽象。

weight decay 的结论稍微复杂:默认 在 ImageNet linear-eval 上 77.8,高于固定 0.05 的 76.4;但固定 0.05 在 ImageNet-1% fine-tuning 上 70.7,高于默认的 69.4。因此主文选择递增 weight decay,是因为它更符合 frozen linear representation 的目标,而不是每个下游 protocol 都最优。Full ImageNet fine-tuning 中,I-JEPA ViT-H/16 300 epochs 得到 87.1,MAE ViT-H/14 1600 epochs 为 87.8;I-JEPA 低 0.7,但预训练 epoch 少 5.3 倍。

5.5 Representation visualizations and limitations

Figure 6 解读:每行第一列是原图,第二列是 context image,绿色框内是用 RCDM decoder 从 I-JEPA predictor 输出可视化出的样本。多个 samples 共有的内容表示 predictor representation 中保留的信息;变化的内容表示 representation 没有精确指定的信息。图中 predictor 往往能给出正确的对象部件、姿态和空间位置,例如鸟背、车顶等,但不会固定背景纹理和低层细节。

Figure 7 解读:这里可视化的是 I-JEPA target encoder 的 average-pooled representation。decoder samples 保留对象类别、姿态等高层信息,但背景和精细像素变化较大。它说明 I-JEPA encoder 的 representation 更像抽象状态,而不是图像压缩码。

Figure 8 解读:MSN 的可视化也能保留部分语义,但样本中对象姿态、尺度、数量变化更明显。论文用它对比说明:强 view-invariance 训练可能丢失更多局部结构,而 I-JEPA 的空间预测任务更倾向于保留对象部件和布局信息。

局限性方面,论文没有把 I-JEPA 描述成完整 world model。它仍然是静态图像内的 masked latent prediction,不能处理时间、动作或因果交互;ViT-G/16 在局部任务上不如 ViT-H/14,也说明单纯扩大模型不必然改善空间精度;released code 对 IN22K dataloader 没有实现,复现 IN22K 结果需要额外工程;另外,paper 公式和 released code loss 存在 Smooth L1 / layer norm 差异,复现实验应以代码和具体 config 为准。整体结论是:I-JEPA 证明了 latent-space prediction 可以在视觉自监督中同时获得语义、局部结构和 compute efficiency,是 JEPA 路线在图像表征学习上的强实证支撑,但它还不是具备动作条件、长时序预测能力的通用世界模型。