43

彩云天气:用神经网络「看见」北京的下一场雪

 5 years ago
source link: https://www.jiqizhixin.com/articles/2019-02-15-11?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

「经验告诉我们:天空的薄云,往往是天气晴朗的象征;那些低而厚密的云层,常常是阴雨风雪的预兆……」

家喻户晓的说明文《看云识天气》里,描绘的是人类如何用肉眼观察来提取特征、预测天气的的过程。而近 40 年来,气象工作者们基于大气物理方程,用更为科学和量化的「模式」方式,将预测的精度不断提高,时间范畴不断扩大。

故事的另一面,自五年前开始,神经网络似乎成了各个学科领域里一把屡试不爽的万能钥匙,无论是空间抽象问题,还是时间序列问题,似乎都能取得远胜从前的效果。那么这把万能钥匙,是不是也能打开气象领域某些隐藏的尘封的门?

事实上,「用 神经网络 预测天气」并非天方夜谭,你手机里的「彩云天气」APP 告诉你的「25 分钟后雨渐停,不过一小时后还有雨。」正是神经网络根据气象雷达基本反射率给出的预测结果。

天气预报是如何炼成的?用神经网络的思路和传统思路有什么不一样?彩云天气算法总监徐朋秋,为我们仔细讲述了这个神经网络版本的「看云识天气」的故事。

机器之心:天气预报有哪些种类?彩云天气想要做的是何种类型的天气预报呢?

打开中央气象台的网站,我们能看到一个官方分类法是以城市划分的笼统的城市预报,对于台风等特殊气象现象有专门的现象预报,还有一些针对环境、农业、水文等行业的特殊需求预报。

彩云天气想要做的其实也是针对特殊需求的解决方案,例如短临降水。

机器之心:能否介绍下,在机器学习进入之前,天气预报是如何炼成的?

不同种类的天气预报流程会有很大差异。这里介绍一下大家日常熟悉的以一两天为单位的天气预报的预报流程。

首先国际气象组织通过全球的国际交换站收集到实况的气象资料,这里的气象资料不是大家提到气象所想到的云、雾这些现象,而是解大气物理方程需要的基本量:水汽含量、温度、湿度、辐射等。

随后,这些气象资料进入一个数值模式的同化系统中,经过一个四维变分同化,输出未来 10-15 天范围内逐小时的状态预报。

同化指的是把想要进入大气物理方程,但是不属于基本量的其他数据,变成基本量。例如,风速(大气流速)也是一个基本量,但是直接探测流速,尤其是大面积的流速是很困难的。因此有人就研究了一个方法,认为卫星图里观测到的云的移动和风有一些关系,就把云的移动的资料同化到了一个模式中,转化成了风。

同化完成之后,我们根据气象模式,也就是一系列大气物理方程组,输入地表往上的三维结构里每一层的大气状态基本量,计算这些基本量在未来的值,也就是未来的湿度、风向、风速等等。

接下来,根据未来的气象基本状态,人们把能想到的影响因素都考虑进来,预测天气情况,比如多云、下雨、有雾等等。

最后,因为推断过程中仍然有很多人类未知的因素,即使所有基本量都是准确的,也依旧无法准确地判断「是否会下雨」。这时,天气预报员就会根据他看数值预报多年的经验以及在当地长期生活的经验,对预报结果进行一些修正。

整个过程,尤其是气象模式计算所需的计算量格外巨大,中国的气象模式跑在太湖之光超级计算机上,而世界上排名靠前的超算里,也有好几台都在跑气象模式。

机器之心:引入机器学习能够帮助这个过程吗?

可以的,主要在整个过程中需要进行模糊估计的部分。

在刚才的过程里,存在模糊估计的部分有:

  • 需要当前状况的面数据,但是只有观测站的点数据,因此需要对当前状况进行猜测(类似插值)

  • 同化工作,把一些非基本量数据通过一些公式转化为基本量,因为同化公式通常是一些经验公式,没有预报公式那么可靠,也需要一定的估计

  • 解方程的时候,不同的地表(城市,树林,岩石,等)与空气摩擦,产生的热力学效应不一样,通常采用的方式是用某一个摩擦系数代表一类地表,但是这个预估过程中间也可以通过机器学习做到更准确

  • 从得到方程结果到预测实际天气的过程里,很多影响天气的因素实际上很难被纳入一个非常精确的模型当中:例如「是否会下雨」这样的微物理过程中存在很多的模糊因素。

