想象你是一位看了 39 年地球“天气电影”的资深放映师。这些胶片记录了从 1979 年到 2017 年地球上每个角落的风、雨、温度与气压的变化。传统天气预报的做法,是把物理定律写进超级计算机,像动画师逐帧手绘一样,从今天这一帧算出明天那一帧——每画一帧都要消耗巨大的算力。而 GraphCast 这位“智能放映师”不同:它只看最近 6 小时的“胶片”,就能直接画出 6 小时后的“下一帧”;再把这一帧当作新起点继续放映,一口气就能播完未来 10 天的天气大片。这台“放映机”由 DeepMind 打造,核心是一个图神经网络(GNN)——它把地球表面看成一张由无数节点串联的大网,每个节点代表一个小区域,节点之间互相传递消息,模拟空气的流动与冷暖的交换。整个过程在单个 TPU 上不到 1 分钟就能完成,比传统超级计算机快几个数量级。接下来,我们就一起钻进这台神奇的“天气电影放映机”,看看它如何工作。

岗位关联

掌握 GraphCast 的工作原理,你就握住了 AI for Science 最前沿的钥匙:从天气预测到材料模拟,“从海量数据学物理规律”正在重塑整个科学计算领域,是 AI 工程师进入科学智能赛道的最佳入口。

目录
  1. 可视化演示
  2. 天气预测概述——从“逐帧手绘”到“智能放映”
  3. 模型总体架构——放映机的三个车间
  4. 图神经网络内核——节点间的“剧本接力”
  5. 数据与训练——39 年“天气影片档案库”
  6. 推理与预测——十天电影的“逐帧放映”
  7. 性能与评估——影评人怎么打分
  8. 局限与未来——放映机的“成长空间”
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

围绕全球天气预报展开深入探讨,从基本概念出发逐步深入到高级应用。内容涵盖AI for Science科学智能、... 切换模式查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

全球天气预报:核心原理 动态展示关键流程与数据流动 交互控件调节参数实时渲染 f(x) = transform(x) 核心概念的可视化呈现

天气预测概述——从“逐帧手绘”到“智能放映”

在传统气象中心,预报员每天面对海量观测数据:卫星云图、探空气球、地面气象站……这些数据被送进超级计算机,计算机根据纳维-斯托克斯方程等物理定律,一步一步把大气状态从此刻推演到未来。这就像动画师逐帧手绘:每一帧都要重新求解一遍复杂的物理方程组。要画一部 10 天的“天气电影”,需要上千亿次浮点运算,耗时数小时甚至更久。

GraphCast 换了一种思路。它不再“手绘”,而是“放映”:它先看了 39 年的地球天气纪录(ERA5 再分析数据),学会了天气系统演变的“剧情规律”。当它拿到最近 6 小时的大气状态时,能直接“画出”未来 6 小时的大气状态。这个从“物理方程驱动”到“数据驱动”的转变,正是 AI for Science 的核心思想:让模型在海量数据中自己归纳规律,而不是逐行手写物理定律。

正式地,天气预测可以被写成状态转移。记 $\mathbf{x}_t$ 为 t 时刻全球大气状态(包括温度、风、气压、湿度等变量在高空各层的取值),那么预测下一个时刻的状态,就是寻找一个转移函数 $\mathcal{F}$:

在传统数值预报中,$\mathcal{F}$ 是物理方程离散化后的数值积分器;在 GraphCast 中,$\mathcal{F}$ 是一个图神经网络,它的参数从 39 年的历史数据中学到。$\Delta t$ 取 6 小时——这是 GraphCast 放映“一帧”的时长。

其中 N 是网格节点数(约 100 万),V 是变量通道数。

所以,与动画师逐帧求解物理方程不同,GraphCast 这台“智能放映机”只需记住 39 年的剧情规律,就能把当前“胶片”快速推进到下一帧。理解了“状态转移”这个视角,下面我们就拆开放映机,看看它内部的三个车间。

xt+Δt=F(xt)\displaystyle \mathbf{x}_{t + \Delta t} = \mathcal{F}(\mathbf{x}_t)
这个公式把“天气预测”统一成一个数学问题:已知现在的状态,求一个映射到未来的函数。传统方法逐行手写物理定律,AI 方法从数据里学规律。
  1. 状态向量$\mathbf{x}_t$ 表示全球所有网格点上大气变量的集合,比如 2 米温度、10 米风速、各气压层的位势高度和湿度。
    xt∈RN×V\mathbf{x}_t \in \mathbb{R}^{N \times V}
  2. 转移函数$\mathcal{F}$ 将当前状态映射到 $\Delta t$ 后的状态。GraphCast 用图神经网络参数化这个映射。
    x^t+6h=Fθ(xt)\hat{\mathbf{x}}_{t + 6h} = \mathcal{F}_\theta(\mathbf{x}_t)
  3. 时间步长$\Delta t$ 固定为 6 小时,迭代 40 次恰好覆盖 10 天。
    40×6 h=240 h=10 days40 \times 6\,\text{h} = 240\,\text{h} = 10\,\text{days}

