跳转至

物理世界模型:真正在做物理理解的工作

最后更新: 2026-04-17 | "皇帝新衣"的姐妹篇——有批判也有建设性方案

前言:两类世界模型的根本分歧

Kepler vs Newton 世界模型对比(arXiv:2602.06923 Figure 1)

Causal-JEPA 训练架构(arXiv:2602.11389 Figure 1)

V-JEPA 直觉物理评估(arXiv:2502.11831 Figure 1)

PIN-WM 可微物理引擎框架(arXiv:2504.16693 Figure 1)

  • 预测型(Sora/Genie/Dreamer):追求视觉逼真

  • 理解型(本文聚焦):追求因果可控和守恒性


一、显式物理约束的世界模型

PhyDNet (CVPR 2020)

双分支:PhyCell (PDE约束) + ConvLSTM (残差)

PhyCell 建模广义线性 PDE,涵盖热方程/波动/平流-扩散,采用预测-校正格式(类卡尔曼滤波)。

实验(vs SOTA):

  • Moving MNIST MSE: 24.4 (vs E3D-LSTM 41.3, 降低41%)

  • Moving MNIST SSIM: 0.947 (vs ConvLSTM 0.707)

  • 引用 300+,后续 PastNet (ACM MM 2024) 在 Fourier 域延伸

局限:仅线性 PDE,无法处理接触非线性。

PINNs (Raissi 2019)

将 PDE 残差编入损失:L = L_data + L_physics

  • 适用正/逆问题

  • 为什么没成为主流?维度诅咒 / 需已知PDE / 优化困难 / 比数值方法慢10-100× / 不支持动作输入

Interaction Networks (DeepMind NeurIPS 2016)

第一个通用可学习物理引擎:物体=节点,关系=边。奠定"物理=图上消息传递"范式。后续 Visual Interaction Networks (2017) 从像素端到端。


二、物理信息图神经网络

GNS (ICML 2020, DeepMind)

粒子→图节点,邻近粒子→边,10步消息传递,输出每粒子加速度。

性能:

  • 流体/颗粒/多材料混合均有效

  • Geoelements-GNS: 比 MPM 快 5000× (2.5h → 20s)

  • 训练 2000 粒子 → 测试扩展至 20000+ (10× 外推)

Dynami-CAL GraphNet (Nature Communications 2025)

核心创新:在边局部参考系中精确保证牛顿第三定律

F_ij = -F_ji, τ_ij = -τ_ji

vs GNS:

  • 3D颗粒碰撞500步: GNS粒子逸出; Dynami-CAL稳定

  • 旋转料斗16000步: GNS早期失稳; Dynami-CAL全程准确

  • 封闭系统: GNS出现非物理动能增益; Dynami-CAL精确保持动量

  • 仅需 500 训练样本即达强性能

  • 测试: 3D颗粒/N体/人体运动(CMU mocap)/蛋白质动力学

其他 (2024-2026)

  • SEGNO (NeurIPS 2023): E(3)等变GNN + 牛顿方程

  • Reversible GNS (2025): 可逆网络实现时间双向一致

  • LLM-GNN 物理法则发现 (Nature Comms 2025)


三、可微分物理引擎

DiffTaichi (MIT ICLR 2020)

源代码变换生成梯度(非反传计算图),10个物理模拟器:弹性体/流体/刚体/布料/台球等。代码比手写CUDA短4.2×,比TensorFlow快188×。

Brax (Google NeurIPS 2021)

纯JAX,GPU/TPU并行。单GPU: 每秒百万步。TPU集群: 每秒数亿步。学习算法与环境同设备运行,零CPU↔GPU拷贝。

NVIDIA Newton (2025)

NVIDIA + Google DeepMind + Disney 联合,Linux Foundation开源。基于Warp。人形机器人仿真加速70×,灵巧手100×。含MuJoCo-Warp。

MuJoCo MJX

闭源(2012) → 开源(2022) → MJX JAX版(2023) → MuJoCo Playground(2025)。支持自动微分。单GPU几分钟完成策略训练。

Drake (MIT)

多体动力学,TRI资助。暴露完整稀疏结构/解析梯度。MIT操控课程标准工具。


四、从视频中学习物理的新范式

"From Kepler to Newton" (arXiv:2602.06923, 2026)

三个归纳偏置打破开普勒陷阱:

  1. 空间平滑性: 减小词表V=128 → R²从0.86→1.0

  2. 空间稳定性: 历史输入加噪σ=0.1

  3. 时间局部性(最关键): 注意力窗口限长度=2

当窗口=2时,力表征R²=0.999(牛顿涌现);窗口长时R²=0.9(开普勒拟合)

局限:仅合成轨迹,未在真实视频验证。

Causal-JEPA (arXiv:2602.11389, 2026)

