我们举个例子,比如我们有观测数据、控制方程、边界条件、初始条件,也有工程控制的准则,还有专家经验。这些因素都可以转化为损失函数中的不同正则项,进而约束模型的输出结果。通过这种方式构造的损失函数具有多个正则项,每项之前都有个系数。为什么要需要系数?因为实际上各个项对应的物理意义是不一样的,量纲也往往不一样。这种情况下是不能简单粗暴地把它们加在一起的。所以这些权重非常重要,这也是为什么有的人用这样的框架解决了很多问题,发现很好用,但有的人解决其它问题的时候,发现无效。那是因为这个过程不是一个简单直接的累加,权重的设计和调整非常重要。如果做得好,这种嵌入知识的方法是可以模提高模型的预测能力的,也有很强的泛化能力。
这个系数在学习过程中可能是变化的。比如在数据充足时,在内插问题中可能数据对应的正则项的权重就很大。如果数据量不足,或者数据不准确,或者在外推的情况下,控制方程的作用就非常重要了。但是,方程的作用也不是孤立的。如果给了个方程,实际上如同给了一个轨迹,一个很复杂的轨迹,而且是满天飘的不确定的。我们还必须有边界条件或者初始条件,才能把方程限定在一个正确的轨道上面。如果没有这些边界条件,初始条件,那么这个轨迹便是飘飘忽不定的。
我们举个例子说明知识的重要性。如果我们有个模型要预测深圳这两天的温度,你说今天大概会有多少度?如果你说零下 10℃,在全国来讲,大家可能不会觉得什么样,但这在深圳是从来不会出现的温度。专家告诉你说,深圳的历史气温最低的是零点几度,都甚至没有到零下的温度。这种情况下,如果给模型增加专家经验,就会非常有帮助。
下面我们通过一系列的例子说明这个问题。比如地下水流动的问题,假设我们有最开始一段时间的数据,但是在后面改变了边界条件,即情景发生了很大变化,且没有后面一段时间的观测数据,那么常规的数据驱动模型是无法解决的。但是如果知道边界条件和控制方程,结合最开始时间的数据,就可以进行预测,且实际效果很好,如图中的对比结果。由于流场的条件已经改变了,所以开始一段时间的观测数据的数据分布已经与后一段时间不一致了,但是两段时间的数据都是受到同样的控制方程约束的,因此,如果直接用数据驱动模型预测,就会有较大误差。但是如果加入领域知识,比如控制方程和边界条件,就会有效提升模型的精度。在这个问题中,控制方程和边界条件起了很大的作用。
有这样的一个框架以后能做什么?可以构建替代模型或数字孪生,并利用神经网络推断过程耗时少的优势。因为只要模型训练好了,如果有新的情景出现,或者有新的模型参数进来,就可以直接用这个模型来做预测,不需要重新进行耗时的数值模拟。这对需要大量反复求解的问题来讲,是非常有帮助的。比如不确定性量化,反问题的求解,优化设计等等,都会有很大的帮助。
比如有个新的场景进来,这个方法很快可以做预测,并且具有不错的精度。
这个方法在不确定性量化问题中具有优势。常规的方法,比如蒙特卡罗方法,处理不确定性量化时需要生成多个实现,所以需要很长的时间解不同实现中的方程。但是如果用这种替代模型,因为神经网络的预测速度很快,基本上每个情景直接可以条件反射一般地生成结果,就可以非常高效地实现不确定性量化。
刚才的例子是点对点的求解问题,实际结合卷积神经网络来做图像问题。通过引入控制方程,也可以达到很好的效果。因为时间关系,我就不详细说了。
此外,也可以扩展到油水油气的问题。因为这是个两相流问题,所以约束的条件就会比较复杂。这种情况下,实际上它也是可以起到很好的效果的。
刚才介绍的是软约束,实际上我们也可以用硬约束来嵌入领域知识。
硬约束的劣势是数学上比较复杂,优势是可以保证模型在局部严格满足物理机理。刚才的软约束是保证预测结果在统计意义下满足控制方程或者其他物理机理,硬约束则是保证模型在局部严格满足物理机理,这样实际上它效果是可以更好的。如果大家感兴趣,可以参考我们发表的 Hard constraint projection (HCP) 模型。但是时间关系我就不细说了。
此外,在实际嵌入知识的过程中,是存在大量的难点的。尤其是当嵌入一些复杂方程的时候,比如具有分式结构或者复合函数的方程,难以直接利用神经网络的自动微分机制求梯度,因此也难以直接嵌入到人工智能模型中。此外,如前面介绍的,损失函数中各项之间的权重的确定也不是简单的问题。这方面我们最近开发了一个自动化的知识嵌入框架和工具包,叫做 AutoKE。如果大家感兴趣可以看一下我们在 IEEE Transactions on Artificial Intelligence 上发表的文章。
小结一下,知识嵌入可以让模型的准确性得以提高,有更好的可解释性,更强的鲁棒性。
三、数据驱动的模型挖掘(知识发现)
第三部分是知识驱动的模型挖掘,即知识发现。比如我们如何利用机器学习的方法从数据中直接挖掘模型,即从数据到模型。
我们原来的控制方程都是怎么来的?比如万有引力定律是怎么来的?第谷花了近 40 年的时间来观察火星的轨迹,得到了大量的数据。开普勒又花了十几年的时间,运用这些数据来研究行星运动的轨迹规律,最后得到行星运行的三大定律。实际上他分析的过程中,受到像椭圆形啤酒桶的这种形状的启发,最后发现行星应该是符合一个椭圆的运动规律。在这个基础上,实际上又过了几十年以后,牛顿才进行了理论的延伸和公式的推导,得到万有引力定律。
那么,我们可不可以用人工智能和深度学习的方法,大大的加快这一过程呢?也就是刚才提到在数据中直接挖掘新的知识。
比如我们有这样一些离散的局部数据,利用这些局部数据,可不可以把它的内在规律、控制方程找出来?大家说这大概不可能,但实际上简单的定律,比如欧姆定律,都是从实验数据中得到的。当然这些关系可能比较简单,在实际问题中,潜在的关系可能存在于高维空间里面,会比较复杂一些。
但是深度学习正好有强映射关系的能力。如果能做这件事情,那么机器学习就不再是一个黑箱了。它具有可解释性,特别是找到的控制方程,那是最简洁的知识,是知识最显性的一个表达。
这种情况下怎么做?实际上是比如我们有数据,就可以得到它的梯度和各阶导数。理论上系统中可能存在许多项,但是实际的方程是稀疏的,它只有其中的几项,其他的项的系数都是 0,所以那些项是不存在的。
这样问题就转化成,像这样一个系统中,如何找到稀疏的向量,而且它的系数也能同时找出来。实际上就解决这个问题。说起来很简单,但是利用稀疏回归做这个事情,做起来可能不是那么简单。