新研究揭示量子蒙特卡洛超越神经网络在突破限制方面的潜力,Nature子刊详述最新进展
时隔四个月,ByteDance Research 与北京大学物理学院陈基课题组又一合作工作登上国际顶级刊物 Nature Communications:论文《 Towards the ground state of molecules via diffusion Monte Carlo on neural networks 》将神经网络与扩散蒙特卡洛方法结合,大幅提升神经网络方法在量子化学相关任务上的计算精度、效率以及体系规模,成为最新 SOTA。
-
论文链接:
https://www.nature.com/articles/s41467-023-37609-3 -
代码地址:
https://github.com/bytedance/jaqmc
简介
作者将基于神经网络的试探波函数运用于固定节点面的扩散蒙特卡洛方法 (Diffusion Monte Carlo, or DMC) ,用以精确计算具有不同电子特性的原子以及分子系统。
扩散蒙特卡洛方法是量子化学领域精确计算分子和材料基态能量的常用方法之一。通过与扩散蒙特卡洛方法结合,作者显著提高了量子化学中神经网络 SOTA 方法的计算精度与效率。此外作者还提出了一种基于经验线性关系的外推方法,大幅改善了分子结合能计算。总体而言,该计算框架作为求解量子多体问题的高精度方法,为化学分子性质的深入理解提供了更强大的工具。
基于神经网络的量子蒙特卡洛方法
2018 年以来,多个研究小组将神经网络运用于变分蒙特卡洛方法 (Variational Monte Carlo, or VMC) 中 [1,2,3],借助神经网络强大的表达能力,得到了更为精确的分子基态能量。本工作于 2022 年公开时,基于神经网络的变分蒙特卡洛方法中的 SOTA 工作是 DeepMind 于 2019 年提出的 FermiNet [2],能够在规模较小的体系上得到非常精确的结果。然而变分蒙特卡洛方法的精度受限于神经网络的表达能力,在处理较大体系时会有越来越明显的精度问题。此外该类方法在处理较大体系时收敛非常缓慢,对计算资源提出了巨大挑战。
扩散蒙特卡洛方法作为量子化学领域的经典高精度算法之一,具有精度高、可并行性好、适合进行大规模计算等良好的特性。此外扩散蒙特卡洛可以突破神经网络的表达能力限制,利用投影算法超越变分蒙特卡洛方法的精度。
本工作中,作者将 SOTA 的神经网络 (FermiNet) 作为试探波函数与扩散蒙特卡洛方法结合。新的计算方法相比于 FermiNet 显著提升了精度并减少了所需的计算步数。本工作中所设计并实现的扩散蒙特卡洛软件具有神经网络友好、GPU 友好、并行友好的特点,可以与广泛的神经网络波函数结合,自动提升其精度与效率。
计算结果
1. 原子
使用神经网络对大型分子体系进行量子蒙特卡洛计算时,由于算力限制,所能使用的神经网络的表达能力也会受到一定限制。为了模拟这一场景,作者使用了仅仅两层的神经网络来研究第二、三排的原子。计算结果显示随着体系变大,变分蒙特卡洛方法的精度愈来愈差,而扩散蒙特卡洛方法所带来的精度提升也愈来愈明显。
2. 分子
作者在一系列分子体系上也验证了基于神经网络的扩散蒙特卡洛方法的有效性,包括氮气分子,环丁二烯以及双水分子。在所测试的体系上均观察到了明显的计算精度提升。
3. 苯环及双苯环
本工作公开前,量子化学领域中基于变分蒙特卡洛的神经网络波函数方法只处理过 30 电子以内的小型分子。本工作首次将神经网络波函数方法应用于 42~84 个电子的体系,即苯环与双苯环。计算结果显示,扩散蒙特卡洛方法在精度上显著优于变分蒙特卡洛方法,同时可以用少一个数量级的计算步数达到相同或更优的精度。
4. 线性关系及外推方法
作者在考察神经网络的不同训练阶段所对应的能量时,在很多体系上均发现变分蒙特卡洛与扩散蒙特卡洛的计算结果具有经验性的线性关系(下左图)。使用该线性关系对双苯环的解离能计算进行外推,显著提升了计算精度,得到了吻合于化学实验的结果(下右图)。
结语与展望
本工作表明,基于神经网络的扩散蒙特卡洛方法在精度与效率上均优于变分蒙特卡洛方法。作者开源的扩散蒙特卡洛代码可以与量子化学领域不断推陈出新的神经网络 [4,5] 快速结合,实现对研究社区的赋能。此外扩散蒙特卡洛方法也可以与处理真实固体的周期性神经网络 [6]、带赝势的神经网络 [7] 等一系列方法结合,在相应任务上提升计算效果。
以上是新研究揭示量子蒙特卡洛超越神经网络在突破限制方面的潜力,Nature子刊详述最新进展的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

