AI已能求解微分方程,数学是这样一步步“沦陷”
AI也能解方程了?是的,它们不仅能解方程,还能“找到”方程!今天我们就简单梳理一下解方程的近些年进展。
首先,先得说明,所谓的AI解方程,解的可不是简单的数值方程!人家正经求解的是面对实际工程问题的偏微分方程,又称PDE。
怎么办?目前来说最常用的方法就是直接对这类方程进行离散求数值解。
同时,最广为人知,尤其是应用最广泛的要属描述流体行为的纳维-斯托克斯方程了,简称N-S方程。这个方程很复杂并且具有很强的非线性,它的一般形式是
N-S方程在汽车工程中的应用
N-S方程已经被大量的应用在天气预测、洋流建模、飞行器设计、船舶设计等工程领域。最近因为计算机视觉的飞速发展,现在N-S方程也被大量用在了游戏、电影视觉建模中。
N-S方程在计算机视觉中的应用 (来源:YouTube)
但是,作为一个存在度这么高的方程,却也因为非线性使得难以求解,并且连解存不存在都不知道!因此,目前普遍做法都是通过离散方程进行数值求解的。
上面说到的这两个偏微分方程,是应用数学领域里面最常见的方程;也是接下来这些大神们用AI想要求解的主要方程;毕竟他们的非线性让求解他们本身就变得非常复杂,而AI生来就是解决复杂问题的。
用稀疏回归来寻找方程
我们要介绍的第一个通过机器学习方法求解偏微分方程的文章,是一个来自华盛顿大学的团队在2017年发表在了Science最著名的子刊Science Advances上面。
这篇文章从某些角度来讲,真正开启了AI解方程的热潮;后来大量的文章都是或多或少从这篇文章中得到了灵感。根据谷歌学术显示,这篇文章从发表到现在仅仅3年多,就已经有432的引用量了。
论文中,作者们使用了一个叫做稀疏回归的方法,通过把原本方程离散求解得到的变量当成训练数据去训练;通过迭代优化就可以找到这些数据对应的偏微分方程。
作者们给他们这种起了一个很有趣的名字:偏微分方程的函数化非线性动力学识别,英文简称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
用自然语言处理来解方程
而随着近些年AI在图像识别和自然语言处理 (NLP) 方面大放异彩,人们逐渐开始思考为什么不用我们已经发展成熟的一些方法来对方程求解的问题进行研究呢?
果不其然,就在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中可见。
这篇论文首先先回顾了一波图像识别和计算机视觉中用到的最多的卷积神经网络CNN:CNN在图像处理领域中特别擅长捕捉到物体的边界和特征,比如你识别个人脸都是各种边界所以很准。但是却不能有效地捕捉到整个图片中变化的趋势。而物理场比如流体的流动中最重要的就是捕捉到整体运动的趋势。
卷积神经网络的基本结构
那如何解决这个问题呢?有一个很强大的工具很擅长捕捉物理趋势和信息,那就是傅立叶变换。作者们在运算前先对训练数据进行一个傅立叶变换和反变换再把数据喂给神经网络。而作者们之所以这么做,也是因为傅立叶变换擅长捕捉趋势的强大功能。
傅立叶算子的基本结构示意图
但是,这看似简单的操作却带来了不简单的结果。傅立叶算子所训练的网络训练时间比传统的图像识别框架U-Net,ResNet等都有明显提高;同时他的MSE比我们之前提到的物理神经网络等其他训练框架都有明显的降低。
通过傅立叶神经算子学习得到的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无限的潜力。或许在未来,这种技术能够真的为人类造福。
参考链接
[1] https://advances.sciencemag.org/content/3/4/e1602614
[2] https://www.pnas.org/cgi/doi/10.1073/pnas.1814058116
[3] https://www.sciencedirect.com/science/article/pii/S0021999118307125
[4] https://arxiv.org/abs/1912.01412
[5] https://www.technologyreview.com/2019/12/17/131518/facebook-has-a-neural-network-that-can-do-advanced-math/
[6] https://arxiv.org/abs/2010.08895v1
[7] https://www.technologyreview.com/2020/10/30/1011435/ai-fourier-neural-network-cracks-navier-stokes-and-partial-differential-equations/
[8] https://science.sciencemag.org/content/367/6481/1026.abstract
[9] https://arxiv.org/abs/1808.04327/
[10] https://maziarraissi.github.io/HFM/
[11] https://arxiv.org/abs/2102.01010/
声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!
时间:2021-02-24 22:42 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
相关推荐:
网友评论:
最新文章
热门文章