DOTAFS

Personal learning notes

PAPER NOTE · SANCHEZ-GONZALEZ ET AL. · ICML 2020

Learning to Simulate Complex Physics with Graph Networks

这篇论文问的不是“怎样把水画得更漂亮”,而是:如果只给机器许多粒子运动轨迹,它能不能自己学会水、沙、软体和刚体下一刻怎样变化?

阅读原论文 ↗

先给结论:GNS 把粒子模拟重新描述为一个动态图上的局部交流问题。每个粒子是节点,可能发生作用的邻居之间连边,神经网络通过多轮消息传递预测每个粒子的加速度。

输入
粒子位置、5 步速度历史、材料类型与全局条件
输出
每个粒子的下一步平均加速度
核心
动态图 + Encode–Process–Decode
阅读
约 20 分钟
01 / RESEARCH QUESTION

论文前言到底在问什么?

传统物理模拟器很强,但强在“工程师已经知道该写什么”。做流体要选 SPH、网格或 PBD,做沙子要处理摩擦和颗粒堆积,做软体又要换材料模型。高质量模拟器往往需要长期工程投入,而且越追求精确,计算成本通常越高。

另一条路是让模型直接从数据学习动力学:给它很多 当前状态 → 下一状态 的例子,让它近似真实模拟器或真实世界。问题是,一个场景可能有上万个粒子,每个粒子都在移动,邻居关系还会不停变化。普通网络很难处理这种可变数量、可变连接、长期反复预测的状态。

因此论文提出的研究问题是:能不能设计一种足够通用的学习框架,用同一套结构表示不同粒子材料,并在训练场景之外继续进行大规模、长时间的物理预测?

已知

每一帧的粒子位置,以及由位置差分得到的速度与加速度。

要学

附近粒子之间怎样互相影响,而不是背下某一条固定轨迹。

要预测

每个粒子下一步的加速度,再用固定积分器更新速度和位置。

要验证

单步准确之外,连续几百到几千步之后是否仍像合理的物理运动。

GNS 论文 Figure 1:水、黏性材料和沙子的三维 rollout 序列
论文 Fig. 1。同一类 GNS 架构分别学习 Water-3D、Goop-3D 与 Sand-3D。图像展示模型 rollout 的三个时间点;它不是一段视频生成,而是粒子状态逐步更新后再渲染。
它是什么它不是什么
从粒子轨迹学习动力学的代理模拟器从照片自动发现完整物理定律的系统
给定当前状态,预测下一状态的 forward model负责目标、奖励和行动选择的 Agent
显式粒子状态上的 learned physics从 RGB 像素直接生成下一帧的视频模型
可反复调用、形成长 trajectory 的模拟模块天然保证能量、动量和刚性约束的解析求解器
先记住

这篇论文的前言在寻找一种“通用的可学习粒子模拟接口”。它不声称神经网络已经懂得整个现实世界,而是把一个困难问题缩小成:局部实体之间的作用能否从数据中学出来。

02 / PARTICLES AS A GRAPH

为什么把粒子连成一张图?

把“图”想成每一帧临时建立的邻居名单就够了。每个粒子是一个节点;只要两个粒子的距离小于连接半径 R,就在它们之间建立边。粒子移动后,下一帧重新寻找邻居,所以图的连接也跟着改变。

这和 PBF/SPH 的邻居搜索非常接近。区别是:PBF 把邻居带进工程师写好的密度约束,SPH 把邻居带进压力与黏性核函数;GNS 把邻居的相对位置、距离和状态送进神经网络,让网络学习“这对粒子应该产生什么影响”。

路线粒子为何互相影响下一步怎样得到
SPH落在平滑核支持域内显式计算密度、压力与黏性力
PBD / PBF落在邻域或共享约束迭代投影位置,满足密度、距离和碰撞约束
MPM通过背景网格交换量粒子到网格、网格更新、再回到粒子
GNS连接半径内建立动态图边学习边消息与节点更新,解码为加速度
可操作例子

