Press "Enter" to skip to content

‘深度学习应用于物理和流体’

数值模拟多年来一直被用于理解物理系统的行为;流体与结构的相互作用,几何形状在受力下的变形,甚至是加热条件下的热分布。在航空航天、汽车、能源等各种领域中应用,这些计算可以为原型设计提供尺寸,并确保在不构建实际物体的情况下进行安全过程。然而,它们可能需要大量的计算资源,并且需要花费很多小时、天甚至是几周的时间。这就是机器学习,特别是深度学习的优势所在,将处理时间缩短到几分钟!

计算流体力学模拟

一种常见的数值模拟可以通过求解一组偏微分方程组(PDE)来描述物理系统,其一般形式为:

‘深度学习应用于物理和流体’ 四海 第1张

𝐹代表定义于域 Ω ∈ ℝ 上的微分算子,边界为 𝜕Ω,参数为 𝑞。系统的解 𝑠(𝑥, 𝑡) 依赖于空间坐标和时间,下标表示偏导数。可以通过将物理域离散化为小部分(有限元或有限体积)来解决方程组,从而得到一个线性化的系统。这种方法在流体力学中得到了广泛应用。

在流体力学中,该系统主要由纳维-斯托克斯方程组表示,这是一组没有解析解的定律,用于描述每个流体的质量和力平衡。在简化的二维形式中,它们可以描述为:

‘深度学习应用于物理和流体’ 四海 第2张

其中 𝑢 是沿 x 轴的速度,𝑣 是沿 y 轴的速度,𝑝 是压力,𝜌 是密度,𝜈 是粘度。

计算流体力学(CFD)模拟包括通过迭代的多重网格解法来解决离散化的线性化系统,同时考虑边界条件,如域的压力和速度。对于实际应用来说,直接方法是不切实际的,因为对于一个三维笛卡尔均匀网格(i³个元素),矩阵求逆的复杂度达到了i⁷。

即使在高性能计算并行环境中使用高效的求解器,这些操作的计算成本也可能需要很长时间,并对动态工程过程产生不利影响。解决方案?正如我们越来越多地看到的那样,人工智能!

代理模型

当存在可能的输入-输出关系时,人工智能成为建模这种行为的候选方法。这种情况与计算流体力学完美契合,其中几何设置可以被参数化为网格和其元素,并且边界条件可以与输出(网格中每个点的物理场,如压力、速度等)相关联。构建的模型可以作为无网格求解器,以较低的计算成本替代传统的模拟器。

一般来说,我们希望学习偏微分方程参数(𝑥, 𝑞, 𝑡):𝑋 ∈ ℝⁿ 与其解 𝑠(𝑥, 𝑡):𝑌 ∈ ℝⁿ 之间的映射关系。换句话说,我们的目标是找到预测函数 𝐺: (𝑥, 𝑞, 𝑡) → 𝑠(𝑥, 𝑡),其中 𝑡 有时被认为是常数(稳态分析)。因此,我们可以想象不同的方法来实现这一目标。

简化模型

模拟关系的最简单方法是通过降低数据的维度来简化它。这种方法可以同时应用于输入和输出。例如,我们可以用一组减少的参数 𝑘 ∈ N | 𝑘 < n 来表示之前描述的几何形状,而不是使用网格点的完整坐标。

对于输出,一个可行的选择是使用全局性能指标 s(𝑘) ∈ N。例如,原型所受的力、阻力和升力系数等。

简化的好处在于它使我们能够应用更基本和更快速的AI模型。即使是线性/多项式回归也可以用来学习函数𝐺:k → 𝑠(k)而没有更大的问题。

不足之处在于,通过这种方式降低维度时会有信息的固有丢失,并且当面对设计空间之外的数据时,模型的泛化能力会降低。

体积模型

与降低数据的维度不同,我们可以选择使用原始的体积网格(𝑌 ∈ ℝⁿ),这引入了更大的复杂性并需要使用深度学习技术。

当处理无结构网格时,一种常见的方法是将其插值到均匀结构网格上。像自由流速和压力这样的关键特征可以嵌入到每个体素中,从而实现相应的预测。因此,没有流体的区域被表示为空值,从而编码了几何形状。

这种基于体素的表示利用了在图像识别任务中常用的一种技术:卷积。卷积神经网络(CNNs)可以通过其滤波方法提取局部和全局特征。通过整合不同阶段,可以实现不断复杂的模型,包括U-Net和自动编码器/解码器。

