今天看到这篇文章的时候,立马放下了手中的活,把论文大概刷了一遍。以下是对这篇论文的简单的解读。文末有文章和代码链接。
简短版本
当前许多大型科学计算项目都是用Fortran编写的,比如气象领域的数值预报模式。而近些年来深度学习在地球科学领域的得到越来越多的关注。如何利用现代语言环境下的深度学习生态,以耦合到Fortran语言的数值计算模型中,一直是大家关注的事情。
近期加利福尼亚大学的研究者构建了基于Keras-Fortran的桥梁接口(KFB),并利用FKB解决有关全球气候模拟实验方法的鲁棒性的问题,在该方法中,利用深度学习神经网络模拟次网格物理过程。在这种情况下,FKB可以对Keras实现的次网格云和辐射物理的一百多个候选模型进行超参数搜索,然后迁移应用到Fortran中以评估拟合存在缺陷的模型与行星尺度流体动力学耦合时的性能。结果揭示了:离线验证错误和在线性能之间以前无法识别的强关系,其中优化器的选择是至关重要的;这有助于确定新的优化的NN模型,与之前的结果相比,该模型的稳定性提高了500倍。
详细版本
上古语言Fortran起初是为了数值计算,由于其计算效率高,而得到了广泛的应用。但是随着计算机科学的不断发展,涌现出很多编程语言,比如C、C 、Java、Python、Julia等,Fortran也逐渐被取代。不过当前大部分海洋学、计算物理、气候模式和航天仍在使用Fotran进行数值计算。由于这些历史“宝藏”代码的复杂性以及体量等问题,导致很难利用现代编程语言重写这些Fortran代码。
近些年来重焕活力的人工智能技术基本都是采用现代编程语言,比如Python、Julia等。而且深度学习在地球科学领域也得到了广泛的关注,比如远程遥感、气候变化、数值预报模式等,尤其是利用深度学习优化数值模式中的次网格参数化过程,比如云、辐射参数化。而Fortran语言编写的数值模式并不能从现代语言体系下的深度学习中受益。因此,为了更好的利用现代语言构建的深度学习模型,有必要将深度学习模型耦合到Fortran语言体系中。
可以通过如下两种方式实现上述目的,一种是使用Fortran重写当前所有深度学习代码;另一种是在现代语言深度学习模型和Fortran之间构建桥梁接口。近期有研究者构建了基于Keras-Fortran的桥梁接口,即Fortran-Keras Bridge(FKB),这种双向桥梁接口将Python生态和Fortran高性能计算连接起来,可以在Fortran中充分利用当前很多的深度学习模型。
FKB可以与许多以Fortran编写的大型和计算密集型项目进行集成,这些项目很容易和神经网络模型进行集成。比如广泛使用的CESM气候模式、混合坐标海洋模式(HYCOM)、WRF模式等。上述模型可以利用FKB,以在模式代码中集成深度学习模型。
Fortran和Python生态中FKB的作用
FKB/P可以获取Keras的深度学习模型,然后传递给FKB/F,FKB/F可以利用Keras构建和训练的模型,从而将Python的网络模型和Fortran进行无缝衔接。同样的,可以将Fortran构建的神经网络模型迁移到Python中进行分析、扩展和优化,比如使用Python相关工具进行超参数搜索。
FKB的特点
FKB通过FKB/F实现了神经网络库;然后通过FKB/P将Keras模型解析为与Fortran神经网络库一致的格式。
FKB/P
一旦Keras模型训练完成之后,可以将网络架构、权重、偏差、优化器、学习率、梯度等信息存储到HDF5文件中。FKB/P可以从HDF5文件中解析网络架构、权重、偏差、激活函数等信息。然后,这些信息转换为与FKB/F中匹配的Fortran神经网络配置,从而允许用户可以在Fortran中构建相同的网络,很容易在Fortran环境中加载和使用。如果在Fortran环境中进行了任何的修改,FKB/P将这些更改解析到HDF5文件中,利用Keras重新训练。
FKB通过FKB/F实现了神经网络库;然后通过FKB/P将Keras模型解析为与Fortran神经网络库一致的格式。
也就是说,初始的网络模型可以在Fortran中构建,在初始训练和测试之后,可以迁移到Keras进行评估。这使得可以利用GPU训练Keras模型,然后嵌入到Fortran代码中。
FKB/F
FKB/F可以与原始的神经网络模型耦合。下面介绍新的特征,以确保神经Fortran可以更灵活且能够双向通讯。
- 自定义层 为了在Fortran中应用神经网络,FKB扩展了神经Fortran库。同时引入了可扩展的层模块,为了实现一个层,可以简单的扩展层的类型并且指定前向和后向函数。而且通过重构层的格式,可以构建任意层。所有的操作都限制在层模块中,从而可以将上一层的输出作为下一层的输入。 FKB支持全连接或密集层、dropout、BM。而且很多Keras中的标准层都可以使用。
- 在Fortran中训练 首先要区分两种训练方式:离线和在线。这两种方式的差别主要是:如何利用模型的预测结果。所谓在线,指的是模型的预测会用于物理过程的演变,即一个时步的预测会影响下一个时步的系统行为;而离线方式并不考虑过去的预报并不会影响未来模型的输入。 如果有足够的先验数据可用,离线方式足以训练模型。而在线方式有以下用处,神经网络可以完全在Fortran中进行学习;在线训练可以进一步校正预训练模型;可以构建次级模型弥补主模型的缺陷。
- 自定义损失函数 在Keras、TF、Pytorch中自定义损失函数是非常常用的功能。FKB中也提供了自定义损失函数的功能,但是FKB并没有提供自动微分的功能。因此,还需要利用和导数相关的输入进行训练。 通过利用此功能,用户可以利用各种损失函数最小化特定的量化任务。一旦构建后,就可以包括在已有的框架中,并在在线训练期间使用。
- 集合 集合包含了不同的模型。集合的输出可以是所有预测成员的平均。在机器学习中,集合的结果通常比单个成员的结果要好。集合操作的依据是:不同的成员可能会表现出不同的错误特征,对所有成员进行平均可以平滑误差。在打破了物理稳定性的领域中,使用集合操作可以改善模型的结果。
超参数化大气模式案例测试
文中利用Superparameterized Community Atmospheric Model version 3.0进行了测试。超参数化是通过将数千个潮湿对流的有限域显式子模型嵌入到传统的大尺度大气行星模型中,来解决气候模型中次网格云物理学长达数十年的问题的一种方法。详细的描述就不多说了,感兴趣的去看论文吧。
离线性能和在线性能对比. (a) 所有模型 (b) BM (c) Dropout (d) leaky ReLU 系数 (e) 学习率 (f) 每层密集节点数 (g) 层数 (h) 总的模型参数 (i) 优化器类型
通过此双向桥梁可以将Python和Fortran有效的连接起来,在数值计算模型中充分利用Python生态中的深度学习环境。FKB库使用户可以直接在Fortran中访问Keras API的许多功能,包括创建自定义图层和丢失函数以满足他们的需求的能力,而且具有非常好的易用性,通过在全球大气的多尺度物理模型应用中也证明了这一点。
参考链接
1. https://arxiv.org/abs/2004.10652
2. https://github.com/scientific-computing/FKB
- End -