什么是世界模型

世界模型(World Model)是指 AI 系统内部对物理世界规律的内化表示。它不仅仅是"生成视频",而是理解物体永久性、因果链、物理约束、时间一致性——这些人类婴儿期就开始建立的能力。

Yann LeCun 的 JEPA 论文给出了一个框架性定义:

世界模型能够预测:给定当前状态 $s_t$ 和动作 $a_t$,下一时刻的状态 $s_{t+1}$ 是什么。这个预测不仅包括视觉外观,还包括物理属性、因果关系和不确定性。

LLM 本质上是语言世界模型——它预测下一个 token。但物理世界比语言世界复杂得多:连续状态、不可逆时间、无限维度。

核心方法对比

方法提出者核心思想优势局限
DreamerV3Danijar Hafner在潜空间学习世界模型 + Actor-Critic样本效率高仅游戏/简单控制
JEPAYann LeCun联合嵌入预测架构,预测抽象表示避免像素级生成的困难难以评估
SoraOpenAIDiT 扩散模型生成视频视觉质量高不保证物理正确
GenieDeepMind交互式世界模型,可控生成可控性强分辨率低
CosmosNVIDIA世界基础模型,物理数据训练多模态计算需求大

Sora:视频生成 ≠ 世界模拟

Sora 是 2024 年最轰动的 AI 发布之一。OpenAI 称之为"世界模拟器",但这个说法在学术界引发了激烈争论。

Sora 能做什么

# Sora 架构概览(基于公开信息)
"""
Sora = DiT (Diffusion Transformer) + 视频压缩网络

1. 视频压缩:3D VAE 将视频压缩到时空 latent space
   - 输入:256x256x16 帧 → latent: 32x32x4
   - 压缩比 ~64x

2. DiT 扩散:
   - 在 latent space 做条件扩散
   - 条件:文本 prompt + 参考帧
   - Transformer blocks: 28层, hidden=1024

3. 解码:latent → 视频帧
"""

Sora 的物理理解测试

Tim Brooks 等人在技术报告中展示了 Sora 能模拟的物理现象:

物理现象Sora 表现评价
重力下落✅ 大致正确简单场景可以
碰撞反弹⚠️ 偶尔正确复杂碰撞失败
流体流动✅ 视觉逼真但不保证流量守恒
刚体物理❌ 经常穿模不理解碰撞体
物体永久性❌ 物体凭空消失/出现严重问题
因果推理❌ 因果链断裂先果后因
反射/镜面⚠️ 有时正确多镜面失败

关键问题:模式匹配 vs 物理模拟

# Sora 的"物理"可能只是统计相关
# 测试:球从桌上弹起后能否正确预测弹跳轨迹

import matplotlib.pyplot as plt

# 真实物理引擎(精确)
def true_bounce(x0, y0, vx0, vy0, steps=60):
    """使用 ODE 求解器的真实弹跳"""
    g = 9.81
    positions = []
    x, y, vx, vy = x0, y0, vx0, vy0
    for _ in range(steps):
        vy += g * 0.016  # dt=16ms
        x += vx * 0.016
        y += vy * 0.016
        if y > 0 and y + vy * 0.016 > 0.5:  # 碰地
            vy = -vy * 0.7  # 恢复系数
        positions.append((x, y))
    return positions

# Sora 风格的"物理"(统计生成)
# 问题:第一次弹跳大致对,第二次开始偏离,第三次后完全不可预测
# 因为它没有显式的物理状态跟踪,只有帧间的统计关联

结论: Sora 是出色的视频生成模型,但不是世界模型。它学到了视觉关联,但没有学到物理定律。

Genie:交互式世界模型

DeepMind 的 Genie 走了一条不同的路——它不是生成视频,而是生成可交互的环境

# Genie 架构
"""
Genie = VQ-VAE (视觉分词) + Transformer (自回归) + Latent Action Model

关键创新:无监督发现"隐式动作"

1. VQ-VAE:将每帧图像编码为离散 token
   frame_t → tokens_t

2. Latent Action Model:推断帧间的"动作"
   (frame_t, frame_{t+1}) → action_t (离散)
   这个 action 不是人类定义的,是模型自己发现的

3. Dynamics Model:给定历史帧和动作,预测下一帧
   (tokens_{t-k:t}, action_t) → tokens_{t+1}

4. 交互时:用户提供"动作"(如按键),模型生成对应的下一帧
"""

Genie 的意义在于:它证明了可以从无标签视频中自动发现动作空间,不需要人工标注。

DreamerV3:在"梦境"中学习

DreamerV3 是目前样本效率最高的强化学习方法之一。它的思路是:先学习世界模型,然后在模型"想象"的环境中训练策略。

import torch
import torch.nn as nn