模型总体架构——放映机的三个车间

如果说 GraphCast 是一台“天气电影放映机”,那么它内部有三个车间:读片室、编剧室和放映室。原始胶片(大气状态)先被送进读片室压缩成剧本要点;编剧室根据这些要点构思剧情下一步走向;放映室再把构思还原成观众能看的完整画面。

这三个车间对应深度学习中的编码器(Encoder)、处理器(Processor)和解码器(Decoder)。编码器把高维的网格状态映射到紧凑的隐空间特征;处理器在隐空间里执行核心的“剧情推演”——反复做消息传递;解码器再把隐空间特征映射回物理空间,输出下一帧的全球天气场。

整体过程写成公式:

其中 $\mathcal{E}$ 是编码器,$\mathcal{P}$ 是处理器(重复若干次消息传递),$\mathcal{D}$ 是解码器。GraphCast 的输入输出是 0.25° 的规则经纬网格(约 28 千米一格),内部则把特征映射到二十面体网格(icosahedral mesh)的层级结构上进行消息传递:粗的网格负责远距离信息流动,细的网格负责局部细节,兼顾精度与算力。

读片、编剧、放映三个车间各司其职,配合多尺度网格这座“内部摄影棚”,让 GraphCast 既能理解全球环流,也能刻画局地天气。接下来我们走进编剧室,看看消息传递这场“剧本接力”具体怎么发生。

x^t+6h=D(P(E(xt)))\displaystyle \hat{\mathbf{x}}_{t + 6h} = \mathcal{D}\left( \mathcal{P}\left( \mathcal{E}(\mathbf{x}_t) \right) \right)
编码器-处理器-解码器是图神经网络做科学计算的经典骨架:先压缩、再推理、最后还原。GraphCast 用多尺度网格让消息既传得远,又传得细。
  1. 编码器$\mathcal{E}$ 把输入网格特征编码到内部多尺度网格的隐特征 $\mathbf{h}$。
    h=E(xt)\mathbf{h} = \mathcal{E}(\mathbf{x}_t)
  2. 处理器$\mathcal{P}$ 在隐空间中执行多轮消息传递,每轮更新所有节点的隐状态。
    h(k+1)=GNN(h(k))\mathbf{h}^{(k+1)} = \mathrm{GNN}(\mathbf{h}^{(k)})
  3. 解码器$\mathcal{D}$ 把处理后的隐特征映射回规则网格,得到预测的物理量场。
    x^t+6h=D(h(L))\hat{\mathbf{x}}_{t+6h} = \mathcal{D}(\mathbf{h}^{(L)})

图神经网络内核——节点间的“剧本接力”

在 GraphCast 的“编剧室”里,地球被抽象成一张大网,每一个网格节点就像一位演员。演员的“台词”是该位置的大气状态:温度、气压、湿度。剧情要推进,演员必须互相传话——高气压区域的演员把“晴朗”讲给邻居,暖湿气流的演员把“降雨”的故事向前传。

这种“传话”在技术上称为消息传递(Message Passing),是图神经网络(GNN)的核心运算。与 CNN 在规则矩形网格上滑动卷积核不同,GNN 在任意拓扑结构的图上工作,特别适合球面这种无法完美展开成矩形的地球表面。GraphCast 采用的二十面体网格,正是为球面量身定制的“演员站位图”。

消息传递的经典更新公式:

其中 $\mathcal{N}(v)$ 是节点 v 的邻居集合,$\mathbf{M}$ 是消息函数(把邻居 u 的信息打包成一条消息),$\mathrm{AGG}$ 是聚合函数(把收到的所有消息汇总),$\mathrm{UPDATE}$ 是更新函数(结合自己的状态和汇总的消息,得到新状态)。每做一轮,信息就沿着边传播一跳。

正是这场覆盖全球的“剧本接力”,让每个节点的消息在几十轮传递中扩散到数千千米之外。演员们通过不断传话,共同“演”出未来几天的天气剧情。那么,这些演员的“台词功底”是怎么训练出来的?下一节我们走进它的“片场”。