通用矩阵乘法(GeneralMatrixMultiplication,GEMM)是许多应用程序和算法中至关重要的一部分,也是评估计算机硬件性能的重要指标之一。通过深入研究和优化GEMM的实现,可以帮助我们更好地理解高性能计算以及软硬件系统之间的关系。在计算机科学中,对GEMM进行有效的优化可以提高计算速度并节省资源,这对于提高计算机系统的整体性能至关重要。深入了解GEMM的工作原理和优化方法,有助于我们更好地利用现代计算硬件的潜力,并为各种复杂计算任务提供更高效的解决方案。通过对GEMM性能的优

WORD是一个强大的文字处理器,我们可以利用word进行各种文字的编辑,在Excel表格当中,我们已经熟练掌握了加减乘数的运算方法,那么如果需要在Word表格里,计算数值的加减乘数,该如何操作呢,难道只能用计算器计算吗?答案当然是否定的,WORD也同样可以完成。今天小编就来教大家如何在Word文档的表格当中,运用公式计算加减乘除等基本运算,一起来学习一下吧。那么,今天就让小编具体演示一下,WORD文档怎么计算加减乘除?第一步:打开一个WORD,单击工具栏【插入】下的【表格】,在下拉菜单当中插入一

如何使用Python的count()函数计算列表中某个元素的数量,需要具体代码示例Python作为一种强大且易学的编程语言,提供了许多内置函数来处理不同的数据结构。其中之一就是count()函数,它可以用来计算列表中某个元素的数量。在本文中,我们将详细介绍如何使用count()函数,并提供具体的代码示例。count()函数是Python的内置函数,用于计算某

给定两个字符串str_1和str_2。目标是使用递归过程计算字符串str1中子字符串str2的出现次数。递归函数是在其定义中调用自身的函数。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出现次数为-3让我们通过示例来理解。例如输入str1="TPisTPareTPamTP",str2="TP";输出Countofoccurrencesofasubstringrecursi

在C#中,有一个Math类库,其中包含许多数学函数。其中包括计算幂次方的函数Math.Pow,它可以帮助我们计算指定数的幂。Math.Pow函数的用法非常简单,只需要指定底数和指数就可以了。其语法如下:Math.Pow(base,exponent);其中base表示底数,exponent表示指数。该函数返回double类型的结果,即幂次方的计算结果。下面让

简介使用行列式计算三角形面积的Java程序是一个简洁高效的程序,可以根据给定三个顶点的坐标来计算三角形的面积。该程序对于学习或使用几何的任何人都非常有用,因为它演示了如何在Java中使用基本算术和代数计算,以及如何使用Scanner类读取用户输入。程序提示用户输入三角形三个点的坐标,然后将其读入并用于计算坐标矩阵的行列式。使用行列式的绝对值来确保面积始终为正,然后使用公式计算三角形的面积并显示给用户。该程序可以轻松修改以接受不同格式的输入或执行附加计算,使其成为几何计算的多功能工具。决定因素行列

一种受欢迎的通用编程语言是Python。它被应用于各种行业,包括桌面应用程序、网页开发和机器学习。幸运的是,Python具有简单易懂的语法,适合初学者使用。在本文中,我们将使用Python来计算矩阵的右对角线之和。什么是矩阵?在数学中,我们使用一个矩形排列或矩阵,用于描述一个数学对象或其属性,它是一个包含数字、符号或表达式的矩形数组或表格,这些数字、符号或表达式按行和列排列。例如−234512367574因此,这是一个有3行4列的矩阵,表示为3*4矩阵。现在,矩阵中有两条对角线,即主对角线和次对

我们将演示如何使用Java程序计算总分和百分比。总分是指所有可用分数的总和,而术语百分比是指计算分数除以总分并乘以所得的数字100。percentage_of_marks=(obtained_marks/total_marks)×100示例1这是一个Java程序,用于演示如何计算总分和百分比。//JavaProgramtodemonstratehowisTotalmarksandPercentagescalculatedimportjava.io.*;publicclassTotalMarks_
