对于所有基于计算机的方法,我们需要找到一个适合的“离散”表示方式。对于仅由整数组成的数据,这是很简单的,但对于像房间温度这样不断变化的数量来说,就更具挑战性了。尽管之前的例子侧重于离散化之外的方面(并使用笛卡尔网格作为占位符),但下一章将针对动态变化和自适应离散化具有优势的情境进行学习。
29.1 计算网格类型
一般而言,我们可以区分三种常见的计算网格(或“网格”),用于离散化的方式如下:
-
结构化网格:结构化网格具有样本点的规则排列和隐式定义的连通性。在最简单的情况下,它是一个密集的笛卡尔网格。
-
非结构化网格:另一方面,非结构化网格可以具有任意的连通性和排列方式。这种灵活性通常会增加计算成本。
-
无网格或基于粒子的网格最终与非结构化网格共享样本点的任意排列方式,但通过邻域(即适当的距离度量)隐式定义连通性。
由于结构化网格与图像数据类似,因此在深度学习算法中目前对结构化网格的支持非常好,这通常简化了实现并允许使用稳定、成熟的深度学习组件(尤其是常规卷积层)。然而,对于目标函数在平滑和复杂区域之间呈不均匀混合的情况,其他两种网格类型可能具有优势。
29.2 非结构化网格和图神经网络
在计算科学中,生成更好的网格结构是一个具有挑战性且持续不断的工作。多年来,为了研究机翼周围的流动,提出了许多H型、C型和O型网格,这是一个很好的例子。
非结构化网格在网格划分方面提供了最大的灵活性,但当然需要模拟器的支持。有趣的是,非结构化网格与图神经网络(GNNs)共享许多属性,它将经典的深度学习思想扩展到图结构上的笛卡尔网格。尽管有越来越多的支持,但使用GNNs通常会增加实现的复杂性,而任意的连接性要求在图的节点之间进行“消息传递”方法。这种“消息传递”通常是通过全连接层实现的,而不是卷积层。
因此,在接下来的内容中,我们将重点介绍一种基于粒子的方法(参考文献:Ummerhofer et al., 2019),该方法在空间适应性方面与GNNs具有相同的灵活性。以前,GNNs已被用于实现非常相似的目标(参考文献:Sanchez et al., 2020),然而,下面的这种方法可以实现真正的卷积运算符,从而学习物理关系。
29.3 无网格和基于粒子的方法
在动态情况下,明确组织连接性尤其具有挑战性,例如,对于描述移动材料的拉格朗日表示,其中连接性会随时间迅速过时。在这种情况下,依赖于灵活的、重新计算的连接性的方法是一个不错的选择。操作是根据采样位置(也称为“粒子”或者只是“点”)周围的空间邻域定义的,由于缺乏显式的网格结构,这些方法也被称为“非网格”方法。可以说,不同的非结构化、图形和非网格变体通常可以相互转换,但是上述粗略区分仍然为方法的工作方式提供了一个指示。
接下来,我们将讨论一个以飞溅液体为目标的例子,这是一个特别具有挑战性的情况。对于这些模拟,流体材料的运动非常显著,并且通常分布非常不均匀。
学习的基于粒子的模拟的一般概述类似于在笛卡尔网格上工作的深度学习方法:我们存储在特定位置的数据,如速度,然后重复执行卷积操作,在每个位置创建一个潜空间。每个卷积操作在其支持范围内读取潜空间内容并生成结果,该结果通过适当的非线性函数(如ReLU)进行激活。这个过程同时进行多次,以产生一个潜空间向量,而每个位置的潜空间向量作为下一阶段卷积的输入。在几个层次上扩展潜空间的大小后,再次收缩以产生所需的结果,例如加速度。
29.4 连续卷积
一个通用的、离散的卷积运算符用于计算函数和之间的卷积,其形式为:
其中,表示偏移向量,定义了滤波函数(通常为)的支持。
我们将这个思想应用于粒子和点云,通过在围绕的径向邻域中对一组个位置进行卷积来进行评估。这里,表示卷积应该具有支持的半径。 我们根据Ummerhofer等人(2019)的方法定义了卷积的连续版本:
在这里,映射起着核心作用:它表示从单位球到单位立方体的映射,这使我们可以使用简单的网格来表示卷积核中的未知量。这极大地简化了卷积核的构建和处理,并在下图中进行:
在物理环境中,例如流体动力学的模拟中,我们可以额外引入一个径向加权函数,如下所示表示为,以确保卷积核具有平滑的衰减。这产生了:
这里,表示归一化因子。对于来说,有相当大的灵活性,但在下面我们将使用以下加权函数:
这样可以确保学习到的影响在每个单独的卷积中平滑地降至零。
为了实现精简的架构,可以为每个卷积添加一个小型全连接层,以处理目标粒子本身的内容。这使得可以使用相对较小、且尺寸均匀的卷积核,例如的尺寸(Ummerhofer等人,2019)。
29.5 学习液体动力学
上述的架构可以使用基于粒子的Navier-Stokes求解器的随机参考数据集进行训练。得到的网络模型具有很小且高效的特点,同时提供了很好的准确性。与基于图神经网络的方法相比,连续卷积需要的权重数量更少且评估速度更快。
有趣的是,对于这样一个学习求解器来说,特别具有挑战性的情况是一个应该静止下来的液体容器。如果训练数据没有经过特别设计以包含许多这样的情况,网络在训练时只会接收到相对较少的这类情况。此外,模拟通常需要许多步骤才能达到静止状态(比训练时展开的步骤要多得多)。因此网络并没有明确训练来重现这种行为。
尽管如此, 构建上具有经过训练的神经网络的这种液体模拟的一个有趣的副作用, 提供了一个可微分的求解器。基于预训练网络, 学习求解器然后支持通过梯度下降进行优化, 例如, 针对诸如黏度之类的输入参数。
然而,通过训练神经网络进行液体模拟的一个有趣的副作用是,它提供了一个可微分的求解器。基于预训练的网络,学习到的求解器可以通过梯度下降进行优化,例如针对粘度等输入参数进行优化。
29.6 源代码
对于连续卷积的实际应用,另一个重要步骤是快速收集 的相邻粒子。一个高效的实施示例可以在https://github.com/intel-isl/DeepLagrangianFluids、以及学习液体动力学的训练代码。如上图所示。