除了将无序数据转换为有序体素/图片的形状,另一种解决方案是主动编码坐标。这允许以表格格式描述数据,其中每个点与相应的模拟/示例索引相关联。正如我们将在下一节中看到的那样,这就是pytorch geometric的作用!

虽然从理论上讲,对每个点进行训练和应用模型是可行的,但这种方法通常无法捕捉到决定局部信息的节点之间的关系。这就是图神经网络的进入,构成了另一类旨在解决此限制的模型。

几何模型

在CFD中,我们通常对体积内的物理场不感兴趣,而是对表面感兴趣。这引发了对模型构建策略的思考。虽然前面概述的体素化方法显示出了有希望的结果,但将其应用于表示与几何形状对应的稀疏点云时,需要创建一个均匀结构的网格。然而,对于复杂的几何形状来说,这变得不切实际,因为它要么导致由于包围形状周围的不相关信息而产生不必要的计算成本,要么导致有价值的信息丢失,因为网格过于粗糙。

几何深度学习领域提供了一种更高效的解决方案,它在物体识别和语义分割方面取得了成功。这种方法与图神经网络密切相关,直接将描述数据的点云(无序点集)作为坐标和索引的表格进行处理,正如我们在上一节中提到的那样。幸运的是,这正是我们在无结构网格中所拥有的!

为了以这种格式描述数据,我们可以使用pytorch geometric,它是最先进的pytorch框架的扩展,专为GNNS和几何模型量身定制。它还包含一系列我们可以使用的图形数据集,例如AirfRANS⁴,用于RANS模拟的2D NACA翼数据集。让我们简要探讨一下这如何转化为实际代码:

from torch_geometric.datasets import AirfRANSfrom matplotlib import pyplot as pltdataset = AirfRANS(root='/tmp/AirfRANS', task='full', train=True)  # 下载example = dataset[0]fig, ax = plt.subplots(figsize=(12,5))ax.set_aspect('equal', adjustable="datalim")# 使用坐标x、y以及压力作为颜色绘制点云im = ax.scatter(*example.pos.T, s=0.5, c=example.y[:, 2]) fig.colorbar(im, ax=ax)

‘深度学习应用于物理和流体’ 四海 第3张

了解了数据集的特性,问题出现了:我们如何使用它来训练模型?我们借助Pytorch Geometric将其转换为上述描述的形状。由于batch属性,DataLoader允许我们以小批量循环遍历数据集。在每个模拟中使用聚合函数非常重要,我们将很快深入研究。

from torch_geometric.loader import DataLoader# 我们没有区分训练和测试数据集,只分析数据加载器dataloader = DataLoader(dataset, batch_size=2)  # 批量大小为2for data in loader:  # 循环遍历数据集,返回批量数据    print(data), print(data.batch)    break>>> DataBatch(x=[351974, 5], y=[351974, 4], pos=[351974, 2], surf=[351974], name=[2], batch=[351974], ptr=[3])>>> tensor([0, 0, 0,  ..., 1, 1, 1])

在确定了数据描述之后,哪些类型的模型是合适的?PyTorch Geometric 提供了一系列预设计的神经层和操作,非常有用。其中最传统的之一可能是 PointNet¹。作为该领域的先驱之一,这种架构在2017年提出,引入了两个至今仍然非常重要的优势。

PointNet 的成功关键在于其汇聚操作。通过将整个模拟的信息压缩成一个向量,它捕捉到全局洞见,并实现了从多个点到一个全局值的转换。这有效地解决了将模型应用于单个点并不能改变模型维度的问题。换句话说,我们将考虑数据集 𝐷 = {Dᵢ | i ∈ N, 1 ≤ i ≤ m},其中 m 是模拟的总数。我们可以为每个模拟 Dᵢ 定义点集 X = {Xⱼ(pⱼ, fⱼ) | j ∈ N , 1 ≤ i ≤ n}。连接的特征向量 (pⱼ, fⱼ) ∈ ℝʰ | h ∈ N。这样,汇聚操作执行以下转换:

‘深度学习应用于物理和流体’ 四海 第4张

这对于需要将点云减少为单个值或向量的分类任务是必要的。汇聚的另一个优势是将全局信息融入到每个点中,对分割任务非常有用。全局信息向量可以连接到每个点的特征向量上,增加其维度。这样,应用于每个点的模型不仅具有局部信息,还具有整个示例的总体概念。形式上,考虑到 z 是非结构化数据集中的点的总数,PointNet 架构执行的一系列操作可以以简化的方式描述如下:

‘深度学习应用于物理和流体’ 四海 第5张

