观潮 · 模式预报与气象 AI 观察
Varda-single-1.0:瑞士 1 公里地形 AI 预报做到了什么,差在哪里
这篇论文在讲什么事
瑞士气象局想做一件很难的事:用 AI 做天气预报,而且要达到他们自己业务数值模式的水平。更具体一点,是把水平分辨率提到 1 公里,覆盖阿尔卑斯山区——那片地形极其复杂、气象场极难预报的地方。
他们的结论是:做到了"接近",但没做到"超过"。
---
他们怎么做的
不是把一个模式调大,而是拆成两个各管一件事的模型。
第一个模型负责"往后推",每次往前走 6 小时。推到 120 小时,只需要重复 20 次左右,不需要跑 120 步。
第二个模型负责"补中间",一次性把两个 6 小时端点之间的小时状态全部填出来。这样既省算力,也避免了逐小时推进时误差一步步累积。
两个模型都是同一套架构:先编码、再处理、最后解码,处理环节有 16 层,隐藏维度 1024,用的是目前 AI 预报主流的图神经网络变体。开发框架是 ECMWF 牵头的开源框架 Anemoi。
网格怎么处理:一张图上同时放全球和阿尔卑斯
这是整篇论文最巧的设计。
传统做法(区域模式)是:全球模式给出边界条件,区域模式在边界内做自己的精细计算。但这样有个问题——区域里的天气到底是自己的,还是被大尺度平流"带进来"的?说不清。
他们的做法是:在同一张图上,全球用约 31 公里的粗网格,阿尔卑斯用 1 公里细网格,两种网格直接连边。这样模型学阿尔卑斯天气时,同时看得见全球环流的背景,不用别人给它边界。
连接方式靠一个经验参数自动调节:网格密的地方连得密,网格疏的地方连得疏,不需要手写两套拓扑规则。模型内部还有一套独立的"隐空间网格",全球粗、阿尔卑斯细,用来承载中间计算。
图 2:两个模型怎么配合

论文图 2:Varda-single 系统示意。上方为 6 小时预报器(输入当前与 6 小时前状态,向前推进 6 小时),下方为时间降尺度器(在两个 6 小时端点之间生成逐小时预报)。
图 3:一张图上同时放全球和阿尔卑斯

论文图 3:Varda-single 的输入网格。蓝点来自 ERA5 N320 递减高斯网格,代表区域所需的全球边界条件;红点是 REA-L-CH1 在 1 公里分辨率上的网格中心,覆盖阿尔卑斯区域。
图 15:评估用的站点分布

论文图 A2:瑞士地形分区(侏罗山、瑞士高原、瑞士阿尔卑斯)与评估使用的地面站分布。共 187 个站测 2 米气温、151 个站测 10 米风。
图 14:三段区域的图连通方式

论文图 A1:三个代表区域的图连通性(从左到右:全球 ERA5 区、全球与区域模式的边界、纯区域区)。蓝点是数据节点,红点是隐藏节点,灰线是边。
训练走了四步
从全球通用模型开始,先用全球再分析数据打底(1979–2023),再拿 20 年区域公里级再分析数据训练,最后用业务分析数据微调。降尺度器只训练前两步——因为全球业务分析数据没有逐小时分辨率。
训练过程中的一个细节很值得注意:阿尔卑斯区域只占模型总面积的约 1%,但他们把这个区域在损失函数里的权重提到了 5%。不做这件事,模型会理所当然地优先照顾全球。
---
做到了什么
图 1:一次预报的实际效果(2025 年 4 月 6 日 00 UTC 起报,+12 小时)

论文图 1:Varda-single 于 2025-04-06 00 UTC 起报的预报示例,显示 +12 小时时效的 2 米气温与 10 米风速。
对着瑞士自己的业务模式检验,覆盖一整年:
时效 · 表现
**0–33 小时** · 大体追平 1 公里分辨率的 ICON-CH1-EPS 业务集合预报
**0–120 小时** · 普遍优于 2 公里分辨率的 ICON-CH2-EPS 业务集合预报
大部分头部指标和变量上,它和自己家的业务模式持平或更好。
还有一个意外收获:最后的业务微调只跑了 1000 步,却带来了整个训练过程中最大的一次提升——120 小时预报的 2 米气温误差降低了约 25%。
作者的解读是:模型能力已经够了,剩下的误差主要来自训练用的再分析数据和业务分析数据之间的差异,不是模型不够大。
图 5:单步预报的细节对比

