网易首页 > 网易号 > 正文 申请入驻

PyTorch PINN实战:用深度学习求解微分方程

0
分享至


神经网络技术已在计算机视觉与自然语言处理等多个领域实现了突破性进展。然而在微分方程求解领域,传统神经网络因其依赖大规模标记数据集的特性而表现出明显局限性。物理信息神经网络(Physics-Informed Neural Networks, PINN)通过将物理定律直接整合到学习过程中,有效弥补了这一不足,使其成为求解常微分方程(ODE)和偏微分方程(PDE)的高效工具。

传统神经网络模型需要依赖规模庞大的标记数据集,而这类数据的采集往往成本高昂且耗时显著。PINN通过将物理定律(具体表现为微分方程)融入训练过程,显著提高了数据利用效率。这种方法使得在流体动力学、量子力学和气候系统建模等科学领域实现基于数据的科学发现成为可能,为跨学科研究提供了新的技术路径。

神经网络基础理论

在深入剖析PINN之前,有必要回顾标准神经网络的核心运作机制:

神经网络的基本计算单元是神经元,它接收加权输入信号,经过激活函数处理后产生输出值。多层神经元通过特定拓扑结构组织形成深度神经网络(DNN),这种结构使网络能够逼近高度复杂的非线性函数。网络训练过程中,通常采用均方误差(MSE)等损失函数量化预测值与真实值之间的偏差。通过反向传播算法和梯度下降优化方法,网络权重参数被迭代调整以使损失函数最小化。

示例损失函数

均方误差

PINN的技术特性与创新点

PINN与传统神经网络的根本区别在于,它不依赖于标记数据集进行学习,而是将微分方程约束直接嵌入到损失函数中。这意味着模型学习得到的函数yNN(x)需同时满足:

  • 给定的微分方程约束条件
  • 特定的边界条件和初始条件

PINN框架中的偏微分方程(PDE)通常表示为:

其中

以二阶微分方程为例:

这表明所求函数y(x)必须严格满足该方程。

PINN损失函数的构造原理

PINN的总体损失函数由两个主要部分组成:

PINN的技术优势与局限性

技术优势

PINN具有显著的数据效率优势,能够通过物理定律的约束从相对小规模的数据集中有效学习。它能够处理传统数值求解器难以应对的高维复杂偏微分方程。训练完成后,PINN模型具有良好的泛化能力,可预测不同初始条件或边界条件下的解。此外,在处理逆问题时,PINN对噪声和稀疏数据表现出较强的鲁棒性。

技术局限

PINN的训练过程计算密集且耗时较长,尤其对于高维偏微分方程,通常需要高性能GPU支持。模型对超参数选择较为敏感,需要精细调整以平衡不同损失项的贡献。与成熟的数值求解器相比,PINN在处理大规模物理问题时可扩展性有限。此外,PINN还面临梯度消失导致的优化困难问题,且缺乏与有限元或有限差分方法相当的理论收敛保证。

微分方程的解析求解方法

考虑以下一阶线性微分方程:

初始条件为:

解法步骤

首先,将方程重写为标准形式:

对方程两边进行积分:

应用基本积分公式,得到y的表达式:

其中C为积分常数。

因此,通解为:

代入初始条件y(0)=3:

由此得到精确解:

求解结果总结

通解形式:

带入初始条件y(0)=3后的精确解:

基于PINN求解微分方程的实践案例

步骤1:导入必要的库函数

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
from torchinfo import summary

步骤2:定义能够返回精确解的函数

def true_solution(x):
return x**2 + 5*x + 3 # 精确解函数

这与我们手动求解得到的解析解一致:

步骤3:生成测试点并绘制精确解

x_test = torch.linspace(-2, 2, 100).view(-1, 1) # 生成测试点
y_true = true_solution(x_test)
plt.figure(figsize=(8, 5))
plt.plot( # 绘制微分方程的精确解
x_test,
y_true,
linestyle="dashed" ,
linewidth=2,
label="True Solution"
)
plt.xlabel("x")
plt.ylabel("y(x)")
plt.legend()
plt.title("Analytical Solution of the Equation")
plt.grid()
plt.show()

输出结果:

步骤4:设计PINN模型架构

class PINN(nn.Module):
def __init__(self):
super(PINN, self).__init__()
self.net = nn.Sequential(
nn.Linear(1, 20), nn.Tanh(),
nn.Linear(20, 20), nn.Tanh(),
nn.Linear(20, 1)
)
def forward(self, x):
return self.net(x)
model = PINN()
optimizer = optim.Adam(model.parameters(), lr=1e-3)
summary(model)