hv(k+1)=UPDATE(hv(k), AGG({M(hu(k),hv(k)):u∈N(v)}))\displaystyle \mathbf{h}_v^{(k+1)} = \mathrm{UPDATE}\left( \mathbf{h}_v^{(k)},\ \mathrm{AGG}\left( \left\{ \mathbf{M}\left(\mathbf{h}_u^{(k)}, \mathbf{h}_v^{(k)} \right) : u \in \mathcal{N}(v) \right\} \right) \right)
消息传递像“击鼓传花”:每个节点不断把自己的状态告诉邻居,同时吸收邻居传来的信息。迭代多轮后,远处的影响也能传到每个角落——这就是 GNN 模拟大气全局相互作用的机理。
  1. 邻居集合$\mathcal{N}(v)$ 表示与节点 v 直接相连的节点。在球面网格上,一个节点通常有 5~7 个邻居。
    u∈N(v)u \in \mathcal{N}(v)
  2. 消息生成$\mathbf{M}(\mathbf{h}_u, \mathbf{h}_v)$ 把邻居 u 和本节点 v 的隐状态拼起来,过一个线性层,生成一条消息。
    muv=W[hu;hv]\mathbf{m}_{uv} = \mathbf{W} [\mathbf{h}_u; \mathbf{h}_v]
  3. 聚合与更新$\mathrm{AGG}$ 通常取平均值或求和;$\mathrm{UPDATE}$ 将聚合结果与原有状态融合,完成一次“跳变”。
    hv(k+1)=σ(hv(k)+Wu⋅meanu∈N(v)muv)\mathbf{h}_v^{(k+1)} = \sigma\left( \mathbf{h}_v^{(k)} + \mathbf{W}_u \cdot \mathrm{mean}_{u \in \mathcal{N}(v)} \mathbf{m}_{uv} \right)

数据与训练——39 年“天气影片档案库”

再好的演员也需要海量排练。GraphCast 的“排练场”是 ERA5 再分析数据集——一套由欧洲中期天气预报中心(ECMWF)用物理模型把 1979 年至 2017 年间的各种观测资料“缝补”起来的全球大气“纪录影片”。它就像一份 39 年的天气录像档案,每一帧都标好了全球每个网格点的真实大气状态。

训练时,模型每次“看”两帧连续画面:把 t 时刻和 t-6h 时刻的状态作为输入,把 t+6h 时刻的“真实胶片”作为比对目标。模型先做出预测,再与真实画面比较差距,通过反向传播调整参数。这种“看完前两帧就预测下一帧、播错了就纠正”的训练方式,本质上是一种自监督学习:不需要人工标注,历史天气档案就是无穷无尽的“标准答案”。

训练目标是最小化预测场与真实场的差距,常用加权均方误差:

其中 $\hat{\mathbf{x}}_i$ 是模型对第 i 个网格节点或变量的预测值,$\mathbf{x}_i$ 是 ERA5 给出的真实值。由于不同变量(温度、风速、湿度)量纲差异巨大,训练前要对每个变量做标准化,让误差在可比尺度上计算。

39 年的“天气档案”赋予了 GraphCast 对常见天气模式的深刻记忆。但档案再多也终有盲区——它没见过的极端天气,演起来就会“经验不足”,这也是后面要讨论的局限。先看它学成之后如何登台表演。

L=E[1N∑i=1N∥x^i−xi∥2]\displaystyle \mathcal{L} = \mathbb{E}\left[ \frac{1}{N} \sum_{i=1}^{N} \left\| \hat{\mathbf{x}}_i - \mathbf{x}_i \right\|^2 \right]
这个损失函数是“导演的评分标准”:预测的画面与真实档案画面越接近,得分越高。AI 的角色就是不断调整参数,把这部“天气预报剧本”越演越准。
  1. 误差平方$\|\hat{\mathbf{x}}_i - \mathbf{x}_i\|^2$ 计算每个网格点上预测与真实的偏差平方,大偏差会被放大。
    ei=∥x^i−xi∥2e_i = \left\| \hat{\mathbf{x}}_i - \mathbf{x}_i \right\|^2
  2. 取平均$\frac{1}{N}\sum_{i=1}^{N}$ 对所有节点和通道求平均,得到整体平均偏差。
    MSE=1N∑i=1Nei\mathrm{MSE} = \frac{1}{N} \sum_{i=1}^{N} e_i
  3. 期望近似$\mathbb{E}$ 表示在训练数据分布上的期望,实践中用随机小批量的平均来近似。
    L≈1∣B∣∑i∈Bei\mathcal{L} \approx \frac{1}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} e_i

推理与预测——十天电影的“逐帧放映”

