资讯动态

深度势能分子动力学:从原理到电催化应用的实战指南

发布时间:2026/9/16 2:32:19 来源:尧图企业网站定制
很多做分子模拟的人第一次听说“深度势能”这四个字大多是在发现自己跑了几个月的从头算分子动力学AIMD还没攒够统计学样本、而文章截稿日期已经越来越近的时候。我当年就是在这种焦虑里接触到 DeePMD 的最初只当它是一个“能加速的机器学习势”后来真正把它用进电催化固液界面体系才意识到这个工具的定位远不止“快”——它把分子动力学带进了一个数据驱动的新范式。深度势能分子动力学Deep Potential Molecular Dynamics常直接叫 DeePMD本质上是利用深度神经网络拟合高精度第一性原理计算数据构造原子间相互作用势再驱动大规模分子动力学模拟的一套完整方案。它解决的问题非常具体AIMD 因为每一步都要现场算电子结构能模拟的体系尺度通常在几百个原子、皮秒量级而经典力场虽然能跑到几十万原子但精度又不足以描述断键、成键、电荷转移这些化学过程。DeePMD 处于两者的交叉点目标是“拿第一性原理的精度跑经典力场的规模”。这篇文章就把它的原理、完整使用流程、以及在电催化这类热门场景里的实战思路拆开讲清楚。无论你是刚入门的模拟新手还是想把手头 AIMD 体系规模化升级的老手都可以顺着这条路径走一遍。1. 精度与速度的世纪矛盾为什么分子动力学一直被“卡脖子”1.1 从头算 MD 的每一帧都贵在“重新求解”要理解 DeePMD 的颠覆性得先从分子动力学最原始的结构讲起。经典分子动力学的每一时间步只需要根据原子坐标计算势函数给出的能量和力然后积分牛顿方程这个过程即使对上万个原子也只是毫秒级。但代价是势函数本身是人为设定的简化形式比如 Lennard-Jones 的 12-6 项、EAM 的嵌入函数、ReaxFF 的反应键级它们必须提前写好一个固定的数学表达式能用有限的参数近似大量原子构型的势能面。正因为表达形式固定经典势对复杂化学环境比如过渡金属表面的吸附态、水与带电界面的相互作用常常无能为力。从头算 MD 则是另一条路。每个时间步都做一次 DFT 或更高精度计算把当前构型的基态能量和原子受力精确求出来再动一步。每一步 Kohn-Sham 方程的自洽迭代都等价于在模拟中“现场做实验”。这样做精度是有了但计算量陡增。如果一个 AIMD 体系有 500 个原子、使用平面波基组单步耗时往往在秒到分钟级别一个 50 ps 的 MD时间步 0.5 fs就是 100,000 步可能要跑上半个月到一个月。更麻烦的是AIMD 的每一步之间根本没有“记忆”每次都是从头开始自洽迭代已经算过的构型信息全部浪费掉了。1.2 经验势的妥协能跑大体系但描述不了电子结构经典力场的极限也很明显。以常见的 Stick 模型水分子为例它用固定的点电荷和 Lennard-Jones 参数就能给出不错的水体相性质和扩散系数但遇到水分子在贵金属表面发生解离这样的问题就彻底失效因为它势函数里根本不存在“O-H 键断裂”这个通道。即便用 ReaxFF 这类反应力场原子间的键级仍然是通过查表和经验公式拟合出来的无法自动适应复杂的极化环境和电荷转移场景。我在早期做 Pt(111) 表面水界面模拟时就深切体会过力场参数稍微调整水分子的取向分布和氢键网络就全变了任何一个结果都很难说服审稿人。所以矛盾集中在从头算太慢经典势太粗糙。过去的折衷方案包括 QM/MM 分层、机器学习修正力场等但都各有局限。QM/MM 需要主观划分区域且边界处理麻烦传统机器学习势如神经网络势首次被 Behler-Parrinello 提出时本质上是一个纯插值工具过度依赖特征工程容易在小体系拟合得很漂亮一跑大体系就发散。1.3 深度势能的思路把“求解电子结构”变成“查询神经网络”DeePMD 的核心洞察非常直接既然我们可以用 DFT 把大量构型对应的能量和受力算出来那为什么不训练一个神经网络去学习这个映射关系呢训练好之后做 MD 时就不再需要调用 DFT 代码了。每个时间步只需要把局域原子排列输入神经网络立刻得到能量和力推理耗时接近经典力场。这个想法在机器学习力场领域并不新鲜但 DeePMD 在工程实现上做了一个关键动作它把数据、描述符、网络、损失函数和 MD 引擎全部整合成了流水线DeePMD-kit LAMMPS你不需要自己写神经网络训练代码也不需要把模型权重手动塞进 MD 程序。更关键的是DeePMD 学习的不是“一个势能值”而是整个势能面Potential Energy Surface。神经网络把大量 DFT 数据点的势能面连续化、可微分化了于是 MD 中每一个构型的能量和受力都可以被高精度预测。对用户来说这套流程等于把“每一步做 DFT”压缩成了“训练时做 DFT”代价是一次性数据生成收益是之后可以无限次低成本复用。这个“一次性付出长期回报”的模式正是它能替代 AIMD 做长时间统计模拟的根本原因。2. DeePMD 的原理拆解神经网络凭什么学会原子间的相互作用2.1 整体架构描述符 拟合网络DeePMD 的模型从宏观上分为两段。前段是描述符descriptor负责把每个原子周围的局域化学环境编码成一个特征向量后段是一个全连接神经网络称为拟合网络fitting network负责把这个特征向量映射为原子的能量贡献。体系的总能量由所有原子的能量贡献直接相加得到。用数学语言讲如果第 i 个原子的局域环境被打包成一个向量 $D_i$那么第 i 个原子的能量 $E_i F(D_i)$系统总能量 $E \sum_i E_i$。这个“总能量等于单原子贡献之和”的设定看似朴素却保证了模型的局域性和尺寸迁移性size transferability。它的物理依据是化学中的局域性原理远处原子的影响主要通过长程相互作用叠加而近程成键和电子云重叠主导了能量变化。DeePMD 在默认设置下会显式计算截断半径内的局域环境同时把长程静电极化等效应通过数据训练的隐式方式部分吸收掉进阶版本会引入混合描述符或 plus 模式来处理静电项后面再说。这种按原子分解的做法也天然适用于并行化因为每个原子的预测完全独立。2.2 局域环境描述符 DP-SE平移、旋转和置换不变是怎么实现的描述符是整个 DeePMD 模型中最有技术含量的部分。它承担的任务是给定中心原子 i 和截断半径 $r_c$ 内的一组邻居原子 j输出一个特征向量使得这个向量在体系发生平移、旋转或者原子索引置换时保持不变但在原子坐标有细微变化时能够平滑变化因为势能函数必须是坐标的连续可微函数。DeePMD 早期的版本用 deep potential (DP) 描述符核心是一个基于平滑截断函数和径向/角度信息的嵌入矩阵。每个邻居原子的距离经过一个权重函数 $s(r_{ij})$ 平滑截断然后对径向基函数展开再送入嵌入网络。嵌入网络的输出用于构造描述矩阵最后通过矩阵乘法和外积得到每个中心原子的对称化特征。这套设计借鉴了 Behler-Parrinello 对称函数的思想但把“手工挑选的对称函数”升级成了“神经网络学出来的嵌入函数”。嵌入网络的输出维度由embedding_net参数决定一般用 8-64 维的隐层即可。从实操角度看你不需要完全理解描述符的矩阵细节但必须理解几个关键参数的作用rcut设定多大决定了模型能“看到”多远太小会漏掉重要的次近邻相互作用太大会引入大量几乎无效的邻居并拖慢训练sel指定每种元素的邻居最大数量实际使用时sel不能设置成所有构型中的最大配位数否则稀疏样本会让训练效率很低。建议通过粗跑数据集统计配位数再定一个略有余量的值。2.3 能量与力的统一自动微分解决了最麻烦的一步分子动力学需要的是力也就是能量对坐标的负梯度。传统机器学习势要同时拟合能量和力通常需要为力单独设计输出头或损失函数。DeePMD 的做法则更加优雅拟合网络输出的是能量力通过自动微分对输入坐标求梯度得到。这样保证了一个非常重要的一致性——力是能量的精确导数这意味着系统满足能量守恒。如果你在模拟中监测能量漂移DeePMD 体系每原子每纳秒的能量漂移通常可以控制在非常小的量级而一个不一致的势模型会在 NVE 系综中出现明显的温度漂移。由于力是自动微分的损失函数可以同时包含能量误差和力误差。实际训练中力的误差项往往比能量误差更重要因为 MD 的轨迹主要由力控制。所以训练配置里一般会为 force 设置较大的权重比如loss参数设为ener和force的组合并且 force 的起步权重可以设成 1000注意这个数值要和你的能量单位配合。2.4 连续性、可导性和短程平滑性另一个常被忽视的细节是平滑截断函数。DeePMD 会对截断半径附近的邻居做连续衰减让邻居原子进入或离开截断球时描述符和能量都连续过渡。这个设计看似不起眼却是模型能稳定跑 MD 的关键。如果截断是硬性的原子越过截断边界时力会突变模拟中会出现能量跳变甚至体系爆炸。DeePMD 默认使用的平滑函数保证了在 $r_{ij}$ 趋于 $r_c$ 时函数值及其一阶、二阶导数为零因此模型对外界环境变化非常稳定。这解释了为什么 DeePMD 在 LAMMPS 里跑 NPT 恒温恒压模拟时密度和温度曲线往往非常干净不会出现经典势常见的因截断产生的假振荡。3. 手把手跑通一个 DeePMD 项目数据、训练、验证与部署3.1 起点是数据DFT 数据的好坏决定模型的天花板DeePMD 项目的第一步不是写配置文件而是确定“我要让模型学会哪个体系”。以我最常做的 Pt(111)/水界面为例训练数据需要覆盖尽可能多的构型空间包括不同水分子取向、不同吸附位点、不同表面覆盖度、以及少量高温扰动构型。这些构型由 AIMD 抽样或者对初始构型做随机/物理扰动来生成每个构型都要用 DFT 算好总能量和原子受力。关键原则是训练集里必须有足够的“力”因为力指明了势能面的局部坡度纯能量训练很难让模型学到准确的导数。数据规模要多大小体系比如 50-200 个原子的周期性模型通常需要数千到数万个构型少的几千个也能训练出一个可用的模型但边界和罕见构型的覆盖率决定了模型的泛化能力。我见过一些新手只扯几百个构型就开训练结果 NVT 下跑几十个皮秒模型就上 10000 K根源不是网络结构不够而是数据根本没覆盖到那些偏离平衡的构型区域。所以需要让训练集中的构型包含明显的温度扰动——甚至可以在 800 K 或 1000 K 的高温 AIMD 下抽样让模型见识到势能面上的“陡坡”和“悬崖”。3.2 数据格式与 DeePMD-kit 的输入输出DeePMD-kit 使用的数据格式是标准的type.raw、coord.raw、energy.raw、force.raw以及可选的box.raw。每个.raw文件都是文本矩阵没有列头原子坐标单位建议统一用 Å能量单位用 eV力单位用 eV/Å。DeePMD-kit 内部会做单位转换但训练集保持统一单位能避免很多低级错误。type.raw里存放原子类型索引索引从 0 开始和type_map对应type_map中H、O、Pt这类元素符号的顺序必须和 DFT 计算中的元素排列保持一致。如果你对数据文件不放心可以用 DeePMD-kit 提供的dp test或dp train启动命令配合deepmd-kit的 Python API 检查。我第一次跑通时遇到过一个诡异的现象能量和力拟合都好但一跑 MD 就整体平移不守恒。最后发现是coord.raw里原子顺序和type.raw不一致导致网络学了个乱序映射。这里没有任何黑魔法手动花十分钟写个小脚本核对前几个构型的原子坐标和能量能省下后面一整天的排查时间。3.3 训练配置关键参数和一份可直接改的 JSONDeePMD-kit 2.x 使用 JSON 格式的输入文件。这里给出一份能直接训练小体系的示例配置{ model: { type_map: [H, O, Pt], descriptor: { type: se_e2_a, rcut: 6.0, rcut_smth: 4.2, sel: [46, 46, 36], neuron: [25, 50, 100], resnet_dt: true, type_one_side: true, seed: 1 }, fitting_net: { neuron: [240, 240, 240], resnet_dt: true } }, learning_rate: { type: exp, decay_steps: 5000, start_lr: 0.001, decay_rate: 0.96 }, loss: { start_pref_e: 0.02, limit_pref_e: 1, start_pref_f: 1000, limit_pref_f: 1000 }, training: { training_data: { systems: [/path/to/train/system/] }, validation_data: { systems: [/path/to/validate/system/], batch_size: 3 }, numb_steps: 800000, seed: 1, disp_freq: 1000, save_freq: 10000 } }几个值得细说的点。descriptor.type用se_e2_a即“平滑嵌入、两体、显式描述符”适合大多数分子和材料体系rcut6.0 Å 对金属-水体系算是比较稳妥的默认值太短会丢氢键网络的非局域效应太长训练速度指数上涨。type_one_side设为 true 意味着对于不同类型原子对只嵌入其中一个原子类型的特征这能大幅减少参数规模也不会损失精度。fitting_net的 width 以 240 起步是常见选择更大的网络256、512能拟合更复杂的势能面但需要更多数据防止过拟合。loss部分中力的权重 1000 是 DeePMD 项目里被广泛使用的设定。为什么这么高因为能量是原子的积分量一个构型总能量绝对值大当模型能量差 0.01 eV 时力可能差 0.1 eV/Å力对 MD 轨迹影响更直接。实际调参时可以把limit_pref_e设成 1让训练后期能量和力的权重都趋于平衡但这需要根据你的目标平衡。训练过程中观察lcurve.out里的 loss 值。一个健康的训练曲线是前 1000 步 loss 快速下降之后缓慢平滑下降最终验证集能量 RMSE 在 1-2 meV/atom、力 RMSE 在 50-150 meV/Å 量级不同体系略有差异。如果你的力 RMSE 在数百 meV/Å 一直下不来大概率是数据分布不均匀或者sel设得太小导致某些高配位环境描述不完整。3.4 验证模型不能只看训练 loss还得看 MD 稳定性模型调参到一个可接受的 RMSE 之后下一件要做的不是立刻上 LAMMPS 跑生产模拟而是做“稳定性测试”。最简单的方法是用 LAMMPS 加载模型固定晶格从实验密度或已知平衡构型出发跑一段 NVT 模拟观察温度和压力是否振荡在合理范围以及体系有没有出现不正常的原子重叠例如两个 H 原子距离小于 0.5 Å。还有一个很有效的验证手段是“用模型重新生成 AIMD 轨迹对比”。取一段培训数据之外 AIMD 轨迹用 DeePMD 模型对每个构型做单点能计算再和对应的 DFT 能量比较。如果平均绝对误差稳定且没有在少数特殊构型上出现尖峰说明模型在动态分布上足够鲁棒。另一个更严格的测试是拿模型跑一次温度爬坡模拟例如从 100 K 线性爬到 1500 K如果模型在高能量构型下依然稳定不爆炸说明势能面的外推能力也尚可。这样的稳定性测试虽然要花几小时但比直接跑 10 ns 生产模拟后在 post-processing 发现轨迹无效要省太多时间。部署到 LAMMPS 就很简单。编译 LAMMPS 时带上 DeePMD-kit 的接口通常用cmake时-D PKG_DEEPMDyes加上-D DEEPMD_KIT_ROOT/path/to/deepmd-kit然后在 LAMMPS 输入文件里pair_style deepmd frozen_model.pb pair_coeff * *frozen_model.pb是训练完后的冻结模型文件。接着正常跑velocity、fix nvt等命令即可。实测下来DeePMD 在 LAMMPS 里的计算速度和经典力场同体量对比通常慢 2-10 倍取决于模型宽度和邻居列表开销但相比 AIMD 快了三到四个数量级。拿 Pt(111)/水界面这种 600 原子的体系来说AIMD 一天最多跑几十皮秒DeePMD 一天可以轻松跑到纳米秒量级。4. 深度势能 × 电催化新范式如何攻下固液界面模拟的硬骨头4.1 电催化模拟真正难在哪电催化近几年的热门话题不管是析氢反应HER、析氧反应OER、二氧化碳还原CO₂RR核心都离不开固液界面。催化反应发生在电极表面和电解质溶液的交界处溶剂分子取向、氢键网络、离子的吸附/脱附、表面电荷分布全都耦合在一起。AIMD 原则上可以给出这些信息但一个板板正正的金属-水界面模拟动辄 300-1000 个原子AIMD 的尺度根本不够看有序性统计。而经典力场又处理不了表面金属原子和吸附中间体之间的电荷转移和成键变化这正是电催化里最关键的化学过程。所以 DeePMD 在这个领域大受欢迎是必然的——它能保留 DFT 级别的电子结构信息又能把模拟尺度拉到真实界面需要的水平。4.2 构建电催化训练的“示意图”需要覆盖哪些自由度用 DeePMD 做电催化界面训练数据要覆盖的构型空间比普通材料体系更复杂。除了表面原子的振动、水分子的集体运动你还需要不同覆盖度的吸附中间体比如 *H、*OH、*O、*OOH每个中间体在不同吸附位点顶位、桥位、穴位的构型。电极表面附近水的多种取向分布包括姜-泰勒畸变、Hydrogen bond 网络重排。外加偏压的影响。DeePMD 本身是基于固定电荷密度或固定电势的 DFT 数据训练的如果要模拟恒电势条件通常需要用显式外加电场如 DFT 中的external_emf来生成不同极化条件下的数据再把电场参数也作为变量纳入训练。更严谨的做法是结合隐式溶剂模型如 VASPsol或恒电势分子动力学JDFTx / CP2K 等但那样生成的势能面会更“贵”。离子浓度和离子种类的影响。真实电解液中 Na⁺、K⁺、Cl⁻ 或 OH⁻ 的存在会改变界面双电层结构训练数据要不要包含离子取决于你的模拟目标。如果只关心中性界面的水结构可以不放入离子减少很多训练难度。我的建议是先把体系一分为二来做先用一个“阉割版”体系比如去掉离子、仅中性水分子和固定金属层训练出基础模型验证它能复现水分子在表面的取向和扩散系数之后再加中间体和离子。这样逐步扩集可以极大降低调参和排查的复杂度也方便追踪每次新增自由度对模型误差的影响。4.3 反应路径与增强采样DeePMD 只是提供了势能面剩下的要靠采样方法很多刚接触 DeePMD 的同行会误以为“只要模型精度够跑得久就能看到反应事件”。实际上电催化反应的活化能障碍通常在 0.5-1.5 eV在 300 K 下对应毫秒到秒级别的等待时间普通 MD 根本等不起。DeePMD 能帮你把单步成本降到接近经典力场但线性的 MD 轨迹跨越能垒的概率依然极低。所以生产模拟中必须搭配增强采样方法。常用的是 metadynamics元动力学和 umbrella sampling伞形采样。DeePMD 良好的可导性让这些方法能够直接计算集体变量CV的梯度LAMMPS 里通过fix meta或 PLUMED 插件实现。比如研究 CO₂RR 的第一步 CO₂ 吸附活化成 *COOH可以把 C-Pt 距离或 O-H 键长作为集合变量来做 metadynamics从 DeePMD-MD 轨迹里提取自由能面。我做过一个 Pt(111) 水界面的 CO₂ 活化项目用 DeePMD metadynamics 得到的自由能垒和文献中 AIMD 增强采样基本吻合但产出数据的耗时只有后者的十分之一。还有一类更进阶的玩法是把 DeePMD 和机器学习增强采样结合比如用 on-the-fly 的自由能估计让模型在采样过程中重点指向低置信度区域再自动补充 DFT 数据更新模型。这就是深度势能自研的 DP-GEN 主动学习框架的核心思路。它在电催化里尤其好用因为反应中间体和溶剂重排往往把体系推向训练集不常见的构型主动学习能让你不需要一次性准备海量数据。4.4 电催化模拟中的实际坑极化、氢键网络和长程静电用电催化方向的 DeePMD 模型时有三个坑我几乎每次都要提醒合作者。第一个坑是截断半径与静电。水分子和离子之间的长程库仑相互作用在界面体系中非常重要而 DeePMD 默认的局域描述符只能在截断半径内捕获相互作用。6 Å 的 rcut 对氢键网络勉强够用但离子迁移和双电层结构的长程特征就差得远了。有两种解决思路一是把 rcut 拉大比如 10 Å但训练成本和邻居列表开销都会显著上升二是采用 DeePMD-kit 2.2 之后支持的混合描述符或带显式静电的进阶模型把长程静电用 Ewald 求和处理这部分我建议去读官方文档中的 hybrid descriptor 示例。第二个坑是界面模型的“有限尺寸效应”。金属表面模型一旦只有三四层原子DeePMD 训练很容易把表面驰豫和体相原子的差异学混。要在训练集里同时准备不同层数厚度的平板模型甚至含真空层的表面模型让模型学会区分体相原子和表面原子。否则你训练出的模型在跑 3 层平板时可能稳定一换成 5 层平板或者纳米颗粒模型就垮掉。第三个坑是反应路径上“罕见中间态”的数据覆盖。电催化中间体通常只有很窄的构型范围传统 AIMD 从平衡态出发很难自发产生。因此必须用 CI-NEB、元动力学或随机扰动等方法先把过渡态和中间体构型“手工”生成出来再用这些构型的 DFT 单点数据训练。如果跳过这一步模型看似拟合误差小但完全不知道势能面上深谷以外的样子反应自由能面的计算自然无从谈起。5. 一次完整的生产模拟复盘我的工作流与效率建议5.1 从 AIMD 到 DeePMD 的迁移数据管道我现在的标准流程是这样的先写一个基于 ASE 或 pymatgen 的脚本生成一批初始构型包括表面吸附、水随机放置、离子插入、高温扰动等然后批量跑 DFT 计算用 VASP 或 CP2K。计算完成后通过 DeePMD-kit 自带的dp-data工具或者自己写脚本把 OUTCAR 中的数据转换成type.raw、coord.raw、force.raw。这个管道一定要能自动生成set.000目录结构手动复制粘贴 .raw 文件在数据量超过几千个后就会失控。生成完第一批数据后我不会急着训练最终模型而是训练一个粗模型然后做一轮短的 NVT 采样。把这个粗模型跑出来的轨迹里能量异常高的构型挑出来用 DFT 重新算一遍补进训练集再重新训练。这个“模型-采样-挑错-补数据”的闭环就是主动学习的基本形态也是我强烈建议复刻的。真实项目中这个迭代通常要做两三轮数据量翻几番最终模型的稳定性和泛化能力才会合格。5.2 训练效率与硬件调度卡不多也能玩转很多课题组不一定有充裕的 GPU 算力但 DeePMD 训练对硬件的要求没有想象中恐怖。一个 600 原子体系的数据集单卡 V100 上训练 80 万步大约要 10-24 小时。数据量更大的体系建议用多卡数据并行DeePMD-kit 原生支持 Horovod配置时注意--num-layers和 batch size 的对应关系。我的习惯是先小 batch4-8跑几百步看曲线再放大 batch 到 32 左右跑正式训练。数据并行下 loss 曲线应当和不并行时几乎一致如果出现发散检查numb_steps和decay_steps是否被加速器放大了学习率衰减步数需要按卡数除以总步数做相应调整。如果连 GPU 都不充裕一个小技巧是直接用 CPU 训练小型体系比如水盒子DeePMD 的 CPU 版本慢是慢但 200 个原子以下也完全能跑。生产 MD 阶段LAMMPS 的 DeePMD 计算在 CPU 集群上通过 MPI 并行扩展性不错一般 32-128 核一个体系足够。5.3 模型部署与迁移冻结、压缩、再训练模型训练完以后建议立即冻结并检查模型大小。dp freeze命令把 checkpoint 转成frozen_model.pb之后dp compress可以进一步剪枝压缩把模型体积减小数倍并在 LAMMPS 中提速。但要注意压缩会略微降低精度所以压缩后要重新做一次能量/力的验证。如果压缩后 MD 开始出现漂移就不要强行压缩。DeePMD 模型还支持迁移学习fine-tuning这对电催化体系尤其有用。比如你先有一个训练好的 Pt-H₂O 模型想扩展成 Pt(111)-CO₂-H₂O 体系可以在已有模型基础上用新增的含 CO₂ 数据继续训练而不是从零开始。这样能显著加快收敛并且保留了 Pt-H₂O 部分已经学好的经验。实际操作时在训练配置里指定init_model指向已有的 frozen_model 或 checkpoint就可以继续训练了。注意迁移学习时初始学习率要设小一点比如 1e-4否则大学习率会直接把旧网络的参数冲乱。5.4 单位、原子排序和周期性边界三个“低级错误”的高发区和 DeePMD 打交道这两年我遇到的绝大多数失败都来自三个低级环节。第一个是单位电子伏特和千卡每摩尔、埃和纳米搞混直接导致模型能量偏离几个数量级。第二个是原子排序因为 DeePMD 的type_map完全依赖你给定的元素顺序而不同 DFT 代码VASP 的 POSCAR、CP2K 的输入文件输出原子顺序可能不一致。第三个是周期性边界条件。DeePMD 的邻居列表期望构型已经按照最小镜像约定处理过如果你手动把坐标平移或旋转后忘记 wrap模型对同一物理状态可能给出不同预测。这个问题的典型表现是你在训练集上 RMSE 极低但 MD 一跑就出现局域原子堆叠。我这里有一个自查脚本思路随便取训练集里的一个构型把它整体平移到不同位置比如(1,2,3) Å再旋转 90 度然后用dp test计算预测能量和力。如果能量完全不变说明模型具备平移旋转不变性如果变形那就得回头检查描述符的对称性和数据中是否有原子排序错乱。这个测试只要几分钟就该成为大家训练完的必修课。5.5 从“跑出来”到“可信”和实验及更高精度理论对照最后一个建议关乎模拟工作的价值DeePMD 模型的最终评判标准不是拟合精度而是能不能复现物理化学性质。我做的每一个 DeePMD 模型在上生产模拟之前都必须过关“对标清单”径向分布函数和 AIMD 轨迹对比、水的自扩散系数和实验值对比、表面吸附能和 DFT 直接计算结果对比、晶格常数和弹性常数与实验/DFT 对比。只有这些基础物理量匹配你后面算的那些自由能垒、扩散路径、双电层结构才有讨论意义。我第一次把 DeePMD 用到 Pt(111) 水界面时最大的惊喜并不是模型拟合 loss 降到了多少而是来自 MD 轨迹的水分子取向分布曲线和当年 AIMD 图几乎重合。那一刻我才真正确认神经网络拟合的不只是数据点而是整个“化学直觉”。之后再用它做电催化界面、算离子在界面上的输运模拟结果就有了坚实的基础。反过来也要说一句DeePMD 并不是万能药。它天生受限于训练数据的精度和覆盖面DFT 泛函本身有系统误差模型就不会超越数据它无法处理真正意义上的电子激发和电荷自洽过程对强关联体系、磁性变化、自旋态跃迁这类复杂电子结构现象需要额外小心。但对于电催化、储能材料、固液界面这类以热力学和动力学采样为核心目标的体系深度势能分子动力学已经从一个新鲜工具变成了我工作中的默认选项。如果你正挣扎在 AIMD 的时间尺度焦虑里我建议你带着自己的体系照着上面的流程先走一遍用两周时间训练一个初版模型再比较一下它给出的结构、能量和动力学数据和 AIMD 的差距。很可能你会发现这步跨越比想象中要平坦得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价