LeCun 参与。与标准JEPA区别:物体级掩码(非patch级)。

  • 掩码整个物体的表征,强制建立物体间因果交互

  • 用 1.02% 的潜变量特征 vs patch级100%

  • 规划速度快8×

  • CLEVRER反事实推理提升~20%,整体83.88%

  • 形式化证明:物体级掩码通过潜在干预诱导因果归纳偏置

V-JEPA 直觉物理 (arXiv:2502.11831)

"惊异度"机制:预测表征与实际表征的L1距离。物理不可能→惊异度升高。

  • IntPhys物体恒常性: 85.7% (vs 未训练基线 51.4%)

  • IntPhys连续性: 86.3%

  • 形状恒常性: 83.7%

为什么V-JEPA远超GPT-4V/Gemini?

  • VideoMAEv2/Qwen2-VL/Gemini 均≈随机

  • 关键:表征空间预测天然建立"预期状态"内部模型

  • 像素预测不强迫建立抽象物体表征

  • 仅128小时HowTo100M视频 → 准确率>70%

符号回归

  • AI Feynman (Tegmark 2020): 100/100 Feynman方程, 困难集从15%→90%

  • PySR (Julia生态): 进化搜索+并行

  • LLM-SR (ICLR 2025): LLM先验注入PySR

  • 符号回归×世界模型的直接结合: 几乎无工作,重要研究空白


五、具身世界模型中的物理

PIN-WM (RSS 2025)

专为非抓取操作(推/翻转),可微物理引擎识别真实参数(质量/恢复系数/摩擦),3D Gaussian渲染。

真实机器人:

  • 推成功率: 75% (vs ASID 40%)

  • 翻转: 65% (vs ASID 0%)

GWM (ICCV 2025)

3D Gaussian表示 + 潜在扩散DiT,预测动作条件下的未来Gaussian状态。几何精度优于像素世界模型。

RoboScape (NeurIPS 2025 Spotlight)

双分支协同自回归Transformer (34M-544M)。深度+关键点辅助。与真实仿真器Pearson相关0.953。

GigaWorld-0 (极佳视界)

三阶段可微物理:参数采样→代理模型→梯度精化。PBench 82.07分 (超Cosmos-Predict2.5的79.95)。


六、天气/气候:隐式物理世界模型

Aurora (Microsoft, Nature 2025)

1.3B参数,100万+小时气象数据。超越91%预报目标。比ECMWF快5000×。

GNN/Transformer大规模训练。

是否算"真正物理WM"?严格说不是:

  • 无能量/质量守恒保证

  • 长程预报"模糊化"(回归气候均值)

但在统计层面极其有效,属于"隐式物理WM"(physics-like, not physics-constrained)。


层次1: 守恒性 (Conservation)

  • 精确保证守恒定律

  • 代表: Dynami-CAL GraphNet, PINNs

  • 最强约束,但泛化性差

八、五大研究空白

  1. 像素→物理参数端到端: PIN-WM初步实现, 受限刚体

  2. 非线性PDE可扩展约束: PINNs/PhyDNet无法处理湍流

  3. 物理守恒 × 视频生成统一: Dynami-CAL有守恒无渲染; Sora有渲染无守恒

  4. 符号回归 × 世界模型: 用WM生成轨迹再提取定律, 几乎无直接工作

  5. 真实世界物理泛化: Kepler→Newton归纳偏置能否在真实视频中有效?

参考

  • PhyDNet (CVPR 2020): arXiv:2003.01460

  • GNS (ICML 2020): arXiv:2002.09405

  • Dynami-CAL (Nature Comms 2025): arXiv:2501.07373

  • DiffTaichi (ICLR 2020): arXiv:1910.00935

  • Newton (NVIDIA 2025): developer.nvidia.com

  • From Kepler to Newton (2026): arXiv:2602.06923

  • Causal-JEPA (2026): arXiv:2602.11389

  • V-JEPA intuitive physics (2025): arXiv:2502.11831

  • PIN-WM (RSS 2025): arXiv:2504.16693

  • GWM (ICCV 2025)

  • RoboScape (NeurIPS 2025 Spotlight): arXiv:2506.23135

  • AI Feynman (Science Advances 2020)

  • Aurora (Nature 2025)


关键数学公式

PhyDNet: PDE 约束

PhyCell 建模广义线性 PDE:

\(\Phi(h(t,x)) = \sum_{i+j \leq q} c_{i,j} \cdot \frac{\partial^{i+j} h}{\partial x^i \partial y^j}\)

预测-校正两步更新(类卡尔曼滤波):

预测步:\(\tilde{h}_{t+1} = h_t + \Phi(h_t)\)

校正步:\(h_{t+1} = \tilde{h}_{t+1} + K_t \odot (E(u_t) - \tilde{h}_{t+1})\)

矩约束:\(\mathcal{L}_{moment} = \sum \|M(w_{p,ij}^k) - \Delta_{ij}^k\|_F\)

PINNs: 物理残差损失

\(\mathcal{L} = \underbrace{\|u_{\theta}(x,t) - u_{data}\|^2}_{\text{数据项}} + \underbrace{\left\|\frac{\partial u}{\partial t} + \mathcal{N}[u]\right\|^2}_{\text{PDE残差项}}\)

其中 N[u] 是 PDE 算子(如 Navier-Stokes),通过自动微分计算残差。

GNS: 粒子图更新

消息传递:\(e_{ij}^{\prime} = f_e(e_{ij}, v_i, v_j)\)

节点聚合:\(v_i^{\prime} = f_v\left(v_i, \sum_{j \in \mathcal{N}(i)} e_{ij}^{\prime}\right)\)

加速度预测:\(\ddot{x}_i = \text{Decoder}(v_i^{\prime})\)

状态积分:\(x_{t+1} = x_t + \dot{x}_t \Delta t + \frac{1}{2}\ddot{x}_i \Delta t^2\)

Dynami-CAL: 精确动量守恒

在边局部参考系中强制牛顿第三定律:

\(\mathbf{F}_{ij} = -\mathbf{F}_{ji}, \quad \boldsymbol{\tau}_{ij} = -\boldsymbol{\tau}_{ji}\)

保证线动量和角动量精确守恒(非近似),任何时间步长下成立。

From Kepler to Newton: 力的涌现

时间局部性(上下文窗口=2)→ 模型被迫学习瞬时力:

\(\mathbf{F} = m \cdot \frac{\mathbf{x}_{t+1} - 2\mathbf{x}_t + \mathbf{x}_{t-1}}{\Delta t^2}\)

力探针 R²:\(R^2(\hat{F}, F_{\text{true}}) = 0.999 \text{ (context=2)}\)

对比:\(R^2 \approx 0.9 \text{ (context=all, 开普勒拟合)}\)

Causal-JEPA: 物体级干预

掩码 token:\(\hat{z}_{masked} = W_{anchor} \cdot \mathbf{1}_{anchor} + e_{temporal}\)

训练目标:\(\mathcal{L} = \underbrace{\|\hat{z}_{history} - z_{history}\|_2^2}_{\text{历史恢复}} + \underbrace{\|\hat{z}_{future} - z_{future}\|_2^2}_{\text{未来预测}}\)

物体级掩码 → 强制建立物体间因果交互表征。仅用 1.02% 潜变量特征。

V-JEPA 惊异度机制

惊异度:\(S(v) = \|P_\phi(\tilde{v}) - E_{\bar{\theta}}(v)\|_1\)

对物理不可能视频(物体消失),S 显著升高 → 二元分类物理可能/不可能。

PIN-WM: 可微物理参数识别

参数集:\(\theta = [\theta^M, \theta^k, \theta^\mu] \quad (\text{质量/恢复系数/摩擦})\)

渲染损失:\(\mathcal{L} = \|\text{render}(\text{sim}(\theta)) - I_{\text{obs}}\|_2^2\)

通过 3D Gaussian Splatting 渲染 + 可微物理引擎反传梯度到物理参数。


工程实现要点

GNS 核心前向传播

# GNS (Graph Network Simulator) 核心实现
# 参考: github.com/google-deepmind/graph_nets

class GNS(nn.Module):
    def __init__(self, d_node=128, d_edge=128, n_layers=10):
        # 10层消息传递 (论文最佳值)
        self.encoder_node = MLP(in_features=state_dim, out_features=d_node)
        self.encoder_edge = MLP(in_features=rel_dim, out_features=d_edge)
        self.processors = nn.ModuleList([
            InteractionBlock(d_node, d_edge) for _ in range(n_layers)
        ])
        self.decoder = MLP(d_node, out_features=3)  # 输出: 加速度 (x,y,z)

    def forward(self, particles, edges):
        """
        particles: (N, state_dim)  # 位置+速度+属性
        edges: (E, 2) 邻接关系 (半径r内连接)
        """
        v = self.encoder_node(particles)    # (N, 128)
        e = self.encoder_edge(edge_feats)   # (E, 128)

        for proc in self.processors:
            # 消息传递: 边→节点→边
            e_new = proc.edge_fn(e, v[edges[:,0]], v[edges[:,1]])
            v_agg = scatter_add(e_new, edges[:,1], dim=0)  # 聚合邻居消息
            v = proc.node_fn(v, v_agg)
            e = e_new

        accel = self.decoder(v)             # (N, 3) 加速度
        return accel

    # 训练时加噪: 防止自回归误差累积
    # particles_noisy = particles + N(0, sigma_noise)

Dynami-CAL 动量守恒约束