训练完成后,GraphCast 正式登台。它不会像魔术师一样“大手一挥”直接变出 10 天后的天气,而是老老实实地“一帧一帧放映”:给它当前和 6 小时前的大气状态,它输出 6 小时后的状态;然后把这个输出当作新的“当前状态”,再预测下一个 6 小时。如此循环 40 次,一部“未来 10 天天气电影”就放映完毕。

这种将模型输出重新作为输入的方式叫自回归(Autoregressive)迭代。它的好处是只需训练一个 6 小时预测模型,就能覆盖任意时间长度的预报;代价是误差会逐帧累积——第一帧的小偏差可能在循环中不断放大,这也是所有迭代预测模型面临的共同挑战。

把迭代过程写成公式:

其中 $\circ$ 表示函数复合,$K$ 是迭代次数。要预报 10 天,$K = 240h / 6h = 40$。整个过程在单个 TPU 上不到 1 分钟完成,相比之下传统高分辨率数值预报在超级计算机上动辄需要数小时。

就这样,放映机把 10 天的天气大片一帧一帧地播放出来,40 帧胶片拼成完整故事。不过,这部大片到底拍得怎么样?影评人们的“打分”将检验它的成色。

x^t+K⋅6h=Fθ∘Fθ∘⋯∘Fθ⏟K steps(xt)\displaystyle \hat{\mathbf{x}}_{t + K \cdot 6h} = \underbrace{\mathcal{F}_\theta \circ \mathcal{F}_\theta \circ \cdots \circ \mathcal{F}_\theta}_{K\ \text{steps}} (\mathbf{x}_t)
公式表达了“自己预测自己”的循环播放:一次只前进 6 小时,但反复前进 40 次就覆盖 10 天。推理极快是 GraphCast 相比传统数值预报最具冲击力的优势。
  1. 单帧预测一次迭代执行 $\mathcal{F}_\theta(\mathbf{x}_t)$,得到 6 小时后状态的估计。
    x^t+6h=Fθ(xt)\hat{\mathbf{x}}_{t+6h} = \mathcal{F}_\theta(\mathbf{x}_t)
  2. 复合迭代把输出当作下一轮输入,重复 K 次,得到第 K 个 6 小时步的预测。
    x^t+K⋅6h=Fθ∘⋯∘Fθ⏟K(xt)\hat{\mathbf{x}}_{t+K\cdot 6h} = \underbrace{\mathcal{F}_\theta \circ \cdots \circ \mathcal{F}_\theta}_{K}(\mathbf{x}_t)
  3. 迭代次数$K = 40$ 对应 10 天预报;步数越长,累计误差越大。
    K=240 h6 h=40K = \frac{240\,\text{h}}{6\,\text{h}} = 40

性能与评估——影评人怎么打分

电影上映后要接受影评人审视。“影评人”在这里是气象学界的评估指标。最常用的两个指标是均方根误差(RMSE)和异常相关系数(ACC)。RMSE 衡量预测与实况的平均偏差大小;ACC 衡量预测的空间分布与实况的吻合程度,越接近 1 越完美。

2023 年的“影评榜单”上,GraphCast 交出的成绩单相当亮眼:在 ECMWF 的 HRES(高分辨率确定性预报)面前,它在 90.2% 的评估指标上更优;相比同期中国团队开发的盘古气象大模型(Pangu-Weather),它在约 99% 的指标上占优,尤其在 5 天以上的中长期预报中优势明显。而且它完成 10 天预报只需不到 1 分钟。

ACC 的定义式为:

其中 $x'$ 表示去除气候态(多年平均背景)后的异常值,$\bar{x}'$ 表示 N 个格点异常值的平均。ACC 本质上是预测异常场与真实异常场的相关系数。RMSE 则直接计算预测与真实的平均平方根偏差:

影评人的结论很清晰:GraphCast 在很多方面已是“最佳影片”,但它并非全知全能。正如它拿下了约 90% 的指标,却仍有约 10% 的镜头输给传统老将。哪些地方还力有不逮?来看大片的“花絮与幕后”。

