用稀疏回归来寻找方程
我们要介绍的第一个通过机器学习方法求解偏微分方程的文章,是一个来自华盛顿大学的团队在2017年发表在了Science最著名的子刊Science Advances上面。
这篇文章从某些角度来讲,真正开启了AI解方程的热潮;后来大量的文章都是或多或少从这篇文章中得到了灵感。根据谷歌学术显示,这篇文章从发表到现在仅仅3年多,就已经有432的引用量了。
论文中,作者们使用了一个叫做 稀疏回归的方法,通过把原本方程离散求解得到的变量当成 训练数据去训练;通过迭代优化就可以找到这些数据 对应的偏微分方程。
△利用稀疏回归进行方程学习的示意图
而具体的操作步骤其实也不难理解:对于同一个变量的所有可能存在的偏微分看作是候选量,对他们用遍历算法一个一个去筛选出来;如果筛选出来的和训练的数据对上了,那就说明这个偏微分的算子就是应该是对应方程里的算子。通过这个方法把每一个变量的算子都给 试出来,控制方程就找到了!
△用来“寻找”方程的数据产生区域
同时,作者们也给出了设置了四个参数让原本的偏微分方程 参数化。通过训练数据去拟合这些参数。
举个 例子来说,如果我想知道x, y和w之间的关系,我就要把这三堆数据扔到PDE-FIND算法里面去试,首先找出来他们的 关系,比如
让迭代的训练误差最小,那它就作为稀疏回归的解被输出出来;然后去拟合 参数,拟合出来结果可能是
,他就作为“ 被找到的”解被输出。
△通过PDE-FIND算法“找出来”的N-S方程
但是,这个方法看似精巧,实则也有他的缺点:我们要想找出训练数据对应的控制方程,我要先知道这个方程的“ 大体样子”;因为我们需要把对应的偏微分算子用作 候选量提前输进去,还需要我们去手动给方程系数化;这就使得这个算法的通用性没那么强——我们不能随便往里面扔一堆数据就自己找出来一个PDE。
另外,开源代码中有一点要小吐槽一下,就是作者们用以求解学习N-S方程的数据因为内存太大,超过了GitHub的内存限制;作者们直到在前几天才提供了一个用程序包 IBPM才能跑出来生成数据的小程序。使得复现源码难度增大了一些。
△用IBPM算出的和实验对比的流场
IBPM是一个基于C++的开源的计算流体力学程序库,它没有操作界面,计算运行依赖于终端;想要获得作者们训练需要的数据,只需要把IBPM下载并且配置好,然后直接运行作者提供的 就可以了。
代码:https://github.com/snagcliffs/PDE-FIND/
离散连续方程来解方程
之后的2018年,大名鼎鼎的Google AI研究团队把他们新提出的利用机器学习求解PDE的研究成果发表在期刊PNAS上。这篇论文提出了一种通过机器学习的方法自动对连续的物理方程进行 离散化的方法。
啥是离散化呢?就是一条连续的直线我可以用一堆点去拟合;或者我们看到的屏幕图像好像是连续的动态画面,但实际上也是一堆离散的像素点集合。
这种离散的方法具体的实施步骤就是先利用传统方法对一个特定的方程进行离散获得高精度的数据,或者可以理解为“很准”的数据,通过这些 高精度数据得到的数据进行训练来学习如何利用这些离散来求 导数的逼近。
举个例子来说明,我们大自然美丽的景色就好比原本的连续方程表述的物理信息,而我们用照相机去照相就是用像素点来对自然景色进行 离散化和逼近;作者们用神经网络学习高精度数值解的过程就好比我们学习高分辨率的照片一样,神经网络通过高精度的数值解学得了微分导数算子;就好像我们通过高分辨率照片可以“学到”大自然美丽景色一样。
△通过神经网络学习离散化数值的示意图
与传统方法相比,利用机器学习求解PDE的方法并没有用不同的方法去离散PDE方程;相反,新方法通过学习离散的数据捕捉到“藏在数据下面”的物理信息。
△通过机器学习学到的博格斯方程的解
而这个学习得到的获得PDE数值解的方法不仅更是在准确度上秒杀一路传统的PDE离散方法,更是省去了传统方法中需要对PDE构造不同的复杂离散格式的繁琐工作!
代码:https://github.com/google/data-driven-discretization-1d
物理神经网络
2019年,来自布朗大学应用数学的研究团队提出了一种用物理方程作为运算限制的“物理激发的神经网络” ( PINN) 并发表在了计算物理学领域权威杂志《计算物理学期刊》(Journal of Computational Physics) 上。
这篇论文一经发表就获得了大量关注;也许在前两篇论文的光环之下,这篇论文显得没有那么亮眼。但是这篇论文因为代码体系的完整性使得开发人员们很容易上手把相关的学习框架应用到不同领域上去;所以在发表不久之后,一系列不同的PINN也被其他研究者开发出来。
甚至可以不夸张的说,PINN是目前AI物理领域论文中最常见到的框架和词汇之一。
而所谓的物理神经网络,其实就是把 物理方程作为限制加入神经网络中使训练的结果满足物理规律。而这个所谓的限制是怎么实现的?其实就是通过把物理方程的迭代前后的差值加到神经网络的 损失函数里面去,让物理方程也“参与”到了训练过程。
这样,神经网络在训练迭代时候优化的不仅仅的网络自己的损失函数,还有物理方程每次迭代的差,使得我最后训练出来的结果就满足物理规律了。
△物理神经网络的框架示意图
这也是物理神经网络的 精华所在:当网络在训练使误差降低的过程中,随着不断优化,我就越来越“逼近”真实物理规律。
在论文中,作者用了一个非常简单的例子说明了如何用PINN逼近一个简单的物理方程。他用到了最简单的博格斯方程作为例子:
怎么用PINN解这个方程呢?首先,用一个基本的神经网络去逼近方程的解u的方法可以表示为
def u(t, x):
u = neural_net(tf.concat([t,x], 1), weights, biases)
return u
因此,我们就同时可以设一个损失函数f:
def f(t, x):
u = u(t, x)
u_t = tf.gradients(u, t)[0]
u_x = tf.gradients(u, x)[0]
u_xx = tf.gradients(u_x, x)[0]
f = u_t + uu_x - (0.01/tf.pi)u_xx
return f
只要一直训练网络让f和u的 损失函数的和迭代不断减小到一定值后,网络就训练好了,就能“练出来”我想要找到的函数关系。
值得一提的是,这个工作和之前的PDE-FIND有很多的相近之处:因为我们要构架出被学的方程的基本形式,没所以我们也要对我们期望得到的方程的形式有一个大体形式的预期;也就是说,我们得先大概知道我们通过数据训练出来的这方程长什么样。
△通过PINN学习得到的N-S方程的解
这也同时引入一个问题,如果我只有数据,但是对这些数据背后的 物理机理完全没有了解,那可能通过这个神经网络训练出来的结果就很不准确,因为没有物理限制。而这个神经网络的创新之处,就在于引入了物理限制使得训练的准确度大大提高。
△通过PINN学习得到的N-S方程以及方程中的压力场
代码:https://github.com/maziarraissi/PINNs
对于想要 复现的小伙伴来说,项目的开源代码在正常py3都可以运行;但还是有一点要吐槽,代码是基于TensorFlow 1开发的,目前实测最稳定的Tensorflow-1.15.0;可以通过先卸载TensorFlow 2,后再用py3.6或者py3.7重新下载Tensorflow1.15解决;当然,这一步骤也可以通过安装虚拟机实现。
不过要想绕过这个复杂的步骤,用tf2.0也实现物理神经网络,可以参考另外一个基于PINN开发的深度学习计算库 DeepXDE,相关论文后来也登上人工智能物理领域的顶会。
代码:https://github.com/lululxvi/deepxde
用自然语言处理来解方程
果不其然,就在2020年,来自Facebook AI团队的科学家们基于 NLP开发了一种对微分方程求解析解的方法,相关的研究成果后来发表在计算机顶会ICLR 2020。
和前面不同的是,这些科学家好奇的是怎么得出来方程的 解析解。
在这篇文章中,作者们把我们数学中的各种运算符号看作是一种逻辑语言。作者们认为数学中的 所有运算都可以用所谓的树状结构来进行拆解。比如下面这张图,如果我们要算
,那这个公式就可以被拆成很多小的部分来给计算机进行翻译。
△基于NLP把运算符号看作自然语言进行运算的示意图
而这些树状的结构其实都可以看作是NLP中的语句 (Seq)。他们首先通过前缀命名法把这些树状结构给翻译成NLP中的语句结构;之后再使用NLP中的一个经典模型 seq2seq进行训练。
△一个基本seq2seq模型的示意图
那么,作者们是怎么把复杂的数学公式给翻译成语句的呢?他们用到了叫做 前缀命名的方法。其实说通俗点,就是把计算公式的数字和算符进行顺序颠倒。
通过这种变换,作者们利用NLP的seq2seq训练算法测试了我们在数学中常用的积分,求解1阶、2阶的微分方程以及方程化简的应用当中。
△用作者们的算法解出来的方程;这些方程在商业软件里面都 解不出来
这种全新的基于NLP的解方程方法竟然在速度上完虐商业数学软件Mathematica、Maple、和Matlab,真是让人不禁感叹,现在连商业 计算软件都可以被AI替代了!
代码:https://github.com/facebookresearch/SymbolicMathematics
基于图像的“神经算子”
随后,同在2020年,一个来自加州理工的研究组尝试利用 计算机视觉的方法对物理场进行学习预测。相关论文目前在arXiv中可见。
△卷积神经网络的基本结构
那如何解决这个问题呢?有一个很强大的工具很擅长捕捉物理趋势和信息,那就是 傅立叶变换。作者们在运算前先对训练数据进行一个傅立叶变换和反变换再把数据喂给神经网络。而作者们之所以这么做,也是因为傅立叶变换擅长捕捉趋势的强大功能。
△傅立叶算子的基本结构示意图
△通过傅立叶神经算子学习得到的N-S方程的解
同时作者们也提到了我们之前介绍的 物理神经网络;虽然PINN有很高的准确度,但是却明显受限于特定的物理问题,就是说你得先给方程的大概样子。但是很多时候我们只有数据,对这些数据大概有啥关系完全不知道!所以这些作者们就很自信的印证他们的傅立叶算子更强大。
这篇研究虽然还在arXiv中躺着没有发表,但是已经受到了科技圈众多大佬关注;前一段时间还被大名鼎鼎的MIT科技评论报道。后来又先后被Reddit,openview讨论和报道。
代码:https://github.com/zongyi-li/fourier_neural_operator
“隐藏的流体力学”
而就在2020年,另外一篇使用AI解方程的文章登上Science,并立刻让大众的目光投射到这个领域上来。这篇文章的作者就是前面我们所介绍的PINN的作者;而这篇文章其实就是作者将原本PINN的思路扩展,使原本的算法不受限于特定的边界和初始条件进行预测。
作者们提出了一种叫“ 隐藏的流体力学”的机器学习框架,英文简称HFM。而这个HFM和前面提到的PINN结构非常像。但是这个HFM的不同点在于作者们在神经网络的结构和物理限制的结构后面(的蓝色盒子)算了一个 残差神经网络。
△HFM的基本结构
但是这个所谓的残余神经网络却并不是没有任何物理意义的纯数学操作:蓝盒子里面的六个公式每个都是 流体物理方程演变而来的;比如第一个 e_1 就是分子输运方程方程,描述流体里面分子运输移动的;e_6 是流体的连续性方程,它所代表的物理含义就是流体是连续不断的。
而这个全新的框架所实现的流体物理数据的预测不仅超越了纯粹使用机器学习进行数据学习的效果、更是超过了传统的使用离散方法求解N-S方程的方法;包揽了机器学习 通用性强和计算流体力学 针对性强的优点!
△通过HFM预测出来的流场切应力和真实值对比
通过训练这个框架,作者们得到了非常漂亮的预测结果。但是美中不足的是,虽然预测出来的 趋势都几乎完美的一致,但是数值大小上想通过训练学习得到的结果会和真实值有出入。
△通过HFM预测出来的流经圆柱的流场
这篇文章其实作者早在2018年就起草完成了,但是当时不知道什么原因作者并没有急于把这篇成果发表。没想到两年之后这篇文章荣登 Science,让AI在计算科学领域的前沿研究再次登上大众视野。
代码:https://github.com/maziarraissi/HFM
TPU硬件加持
在这个领域正在茁壮成长的大趋势下,在今年,就在前几天,Google AI带领着他们最新研发的TPU也进军了这个领域;他们的一篇还未发表的预印本就立刻获得了大神Jeff Dean点赞。
在这篇论文中,他们印证了用机器学习算法和TPU硬件加持的情况,计算一个流场,也就是数值解一个N-S方程,能直接加速 两个数量级!
这篇论文的主要作者就是前面我们提到的在PNAS发表那篇通过数值离散来加速求解PDE的作者们。而这篇论文的工作从某种程度上来讲也是那篇论文的一个延续工作。
△ 机器学习加速的流体力学算法
具体的加速算法其实和上一篇的思路很像:我们知道要想数值求解一个偏微分方程需要把连续的方程离散成一个一个子步骤进行 迭代;而作者们就在每一步迭代的过程的中往里面套了一个CNN进去。
不过,这个看起来不怎么“高级”的算法却在TPU加持下带来了神奇的效果:计算结果不仅仅是在 速度上完虐了传统的CFD算法,还在 精度上比数值迭代模拟准确。
△机器学习预测、真实值和计算流体力学计算结果对比
这篇论文目前还没有发表,不过从这个结果和TPU强大的硬件加持和高精度高准确度的结果来看,这篇论文可能又会是一篇Nature Science级别的文章。
吐槽一下
看了这么多大神的AI物理框架,我们不禁感叹:原来学计算和数学也可能以后被AI给替代啊!不过,欣赏了这么多“高端”的学习框架,笔者产生几点思考。
首先,虽然作者们都或多或少地在自己的paper中声称自己的机器学习方法 预测出来的方程的解比用传统方法高效很多;但是作者们似乎都避过了一点:使用机器学习使用的 计算资源和传统科学计算方法的需求有着巨大的不同。
用机器学习的方法,首先需要我们用其他方法产生大量的数据“喂给”机器学习框架去训练;这个产生数据的过程也许是传统方法离散方程产生的,也许是其他方法产生的;我们姑且不去算产生数据我们就需要耗费算力。
就算这些数据是天上掉下来的,用学习框架去训练这些数据的过程一般都需要至少几十甚至上百个核和大量的GPU来支持训练过程。
那么传统方法呢?著名的计算流体力学商业软件Fluent甚至在一个新一点的 笔记本上就可以跑完一个算例;如果是开源的软件包比如OpenFOAM,需要的计算资源甚至更少。
从这一点进行展开思考,笔者认为,运用当下已经获得成功的机器学习框架比如CNN或者RNN去学习数学物理过程进行图片学习固然可能获得巨大成功,但是有点“杀鸡用牛刀”。已经有很多的paper证明其实所谓的AI解方程FNN就够用了,真没必要用更加废算力的结构。
△数据驱动的天气预测
当然,在当下,已经取得成功并初步投入应用的 数据驱动技术其实就是AI解方程的一个很好的例子;他已经在风力发电,天气预测,洋流,能源等领域展现出AI无限的潜力。或许在未来,这种技术能够真的为人类造福。
— 完—
本文仅供学习交流使用,转载请标注来源:
量子位 报道 | 公众号 QbitAI
AI已能求解微分方程,数学是这样一步步“沦陷”的
https://www.sohu.com/na/451425746_610300