变种PINN,更小的误差,更高的性能!

刷到篇2025年西工大刚发的文章,讲的是PINN的新变种——VW-PINNs(PINN中PDE残差的体积加权方法),研究表明其具有更小的误差,更好的性能。

如果对PINN比较熟悉,应该很好理解VW-PINNs(下文有解析)。近年来PINN相关的研究频繁发表于《Nature》等顶级期刊,尤其改进PINN及其变种,学术认可度极高,加上其在交叉学科的应用需求,以及丰富的开源代码资源(多数改进方案都开源),PINN的变种研究已经成了论文发表潜力超大的一个方向。

当前,PINN改进比较热门的创新有算法优化、架构创新、应用拓展等,未来也可进一步聚焦多物理场建模、理论深化及跨学科融合。建议大家选择具体领域(如生物医学)切入,结合最新改进方法(如自适应权重)开搞。

本文整理了15个PINN变种,开源代码已附,需要参考的论文er可无偿获取。

全部论文+开源代码需要的同学看文末

VW-PINNs: A volume weighting method for PDE residuals in physics-informed neural networks

方法:论文通过定义体积加权残差,提出体积加权物理信息神经网络(VW-PINNs),在重新评估偏微分方程损失函数的同时,通过核密度估计开发高效的体积近似算法,验证了在非均匀采样情况下相比于PINNs,VW-PINNs在解决前向和逆向问题时具有更好的普适性、收敛性和准确性。

创新点:

  • 提出了一种通过评估偏微分方程(PDE)来进行自适应采样的方法。

  • 定义了体积加权残差并提出了VW-PINNs,通过在计算域内对配置点所占体积进行加权重新评估PDE损失函数。

  • 针对网格无关场景下的配置点体积计算,开发了一种基于核密度估计的高效体积近似算法。

k-space physics-informed neural network (k-PINN) for compressed spectral mapping and efficient inversion of vibrations in thin composite laminates

方法:本文提出了一种名为k-PINN的新型神经网络方法,通过在波数域(k-space)中学习振动响应的傅里叶系数,解决了传统PINN在处理宽带振动问题时的频谱偏差和计算效率问题。它利用振动响应在k-space中的稀疏性,实现了高效重建和反演,并在处理稀疏数据和复杂模态时表现出色。

创新点:

  • 一种新型的物理信息神经网络k-space,通过在波数域中学习振动响应,有效解决了传统PINN在处理宽带振动时的频谱偏差问题。

  • 引入高斯掩模和稀疏性损失,加速了网络收敛,提高了重建结果的稀疏性和物理可解释性。

  • 通过波数域映射,减少了计算复杂度,显著提高了计算效率,尤其在处理大规模数据时表现突出。

PT-symmetric PINN for integrable nonlocal equations: Forward and inverse problems

方法:论文提出了一种名为PTS-PINN的PINN变种,专门用于解决具有PT对称性的非局部方程。该方法通过将非局部项视为局部组分,避免了对非局部项的直接求导,并在损失函数中嵌入PT对称性信息,从而提高了求解精度。

创新点:

  • 通过在PINN损失函数中引入非局部方程的P T -对称性属性,显著提高了解决可积非局部模型的效果。

  • 使用PTS-PINN算法解决非局部方程的逆问题,包括非局部(2+1)维NLS方程和非局部三波相互作用系统。

  • 通过PTS-PINN方法,成功实现对非局部方程中孤立波、周期波解的高精度学习,误差达到e-04数量级。

TGPT-PINN: Nonlinear model reduction with transformed GPT-PINNs

方法:论文提出了一种名为TGPT-PINN的新框架,通过在PINNs中引入参数依赖的变换层和震荡捕获损失函数,解决了传输主导型偏微分方程中线性模型降阶的局限性,验证了TGPT-PINN在非线性模型降阶中的有效性。

创新点:

  • TGPT-PINN通过在网络中添加一个可训练的变换层,大幅提升了对参数依赖的非线性模型缩减的能力。

  • TGPT-PINN采用了一种自适应的元网络结构,该结构能够自动“学习”系统的参数依赖性,并通过贪心算法逐步增大其隐藏层。

  • 通过引入一个参数依赖的变换层,TGPT-PINN能够解析并准确捕捉到不连续位置的参数依赖性。