ACC=∑i=1N(x^i′−xˉ′)(xi′−xˉ′)∑i=1N(x^i′−xˉ′)2⋅∑i=1N(xi′−xˉ′)2\displaystyle \mathrm{ACC} = \frac{\sum_{i=1}^{N} \left( \hat{x}_i' - \bar{x}' \right) \left( x_i' - \bar{x}' \right)}{\sqrt{ \sum_{i=1}^{N} \left( \hat{x}_i' - \bar{x}' \right)^2 \cdot \sum_{i=1}^{N} \left( x_i' - \bar{x}' \right)^2 }}
RMSE=1N∑i=1N(x^i−xi)2\displaystyle \mathrm{RMSE} = \sqrt{ \frac{1}{N} \sum_{i=1}^{N} \left( \hat{x}_i - x_i \right)^2 }
ACC 像“剧情的空间走势像不像”,RMSE 像“每一个具体数值差多少”。两个指标配合使用,才能全面评价一部天气电影拍得好不好。
  1. 去气候态$x_i'$ 表示第 i 个格点的异常值,即原始值减去该地点该日期的多年气候平均值。
    xi′=xi−cix_i' = x_i - c_i
  2. 协方差项分子 $\sum (\hat{x}_i' - \bar{x}')(x_i' - \bar{x}')$ 度量预测异常与真实异常的协同变化,越大说明走势越一致。
    Cov=∑i=1N(x^i′−xˉ′)(xi′−xˉ′)\mathrm{Cov} = \sum_{i=1}^N (\hat{x}_i' - \bar{x}')(x_i' - \bar{x}')
  3. 标准化分母分母是两个异常场标准差之积,把相关系数压缩到 [-1, 1]。
    Std=∑(x^i′−xˉ′)2⋅∑(xi′−xˉ′)2\mathrm{Std} = \sqrt{\sum (\hat{x}_i' - \bar{x}')^2} \cdot \sqrt{\sum (x_i' - \bar{x}')^2}
  4. 均方根误差RMSE 对每个格点逐个比较预测与真实值,平方后取平均再开方,对大误差更敏感。
    RMSE=1N∑i=1N(x^i−xi)2\mathrm{RMSE} = \sqrt{\frac{1}{N} \sum_{i=1}^N (\hat{x}_i - x_i)^2}

局限与未来——放映机的“成长空间”

再先进的放映机也有短板。第一,GraphCast 的“演技”完全来自历史档案——ERA5 的数据质量直接决定它的上限;遇到数据稀疏地区(如极地、海洋深处)或历史罕见的极端天气,它的“剧本”就缺少参照。第二,它输出的是确定性单值预报,不像传统集合预报那样直接给出概率区间。第三,0.25° 分辨率虽已很细,但对局地强对流、城市尺度的天气现象依然不够。

这些局限并不代表方向错了,反而指引了前进方向。学界正尝试把物理方程与 GNN 结合,用物理约束修正 AI 的“胡思乱想”;用扩散模型生成集合预报,给出不确定性;把 GraphCast 接入实时数据同化链条,让预报随最新观测滚动更新。这也正是"AI for Science"的普遍范式:AI 不是替代物理,而是与物理协同。一种代表性的融合思路可以写成:

其中 $\mathcal{F}_{\text{phys}}$ 表示传统数值模式的 6 小时预报,$\mathcal{F}_{\theta}$ 表示 GraphCast 的数据驱动预报,$\lambda$ 是学习到的融合权重。物理项兜底、AI 项修正,两者互相校准。

回到开头那台“天气电影放映机”:它曾在 39 年的档案中如饥似渴地学习,它能以 1 分钟一部的速度放映十天大片,它也清醒地知道自己的盲区。正是这种“知不足而后进”,让 AI for Science 的下一部大片更值得期待。

x^t+6h=Fphys(xt)+λ Fθ(xt)\displaystyle \hat{\mathbf{x}}_{t+6h} = \mathcal{F}_{\text{phys}}(\mathbf{x}_t) + \lambda \, \mathcal{F}_{\theta}(\mathbf{x}_t)
这个式子把“物理 + AI”的协作讲得很直观:物理公式保证不越界,神经网络负责修偏差。未来天气预报的形态,很可能是这样“双引擎”驱动的。
  1. 物理项$\mathcal{F}_{\text{phys}}(\mathbf{x}_t)$ 表示传统数值模式的 6 小时预报,提供物理可信的基准。
    xt+6hphys=Fphys(xt)\mathbf{x}^{\text{phys}}_{t+6h} = \mathcal{F}_{\text{phys}}(\mathbf{x}_t)
  2. 学习项与权重$\mathcal{F}_{\theta}(\mathbf{x}_t)$ 表示数据驱动模型给出的修正量,$\lambda$ 控制修正强度。
    x^t+6h=xt+6hphys+λ Fθ(xt)\hat{\mathbf{x}}_{t+6h} = \mathbf{x}^{\text{phys}}_{t+6h} + \lambda \, \mathcal{F}_{\theta}(\mathbf{x}_t)

AI 应用场景

极端天气灾害预警

阶段:模型推理与预测 → 业务部署