‘深度学习应用于物理和流体’ 四海 第6张

其中相同的 MLP 应用于每个点/行,列表示特征。

随后提出了更复杂的模型。例如,PointNet++² 提出了在不同层次级别上使用 PointNet 的想法。这种方法不仅连接全局特征,还将表示较小规模现象的向量合并进来。这在处理 CFD 问题时特别有价值。例如,在模拟整个飞机时,不同的几何组件之间会出现不同的行为。与涡轮相比,机翼表现出不同的现象。即使在更细的尺度上,机翼的前后也存在差异,导致特征压力分布不同。

图神经网络通过将数据表示为边和节点来推广上述概念,反映节点之间的关系。这样,它在某种程度上等价于 CNN,它聚合局部特征,但不使用常规网格,而是直接应用于无序点集。

典型的 GNN 将节点编码为顶点 (vⱼ = Xⱼ),其坐标作为特征。边表示节点之间的连接,并编码了例如特定节点与其邻居之间的距离(或更复杂的公式),例如 E = {(vᵢ, vⱼ) | ‖pᵢ, pⱼ‖₂ < r},其中 p 是坐标,v 是邻居节点 i 和 j 在距离 r 内。

计算出这个图后,它经历迭代更新以传播局部信息,生成非线性和越来越复杂的嵌入。更新步骤越多,节点从图的更远处获取信息。不同的图架构可以通过定义更新函数、更新次数、初始构建图的方式、计算邻居的方法以及许多其他可能的中间步骤来构建(例如残差连接甚至注意机制)。一个简单的更新过程以以下方式使用聚合函数:

‘深度学习应用于物理和流体’ 四海 第7张

其中 𝑓 是邻域中顶点的聚合函数,由非线性函数 𝜎 更新,𝑔 是更新边的函数,例如我们上面定义的欧几里得距离。

一个具有普遍适用性的模型还应具有对旋转、平移和排列的归纳特性。经典的图形架构之一是GraphSage³。由于计算成本低,它可以高效地在几何数据上进行训练并取得巨大成功。它使用上述公式,将f指定为简单的连接操作,然后通过Wᵏ的权重矩阵乘法进行变换。建议使用的聚合器是平均池化或最大池化;而邻居则是从整个集合中均匀采样固定大小的样本。

除了上述描述的简单模型之外,近年来还开发出了更复杂和现代化的图形架构,成为一个有前景的研究领域。

表达物理学

既然我们已经确定了合适的模型,那么问题就是:我们如何有效地将物理系统的独特特性纳入其中?一种常用的方法是通过软约束或惩罚方法来强制执行物理定律。具体而言,物理信息神经网络(PINNs)通过对PDE的残差进行惩罚来实现这种策略,从而确保其准确遵守物理定律。在涉及CFD时,这些是纳维-斯托克斯方程。每个方程中的偏导数可以通过使用深度学习框架进行自动微分来计算模型的预测。同样,迪里切特和诺伊曼边界条件可以使用相同的方法加以纳入。因此,这种方法导致了损失函数的精细格式:

‘深度学习应用于物理和流体’ 四海 第8张

其中,LG和LB分别表示数据和边界条件的损失,构成具有两个参数的监督函数;Lᵣₑₛ是PDE的残差函数;Xb和xb分别是模型的输入数据和边界条件点上的PDE;B检索边界条件的值本身;G𝜃是具有参数𝜃的网络的前向函数。

因此,该模型学会了同时尊重压力和速度平衡,并且对未见数据具有更好的泛化能力。

损失表达式表明,PINNs可以在监督方法中使用,既有数据驱动,又有物理驱动。尽管如此,LG项是可选的,网络可以以无监督的方式进行训练。这将有更多的解空间。由于初始预测本质上是随机的,优化网络变得具有挑战性,确定适当的搜索目标仍然是机器学习中一个未解决的问题。可以想象各种解决方案,从替代损失函数和优化策略到通过硬约束来强制边界条件,其中网络的某个组件必须直接满足指定的值。

高频信号

几何深度学习模型在收敛速度慢和学习高频函数方面遇到了挑战。这种现象在流体动力学中尤为突出,特别是在处理湍流时。为了解决这个问题,隐式神经表示领域提供了有效的策略。

这些变换的根源在于深度网络更倾向于学习低频函数。因此,这些技术可以用于改进高频函数的表示。一个示例是通过傅里叶特征进行扩展:

‘深度学习应用于物理和流体’ 四海 第9张