输出结果:

步骤5:定义PINN损失函数

def pinn_loss(model, x):
x.requires_grad = True
y = model(x)
# 使用自动微分计算dy/dx
dy_dx = torch.autograd.grad(y, x, torch.ones_like(y), create_graph=True)[0]
# 微分方程损失(L_D): dy/dx - (2x + 5)
ode_loss = torch.mean((dy_dx - (2*x + 5))**2)
# 初始条件损失(L_B): y(0) = 3
x0 = torch.tensor([[0.0]])
y0_pred = model(x0)
initial_loss = (y0_pred - 3)**2
# 总损失
total_loss = ode_loss + initial_loss
return total_loss, ode_loss, initial_loss

步骤6:训练模型(5000轮次)

epochs = 5000
loss_history = []
ode_loss_history = []
initial_loss_history = []
x_train = torch.linspace(-2, 2, 100).view(-1, 1) # 训练点
for epoch in range(epochs):
optimizer.zero_grad()
total_loss, ode_loss, initial_loss = pinn_loss(model, x_train)
total_loss.backward()
optimizer.step()
loss_history.append(total_loss.item())
ode_loss_history.append(ode_loss.item())
initial_loss_history.append(initial_loss.item())
if epoch % 1000 == 0:
print(f"Epoch {epoch}, Loss: {total_loss.item():.6f}")

步骤7:绘制训练过程中的损失函数变化

plt.figure(figsize=(8, 5))
epochs_list = np.arange(1, epochs + 1)
plt.semilogy(epochs_list, loss_history, 'k--', linewidth=3, label=r'Total Loss $(L_D + L_B)$')
plt.semilogy(epochs_list, ode_loss_history, 'r-', linewidth=1, label=r'ODE Loss $(L_D)$')
plt.semilogy(epochs_list, initial_loss_history, 'g-', linewidth=1, label=r'Initial Loss $(L_B)$')
plt.xlabel("Epochs")
plt.ylabel("Loss (Log Scale)")
plt.legend()
plt.title("Loss Components vs Epochs")
plt.grid()
plt.show()

输出结果:

步骤8:对比PINN解与解析解的精确度

X_test = torch.linspace(-2, 2, 100).view(-1, 1)
y_pred = model(X_test).detach().numpy()
plt.plot(X_test,true_solution(X_test),linestyle="dashed",linewidth=3,label="True Solution",color="red")
plt.plot(X_test,y_pred,label="PINNS Solution",color="green")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title(r'Analytical Vs PINNs Solution')
plt.savefig("solution.png", dpi=300, bbox_inches='tight')
plt.grid()
plt.show()

输出结果:

通过结果可以看出,我们已经成功地使用PINN方法求解了上述微分方程,并获得了与解析解高度一致的数值解。

总结

物理信息神经网络(PINN)代表了一种在微分方程求解领域的重要技术突破,它将深度学习与物理定律有机结合,为传统数值求解方法提供了一种高效、数据驱动的替代方案。PINN方法不仅在理论上具有创新性,同时在实际应用中展现出广阔的应用前景,为复杂物理系统的建模与分析提供了新的研究路径。

https://avoid.overfit.cn/post/f9bd046772f1473a80002f592e9527d4

作者:Muhammad Tayyab

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
海南封关动了谁的奶酪?答案显而易见:新加坡为代表的传统中转港

海南封关动了谁的奶酪?答案显而易见:新加坡为代表的传统中转港

一盅情怀
2025-12-19 15:50:07
乌克兰攻入俄罗斯本土布良斯克!摧毁俄军指挥部

乌克兰攻入俄罗斯本土布良斯克!摧毁俄军指挥部

项鹏飞
2025-12-19 17:32:26
金店墙体惊现盗洞,170万元黄金藏在祖坟墓碑后!武汉警方奋战85小时破案

金店墙体惊现盗洞,170万元黄金藏在祖坟墓碑后!武汉警方奋战85小时破案

极目新闻
2025-12-20 11:11:19
68岁青岛市人大常委会原主任被查,今年已有61名中管干部落马

68岁青岛市人大常委会原主任被查,今年已有61名中管干部落马

上观新闻
2025-12-19 18:57:02
当年斥巨资拍摄的10大烂片,每一部都是电影界的奇耻大辱

当年斥巨资拍摄的10大烂片,每一部都是电影界的奇耻大辱