解决的问题:传统数值预报对 5-10 天延伸期的极端高温、寒潮、热带气旋路径预测计算成本高、提前量不足。GraphCast 以分钟级推理生成 10 天预报,在热带气旋路径、极端温度等指标上优于 HRES,为应急部门抢出宝贵提前量。

具体案例:某省级气象台将 GraphCast 接入“延伸期预警系统”,每年夏季提前 7-9 天发出高温过程提示,对比传统模式命中率提升约 15%,为电力调度和户外作业提供了决策依据。

新能源功率预测

阶段:数据预处理 → 模型微调与集成

解决的问题:风电场发电功率与未来 10 天的风速、云量强相关,传统预报在复杂地形下偏差大。GraphCast 输出的全球 0.25° 气象场可作基座,经区域降尺度模型微调后,为场站提供更准的中长期风速与辐照预测。

具体案例:某能源科技公司把 GraphCast 输出接入风功率预测平台,结合场站历史出力修正后,72 小时风速预报 RMSE 降低约 12%,月度考核电量偏差显著收窄。

全球航运航路优化

阶段:模型推理 → 业务集成

解决的问题:远洋航行依赖 5-10 天的大气环流(急流、风暴)信息来规划燃油与航路。传统模式的高分辨率预报时效长、获取成本高;GraphCast 推理极快,可支持高频更新的“滚动航路优化”。

具体案例:某远洋运输公司在气象服务商支持下,每天两次用 GraphCast 更新北大西洋航路推荐,平均单航次节省燃油 3%-5%,并减少了颠簸区穿越次数。

Python 演示

python68 行
import numpy as np # 最小化 GraphCast 思路演示: 网格消息传递 + 自回归迭代预测 def make_grid(n=10):    # 生成 n*n 网格, 返回节点坐标与四邻域邻居列表    xs, ys = np.meshgrid(np.arange(n), np.arange(n))    coords = np.stack([xs.ravel(), ys.ravel()], axis=1).astype(float)    neigh = []    for idx, (x, y) in enumerate(coords):        nbs = []        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:            nx, ny = int(x + dx), int(y + dy)            if 0 <= nx < n and 0 <= ny < n:                nbs.append(int(ny * n + nx))        neigh.append(nbs)    return coords, neigh def weather_field(coords, t):    # 合成天气场: 两个移动的波叠加, 模拟高低压系统    x, y = coords[:, 0], coords[:, 1]    return (np.sin(0.4 * x - 0.25 * t) * np.cos(0.3 * y + 0.15 * t)            + 0.6 * np.sin(0.7 * y - 0.2 * t)) def build_dataset(coords, neigh, n_traj=40, T=12):    # 构造训练对: 用状态本身 + 邻居均值 预测 6 小时后的变化量    X_list, Y_list = [], []    rng = np.random.default_rng(0)    for _ in range(n_traj):        ph = rng.uniform(0, 2 * np.pi)        states = [weather_field(coords, t + ph) for t in range(T)]        for t in range(T - 1):            feats = [[states[t][i],                      np.mean([states[t][j] for j in nbs]) if nbs else states[t][i]]                     for i, nbs in enumerate(neigh)]            X_list.append(feats)            Y_list.append(states[t + 1] - states[t])    return np.array(X_list), np.array(Y_list) def iterative_forecast(start, neigh, W, steps=20):    # 自回归迭代: 每步的输出作为下一步的输入    state = start.copy()    traj = [state.copy()]    for _ in range(steps):        feats = np.array([[state[i],                           np.mean([state[j] for j in nbs]) if nbs else state[i]]                          for i, nbs in enumerate(neigh)])        state = state + (feats @ W).ravel()        traj.append(state.copy())    return traj def main():    n = 10    coords, neigh = make_grid(n)    X, Y = build_dataset(coords, neigh)    Xr = X.reshape(-1, 2)    Yr = Y.reshape(-1)    W, *_ = np.linalg.lstsq(Xr, Yr, rcond=None)   # 最小二乘拟合消息传递规则    start = weather_field(coords, 0.0)    traj = iterative_forecast(start, neigh, W, steps=20)    true = [weather_field(coords, t) for t in range(21)]    rmse = [float(np.sqrt(np.mean((traj[t] - true[t]) ** 2))) for t in range(21)]    print("初始 RMSE:", round(rmse[0], 4))    print("第20步 RMSE:", round(rmse[-1], 4))    print("20步平均 RMSE:", round(float(np.mean(rmse)), 4)) if __name__ == "__main__":    main()
目的:用 10×10 网格上的合成天气场,演示“邻居信息聚合 + 线性更新 + 自回归迭代”这套 GraphCast 的核心机制,最终输出 20 步迭代预测的 RMSE。
  1. def make_grid(n=10):生成网格节点坐标与四邻域邻居表,相当于 GraphCast 的球面网格抽象。
  2. coords = np.stack([xs.ravel(), ys.ravel()], axis=1).astype(float)把二维坐标展平成 N×2 的节点坐标矩阵。
  3. states = [weather_field(coords, t + ph) for t in range(T)]生成一段带随机相位的“天气电影片段”,相当于 ERA5 提供的历史帧。
  4. feats = [[states[t][i], np.mean([states[t][j] for j in nbs]) ...]]每个节点的特征 = 自身状态 + 邻居均值,这就是消息传递的“聚合”。
  5. state = state + (feats @ W).ravel()用线性层更新状态(预测增量),对应 GNN 的 UPDATE 步骤。
  6. W, *_ = np.linalg.lstsq(Xr, Yr, rcond=None)用最小二乘从历史数据中“学”出消息传递规则,等价于训练神经网络参数。
  7. traj = iterative_forecast(start, neigh, W, steps=20)自回归迭代 20 步,输出完整的预测轨迹。
  8. rmse = [float(np.sqrt(np.mean((traj[t] - true[t]) ** 2))) for t in range(21)]逐帧计算与真实场之间的 RMSE,评估预测质量。

