通用机器学习模型
New: we highly recommend you to check out UAIQM that is our ultimate solution to the universal ML models.
MLatom支持广泛的基于通用机器学习(ML)的模型,包括机器学习势和混合机器学习增强量子力学(QM)方法。它们无需训练、开箱即用。下表列出了可用方法的特定教程链接:
方法 |
模型类型 |
MLatom中的关键词 |
支持的元素 |
梯度 |
Hessian |
电荷 |
自由基 |
激发态 |
---|---|---|---|---|---|---|---|---|
ML & ML/QM |
|
all elements |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
not available yet |
|
ML/QM |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
|
ML/QM |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
|
ML/QM |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
\(\checkmark\) |
|
ML/QM |
|
H, C, N, O |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
H, C, N, O |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
H, C, N, O |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
主族元素 |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
主族元素 |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
主族元素 |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
ML/QM |
|
主族元素 |
\(\times\) |
\(\times\) |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
|
MLP |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, C, N, O, F, S, Cl |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, C, N, O, F, S, Cl |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, C, N, O |
\(\checkmark\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I |
\(\checkmark\) |
\(\times\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
|
MLP |
|
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I |
\(\checkmark\) |
\(\times\) |
\(\checkmark\) |
\(\times\) |
\(\times\) |
在本教程中,我们首先介绍如何使用这些通用方法在MLatom中执行各种任务。然后我们将详细介绍每种方法。
使用通用机器学习模型
下面简要概述了如何在MLatom中使用通用ML模型:
单点能计算
对于单点能计算,MLatom的输入文件只需要3-5行,可使用上述指定的方法之一:
AIMNet2@b973c
xyzfile=sp.xyz
yestfile=energy.dat
其中 sp.xyz
是分子的XYZ构型,也可以直接定义:
AIMNet2@b973c
xyzfile='
2
H 0.000000 0.000000 0.363008
H 0.000000 0.000000 -0.363008
5
C 0.000000 0.000000 0.000000
H 0.627580 0.627580 0.627580
H -0.627580 -0.627580 0.627580
H 0.627580 -0.627580 -0.627580
H -0.627580 0.627580 -0.627580
'
yestfile=energy.dat
使用关键词 ygradxyzestfile
和 hessianestfile
可以在指定的文件中获得梯度和Hessian。
由于DM21函数集成在PySCF中,因此用户需要在输入文件中使用 method
和 qmprog
关键字在MLatom中 定义QM方法 。下面是一个使用DM21函数及6-31G*基组的输入文件示例:
method=DM21/6-31G*
qmprog=pyscf
xyzfile=sp.xyz
yestfile=energy.dat
Python API能够更灵活地在MLatom中选用方法。在我们的示例中,用户可以使用 mlatom.models.methods
模块定义方法,并指定上面提到的关键字,例如:
method = mlatom.models.methods(method='ANI-1xnr')
# method = mlatom.models.methods(method='DM21/6-31G*', program='pyscf')
这里我们提供了一个例子,使用ANI-1xnr计算能量、梯度和Hessian。
import mlatom as ml
# read molecule from .xyz file
molDB = ml.data.molecular_database.from_xyz_file('sp.xyz')
# define method
model = ml.models.methods(method='ANI-1xnr')
model.predict(
molecular_database=molDB,
calculate_energy=True,
calculate_energy_gradients=True,
calculate_hessian=True)
print(f'Energy in Hartree for molecule 0: {molDB[0].energy}')
print(f'Gradients in Hartree/Angstrom for molecule 1: {molDB[1].get_energy_gradients()}')
print(f'Hessian in Hartree/Angstrom^-2 for molecule 1: {molDB[1].hessian}')
有关使用MLatom进行单点计算的更多详细信息,请查看我们的 教程 。
几何优化和频率计算
几何优化是研究化学体系时的常见任务,对优化后的分子进行频率计算、获取热化学性质也是分析的重点。
在MLatom中使用输入文件进行几何优化,用户只需要在第一行使用 geomopt
选项,并指定要使用的方法、提供初始猜测:
geomopt # 1. requests geometry optimization
ANI-1ccx # 2. universal MLP
xyzfile=' # 3. initial geometry guess
9
C -1.691449880 -0.315985130 0.000000000
H -1.334777040 0.188413060 0.873651500
H -1.334777040 0.188413060 -0.873651500
H -2.761449880 -0.315971940 0.000000000
C -1.178134160 -1.767917280 0.000000000
H -1.534806620 -2.272315330 0.873651740
H -1.534807450 -2.272316160 -0.873650920
O 0.251865840 -1.767934180 -0.000001150
H 0.572301420 -2.672876720 0.000175020
'
optxyz=opt.xyz # 4. (optional) file with optimized geometry.
optprog=geometric # 5. request geometric optimizer
每优化一步都会被打印到输出文件中,在3.4.0及之后的版本可以通过 printall
和 printmin
关键字来控制。用户还可以通过关键字 dumpopttrajs
选择是否转储优化轨迹。
几何优化结束后,可以使用输入文件中的 freq
选项进行频率计算,如下所示:
freq # 1. requests frequency calculation
ANI-1ccx # 2. universal MLP
xyzfile=' # 3. optimized geometry
9
C -1.672571 -0.341122 -0.000001
H -1.307766 0.181713 0.885095
H -1.307762 0.181707 -0.885099
H -2.764560 -0.305014 -0.000003
C -1.188732 -1.771664 0.000009
H -1.559124 -2.298647 0.885998
H -1.559099 -2.298653 -0.885987
O 0.237878 -1.729915 0.000028
H 0.575701 -2.626896 0.000135
'
在输出文件中,用户可以找到振动分析,包括频率、每个简正模的约化质量和力常数,以及热化学计算的结果。用户可以下载本例中的 输出文件
。
分子动力学
机器学习势的优点之一是具有超快的速度。常用的DFT方法(如果不使用DM21)传播数千条轨迹需要几周的时间,而机器学习仅需几个小时。MLatom提供了一种简便的运行 MD 的方法,也提供了在化学反应模拟中流行的 准经典MD 。
如果在MLatom中使用输入文件,这里唯一的区别是关键字 method
。例如,如果想使用指向RKS B97-3c的AIMNet2来运行NVT系综中的氢分子动力学(使用Nosé–Hoover恒温器),则输入文件如下所示:
MD # 1. requests molecular dynamics
AIMNet2@b973c # 2. use AIMNet2@B97-3c method
initConditions=user-defined # 3. use user-defined initial conditions
initXYZ=h2_init.xyz # 4. file with initial geometry; Unit: Angstrom
initVXYZ=h2_init.vxyz # 5. file with initial velocity; Unit: Angstrom/fs
dt=0.3 # 6. time step; Unit: fs
trun=30 # 7. total time; Unit: fs
thermostat=Nose-Hoover # 8. use Nose-Hoover thermostat
ensemble=NVT # 9. NVT ensemble
temperature=300 # 10. Run MD at 300 Kelvin
初始的XYZ坐标和速度可在此处下载:h2_init.xyz
, h2_init.vxyz
下面我们还提供了使用Python API运行相同任务的代码片段。与之前一样,只有定义所使用方法的代码会被更改。
import mlatom as ml
# Use user-defined initial conditions
mol = ml.data.molecule.from_xyz_file('h2_init.xyz')
init_cond_db = ml.generate_initial_conditions(molecule=mol,
generation_method='user-defined',
file_with_initial_xyz_coordinates='h2_init.xyz',
file_with_initial_xyz_velocities='h2_init.vxyz')
init_mol = init_cond_db[0]
# Initializing model
model = ml.models.methods(method='AIMNet2@b973c')
# Initializing thermostat
nose_hoover = ml.md.Nose_Hoover_thermostat(temperature=300, molecule=init_mol)
# Run molecular dynamics
dyn = ml.md(model=model,
molecule_with_initial_conditions=init_mol,
thermostat=nose_hoover,
ensemble='NVT',
time_step=0.3,
maximum_propagation_time=30.0)
# Dump trajectory
traj = dyn.molecular_trajectory
traj.dump(filename='traj', format='plain_text')
traj.dump(filename='traj.h5', format='h5md')
print(f"Number of steps in the trajectory: {len(traj.steps)}")
AIQM1
AIQM1(人工智能-量子力学方法1)是一种通用方法,对于基态闭壳层物种,其计算精度接近于黄金标准的耦合簇量子力学方法,同时计算速度很快,与低水平半经验量子力学方法相近。此外,AIQM1也适用于带电物种、自由基物种以及激发态的计算。详情请参阅 AIQM1论文 。请将本文与其他必要的 引文 一起引用:
Peikun Zheng, Roman Zubatyuk, Wei Wu, Olexandr Isayev, Pavlo O. Dral. Artificial Intelligence-Enhanced Quantum Chemical Method with Broad Applicability. Nat. Commun. 2021, 12, 7022, DOI: 10.1038/s41467-021-27340-2.
优势: 对于闭壳层分子,AIQM1可用于精确、快速的能量计算和几何优化。
限制: 此方法目前仅可用于计算包含H, C, N, O元素的化合物。
可查看 详细教程
DM21
DM21是DeepMind在Science上发表的一种ML增强的DFT方法(使用该方法时请引用 此文 )。可按照 GitHub页面 安装。DM21有四种变体(DM21 - default, DM21m, DM21mc, DM21mu),详细信息请参见GitHub页面。
使用DM21及其变体类似于使用常见的DFT泛函。用户需要指定要使用的泛函和基组。值得注意的是,DM21并不稳定,不一定会收敛。预测的时间比之前的方法要长,因为默认情况下,在MLatom中它将从相对便宜的B3LYP泛函开始,以使SCF更快。在目前的实现中,它只能用于单点计算(接口程序不提供梯度或Hessian,我们还没有实现该方法的数值导数)。
输入文件示例:
method=DM21/6-31G*
qmprog=pyscf
xyzfile='
2
H 0.000000 0.000000 0.363008
H 0.000000 0.000000 -0.363008
5
C 0.000000 0.000000 0.000000
H 0.627580 0.627580 0.627580
H -0.627580 -0.627580 0.627580
H 0.627580 -0.627580 -0.627580
H -0.627580 0.627580 -0.627580
'
yestfile=energy.dat
在Pyhon中:
import mlatom as ml
# read molecule from .xyz file
molDB = ml.data.molecular_database.from_xyz_file('sp.xyz')
# define method
method = mlatom.models.methods(method='DM21/6-31G*', program='pyscf')
method.predict(
molecular_database=molDB,
calculate_energy=True,
calculate_energy_gradients=True,
calculate_hessian=True)
print(f'Energy in Hartree for molecule 0: {molDB[0].energy}')
print(f'Gradients in Hartree/Angstrom for molecule 1: {molDB[1].get_energy_gradients()}')
print(f'Hessian in Hartree/Angstrom^-2 for molecule 1: {molDB[1].hessian}'')
ANI模型库
MLatom包含 TorchANI 的 ANI模型库 中的3个公共模型: ANI-1x, ANI-1ccx 和 ANI-2x 。此外,MLatom还支持使用 D4色散校正方法ANI-1x-D4和ANI-2x-D4 。下面我们提供了在MLatom中使用这些方法时的注意事项。
ANI-1x和ANI-2x在DFT水平上进行训练
ANI-1ccx具有指向CCSD(T)*/CBS的最高精度
ANI-1ccx和ANI-1x仅限于C H N O元素,而ANI-2x可用于C H N O F Cl S元素
在ANI-1x-D4和ANI-2x-D4中的D4色散校正对应于ωB97X泛函
这些方法仅限于预测基态中性闭壳层化合物的能量和力
MLatom将根据神经网络(NN)预测之间的标准差报告这些方法计算的不确定性
输入文件示例:
ANI-1ccx
geomopt
xyzfile='
2
H 0.000000 0.000000 0.363008
H 0.000000 0.000000 -0.363008
5
C 0.000000 0.000000 0.000000
H 0.627580 0.627580 0.627580
H -0.627580 -0.627580 0.627580
H 0.627580 -0.627580 -0.627580
H -0.627580 0.627580 -0.627580
'
在Pyhon中:
import mlatom as ml
# read molecule from .xyz file
molDB = ml.data.molecular_database.from_xyz_file('sp.xyz')
# define method
method = mlatom.models.methods(method='ANI-1ccx')
method.predict(
molecular_database=molDB,
calculate_energy=True,
calculate_energy_gradients=True,
calculate_hessian=True)
print(f'Energy in Hartree for molecule 0: {molDB[0].energy}')
print(f'Gradients in Hartree/Angstrom for molecule 1: {molDB[1].get_energy_gradients()}')
print(f'Hessian in Hartree/Angstrom^-2 for molecule 1: {molDB[1].hessian})
活性ANI:ANI-1xnr
ANI-1xnr是一种通用的反应性ANI型神经网络,在凝聚态反应数据上被训练,能够处理含有C、H、N、O元素的真实反应体系,参见 Nature Chemistry出版物 。该实现从 ani-1xnr GitHub存储库 连接到模型。
备注
任何模型第一次被实例化时,这些模型将自动从ani-model-zoo存储库下载到本地文件夹 ./local
。用户可以选择事先下载。
输入类似于 其他ANI模型
AIMNet2
AIMNet2 旨在解决ANI处理非局域相互作用和开壳层带电种能力较差的问题。有两个针对B97-3c和ωB97M-D3精度的预训练模型(用户需要使用关键词 aimnet2@b973c
或 aimnet2@wb97m-d3
)。适用于H、B、C、N、O、F、Si、P、S、Cl、As、Se、Br、I等14种元素。目前MLatom不支持Hessian。
备注
任何模型第一次被实例化时,模型将自动从 AIMNet2 GitHub存储库 下载到本地文件夹 ./local
。用户可以选择事先下载。
输入文件示例:
AIMNet2@wb97m-d3
geomopt
xyzfile='
2
H 0.000000 0.000000 0.363008
H 0.000000 0.000000 -0.363008
5
C 0.000000 0.000000 0.000000
H 0.627580 0.627580 0.627580
H -0.627580 -0.627580 0.627580
H 0.627580 -0.627580 -0.627580
H -0.627580 0.627580 -0.627580
'
在Pyhon中:
import mlatom as ml
# read molecule from .xyz file
molDB = ml.data.molecular_database.from_xyz_file('sp.xyz')
# define method
method = mlatom.models.methods(method='AIMNet2@wb97m-d3')
method.predict(
molecular_database=molDB,
calculate_energy=True,
calculate_energy_gradients=True,
calculate_hessian=True)
print(f'Energy in Hartree for molecule 0: {molDB[0].energy}')
print(f'Gradients in Hartree/Angstrom for molecule 1: {molDB[1].get_energy_gradients()}')
print(f'Hessian in Hartree/Angstrom^-2 for molecule 1: {molDB[1].hessian})