摘要:近日微软研究院推出了一个叫Skala的深度学习泛函。据称,该泛函根据meta - GGA的输入,便可得到non - local functional的信息,从而达到化学精度(chemical accuracy)。
近日微软研究院推出了一个叫 Skala 的深度学习泛函。据称,该泛函根据meta - GGA的输入,便可得到non - local functional的信息,从而达到化学精度(chemical accuracy)。
Skala 比较聪明的创新点是,深度学习模型开一个旁路,通过粗糙格点通信实现non - local functional。
DFT的Jacob之梯与非局域泛函熟悉KSDFT的朋友都会知道Jacob之梯。承诺泛函包含更多密度、或者轨道信息便可以进入化学精度的极乐世界。
(出处: Sérgio F. Sousa, J. Phys. Chem. A 2007, 111, 42, 10439–10452 )
KSDFT最开始只有电子云密度信息(LDA),后来有了密度梯度(GGA),再后来交换项x融入了HF,有了杂化泛函。于是KSDFT爬梯活动一发不可收拾,后来关联项c掺入了MP2的电子相关,被称为双杂化。后来密度部分掺入动能密度(轨道Laplacian),被称为metaGGA。这些泛函都被称为local或者semi - local泛函,也就是说密度泛函只与附近密度有关,积分也就是一套格点加和积分。
于是很多人会想到,考虑全局密度信息也许能让KSDFT更准确。于是就有了non - local functional。这类泛函会有个积分核(kernel),双重积分计算起来耗时且复杂。
这些非局域泛函提出,大部分是为了解决色散问题(long - range correlation)。如果读者想体验,可以试试Van Voorhis等人提出的VV系列泛函。
微软团队最核心创新点就是试图用meta - GGA的密度信息(semi - local)得到nonlocal 的信息。
Skala的输入输出与学习目标Skala泛函形式:
输入就是meta - GGA的格点信息(7套格点),输出是 , 被称为增强因子(enhancement factor)。学习目标是反应能,最终目标是原子化能达到化学精度。
两步训练法训练过程设计也是很巧妙。解决了DFT格点训练的几个难题。
预训练阶段
模型被训练来预测反应能量,损失函数是一个直接的能量回归项。输入的密度使用的是近似泛函 B3LYP 所生成的,而训练标签 是从高精度的波函数计算中提取的,方法是用 B3LYP 的 KS 轨道计算出其他能量项,并将其从总能量中扣除。
微调阶段
为了解决第 3 个挑战,模型在训练时不再依赖固定的输入密度,而是使用它自己在自洽场(SCF)过程中动态生成的密度。这样可以减少模型在预训练时基于固定密度所得结果,与实际使用时基于自身生成密度所得到结果之间的精度差异。值得注意的是,这一过程不需要对 SCF 循环进行反向传播,从而避免了计算复杂性。微调期间,作者会在验证集上同时监控两项指标:一是上述提到的精度差距是否在缩小,二是模型自洽密度的准确性是否提升,具体通过与文献中提供的精确偶极矩对比来衡量。当模型生成的密度不再改进,而精度差距仍在减少时,微调过程便告一段落。
模型精度与效率GMTKN55训练集里面原子化能比较准。
计算速度跟同类比较也不慢。
开旁路用粗糙格点去构造非局域泛函,是个很有效的方法,从结果看,也实实在在解决了问题,但并不是真正的nonlocal泛函。
这篇论文如果要经过同行评议,一定会受到学术圈审稿人的挑战,因为他们的创造的“non - local”泛函并没有展示色散能(dispersion)的计算结果。就如之前所说,non - local functional的提出很大一部分就是为了解决色散能问题。色散能算不对,就很难说non - local functional了。他们说的non - local functional只是神经网络里面的格点通信,是一种为了合法化(legitimation)而套入物理概念,势必导致DFT方法开发者的震怒。当然,很多用户不会纠结这个问题,因为加上D3半经验矫正就好了。
他们首先公布了数据集。非常感谢他们的行为,因为我们也在训练一个模型,标记数据占用很多机时。
我觉得模型权重很快就会公布。而且他们代码写到了PySCF框架里面,很快就能惠及全社区。
数据集地址:
论文地址:
来源:寂寞的咖啡