class DreamerV3:
    """简化版 DreamerV3 世界模型"""

    class WorldModel(nn.Module):
        def __init__(self, obs_dim, action_dim, latent_dim=512):
            super().__init__()
            # 编码器:观察 → 潜在状态
            self.encoder = nn.GRU(obs_dim + action_dim, latent_dim, batch_first=True)

            # RSSM (Recurrent State-Space Model)
            # 分解为 deterministic 和 stochastic 部分
            self.prior_net = nn.Sequential(
                nn.Linear(latent_dim, 256),
                nn.SiLU(),
                nn.Linear(256, latent_dim * 2)  # mean, std
            )
            self.posterior_net = nn.Sequential(
                nn.Linear(latent_dim + obs_dim, 256),
                nn.SiLU(),
                nn.Linear(256, latent_dim * 2)
            )

            # 解码器:潜在状态 → 观察重构
            self.decoder = nn.Sequential(
                nn.Linear(latent_dim, 256),
                nn.SiLU(),
                nn.Linear(256, obs_dim)
            )

            # 奖励预测器
            self.reward_head = nn.Sequential(
                nn.Linear(latent_dim, 256),
                nn.SiLU(),
                nn.Linear(256, 1)
            )

        def forward(self, obs_seq, action_seq):
            """在潜在空间中想象"""
            latent_states = []
            h = torch.zeros(1, self.encoder.hidden_size)

            for t in range(obs_seq.size(1)):
                # 先验(预测)
                prior = self.prior_net(h)
                prior_mean, prior_std = prior.chunk(2, -1)

                # 后验(从观察推断)
                posterior_input = torch.cat([h, obs_seq[:, t]], -1)
                posterior = self.posterior_net(posterior_input)
                post_mean, post_std = posterior.chunk(2, -1)

                # 采样
                z = post_mean + post_std * torch.randn_like(post_std)

                # GRU 更新
                _, h = self.encoder(
                    torch.cat([obs_seq[:, t], action_seq[:, t]], -1).unsqueeze(1), h.unsqueeze(0)
                )
                h = h.squeeze(0)
                latent_states.append(z)

            return torch.stack(latent_states, dim=1)

    def imagine_and_learn(self, world_model, policy, horizon=15):
        """在世界模型中想象并训练策略"""
        # 1. 从真实经验中训练世界模型
        # 2. 从当前状态开始想象未来 horizon 步
        # 3. 用想象的轨迹训练 Actor-Critic
        # 关键优势:不需要与环境交互,纯在"脑内"学习
        pass

DreamerV3 在 150+ 个任务上实现了单超参数集合的 SOTA,包括 Atari、DMC、Minecraft。它证明了在好的世界模型中学习比直接在真实环境学习更高效

JEPA:LeCun 的非生成式路线

Yann LeCun 认为,生成式模型(Sora/Diffusion)学世界模型是走错了路——像素级预测太浪费算力,而且容易陷入细节而忽略高层结构。

# JEPA (Joint-Embedding Predictive Architecture) 核心思想
"""
传统生成式:
  x → encoder → s_x
  目标:从 s_x 重构 x(浪费算力在无关细节上)

JEPA:
  x → encoder_x → s_x
  y → encoder_y → s_y
  目标:预测 s_y from (s_x, action)
  不需要重构原始像素!只预测抽象表示。
"""

class JEPA:
    def __init__(self):
        self.context_encoder = VisionTransformer(patch_size=16)
        self.target_encoder = VisionTransformer(patch_size=16)
        self.predictor = TransformerPredictor()

    def forward(self, context_frame, target_frame, action):
        # 编码
        s_context = self.context_encoder(context_frame)
        with torch.no_grad():
            s_target = self.target_encoder(target_frame)

        # 预测目标表示
        s_predicted = self.predictor(s_context, action)

        # 损失:表示空间中的 L2 距离
        loss = F.mse_loss(s_predicted, s_target)

        # EMA 更新 target encoder
        self._update_target_ema()
        return loss

JEPA 的争议点:你优化的是表示空间的预测,但怎么知道这个表示是否包含了物理规律?没有显式的生成,评估很困难。

物理理解评估

怎么判断一个 AI 是否真正"理解"了物理?需要系统化的评估。

PhysBench / Phy-Q 评估体系

评估维度测试方法当前模型表现
物体永久性物体被遮挡后是否还存在GPT-4V: 62%, 人类: 98%
重力直觉预测物体下落方向Sora: 55%, 人类: 96%
碰撞结果预测碰撞后运动方向VLMs: 45%, 人类: 94%
空间推理物体相对位置关系GPT-4V: 71%, 人类: 99%
数量守恒物体数量不随视角变化VLMs: 50%, 人类: 97%
因果推理A 撞 B,B 会怎样LLMs: 40%, 人类: 95%

评估代码示例

class PhysicsUnderstandingEval:
    """物理理解能力评估框架"""

    def __init__(self, model):
        self.model = model
        self.test_cases = self._load_test_cases()

    def eval_object_permanence(self):
        """物体永久性测试"""
        results = []
        for case in self.test_cases["object_permanence"]:
            # 展示物体被遮挡的过程
            frames = case["video_frames"]  # 球滚到墙后
            question = case["question"]     # "球现在在哪里?"

            response = self.model.answer(video=frames, question=question)
            correct = self._check_answer(response, case["answer"])

            results.append({
                "case_id": case["id"],
                "correct": correct,
                "response": response,
            })

        accuracy = sum(r["correct"] for r in results) / len(results)
        return {"object_permanence_accuracy": accuracy}

    def eval_counterfactual(self):
        """反事实物理推理"""
        results = []
        for case in self.test_cases["counterfactual"]:
            # "如果桌子向左倾斜 10 度,球会往哪边滚?"
            image = case["image"]
            question = case["question"]

            response = self.model.answer(image=image, question=question)

            # 检查是否理解了因果链
            correct = self._check_physics_reasoning(response, case["expected_reasoning"])
            results.append({"correct": correct})

        return {"counterfactual_accuracy": sum(r["correct"] for r in results) / len(results)}

未来方向

  1. 混合架构:神经网络学习感知 + 符号系统执行物理推理。纯神经网络路线可能不够
  2. 具身数据:与其从视频被动观察,不如让 Agent 在 3D 环境中交互式探索
  3. 世界模型 + LLM:LLM 提供高层推理,世界模型提供底层物理模拟,二者协同
  4. 评估标准:迫切需要比"看起来对"更严格的物理理解评估基准
  5. Sim-to-Real for World Models:在世界模型中训练的策略能否迁移到真实世界

世界模型是通向 AGI 的关键拼图——没有对物理世界的理解,AI 就只能停留在语言游戏里。2026 年的研究还处于早期,但方向已经清晰。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。