随着任务数量的增加,使用当前计算方法来构建通用的日常机器人的成本变得过高,人们正在快速寻求一种解决办法。我们都希望通用机器人可以执行一系列复杂的任务,例如清洁,维护和交付
你的「高等数学」还好吗?
微分方程是数学中重要的一课。所谓微分方程,就是含有未知函数的导数。一般凡是表示未知函数、未知函数的导数与自变量之间关系的方程,就叫做微分方程。
如果未知函数是一元函数的,就叫做常微分方程;
如果未知函数是多元的,就叫做偏微分方程。
偏微分方程拥有广泛的应用场景,模拟客机在空中的飞行姿势,地震波在地球上的仿真,传染病在人群中扩散的过程,研究基本力和粒子之间的相互作用等场景,工程师、科学家和数学家们都诉诸于偏微分方程来描述涉及许多独立变量的复杂现象。
然而,偏微分方程的求解过程却是异常艰难的,尤其对于计算机来说,只能以最笨拙的方法去求解。
对于特别复杂的偏微分方程,可能需要数百万个CPU小时才能求解出来一个结果。随着问题越来越复杂,从设计更优秀的火箭发动机到模拟气候变化,科学家们需要一个更「聪明」的求解方法。
最近,研究人员通过神经网络实验证明了它可以比传统的偏微分方程求解器更快地求出近似解。
更牛的是,经过训练的网络,无需再次训练就可以解决一类偏微分方程。
通常,神经网络将数据从一个有限维空间(例如,图像的像素值)映射或转换为另一个有限维空间(例如,将图像分类的数字,例如1代表猫,2代表狗)。
求解偏微分方程的神经网络从无穷大的空间映射到无穷大的空间。
偏微分方程的用处和他们的复杂性相伴而生,例如,我们想要观察空气在飞机机翼附近的流动二维透视图,建模人员想知道流体在空间中任何一点(也称为流场)以及在不同时间的速度和压力的话,就需要用到偏微分方程。
考虑到能量、质量和动量守恒定律,特定的偏微分方程,即Navier-Stokes方程可以对这种流体流动进行建模。
在这种情况下,解决方案可能是一个特定公式,可以让开发人员在不同时间计算流场的状态。
偏微分方程常常是很复杂的,以至于无法提供通用的分析解决方案。对于Navier-Stokes方程的最通用形式尤其如此:数学家尚未证明是否存在唯一解,更不用说实际地通过分析找到它们了。
在这些情况下,建模者会转向数值方法,将偏微分方程转换为一组易于处理的代数方程,假定这些方程可保持很小的空间和时间增量。
在超级计算机上,用数值方式解决复杂的偏微分方程可能要花费数月的时间。
而且,如果初始条件或边界条件或所研究系统的几何形状(例如机翼设计)发生了变化,就必须重新开始求解。同样,使用的增量越小(如研究人员所说,网格越细),模型的精度越高,数值求解所需的时间就越长。
神经网络更擅长拟合这样一个黑盒的未知函数,输入是一个向量,而输出是另一个向量。如果存在将一组输入向量映射到一组输出向量的函数,则可以训练网络以学习该映射,两个有限维空间之间的任何函数都可以通过神经网络近似。
2016年,研究人员研究了如何将通常用于图像识别的深度神经网络用于解决偏微分方程。首先,研究人员生成了用于训练网络的数据:一个数值求解器计算了流过xy且大小和方向不同的基本形状(三角形,四边形等)的简单对象上流动的流体的速度场。2D图像编码有关对象几何形状和流体初始条件的信息作为输入,而相应速度场的2D快照作为输出。
相比2016年的工作,这次的研究更有飞跃性的意义,该网络不仅可以学习如何近似函数,还可以学习将函数映射到函数的「运算符」,而且没有「维度爆炸」的困扰。例如,如果其他神经网络或机器学习算法,希望错误率从10%下降到1%,则所需的训练数据量或网络规模可能会成倍爆炸,从而使任务无法实现。
在数学上,操作符的输入输出是没有限制的,例如正弦函数sin(x),输入和输出端是无穷维的,因为x可以是任何值,函数可以是作用于x的任何变换。
学习近似算子的深度学习网络可用于一次求解所有相似的偏微分方程,并针对一系列初始条件和边界条件以及物理参数对相同现象进行建模。
1995年由工作表明,浅层网络可以近似操作符算子。由于引入了神经网络,所以此类算子称为神经算子,即实际算子的近似值。
2019年,研究人员提出DeepONet,基于1995年的工作。它的的独特之处在于它的分叉架构,该架构在两个并行网络(一个分支和一个主干)中处理数据。前者在输入端学习一些函数的近似值,而后者在输出端学习相同的函数。
DeepONet将两个网络的输出合并,以了解偏微分方程所需的运算符。训练DeepONet并在每次迭代中调整分支网络和主干网络中的权重,直到整个网络几乎没有出现误差允许范围外的错误为止。
DeepONet一旦训练后,就可以模拟操作符,可以在输入端获取代表偏微分方程的数据,其输出为网络训练得到的近似解。
假设您提供了100个样本,这些样本代表了训练数据中没有的初始/边界条件和物理参数,以及需要流场的位置,DeepONet可以在几分之一秒内为您提供流场的状态。
但,DeepONet的训练过程仍然需要消耗大量算力,并且如何提升精确度,以及缩小步长产生更大的计算,也是一个问题。还能更快吗?
去年,加州理工学院和普渡大学的Anandkumar及其同事建立了一个称为傅立叶神经算子(FNO)的深度神经网络,他们声称这种神经网络具有更快的速度。
他们的网络还将函数映射到函数,从无穷维空间到无穷维空间,并且他们在偏微分方程上测试了它们的神经网络。
他们解决方案的核心是一个傅立叶层。
在他们将训练数据推过神经网络的单层之前,他们先对其进行了傅里叶变换。然后,当图层通过线性运算处理了该数据时,他们将执行傅立叶逆变换,将其转换回原始格式,此转换是著名的傅里叶变换,它将连续函数分解为多个正弦函数。
整个神经网络由几个傅立叶层组成。
事实证明,此过程比DeepONet的计算更直接,并且类似于通过执行称为PDE与某些其他函数之间的卷积的繁琐数学运算来求解PDE。
在傅立叶域中,卷积涉及一个简单的乘法,相当于将经过傅立叶变换的数据通过一层人工神经元(在训练过程中获得的精确权重),然后进行傅立叶逆变换。
因此,最终结果还是FNO学习了整个偏微分方程的操作符,将函数映射到函数。
这种方法显著提升了求解速度。
在一个相对简单的示例中,仅需要进行30,000次仿真,就能求出之前提到的Navier-Stokes方程的解,对于每个仿真,FNO花费了几分之一秒的时间,而DeepONet为2.5秒。同样的精度,传统的求解器将花费18个小时。
两种团队的方法都被证明是成功的,但是与广泛使用神经网络一样,目前尚不清楚它们为什么如此出色以及是否在所有情况下都能如此。Mishra和他的同事现在正在对这两种方法进行全面的数学理解。
经过一年的努力,在2月份,Mishra的团队在Karniadakis的帮助下,对DeepONet架构进行了长达112页的数学分析。他们证明了这种方法是真正通用的,因为它可以将输入端的任何函数集映射到输出端的任何函数集,而不仅仅是PDE,而不必为深入了解Karniadakis定理而做出某些假设网及其1995年的前身。
该团队尚未完成分析FNO的论文,但是Mishra认为它可以比DeepONet更有效地解决某些特定问题。他的团队正在对FNO进行详细的分析,其中包括与DeepONet的比较。
但是,很明显的是,这两种方法都会超越传统的求解器。对于一些无法写出偏微分方程的场景中,神经算子可能是建模此类系统的唯一方法。
这是科学机器学习的未来。
领取专属 10元无门槛券
私享最新 技术干货