机器之心报道

研究者们致力于使用偏微分方程(Partialdifferentialequation,PDE)来描述涉及许多独立变量的复杂现象,比如模拟客机在空中飞舞、模拟地震波、模拟疾病在人群中蔓延的过程、模拟基本力和粒子之间的相互作用。

一直以来,求解复杂问题的偏微分方程都是世界级的难题。CPU往往需要几百万个小时才能得出相对复杂的偏微分方程,而且越复杂的问题越难用偏微分方程解决。无论是设计更好的火箭发动机,还是模拟气候变化,我们都需要更有效的方法来解决这些问题。

近来,研究者在偏微分方程的求解上取得了令人激动的新进展。他们构建了新型的人工神经网络,实现了更快求解偏微分方程。经过训练后,新型的神经网络不但可以求解单个偏微分方程,而且无需再度训练即可求解整个偏微分方程族。

瑞士苏黎世联邦理工学院的数学家SiddharthaMishra表示,传统的神经网络通常将数据从一个有限维空间映射或转换到另一个有限维空间,但新型的深层网络能够在无穷维空间和无穷维空间之间映射。

毫无疑问,这样的技术将加速涉及偏微分方程的许多模型。作为开发团队的一员,AnimaAnandkumar说:「最终,我们的目标是取代非常缓慢且昂贵的传统求解器。」

当然,新的方法绝不仅仅是作用于加速。对于只有数据却不知用哪种偏微分方程进行建模的情况,训练数据然后使用新型神经网络是唯一的手段。

神经网络入场求解PDE

偏微分方程有用且极其难以解决的原因是它的复杂性。这使它们能够对各种现象进行建模,例如,如果建模人员想知道流体在空间中任何一点(也称为流场)以及在不同时间下的速度和压力,可能会使用Navier-Stokes偏微分方程进行建模。求解Navier-Stokes方程,将获得一个描述系统内容的公式。如果对初始和边界条件有足够的了解,例如在时间t=0时的流场值,则可以使用数学工具来解析偏微分方程。

但是偏微分方程常常复杂到没有通用的分析解决方案,对于Navier-Stokes方程的最通用形式尚且如此:数学家尚未证明是否存在唯一解,更不用说通过分析实际上找到它们了。

甚至在超级计算机上,用数值法来解决复杂的偏微分方程可能也要花费数月的时间。而且,每次更改初始或边界条件或所研究系统的几何形状都必须重新开始。同样,使用的增量越小(网格越细),模型的分辨率就越高,数值法所需的时间就越长。

2016年,研究人员尝试将通常用于图像识别的深度神经网络应用于解决偏微分方程。首先,研究人员生成了用于训练深度网络的图像数据。其中输入的是有关对象几何形状和流体初始条件的2D图像编码信息,而输出的是相应速度场的2D快照。

有了数据,研究人员开始训练他们的神经网络,以学习这些输入和输出之间的相关性。训练主要是先比较输出与预期输出的差别,然后用算法调整神经元的权重,以最大程度地减少生成的输出和预期输出之间的差异。重复此过程,直到输出误差在可接受的范围。

让神经网络学习了如何解决偏微分方程是令人兴奋的,但还有很大的不足。一旦在一定的网格尺寸上进行训练,神经网络就变得非常特定于该分辨率。深度网络已经学会了预估将数据从一个有限维空间映射到另一个空间的函数。但以不同的分辨率求解偏微分方程时,如果想对流场有一个更细致的了解,或更改初始和边界条件,则需要重新开始训练,学习预估新的函数。

DeepONet

而现在的深度神经网络,不仅可以学习预估函数,还可以学习将函数映射到函数的「算子」,并且似乎没有遭受神经网络和其他计算机算法从数据中学习的维数问题。例如,如果想使神经网络的错误率从10%降至1%,则所需的训练数据量或网络规模可能会指数增长,从而导致任务无法实现。