关注下方《学姐带你玩AI》🚀🚀🚀

回复“PINN变种”获取全部方案+开源代码

码字不易,欢迎大家点赞评论收藏

<think>好的,我现在需要解决用户的问题,即如何在使用物理信息神经网络(PINN)求解偏微分方程(PDE)后计算相对误差的公式及其实现方式。首先,我需要回顾一下PINN的基本原理和步骤,确保自己理解正确,然后再分析相对误差的计算方法。 根据用户提供的引用[1]和[2],PINN的核心在于将物理方程(PDE)作为损失函数的一部分,通过优化损失函数来训练神经网络,使得网络的输出满足PDE以及初始条件和边界条件。用户提到的残差项是损失函数中的关键部分,要求其趋近于零。现在,用户关心的是在求解之后如何计算相对误差,以评估模型的准确性。 首先,我需要明确相对误差的一般定义。在数值计算中,相对误差通常是指近似值与真实值之间的绝对误差与真实值的比值。对于标量值,公式为$| \text{近似值} - \text{真实值} | / | \text{真实值} |$。但在PDE的解中,解通常是一个函数,涉及整个定义域内的多个点,因此需要将相对误差推广到多维情况,可能需要计算在整个区域上的积分或平均。 接下来,考虑PINN求解PDE的流程。PINN的输出是神经网络的预测解,记为$u_{\text{PINN}}(t, x)$,而真实解(如果有的话)记为$u_{\text{exact}}(t, x)$。计算相对误差时,通常需要在测试点上比较预测解和真实解。测试点可以是整个区域内的离散点,包括时间空间中的采样点。 可能的相对误差公式有两种常见形式:一种是逐点的相对误差再取平均,另一种是整体误差(如L2相对误差)。例如: 1. **平均相对误差(Mean Relative Error)**: $$ \text{MRE} = \frac{1}{N} \sum_{i=1}^{N} \frac{| u_{\text{PINN}}(t_i, x_i) - u_{\text{exact}}(t_i, x_i) |}{| u_{\text{exact}}(t_i, x_i) |} $$ 2. **L2相对误差**: $$ \text{L2 Relative Error} = \frac{ \sqrt{ \sum_{i=1}^{N} | u_{\text{PINN}}(t_i, x_i) - u_{\text{exact}}(t_i, x_i) |^2 } }{ \sqrt{ \sum_{i=1}^{N} | u_{\text{exact}}(t_i, x_i) |^2 } } $$ 这里,N是测试点的数量。用户需要根据具体情况选择适当的误差计算方式。通常,在学术论文中,L2相对误差为常见,因为它反映了整体误差的大小,而平均相对误差可能对异常值敏感。 接下来是实现方式的问题。假设用户已经训练好了PINN模型,并且有真实解的数据(或解析解),那么步骤大致如下: 1. **生成测试点**:在求解域的时空范围内,生成一组测试点$(t_i, x_i)$,这些点可以均匀分布或随机采样,但需要覆盖整个区域。 2. **获取预测值和真实值**:使用训练好的PINN模型对测试点进行预测,得到$u_{\text{PINN}}(t_i, x_i)$,同时计算对应的真实解$u_{\text{exact}}(t_i, x_i)$。 3. **计算误差**:根据选择的相对误差公式,对每个测试点计算误差,并累加或求平均。 需要注意的情况包括真实解是否存在。对于大多数实际问题,解析解可能未知,此时可能需要使用高精度数值解作为参考。如果真实解无法获取,可能需要使用其他指标评估模型,如残差项的损失值。 在实现上,假设使用Python和TensorFlow/PyTorch框架,可以按照以下步骤编写代码: - 定义测试点的坐标网格。 - 使用神经网络模型进行预测。 - 计算真实解(如果存在)。 - 应用误差公式进行计算。 例如,在PyTorch中的代码片段可能如下: ```python import torch # 生成测试数据 t_test = torch.linspace(0, 1, 100).view(-1,1) x_test = torch.linspace(0, 1, 100).view(-1,1) # 创建网格点 T_test, X_test = torch.meshgrid(t_test.squeeze(), x_test.squeeze()) t_flat = T_test.reshape(-1,1) x_flat = X_test.reshape(-1,1) # 预测值 u_pred = model(torch.cat([t_flat, x_flat], dim=1)) # 真实解,假设有exact_solution函数 u_exact = exact_solution(t_flat, x_flat) # 计算L2相对误差 numerator = torch.sqrt(torch.sum((u_pred - u_exact)**2)) denominator = torch.sqrt(torch.sum(u_exact**2)) l2_relative_error = numerator / denominator # 平均相对误差 absolute_error = torch.abs(u_pred - u_exact) relative_error = absolute_error / torch.abs(u_exact) mean_relative_error = torch.mean(relative_error) ``` 需要注意的是,当真实解在某些点为零时,平均相对误差可能会出现除以零的情况,此时需要处理这些点,比如排除或设定阈值。 另外,用户提供的引用[2]中提到,初始条件和边界条件作为损失函数的一部分,确保解的物理合理性。在计算误差时,可能还需要分别评估内部点、边界点和初始点的误差,以验证模型在不同区域的准确性。 总结来说,相对误差的计算需要明确公式,并在实现时考虑数据生成、模型预测、误差计算及异常处理。</think>在PINN求解偏微分方程后,计算相对误差需明确真实解与预测解的差异。以下是具体公式和实现步骤: --- ### 一、相对误差公式 1. **L2相对误差(整体误差)** $$ \text{L2 Relative Error} = \frac{ \sqrt{ \sum_{i=1}^{N} | u_{\text{PINN}}(t_i, x_i) - u_{\text{exact}}(t_i, x_i) |^2 } }{ \sqrt{ \sum_{i=1}^{N} | u_{\text{exact}}(t_i, x_i) |^2 } } $$ 反映预测解与真实解在整体空间中的偏差程度[^2]。 2. **平均相对误差(逐点误差)** $$ \text{Mean Relative Error} = \frac{1}{N} \sum_{i=1}^{N} \frac{ | u_{\text{PINN}}(t_i, x_i) - u_{\text{exact}}(t_i, x_i) | }{ | u_{\text{exact}}(t_i, x_i) | } $$ 适用于需要逐点分析误差的场景。 --- ### 二、实现步骤(以PyTorch为例) 1. **生成测试数据** 在时空域内均匀采样或随机生成测试点: ```python import torch t_test = torch.linspace(0, 1, 100).reshape(-1, 1) # 时间域 x_test = torch.linspace(0, 1, 100).reshape(-1, 1) # 空间域 t_grid, x_grid = torch.meshgrid(t_test.squeeze(), x_test.squeeze()) test_points = torch.stack([t_grid.flatten(), x_grid.flatten()], dim=1) ``` 2. **获取预测解与真实解** 调用训练好的PINN模型和已知解析解函数: ```python u_pred = model(test_points) # 模型预测 u_exact = exact_solution(test_points[:, 0], test_points[:, 1]) # 真实解 ``` 3. **计算L2相对误差** ```python numerator = torch.norm(u_pred - u_exact, p=2) denominator = torch.norm(u_exact, p=2) l2_error = (numerator / denominator).item() ``` 4. **计算平均相对误差(需处理零点)** ```python absolute_error = torch.abs(u_pred - u_exact) relative_error = absolute_error / (torch.abs(u_exact) + 1e-8) # 避免除以零 mean_error = torch.mean(relative_error).item() ``` --- ### 三、注意事项 1. **真实解的获取** - 若有解析解,直接代入公式计算。 - 若无解析解,需用高精度数值方法(如有限差分)生成参考解[^1]。 2. **误差分析维度** - 可分别计算内部点、边界点和初始点的误差,验证PINN在不同区域的收敛性[^2]。 3. **异常值处理** 当真实解接近零时,添加微小量(如`1e-8`)避免数值不稳定。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值