在使用神经网络时,采用这种技术有助于在几何上下文等低维问题领域中学习高频函数。调整频率参数可以控制模型可以捕捉的频谱范围。

在实际应用中,通过设置aⱼ = 1并从随机分布中选择bⱼ来实现更好的结果。可以对该分布的标准差进行微调,通常使用高斯分布。更宽的分布加速了高频分量的收敛,从而提高了结果的品质(特别是在与图像相关的任务中,可以获得更高的清晰度)。相反,过宽的分布可能会引入输出中的伪影(产生嘈杂的图像),在欠拟合和过拟合之间存在权衡。

使用正弦表示网络(SIRENs)可以实现一种更现代的方法。它们提出了周期性激活函数的形式:

‘深度学习应用于物理和流体’ 四海 第10张

SIRENs除了改进高频表示外,还是可微分的。这是因为SIREN的导数本身也是一个SIREN,类似于正弦函数的导数是余弦函数:一个相移的正弦函数。并非所有常见的激活函数都具有这种特性;例如,ReLU具有不连续的导数和零的二阶导数。其他一些函数确实具有这种期望的能力,例如Softplus、Tanh或ELU;然而,它们的导数可能不良行为,并且无法表示所需的细节。

因此,它们非常适合表示像我们非常感兴趣的偏微分方程(PDE)这样的反问题。此外,已经证明SIREN比其他架构收敛更快。

为了实现预期的结果,适当的初始化方案是必不可少的。这种初始化方案可以保持整个网络的激活分布,以确保最终输出不受层数的影响。解决方案是按以下方式采用均匀初始化方案:

‘深度学习应用于物理和流体’ 四海 第11张

,以便每个单元的输入服从标准差为1的正态分布。此外,网络的第一层应跨越[-1, 1]的多个周期,可以使用ω₀ = 30在sin(ω₀ ⋅ 𝑊𝑥 + 𝑏)中实现;这个值应根据模拟函数的频率和观测次数进行调整。使用单一频率的限制后来通过所谓的Modulated SIRENs得到了解决。

结论

希望您现在对深度学习如何为数值模拟创建代理模型有了更清楚的理解,即使处理的是非结构化和噪声数据。通过各种技术可以提高网络的泛化能力。这些技术范围从纳入底层偏微分方程(PDE)的物理学到使用隐式神经表示等等。随着可靠性的提高,这个动态的研究领域在未来几年将会显著扩展。尽管其名称如此,但这种方法并不旨在取代数值模拟。相反,它提供了一种更快的选择,利用了模拟本身甚至实验数据。如果我们可以将流体动力学模拟、物理方程和深度学习结合起来,为什么要限制只使用其中之一呢?

参考文献

[1]:PointNet

C. R. Qi, H. Su, K. Mo, L. J. Guibas, PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation, arXiv:1612.00593 [cs]ArXiv: 1612.00593 (Apr. 2017). URL http://arxiv.org/abs/1612.00593

[2]:PointNet++

C. R. Qi, L. Yi, H. Su, L. J. Guibas, PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space, arXiv:1706.02413[cs] ArXiv: 1706.02413 (Jun. 2017). URL http://arxiv.org/abs/1706.02413

[3]:GraphSage

W. L. Hamilton, R. Ying, J. Leskovec, Inductive Representation Learning on Large Graphs, arXiv:1706.02216 [cs, stat]ArXiv: 1706.02216 (Sep. 2018). URL http://arxiv.org/abs/1706.02216

[4]:AirfRANS

F. Bonnet, A. J. Mazari, P. Cinnella, P. Gallinari, Airfrans: High fidelity computational fluid dynamics dataset for approximating reynolds averaged navier-stokes solutions (2023). arXiv:2212.07564.

[5]:Point-GNN

W. Shi, R. R. Rajkumar, Point-GNN: Graph Neural Network for 3D Object Detection in a Point Cloud (2020) IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) (2020): 1708–1716.

[6]:通过物理信息神经网络进行科学机器学习:我们的现状和下一步

S. Cuomo, V.S. Di Cola, F. Giampaolo, Scientific Machine Learning Through Physics–Informed Neural Networks: Where we are and What’s Next. J Sci Comput 92, 88 (2022). https://doi.org/10.1007/s10915-022-01939-z

[7]:学习具有硬约束系统的可微分求解器

G. Negiar, M.W. Mahoney, A.S. Krishnapriyan, Learning differentiable solvers for systems with hard constraints (2022). ArXiv, abs/2207.08675.

Leave a Reply

Your email address will not be published. Required fields are marked *