在这之前,研究人员必须弄清楚如何让神经网络学习算子来解决偏微分方程。布朗大学的GeorgeKarniadakis表示,学习算子是从无穷维空间到无穷维空间。算子作用于一个函数,然后将其转换为另一函数。比如,一个算子将一个函数转换为其导数(比如x的正弦转换为x的余弦),其输入和输出端都是无穷维的。

GeorgeKarniadakis。

学习预估算子的深度网络可用于一次求解整个偏微分方程族,对一系列初始和边界条件以及物理参数建模相同的现象。这样的偏微分方程族是输入端的一组函数,而对偏微分方程公式的相应解决方案则由输出端的函数来表示。

1995年的一项研究表明,浅层网络可以看成是算子。由于涉及神经网络,因此此类算子也叫神经算子,即实际算子的近似值。在2019年10月,Karniadakis和他的同事把这种理论延伸到了深度神经网络,提出了「DeepONet」,一种可以学习这种算子并一次求解多个偏微分方程的深度神经网络架构。

DeepONet的独特之处在于它的分叉式架构,该架构在两个并行网络(「分支」和「主干」)中处理数据。前者学习预估输入侧的许多函数,后者学习预估输出侧的函数。然后,DeepONet将两个网络的输出合并,以学习偏微分方程所需的算子。训练DeepONet的过程包括反复地展示使用数字求解器生成的一族偏微分方程的输入、输出数据,并在每次迭代中调整分支网络和主干网络中的权重,直到整个网络出现的错误量可以被接受为止。

因此,DeepONet一旦经过训练,就会学会预估算子。它可以在输入端获取代表偏微分方程的数据,然后将其转换为输出端偏微分方程解决方案的数据。假设有100个代表了训练数据中没有的初始/边界条件和物理参数以及所需的流场位置的样本被提供,那么DeepONet可以在不到一秒的时间提供流场。

DeepONet架构图。

但是,即使DeepONet跟数值求解器一样快速,它仍必须在训练期间执行密集的计算。当必须用大量数据训练深度网络以使神经算子越来越精确时,这可能会成为一个问题。

那么,神经算子还能更快吗?

傅里叶神经算子

去年,加州理工学院的AnimaAnandkumar和普渡大学的KamyarAzizzadenesheli共同建立了一个称为傅立叶神经算子(FNO)的深度神经网络。

研究者声称新的架构使网络具有更快的速度,能将函数映射到函数,从无穷维空间到无穷维空间,并且在偏微分方程上测试了该神经网络。

AnimaAnandkumar。

解决方案的核心是傅立叶层:在训练数据通过神经网络的每一层之前,先对其进行傅里叶变换。然后,该层通过线性运算处理数据,再执行傅立叶逆变换回原始格式。此过程显然比DeepONet的计算更直接,并且能够通过卷积偏微分方程与其他函数的数学运算来求解偏微分方程。在傅立叶领域中,卷积相当于一个简单的乘法,将经过傅立叶变换的数据通过一层已训练过权重的人工神经元传递,然后进行傅立叶逆变换。最后,FNO学习了整个偏微分方程族的算子,将函数映射到函数。

傅里叶神经算子架构图。

FNO深度神经网络同时拥有极快的运行速度。例如,在一个需要进行30000次仿真(包括Navier-Stokes方程)的求解过程中,对于每个仿真,FNO花费了不到一秒的时间;而DeepONet耗时2.5秒;传统的求解器则大概需要花费18个小时。

总结

很显然,DeepONet与FNO这两种方法都会超越传统的求解器。两个团队的方法都是成功的,但是与大多黑盒化的神经网络一样,目前我们尚不清楚它们为什么如此出色,以及是否在所有情况下都如此出色。

经过一年的努力,今年2月研究人员发表了对DeepONet架构长达112页的数学分析。研究证明这种方法是真正通用的,不仅仅是偏微分方程,DeepONet可以将输入端的任何函数集映射到输出端的任何函数集。

而对FNO的数学分析尚未完成。不过对于没有确定的偏微分方程的现象,学习神经算子很可能是建模此类系统的唯一方法。比如交通问题,编写精确捕捉交通动态的偏微分方程几乎是不可能的,但是可以学习的数据量却非常之多。

参考内容:




参考资料