此外,也有很多人类活动影响天气的例子。例如华东地区的雾霾就会影响地区的温度、能见度,甚至湿度:相同湿度下,这些粒子的存在让水蒸气更容易凝结成水滴。而如果想要用精确的方程描述雾霾的发展,需要拿到精确的排放关系,而事实上是没有人能实时获得所有的工厂、热电厂的排放数据。

在上述这样的情况下,人们仍然希望尽可能准确地对天气进行预测,对未来气象进行估计,就可以用机器学习的方式,或是说参数估计的思想,对一些模糊的地方进行模糊的判别,然后去进行模糊的估计,判断模糊要素对未来的影响。

最后,我们还有一个非常宏大的理想:我们发现整个气象模式这套解方程体系是可以反向传播的,所以我们立志把整个方程组做成一个可以 反向传播 的神经网络!当然我们距离这个目标还非常遥远,用模式方式进行天气预报这个过程,已经业务化运行 40 年了,想找到能与之匹敌的神经网络,是有着非常巨大难度的。

深度学习成体系的应用时间也并不长,深度学习和气象领域的结合也处于刚刚开始的阶段。现有的几篇工作大部分还是在短临降水领域。

机器之心:现在有哪些天气预报过程中使用了机器学习吗?

机器学习对于气象来说并不是「新鲜事」,机器学习最早的应用领域之一就是气象判别。现在整个大气学界也一直在这方面进行致力于它的改进,每年都有各种各样的人去发明新的同化算法、预报算法,改进里面的参数。

比较知名的应用机器学习的例子包括,预报台风强度和强对流天气。

台风是一个大家很关心的现象,最好的算法是一个机器学习算法:它集合了一些 模式人工抽取的特征,利用 SVM、随机森林之类的方式对台风强度做预判。

另外一个例子是强对流天气的预测。对于冰雹、大风、闪电这些现象的预测,有一种方法是用机器学习判定其发生位置。近年来这个算法在评测中已经超越了人类预报员了。

机器之心:彩云天气为什么想要做短临降水?方法和传统方法有什么区别?

其实「深度学习和气象结合」并不是我们的切入点。我们有一些更为直接的由需求转化而来的初衷。比如作为一名生活在北京的自行车爱好者,我会特别困扰于北京夏天短临降水报不准的问题:几小时区间内的小范围降水,尤其是夏天,传统方法报出来的结果没法用的。

上面这是需求方面,而在技术方面,2000 年之后,我国气象雷达得到了大范围的普及。气象雷达会主动发送 2 GHz 到 3 GHz 、和 Wi-Fi 波段差不多的电磁波,以分钟为单位进行扫描。根据散射方程可以算出来,这样的电磁波对 零点几毫米几毫米大小的粒子特别敏感,而散射回来的波的强度就和粒子的个数以及体积有关。

而降水就是水蒸气到了空中,先变成小冰晶或者小雨滴,然后越来越大,直到最大的时候就是落到地上的时候了。因此可以观察整个过程,回波最强的时候就是水滴体积最大,个数最少的时候,也是雨要落到地上的时候了。利用这种原理,我们就能探测到空中那些个数又多体积又大的例子,而这种例子在经过一些质量控制方法筛选之后,其实就是降水。

所以我们是根据雷达图对短临降水做预测。然后以手机 app 的形式呈现给用户随时查看。

Zz22muq.png!web

现阶段我们希望能够成为模式的一种修正,一方面让我们对气象有一个更好的了解,另一方面是能够服务到大家:模式能够报得好的东西,比如气压,通常离大家的生活很远。我们想要报一些离人们生活更近的、不一定是纯气象范围的问题,例如雾霾。

机器之心:用气象雷达进行短临降水预测有哪些优缺点?

优点是它相对比较精确。利用气象雷达,我们就可以用分钟级的数据对其扫描范围(大约 250m x 250m)内是否会发生降水进行非常精确预测。

缺点是它也会受到一些干扰:比如飞机飞过也会有回波,鸟飞过也会有回波,还会绵延好几分钟,不能说飞机和鸟下面正在下雨。再比如中国尊它特别高,挡到了雷达,也不能预报说中国尊下面一直在下雨。

zQri2er.png!web

机器之心:在利用雷达数据进行短临降水预报的过程中是否有用到深度学习?

完成整个过程的第一代模型可以分为分割和预测两部分。都是利用深度学习完成的。

首先,分割的目的是要排除干扰,把飞机、飞鸟、中国尊以及一些不是降水的大气扰动找出来,判断雷达收到的回波究竟是不是降水回波。这个模型就是利用图像分割模型完成的。当时以 U-net 和 SegNet 为基础模型,标注了数据进行了训练。

nYnIriV.png!web