论文图 5:2026-04-06 06 UTC 起报的单次 6 小时预报步示例。左列为 Varda-single 的 2 米气温、10 米风、2 米露点温度预报,中列为业务分析真值,右列为差异。
图 7:技巧分数的空间分布

论文图 7:+6 小时时效下 Varda-single 相对 ICON-CH1-CTRL 的逐点 MSE 技巧分数,所有起报时刻累积、对 KENDA-CH1 分析检验。上排为 2 米气温,下排为 10 米风速。蓝色代表 AI 优于数值模式。
---
差在哪里(这篇论文最值钱的部分)
论文没有停在"我们不错",而是花了大篇幅讲三个具体案例的失败。这部分比成功结果更有信息量。
案例一:山谷风,8 米每秒变成 5 米每秒
2025 年 6 月 27 日,瑞士锡永山谷 vs 苏黎世平原的对比。
模型把谷风"白天增强、夜间减弱"的节奏和 2 米气温的日变化抓得不错。但风速峰值只有观测的六成:观测约 8 m/s,模型给 5 m/s 左右。
更麻烦的是强对流降水时段——观测风速变得又急又乱,数值模式还能捕捉到一部分,AI 模式基本没反应。
作者归因:主模型 6 小时推进一步,直接跨过了对流触发的那些小时级变化。降尺度器虽然能填出逐小时结果,但它手里只有两个端点,中间的快速演变信息本来就没被学到。
案例二:焚风,15 米每秒的峰被削平
2025 年 3 月 21–23 日的焚风事件。
模型做对了很多:跨阿尔卑斯的气压梯度、焚风开始的时机、两次风速峰的时间和形状、暖空气到达造成的升温。
但阿尔多夫站的实测最大风速约 15 m/s,模型给出的峰值明显偏低。
原因是它能预报大尺度背景,但解析不了亚千米级的地形加速——山口加速、背风下沉、地形管流这些。
论文里还有一句很诚实的推测:每个 1 公里输出点只由 3 个最近的隐空间节点解码,复杂地形里相邻网格可能共用同一批隐节点,可能装不下那么大的差异。作者明确标注这是初步假设,不是结论。
案例三:对流降水,143 毫米只给了 45 毫米
2025 年 7 月 2 日的强对流过程,业务分析给出的最大 6 小时累计降水是 143 毫米。
AI 模式给出的是一条宽、平滑、强度弱的降水带,几乎看不到单个对流单体结构,最大只有 45 毫米左右。
作者用了一个专门衡量降水形态的指标(SAL 的结构分量)来量化这件事,算出来是 +1.77——接近这个指标的最大正值,意思是"预测对象过大、过平,结构严重失真"。
这一段的机理链条写得非常完整,可以直接引用:
- 用均方误差训练,本质是让模型预测条件平均值
- 而降水的条件平均值,比任何一次真实发生的雨都更平滑
- 逐点的均方根误差指标反而奖励"在所有可能位置都摊一点"的保守做法
- 于是:一个位置稍微偏了但形状尖锐的预报会被双重惩罚,而一个糊开的预报反而拿到更低的误差
论文最后一句结论是:光把分辨率提到 1 公里解决不了对流降水问题,真正要改的是训练目标和概率表达方式。
图 10:冬夏两季的降水形态对比

论文图 10:6 小时累计降水的两个对照案例。上:预报较好的冬季案例(2025-12-07 起报,+24 小时);下:预报较差的夏季案例(2025-07-02 起报)。
图 11:结构误差从第一步就有

论文图 11:测试期子集的 SAL 统计。每一个圆点代表一次起报,按其在 6–30 小时窗口内的平均结构分量(S)和幅度分量(A)定位。(a) 是 Varda-single,(b) 是 ICON-CH1-CTRL。
---
几个容易被忽略的判断
关于误差累积:结构误差在第一个 6 小时预报步就已经形成,之后基本饱和——说明这不是长预报滚出来的误差,而是训练时就固有的。位置误差才随预报时效增长。
关于总量对不对:降水总量(幅度分量)在冬夏两季都接近零误差。也就是说,AI 算对了雨量总量,但把雨下错了地方和形状。
关于小时输出的隐忧:降尺度器只用过再分析数据训练,从没用过业务分析数据(因为全球业务分析没有逐小时分辨率)。作者自己把这个列为明确限制。
---
作者给出的下一步
- 训练一个模型同时输出多个小时步(而不是靠降尺度器补)
- 在复杂地形动态增加隐空间节点密度
- 用考虑空间结构的损失函数
- 做概率预报和集合预报