调节邻居半径和消息轮数,观察中心粒子能间接获得多远的信息。

DYNAMIC NEIGHBOR GRAPH每轮只能跨过一条边;多轮后信息可以传播到更远的粒子
边数量 0 中心粒子直接邻居 0 M 轮可到达 0

教学示意,不是论文模型复现。圆点只展示“局部连接”和“多跳传播”。真实 GNS 的消息是 128 维隐向量,不是沿着边传递一个手写物理数值。

为什么能扩展

网络对所有粒子复用同一套局部更新函数,因此参数数量不会随着粒子数量直接增长。真正随规模增长的是节点和边的计算量,这也是它可以在测试时处理更多粒子的原因之一。

03 / ARCHITECTURE

Encode–Process–Decode 怎样推进一帧

GNS 论文 Figure 2:学习模拟器与 Encode-Process-Decode 图网络架构
论文 Fig. 2。上方是反复调用的学习模拟器;下方把动力学模型拆成 Encoder、Processor 和 Decoder。Decoder 预测动力学信息,固定的 Update 再产生下一状态。
ENCODER / 建图

读取当前位置、最近 5 步速度、粒子材料和边界距离;在半径 R 内连边,并把节点与边都编码成 128 维隐向量。

输入不是一张图片,而是一份粒子状态表

xit= 当前位置 pit+ 最近 5 步速度+ 材料 / 边界类型+ 全局条件
NODE

粒子节点

节点保存速度历史、材料类别和边界距离等自身信息。位置本身不直接交给节点编码器,以鼓励空间平移不变性。

EDGE

邻居关系

边保存两粒子的相对位移和距离。网络更关心“你在我左边多远”,而不是“我们位于世界坐标多少”。

PROCESSOR

多轮推理

默认配置做 10 轮消息传递。每轮更新边,再把收到的消息汇总到节点;更深的传播可表达更远、更复杂的作用。

OUTPUT

预测加速度

Decoder 为每个粒子输出二维或三维加速度,Euler 积分器再更新速度和位置。可学习部分与更新规则明确分开。

ONE SIMULATION STEP

加速度 ât = GNSθ(位置、速度历史、材料、邻居)

t+1 = vt + ât

t+1 = pt + v̂t+1

论文为简化记号省略固定时间步长 Δt。这里表达的是“学加速度,积分器负责推进”,不是让网络直接吐出整段动画。
架构的关键

它没有把整个模拟器都变成黑盒。网络只负责最难手写的动力学函数,图结构提供局部关系,积分器保留清楚的时间更新接口。

04 / TRAINING & ROLLOUT

为什么单步很准,连续模拟仍会崩?

训练数据里的每个输入都来自真实模拟器。模型只需要看真实的第 t 帧,预测真实的第 t+1 帧,所以它学到的是一个 one-step predictor。

部署时情况不同:第二步的输入已经是模型第一步的预测,第三步又建立在前两步误差之上。一点位置偏差会改变邻居图,邻居变化又会改变下一轮消息,误差便可能越来越大。这就是 rollout 的分布偏移。

TRAIN真实 Xt预测 X̂t+1每次都从干净状态开始
ROLLOUTX012模型不断吃自己的输出
可操作例子

比较只见过干净输入的模型,与训练时见过扰动并学会纠偏的模型。

ACCUMULATED ERROR模型从未学过“带一点误差的状态”,偏差会逐步放大
末步概念误差 0.00

训练分布和 rollout 分布逐渐分离。

教学曲线,不是论文数值。论文实际使用速度上的随机游走噪声,默认标准差为 0.0003,并同步调整位置,使训练输入更像模型在 rollout 中会遇到的轻微错误状态。

噪声太少

单步测试漂亮,但模型没有练过从偏差状态恢复,长期 rollout 容易漂移。

噪声适中

牺牲一点干净单步精度,换来更好的长时稳定性。论文消融中这一档 rollout 最好。

噪声太大

输入偏离真实状态过多,模型连正常局部动力学都更难学准。

研究意义