分割完成之后的预测部分也采用了全 深度学习 模型。这是因为想要用传统的拿基本量、解气象方程做短临降水问题是不可行的:想做短临降水意味着需要分钟级的基本量数据,但是这部分数据在全球范围内都不是公开可得的。

因此,我们的思路是,既然没有办法建立一个完备的方程组并用其进行预测,那么不如进行模糊预测。而我们最初判断深度学习可以做这个预测的原因是,这份工作是人能做的,而且这种人为预测在气象部门其实已经很常见了。举个例子,北京在下雨之前会有时候手机上会收到雷电预警,就是由气象局的「气象雷达短临岗」的工作人员在雷达图上观测到相应的特征,然后挂出的预警。

我们训练了一个端到端的网络,把特定时间分割过的雷达图以及一些其他数据做输入,把未来一个时间点的分割过的雷达图做输出进行预测。例如雷电的预测就是输出一张和输入相同大小的矩阵,每个点上的值代表这个位置发生雷电的概率。

机器之心:现在的短临模型和第一代模型有什么区别?

现在的模型把分割和预测两个分离的过程合到了一起,做了一个完全端到端的模型。

好处是比原来还要方便很多。坏处就是有时候因为模型没见过特定的样例判断错了之后我们还要把模型拆回去检查它为什么错。

现在的模型在六个小时的时间范围内已经可以做到和模式预报的结果差不多了。

机器之心:数据集如何收集?需要自己进行标注吗?有哪些注意事项?

我们自己做了标注工具,自己进行了标注。全国有两百多个雷达基站,夏天和冬天的数据不一样,所以我们标注了十万张左右的雷达数据,用各种数据增强方法把训练集规模扩大到几千万。

不同季节、不同纬度的数据都要囊括,比如哈尔滨和海南的热力学性质就不一样,然后不同地形也都要采样,比如说西安,因为南面有秦岭,就和其他附近没有山的城市不一样。

机器之心:除了短临降水之外,还打算用深度学习做其他预报吗?如果把深度学习模型视为一样工具,如何用这些工具解决特定问题呢?

有的,我觉得在短临之外也有很多可以做的地方:因为一方面短临能解决的问有限,另外一方面我们想把短临在比较长的时间轴上融合起来,做成一个短时间也准、长时间也准的预报。

气象领域的深度学习可以概括为一个「看需求造模型」的过程。

现有的深度学习,几乎每个模型都可以被拆分为一堆组件。而组件的类型也就三、四种:例如以卷积层和其他线性层、非线性层、上下采样层,还有一些规范化层(norm)。我们要做的就是用各种方式糅合这四类层,把它做成一张计算图。

糅合的过程中可以从一些物理的角度来思考问题:比如是否需要时间平移不变性、空间平移不变性,然后非线性度需要多少。甚至还有一些问题,就像之前的基于「模式」的方法一样,整个方程都已经写定了,我们只需要优化一些参数。换言之,我十分确定每个模型上的参数如何对应方程里的参数。然后我们就依照公式去造一个模型,让它去学习相应的参数。

所以说模型的规模是可大可小的,当一个问题的物理性质非常明晰的时候,其中只有很少的一点不确定性需要学习,此时可能用一个一层、两层的 MLP 就可以解决这个问题。

机器之心:在现有深度学习的研究中,有哪些进展可能会对气象非常有帮助呢?

最新一届 NIPS(NeurIPS)的最佳论文,神经常微分方程,让我们非常兴奋。如同前面所说,气象模式这套以大气运动基本方程组为核心的系统理论上是可以反向传播的、能够对系数求偏导的,那么理论上也可以用一个神经网络去模拟。但是虽然理论上有可能性,实现上却有非常多障碍。例如实现中,很多条件都并非可微分的,而是用条件语句(if else)写出来的。

因此建立一个大的神经网络需要精确地进行划分,把不可微分的部分剥离出去作为数据,把可微分的部分变成参数。

突破点已经有一些,很多研究者拿模式的输出数据去做强对流预测、海洋表面温度预测、短临预测等等,但后续等待着我们的工作还非常多,我们需要把人类已有的气象知识以合适的方式编码到神经网络中,减少对数据量的需求。现在模式的方式只需要全球几千个观测点的数据就能做到给出全球任何一个地点的输出,依靠的就是人类物理知识的先验。而模式从提出到现在已经 40 年时间,仍然与人有很大的差距,更不能说完全替代人,深度学习要走的路就更长了。

现在全球范围内,气象领域拥有的「智力资源」还是太少了,研究者非常少,气象模式计算又是在气象领域中非常冷门的一个子领域,真正落实到一个特定实际操作中需要解决的问题,可能全球范围内研究者不过数十人。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK