Nature 子刊丨用于材料原子建模的物理信息神经网络

作者:G.P.Purja Pun, R. Batra, R. Ramprasad  & Y. Mishin

单位:乔治梅森大学

01 摘要

材料的大规模原子计算机模拟在很大程度上依赖于原子间势预测原子上的能量和牛顿力。传统的原子间势是基于物理直觉的,但包含的可调参数很少,而且通常不准确。新兴的机器学习(ML)潜力在大型DFT数据库中实现了高精度的插值,但作为纯粹的数学结构,其向未知结构的可转移性较差。我们提出了一种新的方法,通过告知原子间键合的物理性质,可以显著提高ML势的可转移性。这是通过将一个相当通用的基于物理的模型(分析键序势)与神经网络回归相结合来实现的。这种方法被称为物理知情神经网络(PINN)势,通过开发Al的通用PINN势来证明。我们认为,开发基于物理的ML势是原子模拟领域中最有效的方法。


02 图表简介  

Fig. 1

图:原子势发展的流程图。a传统的原子间势。b数学NN电位。c具有所有本地参数的物理通知NN(PINN)电位。d PINN电位,参数分为局部和全局。虚线矩形勾勒出需要参数优化的对象。PES是材料的势能面

Fig. 2

图:PINN电位的准确性。a、 c用PINN势与DFT能量计算的a训练和c验证数据集中原子构型的能量。直线代表完美的配合。b、 d b训练和d验证数据集中的误差分布。

Fig. 3

图:Al相对于室温的线性热膨胀(295 K) PINN和NN电位预测与实验的比较

figure 4

图:NN和PINN电位的测试。a、 b从700开始的NVE MD模拟中Al中边缘位错的能量 K.c,d 1000、1500、2000和4000下NVT MD模拟中HCP-Al的能量 K.由PINN(a,c)和NN(b,d)势预测的能量与20,21的DFT计算进行了比较。直线代表完美贴合

Fig. 5

图:铝晶体结构的能量-体积关系。由PINN势(线)和DFT计算(点)预测的能量的比较。六方紧密堆积(HCP)、体心立方(BCC)和简单立方(SC)结构。b A15(Cr3Si原型)、简单六边形(SH)和金刚石立方体(DC)结构

Fig. 6

图:放大由PINN、NN、NN′、EAM和BOP势(曲线)和DFT计算(点)预测的能量-体积关系的排斥部分

figure 7

图:原子力预测的测试。从700开始的NVE MD模拟中a,b验证数据库,c,d边缘位错的原子力的x分量 K、 以及e,f在300、600、1000、1500、2000和4000的NVT MD模拟中的HCP Al K.由PINN(a,c,e)和NN(b,d,f)势预测的力与参考文献中的DFT计算进行了比较。

figure 8

图:DFT与电势的比较。用于训练和验证的DFT数据库中原子配置的能量和EAM Al势54和BOP势的预测进行了比较。BOP参数已拟合到DFT数据库中并永久固定。包括PINN潜在预测以供比较。直线代表完美贴合

03 参考文献

Pun G P P, Batra R, Ramprasad R, et al. Physically informed artificial neural networks for atomistic modeling of materials[J]. Nature communications, 2019, 10(1): 2339..

关注公众号:工大博士科研日常分享

小编有话说:本文仅作科研人员学术交流,由于小编才疏学浅,不科学之处欢迎批评。如有其他问题请随时联系小编。欢迎关注点赞,转发,欢迎互设白名单。投稿、荐稿:MechanicsAI@163.com

<think>好的,我现在需要帮助用户了解如何将某个问题或模型改写成物理信息神经网络PINN)。首先,我需要回顾用户提供的引用内容,确保回答准确。用户给出的三个引用都强调了PINN结合神经网络和物理方程,用于求解偏微分方程(PDE)等物理问题,特别是处理复杂、非线性问题时的优势。接下来,我需要将实现PINN的步骤分解开来,让用户能够逐步理解和应用。 首先,用户可能需要知道PINN的基本原理。根据引用[1],PINN的核心是将物理方程嵌入神经网络的训练过程。这意味着在损失函数中,除了数据误差,还要包含物理方程的残差。例如,在求解瞬态薛定谔方程时,神经网络不仅拟合数据,还要满足方程本身的条件。 然后,我需要考虑具体步骤。通常,建立PINN包括以下几个步骤:定义神经网络结构,构造损失函数(包含物理方程残差、初始/边界条件),选择优化算法进行训练。引用[2]提到传统数值方法的问题,而PINN通过数据驱动和神经网络近似来解决这些问题,因此在步骤中需要强调如何将物理方程转换为损失项。 接下来,我需要用示例代码来说明。用户提供的示例中有一个Python函数,所以可能需要用类似的风格展示PINN的实现。例如,使用TensorFlow或PyTorch搭建神经网络,定义损失函数,包括PDE残差和边界条件损失,然后进行训练。这里需要注意数学表达式的格式,如使用$...$和$$...$$,确保符合用户的要求。 另外,用户可能想知道如何处理不同的物理方程。根据引用[3],PINN用于各种偏微分方程,所以需要说明如何将特定方程转化为损失项。例如,热传导方程、流体动力学方程等,都需要在损失函数中体现对应的PDE残差。 可能还需要考虑数据准备的问题。PINN通常需要少量的边界或初始条件数据,以及可能的一些内部数据点。如果问题没有数据,完全依赖物理方程,那么损失函数将主要由方程残差和边界条件组成。 在解释过程中,需要确保语言简洁,结构清晰,分步骤说明,每个步骤都有具体的操作和示例。同时,要引用提供的资料,比如在提到物理方程嵌入时引用[1][2][3],在讨论应用场景时引用[3]提到的Nature力荐的创新工作。 最后,生成相关问题时要围绕PINN的实现步骤、应用案例、优化方法等,帮助用户进一步探索。例如,如何选择网络结构,如何处理高维问题,如何验证PINN的准确性等。 总结,我需要组织一个结构化的回答,分步骤讲解PINN建模过程,结合示例代码和数学公式,引用相关资料,并生成相关问题。同时确保遵循用户的格式要求,如行内公式用$...$,独立公式用$$...$$,使用中文回答等。</think>### 如何实现物理信息神经网络PINN)进行问题建模与求解 #### 1. **问题定义与物理方程嵌入** - **核心思想**:将物理方程(如偏微分方程PDE)作为约束条件嵌入神经网络的损失函数中,使网络在训练过程中同时满足数据和物理规律[^3]。 - **示例**:假设需建模瞬态热传导方程: $$ \frac{\partial u}{\partial t} = \alpha \nabla^2 u + f(x,t), $$ 其中$u(x,t)$为温度场,$\alpha$为热扩散系数,$f$为源项。 #### 2. **神经网络架构设计** - 输入层:空间坐标$x$和时间$t$(如三维输入$(x,y,t)$)。 - 输出层:待求解的物理量$u(x,t)$。 - 隐藏层:通常使用多层全连接网络,激活函数可选$\tanh$或ReLU。 ```python import tensorflow as tf class PINN(tf.keras.Model): def __init__(self): super().__init__() self.dense1 = tf.keras.layers.Dense(20, activation='tanh') self.dense2 = tf.keras.layers.Dense(20, activation='tanh') self.out = tf.keras.layers.Dense(1) def call(self, inputs): x = self.dense1(inputs) x = self.dense2(x) return self.out(x) ``` #### 3. **损失函数构造** - **数据损失**:若存在实验/仿真数据,计算预测值与真实值的均方误差(MSE)。 - **物理损失**:计算PDE残差$R = \frac{\partial u}{\partial t} - \alpha \nabla^2 u - f$的MSE。 - **边界条件**:强制边界$u(x_{\text{boundary}},t)=g(x,t)$,通过MSE约束。 $$ \mathcal{L} = \lambda_{\text{data}} \mathcal{L}_{\text{data}} + \lambda_{\text{pde}} \mathcal{L}_{\text{pde}} + \lambda_{\text{bc}} \mathcal{L}_{\text{bc}} $$ 其中$\lambda$为权重系数,用于平衡不同约束[^1]。 #### 4. **自动微分与训练** - 使用自动微分(如TensorFlow的`GradientTape`)计算$\nabla^2 u$和$\frac{\partial u}{\partial t}$。 - 优化器选择:Adam或L-BFGS,后者更适合高精度收敛[^2]。 ```python def compute_loss(model, inputs, data_targets): with tf.GradientTape(persistent=True) as tape: tape.watch(inputs) u_pred = model(inputs) # 计算PDE残差 du_dt = tape.gradient(u_pred, inputs[:, 2:3]) # 对时间t求导 du_dx = tape.gradient(u_pred, inputs[:, 0:1]) # 对空间x求导 du_dxx = tape.gradient(du_dx, inputs[:, 0:1]) # 二阶导数 residual = du_dt - alpha * du_dxx - f(inputs) # 计算总损失 loss_data = tf.reduce_mean((u_pred - data_targets)**2) loss_pde = tf.reduce_mean(residual**2) total_loss = 0.1*loss_data + 1.0*loss_pde return total_loss ``` #### 5. **验证与可视化** - 在测试集或已知解析解的区域评估精度。 - 绘制物理场(如温度分布、流速场)的动态变化。 #### 典型应用场景 - **流体动力学**:求解Navier-Stokes方程,模拟复杂流动。 - **量力学**:瞬态薛定谔方程的高效求解。 - **材料科学**:相场模型模拟晶体生长。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周yyyyyyyyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值