前言
关于计算流体力学(Computational Fluid Dynamics,简记为CFD)的介绍,请移步这里,点我!
关于循环神经网络(Recurrent neural network,简记为RNN)的介绍,请移步这里,点我!
事实上,标题可以写成“从CFD的角度理解RNN”,部分人会觉得RNN是什么鬼,更多的人会觉得CFD是什么鬼。绝大多数人会觉得这两种能有什么关联?本质上说,CFD与RNN并无直接关联,将二者关联起来的是计算数学。但是,如果我们以信息流的思路,二者确有共同与相似之处。
CFD通过计算手段研究流体的运动。举个例子,你站在高速公路路口观察,一辆汽车疾驰而过,此时对你而言,你关注空间的最重要的部分——汽车,是运动的。而如果你会飞,边飞边观察汽车,那么你关注空间的最重要的部分——汽车,就是静止的。此时,流动的是时间。对于汽车周围的气流来说,它下一个时刻是什么样的状态取决于这些气流上一个时刻。CFD就是需要计算随时间流动的空间信息流。
而RNN主要用于处理时间序列X(1),X(2),...,X(n),如果我们将这里的X对应为CFD中的空间信息流,就找到了二者的关联。那么,除此之外呢?
一、CFD的控制方程
1.1 控制方程
对于如下的初值问题:
使用多步法求解时,求解公式具有如下的形式:
例如:五阶亚当斯-巴什福思公式
求解第n+1时刻的值需要用到从n-4时刻到n时刻的值。
而在CFD(Computational Fluid Dynamics)中,我们常常需要求解Navier-Stokes方程,简记为N-S方程。无外力的Stokes流的三维N-S方程写成守恒形式如下:
求解N-S方程时,如果使用直接数值模拟(Direct Numerical Simulation,简记为DNS)方法,我们需要将其离散化,离散包括时间部分离散和空间部分离散。
1.2 时间离散
N-S方程进行时间离散后可简写为如下形式:
一般如果使用显示时间方法,常用的是三阶龙格-库塔方法:
1.3 边界条件
偏微分方程可以分为双曲型、抛物型、椭圆型,N-S方程是哪种类型取决于具体的问题。一般情况下,要完全决定一个偏微分方程的解,除了初始条件以外,还需要给定适当边界条件,对于N-S方程也是这样,虽然N-S方程的适定性证明并未给出。
在CFD中,我们常常谈到比如固壁边界条件,特点是无滑移、无穿透,也就是说流体在固体壁面上速度为零,流体不能穿透固体壁面,当然这里固体壁面不是多孔介质之类。还有入口边界条件、出口边界条件,等等。这些边界条件中,有些无时间相关,有的与时间有关。如果我们统一将其看成数据流,可以画出如下的示意图。
小结:从上述公式的计算过程可以知道,无论是多步法或者龙格-库塔方法,如果我们将空间部分看成一个整体,而将时间部分看成前进的轴线,那么共同点都是利用前面时刻的空间信息来求解后面时刻的空间信息,只不过高阶时间离散方法用到了更多前面时刻的空间信息,而前面时刻的空间信息与后面时刻的空间信息通过控制方程关联。
二、RNN的更新公式
RNN主要用于处理一个序列,循环的意思是网络会不断更新自身的信息,不过如果将循环体展开画出计算图,可能更容易理解。下图的左边是单个循环体的示意图,右边是将此单个循环体展开成计算图的示意图。与前面的CFD数据流图作对比,可以发现二者十分相似。
(注:以下引用了这两处的图片[1][2],具体见图片名称的标注。)
上图是一个简单典型的RNN网络的展开的计算图,根据图中的设定,其信息更新公式如下。在卷积神经网络中,一个很重要的特点是参数共享。在RNN中所谓参数共享是指循环体的参数对每个展开链是一致的,这一点和CFD的数值格式极为相似。RNN的更新公式中的矩阵,可以和CFD中数值格式的系数做类比。
三、长短期记忆与CFD空间离散
3.1 长短期记忆
在RNN中,数据的依赖关系可以做成如下的示意图。而在具体问题中,不同情况下对前面信息依赖情况有所不同,会产生所谓长期依赖问题。长短期记忆(long short-term memory,简记为LSTM)通过改变原来的简单的循环体,从而实现对信息的选择。
为什么CFD中没有长期依赖问题?这是因为CFD求解时其控制方程是确定的,而RNN是寻找关联的函数(一般为非线性)或者说方程。事实上,在CFD中也会因为信息流的时间产生各种问题,比如,对于时间离散格式其时间步长收到公式严格的限制,如果时间步长过大,也就意味着前面时刻的信息与后面时刻的信息关联度变小,会导致计算结果发散。
LSTM的细胞结构如上图所示,如果将其带入到最初的RNN中然后再展开,如下图所示。
引入LSTM结构改变的是RNN的更新公式,这一点和CFD在空间格式中所做的努力极为类似。
3.2 CFD的空间离散
CFD在空间离散中的处理类似于RNN对单个循环细胞的处理,RNN通过使用使用“门”结构改进了其特性,而空间离散通过使用特定的技巧以达成更高精度,构造出了许多高精度的线性与非线性数值格式。例如,经典的WENO格式[3][4],下面公式是WENO格式网格模板上的系数公式,类似于“门”结构中各条分支中出现的权重参数矩阵。
总结
总的来说,RNN与CFD相同点在信息流,相似点在参数矩阵与权重系数,具体来说:
RNN和CFD都是利用前面时刻的信息得到后面时刻的信息,不同的是CFD控制方程是已知的,而RNN需要求得信息流的非线性函数关系。
RNN的参数共享,也就是更新公式中的参数矩阵和CFD中数值格式的系数矩阵是类似的。
RNN为了解决长期依赖问题,提出了诸如LSTM等结构,这和CFD为了提高求解精度在空间数值格式方面所做的努力是一样的。
(PS:关于CFD的介绍可以参考[5])
-
Ian Goodfellow, Yoshua Bengio, Aaraon Courville. Deep Learning. ↩
-
Colah. Understanding LSTM Networks. http://colah.github.io/posts/2015-08-Understanding-LSTMs/. ↩
-
Shu C. W. Essentially non-oscillatory and weighted essentially non-oscillatory schemes for hyperbolic conservation laws. https://link.springer.com/chapter/10.1007/BFb0096355. ↩
-
Jiang G. S., Shu C. W. Efficient Implementation of Weighted ENO Schemes. https://www.sciencedirect.com/science/article/pii/S0021999196901308. ↩
-
John D. Anderson. Computational Fluid Dynamics. 吴颂平 译. 计算流体力学. 机械工业出版社. ↩