训练噪声不是为了让画面随机,而是在教模型“犯了一点错之后怎样回到合理状态”。对所有反复调用自身预测的 world model,这都是比单步分数更深的一层问题。

05 / EXPERIMENTS

实验真正证明了什么?

作者没有只在一种水体上调出好看的动画,而是让同一套架构面对水、沙、黏塑性 goop、刚体、静态障碍和多材料相互作用。数据由 SPH、PBD/FleX 和 MPM 等传统模拟器生成;典型数据集包含 1000 条训练轨迹、100 条验证轨迹和 100 条测试轨迹,每条持续 300–2000 步。

训练目标仍然只是每个粒子的单步加速度 L2 误差;评估则同时看单步 MSE、完整 rollout MSE,以及对粒子排列不敏感的 Optimal Transport 和 MMD。这样可以避免只凭一张渲染图判断模型是否正确。

GNS 论文 Figure 3:多种材料、预测与真实结果及超出训练分布的场景
论文 Fig. 3。上排为初始状态,中排为 GNS 预测,下排为 ground truth。a–e 是不同材料与交互,f–h 测试高分辨率湍流、未见形状和更大空间。
场景数据来源最多粒子Rollout 长度观察重点
Water-3DSPH13k800三维自由表面流体
Sand-3DMPM20k350摩擦与颗粒堆积
Goop-3DMPM14k300黏性与塑性形变
BoxBathPBD / FleX1k150水中刚体保持形状
MultiMaterialMPM2k1000水、沙、goop 与刚体共用一套参数
FluidShakeMPM1.3k2000容器外力与长时误差

最强的一组结果是规模泛化

TRAIN约 2.5k 粒子

WaterRamps 的训练场景只有较小容器和 1–5 个随机斜坡。

TEST A28k 粒子 / 2500 步

持续注水后,粒子数达到训练时约一个数量级。

TEST B85k 粒子 / 5000 步

区域面积 32 倍、粒子数 34 倍、轨迹长度 8 倍。

这并不等于模型对任意世界都能泛化。它说明的是:当测试场景仍由相似的局部粒子作用组成时,使用相对位置和共享消息函数,使学到的局部规律可以在更大的图上重复使用。

GNS 论文 Figure 4:消息轮数、参数共享、连接半径、训练噪声和相对位置编码消融
论文 Fig. 4 左侧消融。上排是单步误差,下排是 rollout 误差。红色为默认配置。影响更明显的因素包括消息轮数、连接半径、Processor 参数是否共享、训练噪声和相对位置编码。
论文支持

同一架构覆盖多类材料

不同数据集使用相同总体结构和一套默认超参数;MultiMaterial 进一步用单个模型处理多材料交互。

论文支持

局部规律能迁移到更大图

相对位置输入和共享局部函数,使模型可用于训练分布之外的粒子数、空间尺度与轨迹长度。

不能推出

GNS 一定比传统模拟器快

补充材料明确说加速不是本工作的主要目标;不同场景中,GNS 有时更快,有时反而更慢。

不能推出

它发现了精确物理定律

模型优化的是预测误差;它可以生成合理轨迹,但没有显式恢复压力方程、摩擦律或守恒定律。

06 / LIMITS

看起来像物理,不代表永远守住物理

GNS 的结果很强,但它仍然是从有限轨迹拟合出来的近似动力学。模型学到什么,取决于训练数据里出现过什么。对于混沌系统,两条都合理的水流轨迹也可能逐渐分叉,因此逐粒子 MSE 会不断增长;而“视觉上像水”也不能替代守恒、碰撞和稳定性检查。

  • 没有硬约束保证。模型可能近似保持刚体形状,但架构里没有刚性约束。补充材料的 FluidShake-Box 失败例中,长时间猛烈晃动后方块开始变形。
  • 罕见接触容易学错。某个 Goop 模型会把材料错误地粘在墙上;作者认为静摩擦与黏附行为需要更多覆盖。
  • 只看最近 5 步。当正确行为依赖更久以前的形状、接触或隐藏状态时,这个短历史可能不够。
  • 邻居搜索是实际成本。补充实验显示大量时间花在构建邻居图,而不是图网络推理本身。
  • 数据来自模拟器。论文主要学习 SPH、PBD 和 MPM 生成的轨迹,因此首先证明的是“模仿模拟器”,不是自动跨越 sim-to-real。
  • 不是完整 world model。它没有视觉感知、玩家语义、奖励、行动规划、场景记忆和渲染,只负责状态动力学。