常见误区

误区我以为 GraphCast 是纯 AI 模型,它不用任何物理知识,全靠神经网络硬记。所以物理定律对 AI 预报根本不重要。

正解GraphCast 的参数确实来自数据,但它所学数据的“原材料”——ERA5 再分析数据本身是由物理模式同化观测生成的,预测结果隐含了大气物理的约束(如气压梯度与风场的关系)。更准确的理解是:AI 把物理定律“压缩”进了大量历史样本里,而不是逐行写进代码。学界还在探索“物理约束 + 数据驱动”的混合模型,让 AI 不越物理的界。

为何常见:大众传播常把“AI 取代科学计算”简化为“不要物理”,却忽略了数据本身由物理产生这一前提。

误区我以为输入今天的天气数据,GraphCast 就能直接输出 10 天后的天气结果,就像按一下按钮就出结果。

正解GraphCast 的核心模型只预测未来 6 小时。10 天预报是把 6 小时预测结果当成新的输入,再预测下一个 6 小时,循环 40 次得到的自回归过程——就像放映机一帧一帧播放,而不是直接跳到第 40 帧。每一帧都带来微小误差,误差随帧数累积,这是所有迭代预报模型共同的挑战。

为何常见:看到论文里“10 天预报”字样,加上 AI 模型“一次前向”的常见认知,容易误以为整段预报是“一键生成”的。

误区GraphCast 在 90% 的指标上优于 HRES,那它是不是在任何一个时间、任何一个变量上都比传统模型强?

正解90% 是指在 2023 年测试时段内、对多个变量、多个提前期、多个区域综合统计的结果。它并非每个变量每一天都更优:在 1-3 天的短提前期,传统高分辨率模式在部分变量上仍有优势;在高层风场、局地降水细节上,AI 模型也未必稳定占优。准确说法是:GraphCast 在绝大多数指标上达到或超过传统王牌模型,且推理速度领先几个数量级。

为何常见:单一的百分比数字会让人产生“全面碾压”的直觉,但气象评估是高度细分的,一个数字无法覆盖所有维度。

误区GraphCast 的 0.25° 分辨率大约是 28 千米一格,我觉得只要把分辨率再提高,天气预报就一定会更准。

正解网格更细只是“采样更密”,不等于误差更小。预报精度取决于数据质量、模型结构、训练目标以及误差传播方式。GraphCast 内部甚至用多尺度网格(粗网格传远、细网格修局部)在算力与精度之间做平衡。对 AI 模型而言,更细的输出分辨率如果缺乏对应的精细观测数据支撑,反而可能学到“假精细”。

为何常见:日常直觉里“像素越高照片越清晰”很容易类比到气象网格,却忽略了天气预测是“在外推中求准确”的科学问题。

面试题

Q1. GraphCast 使用的核心网络架构是哪一类?

单选题 · easy

  • A.卷积网络
  • B.图神经网络← 正确答案
  • C.循环网络
  • D.支持向量机

答案:B。GraphCast 用图神经网络(GNN)在地球球面网格上做消息传递。就像演员们在网上互相传话,GNN 天然适配球面这种不规则拓扑,而 CNN 擅长规则矩形网格,循环网络擅长序列,SVM 是传统机器学习分类器。

Q2. GraphCast 一次前向预测覆盖多长时间?