# Dynami-CAL GraphNet 核心: 边局部参考系 + 牛顿第三定律
# 参考: Nature Communications (2025), arXiv:2501.07373

class DynamiCALLayer(nn.Module):
    def forward(self, v_i, v_j, r_ij):
        """
        v_i, v_j: 节点特征
        r_ij: 边方向向量 (i→j)
        """
        # 1. 构建边局部参考系 (旋转等变+平移不变)
        e_parallel = r_ij / (r_ij.norm() + eps)     # 平行于连线
        e_perp = cross(e_parallel, z_hat)             # 垂直分量
        R_ij = stack([e_parallel, e_perp, cross()])   # 3x3 旋转矩阵

        # 2. 在局部参考系中预测力
        local_input = cat([R_ij @ v_i, R_ij @ v_j, r_ij.norm()])
        F_local = self.force_mlp(local_input)         # (3,) 局部力

        # 3. 牛顿第三定律: F_ij = -F_ji (精确, 非近似!)
        F_ij = R_ij.T @ F_local     # 旋转回全局参考系
        F_ji = -F_ij                 # 精确满足 F_ij = -F_ji

        # 4. 扭矩同样精确守恒
        tau_ij = cross(r_ij, F_ij)
        tau_ji = -tau_ij             # τ_ij = -τ_ji

        return F_ij, F_ji, tau_ij, tau_ji

# 关键: 500 训练样本即可达强性能
# 对比 GNS: 高动量下粒子逸出; Dynami-CAL 全程稳定

PIN-WM 可微物理参数识别

# PIN-WM: 从RGB图像识别物理参数 (RSS 2025)
# 参考: arXiv:2504.16693

class PINWM:
    def __init__(self, physics_engine, renderer):
        self.engine = physics_engine    # MuJoCo/IsaacGym (可微)
        self.renderer = renderer        # 3D Gaussian Splatting
        self.params = nn.Parameter(     # 待识别的物理参数
            torch.tensor([
                1.0,    # 质量 mass
                0.5,    # 恢复系数 restitution
                0.3,    # 摩擦系数 friction
            ])
        )

    def forward(self, action, obs_gt):
        # 1. 用当前参数在物理引擎中仿真
        state_seq = self.engine.simulate(action, self.params)

        # 2. 用 3DGS 渲染仿真结果
        rendered = self.renderer(state_seq)  # (T, H, W, 3)

        # 3. 渲染损失 (与真实观测比较)
        loss = F.mse_loss(rendered, obs_gt)

        # 4. 梯度反传: obs → renderer → sim → params
        # 物理引擎可微 → 梯度到达物理参数
        return loss

    def system_id(self, trajectories, n_iters=100):
        optimizer = Adam([self.params], lr=1e-3)
        for i in range(n_iters):
            loss = sum(self.forward(a, o) for a, o in trajectories)
            loss.backward()
            optimizer.step()
        # 识别后: 推任务真实机器人 75%, 翻转 65%
        return self.params

V-JEPA 惊异度物理评估

# V-JEPA 直觉物理: "惊异度"机制 (arXiv:2502.11831)

class VJEPAPhysicsEval:
    def __init__(self, encoder, predictor, target_encoder):
        # encoder: ViT-Huge (frozen, pretrained V-JEPA)
        self.enc = encoder
        self.pred = predictor
        self.target_enc = target_encoder  # EMA

    def compute_surprise(self, video):
        """
        video: (B, T, C, H, W)
        返回: 惊异度分数 (越高=越不符合物理预期)
        """
        # 1. 遮盖视频的后半部分 (模拟"未来")
        visible = video[:, :T//2]
        target = video[:, T//2:]

        # 2. 编码
        z_visible = self.enc(visible)            # (B, N_vis, D)
        z_target = self.target_enc(target)       # (B, N_tgt, D) sg

        # 3. 预测被遮部分的表征
        z_pred = self.pred(z_visible, target_pos) # (B, N_tgt, D)

        # 4. 惊异度 = 预测表征与实际表征的 L1 距离
        surprise = (z_pred - z_target).abs().mean()
        return surprise

    def eval_intphys(self, possible_video, impossible_video):
        """
        IntPhys 评估: 物理可能 vs 不可能视频配对
        如果 surprise(impossible) > surprise(possible) → 正确
        """
        s_ok = self.compute_surprise(possible_video)
        s_bad = self.compute_surprise(impossible_video)
        return s_bad > s_ok  # True = 模型理解物理

# 结果:
# IntPhys 物体恒常性: 85.7% (vs 随机 51.4%)
# IntPhys 连续性: 86.3%
# IntPhys 形状恒常性: 83.7%
# 仅需 128 小时视频即可训练到 >70%

上级 · 00 世界模型的"皇帝新衣":视频生成 ≠ 物理理解