「日拱一码」105 机器学习原子间势能MLIP

目录

机器学习原子间势能(MLIP)介绍

[1. 什么是MLIP?](#1. 什么是MLIP?)

[2. MLIP的核心要素](#2. MLIP的核心要素)

[3. MLIP的工作流程](#3. MLIP的工作流程)

[4. 优势与应用](#4. 优势与应用)

代码示例


机器学习原子间势能(MLIP)介绍

1. 什么是MLIP?

传统上,计算原子系统的势能面(描述原子核之间相互作用能量与原子位置的关系)主要有两种方法:

  • 第一性原理计算(如DFT):精度高,但计算成本极其昂贵,通常只能处理数百个原子、皮秒级的时间尺度。
  • 经典力场:计算速度快,可以处理数百万原子和纳秒级模拟,但精度较低,且依赖于预设的参数形式,难以描述键的形成和断裂。

MLIP 是第三种途径。它旨在结合两者的优点:

  • 目标 : 用一个机器学习模型来逼近第一性原理计算得到的精确势能面。
  • 核心思想: 通过DFT计算生成一个高质量的小型数据集(原子构型及其对应的能量、受力、应力),然后训练一个ML模型来学习从原子构型到总势能的复杂映射关系。一旦模型训练完成,它就能以接近经典力场的计算速度,提供接近DFT的精度。

可以将其理解为:MLIP是一个经过DFT数据"训练"的、极其精确的"经典力场"

2. MLIP的核心要素

一个典型的MLIP包含三个关键组成部分:

  • 描述符(Descriptor)

    • 问题: 机器学习模型不能直接处理原子坐标,因为模型的输出应该与系统的平移、旋转以及原子的索引顺序无关(这些是物理对称性)。
    • 解决方案 : 描述符将原子的直角坐标转换为一组对称性保持的特征值。它负责将原子环境(某个原子周围的局部几何结构)转化为一个数学上唯一的、连续的向量。
    • 常见描述符: Atom-Centered Symmetry Functions (ACSF), Smooth Overlap of Atomic Positions (SOAP), Moment Tensor Potentials (MTP) 等。
  • 回归模型(Regression Model)

    • 作用: 学习从描述符(输入)到原子能量(输出)的映射关系。
    • 常见模型 : 高斯过程(GAP)、神经网络(NNP,如ANI、PhysNet)、核方法等。目前,神经网络势能(NNP) 是最主流的方法。
  • 势能分解(Energy Decomposition)

    • 大多数MLIP将系统的总势能 E 分解为每个原子贡献的能量 ε_i 之和:
      E = Σ_i ε_i
    • ε_i 只取决于第 i 个原子的局部环境(即其周围一定截断半径内的其他原子)。这种分解使得模型可以处理不同大小的系统,并且计算量随原子数线性增长,这与经典力场一致。

3. MLIP的工作流程

  • 数据生成: 使用DFT对目标体系(如硅晶体、水分子团簇等)进行分子动力学采样或结构扰动,收集一系列具有代表性的原子构型。对于每个构型,计算其总能量、每个原子所受的力以及可能应力。
  • 训练: 将原子构型输入MLIP框架,模型会为每个原子计算其描述符。然后,通过优化模型参数,最小化模型预测的总能量/原子力与DFT参考值之间的差异。
  • 验证: 在独立的测试集上评估MLIP的精度,确保其能准确预测未见过的构型的能量和受力。
  • 部署: 将训练好的MLIP模型集成到标准的分子动力学(MD)软件(如LAMMPS, ASE)中,进行大规模、长时标的模拟。

4. 优势与应用

  • 优势
    • DFT级精度: 在训练数据覆盖的范围内,精度可与DFT相媲美。
    • 经典力场速度: 计算速度比DFT快数个数量级。
    • 转移性: 能够描述化学反应(键的形成/断裂)。
  • 应用
    • 复杂材料的力学性质。
    • 化学反应路径和催化机理。
    • 液体的结构和动力学。
    • 材料缺陷和相变。

代码示例

python 复制代码
from ase import units
from ase.build import molecule
from ase.md.verlet import VelocityVerlet
from ase.calculators.emt import EMT  # 使用ASE内置的简单势能模型
import numpy as np

# 创建水分子
atoms = molecule('H2O')
atoms.set_cell([10, 10, 10])
atoms.center()

# 设置计算器
atoms.set_calculator(EMT())

# 计算能量和受力
energy = atoms.get_potential_energy()
forces = atoms.get_forces()

print("体系: 水分子")
print(f"总势能: {energy:.3f} eV")  # 2.620 eV
print("原子受力 (eV/Å):")
for i, (atom, force) in enumerate(zip(atoms, forces)):
    print(f"  {atom.symbol}{i+1}: {force}")
    # O1: [0.         0.         7.73836531]
    # H2: [0.          5.14779422 - 3.86918266]
    # H3: [0. - 5.14779422 - 3.86918266]

# 运行MD模拟
print("\n运行分子动力学模拟...")
# 设置初始速度
atoms.set_velocities([[0.1, 0.0, 0.0], [-0.05, 0.0, 0.0], [-0.05, 0.0, 0.0]])

dyn = VelocityVerlet(atoms, timestep=0.5 * units.fs)

print("步数 | 势能 (eV) | 最大受力 (eV/Å)")
print("-" * 40)
for step in range(5):
    dyn.run(1)
    energy = atoms.get_potential_energy()
    max_force = np.max(np.abs(atoms.get_forces()))
    print(f"{step+1:4d} | {energy:9.3f} | {max_force:12.3f}")
    # 步数 | 势能(eV) | 最大受力(eV / Å)
    # ----------------------------------------
    # 1 | 2.520 | 7.097
    # 2 | 2.283 | 5.411
    # 3 | 2.041 | 3.224
    # 4 | 1.899 | 1.063
    # 5 | 1.891 | 0.761
相关推荐
sight-ai3 小时前
超越基础:SightAI 智能路由与多模型选择实战
人工智能·开源·大模型·api
OpenVINO 中文社区3 小时前
端侧AI创新挑战赛正式启动
人工智能
取酒鱼食--【余九】3 小时前
深度学习经典网络解析:ResNet
网络·人工智能·深度学习·神经网络·resnet·卷积神经网络·残差神经网络
搞科研的小刘选手4 小时前
【通信&网络安全主题】第六届计算机通信与网络安全国际学术会议(CCNS 2025)
大数据·人工智能·网络安全·vr·通信工程·网络技术·计算机工程
qq_314810814 小时前
三重变革:数字革命、地缘重构与生态危机
人工智能
武子康4 小时前
AI-调查研究-104-具身智能 从模型训练到机器人部署:ONNX、TensorRT、Triton全流程推理优化详解
人工智能·gpt·ai·性能优化·机器人·tensorflow·具身智能
灵犀物润5 小时前
机器宠物建模的第一步:基础形体搭建(Blocking)
人工智能·机器人·宠物
人机与认知实验室5 小时前
触摸大语言模型的边界
人工智能·深度学习·机器学习·语言模型·自然语言处理
神的孩子都在歌唱5 小时前
PostgreSQL 向量检索方式(pgvector)
数据库·人工智能·postgresql