单选题 · easy

  • A.1 小时
  • B.6 小时← 正确答案
  • C.12 小时
  • D.24 小时

答案:B。GraphCast 的 $\Delta t$ 是 6 小时,相当于放映机的一帧。10 天预报需要自回归迭代 40 次(40 × 6h = 240h)。如果一次只预测 1 小时,迭代成本过高;预测 24 小时又误差太大。

Q3. GraphCast 训练所用 ERA5 数据的本质是什么?

单选题 · easy

  • A.实时卫星云图
  • B.历史再分析数据← 正确答案
  • C.人工合成样例
  • D.地面站点观测

答案:B。ERA5 是 ECMWF 用物理模型把历史观测“缝补”成的再分析数据集,相当于 39 年的天气录像档案。它既不是实时观测,也不是人工合成,而是观测与物理模式融合的产物。

Q4. GraphCast 如何得到未来 10 天的天气预报?

单选题 · mid

  • A.一次前向直出结果
  • B.六小时迭代自回归← 正确答案
  • C.蒙特卡洛随机采样
  • D.查找历史相似天气

答案:B。GraphCast 只训练了一个 6 小时预测器,10 天预报靠把输出当输入、循环 40 次的自回归过程。这就像放映机一帧一帧播放电影,而不是一次性跳到第 40 帧。

Q5. GraphCast 在全球网格上交换信息依赖的核心运算是?

单选题 · mid

  • A.卷积滑窗提取
  • B.节点间消息传递← 正确答案
  • C.全局注意力机制
  • D.全连接层回归

答案:B。GNN 的核心是消息传递:每个节点把自身状态告诉邻居,同时聚合邻居信息来更新自己。卷积滑窗对应 CNN,全局注意力是 Transformer 的思路,全连接层则没有利用图结构。

Q6. GraphCast 输出网格的空间分辨率大约是多少?

单选题 · mid

  • A.约 0.025 度
  • B.约 0.25 度← 正确答案
  • C.约 2.5 度
  • D.约 25 度

答案:B。GraphCast 输入输出是 0.25° 的规则经纬网格,约 28 千米一格,全球约有 100 万个网格节点。2.5° 太粗只能看到大尺度环流,0.025° 则对算力要求不现实。

Q7. 2023 年评测中,GraphCast 相较 ECMWF HRES 在多大比例的指标上更优?

单选题 · mid

  • A.约 50% 的指标
  • B.约 70% 的指标
  • C.约 90% 的指标← 正确答案
  • D.约 99% 的指标

答案:C。GraphCast 在 90.2% 的评估指标上优于 HRES,在约 99% 的指标上优于盘古气象模型。“约 50%”和“约 70%”低估了它的实力,而"99%"是它与盘古对比的成绩,不是与 HRES 对比的成绩。

Q8. GraphCast 内部多尺度网格的计算设计思路是什么?

单选题 · hard

  • A.粗网格传远区细网格修局部← 正确答案
  • B.所有尺度都用最细网格
  • C.直接丢弃高纬地区网格
  • D.每次随机采样部分节点

答案:A。GraphCast 在二十面体网格的层级结构上做消息传递:粗网格让信息高效传到远距离区域,细网格保留局部天气细节。若所有尺度都用最细网格,算力会爆炸;高纬网格和随机采样则会造成信息丢失。

Q9. 以下属于 GraphCast 目前局限的有哪些?

多选题 · hard

  • A.依赖历史再分析数据质量← 正确答案
  • B.极端事件外推能力有限← 正确答案
  • C.推理需超算且速度极慢
  • D.单值输出不直接给概率← 正确答案

答案:ABD。GraphCast 的“演技”来自 ERA5 档案,数据盲区就是它的盲区,A 正确;罕见极端天气缺少历史参照,外推能力有限,B 正确;它输出确定性单值,不像集合预报给概率区间,D 正确。C 恰好说反——GraphCast 最大的卖点就是推理快,单个 TPU 上不到 1 分钟完成 10 天预报。

Q10. 关于 GraphCast 的评测结论,下列说法正确的有?

多选题 · extreme

  • A.相比 HRES 约九成指标更优← 正确答案
  • B.并非所有变量和时效都占优← 正确答案
  • C.热带气旋路径长提前期有优势← 正确答案
  • D.短提前期全面碾压传统模型

答案:ABC。A 对应论文中 90.2% 指标优于 HRES 的结论;B 正确,约一成的指标(尤其短提前期、高层风等)传统模型仍有优势;C 正确,GraphCast 在热带气旋路径的延伸期预报中表现突出。D 过于绝对——在 1-3 天短提前期,传统高分辨率模式在部分变量上依然有竞争力。