PINN再登Nature!2025持续发力!

物理信息神经网络(Physics-Informed Neural Networks,简称PINN)是一种将深度学习与物理建模相结合的神经网络模型。它通过将物理定律(通常是偏微分方程或常微分方程)嵌入到神经网络的损失函数中,使模型在训练过程中能够同时满足物理规律和数据约束

我还整理出了相关的论文+开源代码,以下是精选部分论文

更多论文料可以关注AI科技探寻,发送:111  领取更多[论文+开源码】

论文1

标题:

Wavelets based physics informed neural networks to solve non-linear differential equations

基于小波的物理信息神经网络求解非线性微分方程

法:

  • 小波激活函数:在物理信息神经网络(PINN)中引入小波作为激活函数,利用小波的多分辨率分析和局部化特性来增强网络的泛化能力。

  • 物理信息神经网络(PINN):通过将物理定律嵌入损失函数中,构建一个近似微分方程解的神经网络,并通过优化损失函数来训练网络。

  • 损失函数设计:定义了包含微分方程残差、边界条件和初始条件的损失函数,通过最小化该损失函数来优化网络参数。

创新点:

  • 小波激活函数的应用:使用小波作为激活函数,相比传统的激活函数(如tanh),在求解Blasius方程时,相对L2误差降低了约6.59E-03,且学习速度更快。

  • 多种小波函数的比较:研究了Morlet小波、墨西哥帽小波和高斯小波三种不同的小波函数,并发现墨西哥帽小波在某些问题中表现最佳,其相对L2误差最低。

  • 耦合方程的求解:将该方法扩展到求解线性和非线性耦合方程,通过分别使用独立的神经网络模型来近似不同的函数,简化了网络架构并提高了求解精度。

image.png

论文2

标题:

Physics-Informed Neural Operator for Learning Partial Differential Equations

用于学习偏微分方程的物理信息神经算子

法:

  • 物理信息神经算子(PINO):提出了一种结合训练数据和物理约束的学习框架,用于学习给定参数化偏微分方程(PDE)族的解算子。

  • 多分辨率数据与PDE约:在PINO中,将低分辨率的训练数据与高分辨率的PDE约束相结合,以提高解算子的近似精度。

  • 傅里叶神经算子(FNO)框架:基于FNO框架,通过在更高分辨率下添加PDE约束,实现对真实解算子的高保真重建。

创新点:

  • 多分辨率学习:首次将数据和PDE约束在不同分辨率下结合,即使在只有低分辨率训练数据的情况下,也能在高分辨率测试实例上实现几乎无误差的解算子近似,相对误差降低了约7%。

  • 零样本超分辨率:在没有高分辨率训练数据的情况下,PINO能够通过PDE约束预测超出训练数据分辨率的解,且在Kolmogorov流问题中,与仅使用数据驱动方法相比,误差显著降低。

  • 物理约束的优化优势:相比纯数据驱动方法,PINO通过添加PDE约束,显著提高了算子学习的泛化能力和物理合理性,且在求解时间依赖PDE时,优化挑战更小。

image.png

论文3

标题:

Data-driven modeling of dislocation mobility from atomistics using physics-informed machine learning

基于小波的物理信息神经网络求解非线性微分方程
方法:
  • 物理信息图神经网络(PI-GNN):提出了一种基于物理信息的图神经网络框架,用于从原子尺度模拟中学习位错迁移率定律。

  • 高通量分子动力学模拟:通过自动化高通量大规模分子动力学(MD)模拟生成训练数据,涵盖不同的温度和应力条件。

  • 不确定性量化驱动的主动学习(UQ-AL):采用主动学习框架,动态选择最具不确定性的数据点进行模拟,以加速模型训练和收敛。

创新点:

  • PI-GNN框架:相比传统的基于经验的位错迁移率模型,PI-GNN能够更准确地捕捉BCC金属中复杂的位错动力学行为,预测误差降低了约50%。

  • 主动学习效率提升:通过UQ-AL框架,相比被动学习方法,减少了超过40%的计算资源消耗,显著提高了数据生成和模型训练的效率。

  • 模型泛化能力:PI-GNN不仅能够学习特定数据集的位错行为,还能泛化到未见的位错构型(如从偶极子数据泛化到剪切环数据),泛化误差控制在20%以内。

image.png

论文4

标题:

Physics-informed learning of governing equations from scarce data

从稀疏数据中学习物理定律的物理信息学习方法

法:

  • 物理信息神经网络与稀疏回归(PINN-SR):提出了一种结合深度神经网络和稀疏回归的方法,用于从稀疏和噪声数据中发现偏微分方程(PDE)。

  • 自动微分:利用自动微分技术计算系统变量的导数,避免了传统方法中数值微分带来的误差。

  • “根-分支”网络架构:设计了一种能够处理来自不同初始/边界条件的多数据集的网络架构,增强了模型的泛化能力。

创新点:

  • 稀疏数据适应性:相比传统的SINDy方法,PINN-SR能够在数据稀疏和噪声较高的情况下准确发现PDE,例如在10%噪声水平下,Burgers方程的发现误差仅为0.88%。

  • 多数据集处理能力:通过“根-分支”网络架构,能够同时处理多个独立数据集,显著提高了模型在复杂条件下的适用性。

  • 计算效率提升:通过ADO算法,相比直接优化的方法,显著提高了优化效率和收敛速度,减少了计算资源消耗。

  • 物理可解释性:通过稀疏回归得到的PDE系数具有明确的物理意义,能够直接揭示系统的物理规律,例如在细胞迁移和增殖实验中,成功发现了与Fisher-Kolmogorov模型一致的PDE。

image.png

 

更多论文料可以关注AI科技探寻,发送:111  领取更多[论文+开源码】 

<think>好的,我现在需要回答用户关于PINN在常微分方程中的应用示例和实现方法的问题。首先,我需要回顾一下PINN的基本原理,确保自己理解正确。根据用户提供的引用,特别是引用[1]和[2],PINN通过将物理方程作为损失函数的一部分,利用自动微分来保证网络满足物理约束。用户还提到常微分方程(ODE),所以需要聚焦于ODE的情况,而不是偏微分方程(PDE)。 接下来,我需要考虑如何构造一个具体的例子。比如,可以选择一个简单的ODE,如dy/dx + y = 0,解为y = e^{-x}。然后,构建一个神经网络来近似解,并将ODE作为损失项加入训练中。这样用户可以看到具体的实现步骤。 然后,我需要确保代码部分正确,使用Python和TensorFlow或PyTorch实现。根据引用[3],硬约束可能涉及修改网络结构,但用户的问题可能只需要基本示例,所以先展示基础版本,再提到硬约束的方法。 代码的结构应该包括:定义网络,计算预测值,计算损失(包括ODE残差和边界条件),然后训练过程。需要解释每个部分的作用,比如自动微分计算导数,如何将物理方程融入损失函数。 同时,用户可能需要了解如何选择优化器、学习率,以及如何处理边界条件。例如,在初始条件处,可能需要额外的损失项,如(y_pred[0] - y_true[0])^2,确保满足初始条件。 还要注意用户提供的引用中提到的自动微分(引用[2]和[4]),所以在代码中必须使用框架的自动微分功能,比如TensorFlow的GradientTape或PyTorch的autograd。 另外,引用[5]提到损失函数的构造,所以需要明确损失函数的组成部分,比如数据拟合项和物理约束项的比例,可能需要调整权重,但基础示例可能先使用简单加和。 最后,生成相关问题时要围绕PINN在ODE中的应用,可能的扩展问题包括如何处理高阶ODE,训练中的挑战,或者与传统数值方法的比较。 现在,需要验证这些思路是否正确,确保示例ODE的选择合理,代码能够运行,并正确解释每个步骤。同时,确保引用的正确应用,比如引用[3]提到的硬约束可能作为进阶内容提及,但主要示例使用软约束。</think>### PINN在常微分方程中的实现方法 物理信息神经网络(PINN)通过将微分方程嵌入损失函数,引导神经网络同时满足数据和物理规律。以下以常微分方程$y'' + y = 0$(解为$y = \sin(x)$)为例,说明实现步骤: #### 1. 问题定义 - **方程**:$$y'' + y = 0, \quad x \in [0, 2\pi]$$ - **边界条件**:$y(0)=0, y'(0)=1$(理论解为$y = \sin(x)$) #### 2. 神经网络构建 使用全连接网络预测$y(x)$,输入为坐标$x$,输出为预测值$\hat{y}$: ```python import tensorflow as tf # 定义神经网络结构 model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(1,)), tf.keras.layers.Dense(20, activation='tanh'), tf.keras.layers.Dense(20, activation='tanh'), tf.keras.layers.Dense(1) ]) ``` #### 3. 损失函数设计 损失包含**方程残差**和**边界条件**两部分: ```python def compute_loss(x): with tf.GradientTape(persistent=True) as tape: tape.watch(x) y_pred = model(x) # 预测值 dy_dx = tape.gradient(y_pred, x) # 一阶导数 d2y_dx2 = tape.gradient(dy_dx, x) # 二阶导数 # 方程残差损失 equation_loss = tf.reduce_mean((d2y_dx2 + y_pred)**2) # 边界条件损失 x_bc = tf.constant([[0.0]], dtype=tf.float32) y_bc_pred = model(x_bc) dy_bc_pred = tape.gradient(y_bc_pred, x_bc) bc_loss = tf.reduce_mean((y_bc_pred - 0)**2 + (dy_bc_pred - 1)**2) return equation_loss + bc_loss ``` #### 4. 训练过程 ```python optimizer = tf.keras.optimizers.Adam(learning_rate=0.001) # 生成训练点(无真实数据,仅靠物理约束) x_train = tf.random.uniform((1000,1), 0, 2*np.pi) for epoch in range(5000): with tf.GradientTape() as tape: loss = compute_loss(x_train) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) if epoch % 500 == 0: print(f"Epoch {epoch}, Loss: {loss.numpy():.4f}") ``` #### 5. 关键原理 - **自动微分**:通过`GradientTape`自动计算导数[^2] - **硬约束改进**:可将边界条件编码到网络结构中(如$y(x)=x \cdot \text{NN}(x)$),强制满足$y(0)=0$[^3] ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值