小微看电影
2025-12-19 09:35:41
俄罗斯真正对手浮出水面,9国联军支援乌克兰,普京:敢来就敢打

俄罗斯真正对手浮出水面,9国联军支援乌克兰,普京:敢来就敢打

空天力量
2025-12-19 20:12:31
江西省文印中心原主任庞金艳接受审查调查

江西省文印中心原主任庞金艳接受审查调查

界面新闻
2025-12-20 14:47:24
海水制氢大颠覆!中国用“不粘锅”黑科技,把绿氢逼成“白菜价”

海水制氢大颠覆!中国用“不粘锅”黑科技,把绿氢逼成“白菜价”

瞩望云霄
2025-12-18 09:55:59
南博再爆大瓜:生物硕士“速成”美院博士,冒名捐赠者庞家后人

南博再爆大瓜:生物硕士“速成”美院博士,冒名捐赠者庞家后人

听心堂
2025-12-20 09:23:43
同仁堂集团就南极磷虾油事件致歉:全面开展品牌清理行动

同仁堂集团就南极磷虾油事件致歉:全面开展品牌清理行动

界面新闻
2025-12-20 09:03:27
上海城投(集团)有限公司原党委副书记杨茂铎被查

上海城投(集团)有限公司原党委副书记杨茂铎被查

界面新闻
2025-12-19 22:32:12
心痛!30岁男销售确认死亡,目击者讲述事发经过,车主懵了

心痛!30岁男销售确认死亡,目击者讲述事发经过,车主懵了

魔都姐姐杂谈
2025-12-20 09:19:55
柬埔寨电诈分子上演大逃亡,场面震撼!

柬埔寨电诈分子上演大逃亡,场面震撼!

环球热点快评
2025-12-20 07:53:18
罕见回应私人生活!普京大方承认正在恋爱中

罕见回应私人生活!普京大方承认正在恋爱中

看看新闻Knews
2025-12-20 00:12:15
美国国家级算力动员启动!10万颗英伟达Blackwell GPU,助AI基础设施全面升级

美国国家级算力动员启动!10万颗英伟达Blackwell GPU,助AI基础设施全面升级

爆角追踪
2025-12-20 11:58:16
泰国被曝要求中国调查与柬埔寨“生命研究中心”合作的中方机构

泰国被曝要求中国调查与柬埔寨“生命研究中心”合作的中方机构

环球热点快评
2025-12-20 11:18:27
120多万的卡宴只要60多万?很多网友激动了!打飞的到海南买进口车,可行吗?

120多万的卡宴只要60多万?很多网友激动了!打飞的到海南买进口车,可行吗?

都市快报橙柿互动
2025-12-19 18:00:00
曝TikTok交易达成,美国和字节跳动各掌握一家公司

曝TikTok交易达成,美国和字节跳动各掌握一家公司

爆角追踪
2025-12-19 18:18:51
“最低选择299元有女孩陪侍套餐”,记者说只想看电影,“私人影院”服务员直接让记者去别家看

“最低选择299元有女孩陪侍套餐”,记者说只想看电影,“私人影院”服务员直接让记者去别家看

环球网资讯
2025-12-20 12:20:07
60分钟狂轰63分!正负值+64!文班亚马创神级纪录,马刺该起飞了

60分钟狂轰63分!正负值+64!文班亚马创神级纪录,马刺该起飞了

世界体育圈
2025-12-20 11:42:34
2025-12-20 14:56:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1864文章数 1440关注度
往期回顾 全部

科技要闻

许四清:具身智能的"ChatGPT时刻"还未到来

头条要闻

荷兰已停止向中国供应晶圆 闻泰科技有新招

头条要闻

荷兰已停止向中国供应晶圆 闻泰科技有新招

体育要闻

我开了20年大巴,现在是一名西甲主帅

娱乐要闻

戚薇女儿大变样,10岁就进入“尴尬期”

财经要闻

日本加息落地:暴跌没有,麻烦在后头

汽车要闻

岚图推进L3量产测试 已完成11万公里实际道路验证

态度原创

艺术
游戏
本地
家居
手机

艺术要闻

马岩松新作!桂林“超级星”正式揭幕!

2025最佳动作游戏盘点 《第一狂战士卡赞》上榜

本地新闻

云游安徽|访黄山云海古村,读一城山水风骨

家居要闻

高端私宅 理想隐居圣地

手机要闻

荣耀Magic V6:骁龙8 Elite Gen 5+2亿像素,电池或成最大亮点

无障碍浏览 进入关怀版