我的判断

GNS 最重要的贡献不是宣告“解析物理过时了”,而是证明图网络可以成为通用粒子动力学接口。它让材料规律可以从数据学习,但可靠系统仍需要状态设计、覆盖充分的数据和物理验证。

07 / TOWARD SAO

它在最终目标 SAO 中处于哪一层?

SAO 式世界真正困难的地方,不只是“画面像现实”,而是玩家做出一个此前没录制过的动作时,环境仍能给出连续、可信、可利用的后果。踩进水里要激起水花,推倒木箱要撞到旁边物体,切断绳索后受力关系要改变;世界必须可以被反事实地推进。

GNS 正好落在中间的动力学层:上游把现实或虚拟世界转换成实体状态,下游的 Agent、玩家输入和渲染系统使用预测结果。它不负责理解“玩家想打开门”,但可以负责在门已被施力之后,预测局部实体如何响应。

06角色目标与规划Agent / player intention
05行动与交互接口forces, constraints, actions
04可推进的世界动力学GNS 所在位置
03实体、材料与空间状态particles, objects, scene graph
02感知与世界建模vision, tracking, state estimation
01显示与沉浸rendering, audio, haptics
SAO 所需能力GNS 现在能提供仍缺什么
世界能随时间推进从当前粒子状态预测下一步跨区域、跨时间尺度的层级状态
不同材料发生作用材料类别进入节点特征,统一学习局部交互覆盖开放世界材料组合的数据与约束
玩家行为产生后果可把外力、边界和控制量作为条件从语义动作到物理控制量的接口
长期世界一致训练噪声减轻短中期误差累积硬守恒、长期记忆、事件和持久状态
实时运行局部共享计算适合并行动态图构建、LOD、稀疏更新和硬件优化
我们的延伸 / 不是论文结论

从显式求解器走向可学习世界,最稳妥的路线可能是混合系统

  1. 先让 PBF/SPH/MPM 充当老师。

    它们生成干净、可控、带材料参数的轨迹,让我们知道模型正在学习什么。

  2. 先学习残差或难写的材料部分。

    碰撞、不可穿透和关键约束仍由显式求解器保证;图网络补充复杂黏附、材料风格或粗粒度动力学。

  3. 把玩家动作变成条件。

    手部接触、抓取、切割或技能效果先转成力、约束变化与边界事件,再进入动力学模型。

  4. 用物理指标验收。

    除了位置误差,还要追踪密度、穿透、能量、动量、体积和长时可恢复性。

  5. 最后才扩展成世界层。

    把局部 learned physics 与对象状态、场景图、角色规划和渲染连接,形成能被持续推进的 SAO 世界。

最终位置

PBF 不是最终目标,GNS 也不是。它们分别代表“人写规律”和“数据学规律”两种世界推进方式。SAO 需要的是把二者组织成一个可交互、可验证、能长期保持因果一致的世界系统。

08 / SUMMARY

读完后应该带走的五件事

  1. 01

    GNS 学的不是渲染,而是粒子状态怎样随时间变化。

  2. 02

    图是动态邻居表:节点代表粒子,边代表当前可能发生的局部作用。

  3. 03

    多轮消息传递让局部信息逐步传播;相对位置让同一规律能搬到更大空间。

  4. 04

    单步准确不等于长期稳定;适量训练噪声是在教模型从自己的小错误中恢复。

  5. 05

    它为 SAO 提供的是可学习动力学层,而不是完整世界、Agent 或沉浸系统。