DeepMind新突破!首次用深度学习从第一性原理计算分子能量

Stella981
• 阅读 862

DeepMind新突破!首次用深度学习从第一性原理计算分子能量

来源:AI科技评论

编译 | 青暮

DeepMind发表了一项新研究,展示了深度学习如何帮助解决现实系统中的量子力学基本方程问题,相关论文发表在物理学期刊《Physical Review Research》,代码也已经开源。

这种新的神经网络架构叫做Fermionic神经网络或FermiNet,该架构适合对大量电子集合体(化学键的基本组成部分)的量子态进行建模。

DeepMind表示,FermiNet是第一个利用深度学习来从第一性原理计算原子和分子能量的尝试,并拥有足够的精确度。

他们还计划将FermiNet用于蛋白质折叠、玻璃态动力学、晶格量子色动力学等研究项目,以将这一愿景变为现实。

论文地址:https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.033429

代码地址:https://github.com/deepmind/ferminet

1

FermiNet

量子力学拥有大量的计算工具,但是构建有效的表示仍然是个难题。

即使是最近似的方法,量子化学计算最多只能求解包含数万个电子的模型,而经典的(即非量子的)化学计算技术(例如分子动力学)可以处理数百万个原子。

经典系统的状态可以用很简单的方式描述,只需要知道每个粒子的位置和动量。而表示量子系统的状态则更具挑战性,因为电子的位置是不确定的,必须给出其概率分布。

波函数可用于编码电子的位置分布,并且波函数的平方给出了其概率值。要描述所有可能的位置,基本是不可能的。例如,假设有每个维度上具有100个点的网格,则硅原子的可能位置分布数将大于宇宙中的原子数。

DeepMind新突破!首次用深度学习从第一性原理计算分子能量 图1:不同的原子轨道波函数图像,表面代表出找到电子的高概率区域。在蓝色区域,波函数为正,而在紫色区域,波函数为负。

这正是DeepMind认为深度神经网络可以提供帮助的地方。

在过去的几年中,神经网络在表示复杂的高维概率分布方面取得了巨大的进步。现在,神经网络已经可以高效、可扩展地训练。

DeepMind推测,鉴于神经网络已经证明了在解决人工智能问题中拟合高维函数方面的能力,也许它们也可以用来表示量子波函数。

这个想法不是DeepMind第一个提出的,例如Giuseppe Carleo和Matthias Troyer等曾经在Science上发表论文“Solving the quantum many-body problem with artificial neural networks”,表明使用现代深度学习解决理想的量子问题是可行的。

如今,DeepMind想使用深度学习来解决化学和凝聚态物理中更实际的问题,这意味着在计算中会包括电子。

电子必须遵守泡利不相容原理,这意味着任意两个电子不能同时处于相同的状态。因为电子是费米子,费米子包括了质子、中子、夸克、中微子等,它们都遵守泡利不相容原理。交换两个电子会使得总波函数乘以-1,如果两个电子的波函数是全同的,则总波函数将为0。

这意味着我们必须开发一种其输入是反对称的新型神经网络,DeepMind将其称为Fermionic神经网络或FermiNet。

在大多数量子化学方法中,使用行列式引入反对称性。矩阵的行列式具有以下属性:如果交换两行,则输出将乘以-1,就像费米子的波函数一样。

因此,对于一系列单电子函数,可以将其转换成一个矩阵。该矩阵的行列式就是适当的反对称波函数。

这种方法的主要局限性在于所得到的函数(称为Slater行列式)不是很通用。实际系统的波函数通常要复杂得多。

典型的改进方法是采用Slater行列式的大规模线性组合(有时甚至数百万个),并基于电子对添加一些简单的校正。即使那样,这仍不足以精确地计算能量。

DeepMind新突破!首次用深度学习从第一性原理计算分子能量 图2:Slater行列式展示,每个曲线都是图1中的某个轨道的波函数。当电子1和2交换位置时,Slater行列式的其中两行交换,波函数乘以-1,从而保证遵守泡利不相容原理。

与基函数的线性组合相比,深度神经网络在表示复杂函数上通常效率更高。

在FermiNet中,这是通过使行列式中的每个函数作为所有电子的函数来实现的,这远远超出仅使用单电子和双电子函数的方法。

FermiNet对每个电子都有单独的信息流。如果这些流之间没有任何交互,网络的表示能力将不会超过常规的Slater行列式。

为了解决这个问题,DeepMind将来自网络每一层所有流的信息平均化,然后将此信息传递给下一层的每一流。

这样,这些流具有正确的对称性,从而可以创建反对称函数。这类似于图神经网络在每一层汇总信息的方式。

与Slater行列式不同,FermiNets是通用函数逼近器(至少在神经网络层变得足够宽的极限内)。

这意味着,如果可以正确地训练这些网络,它们将能够几乎精确地拟合薛定谔方程的解。

DeepMind新突破!首次用深度学习从第一性原理计算分子能量 图3:FermiNets图示。网络函数的单个流(蓝色、紫色或粉红色)非常类似于常规轨道。FermiNets引入了流之间的对称相互作用,使得波函数更具一般性和更具表达能力。就像常规的行列式一样,将两个电子位置交换仍将导致行列式交换两个行,并将总波函数乘以-1。

我们通过最小化系统的能量来拟合FermiNet。为了精确地做到这一点,我们需要评估所有可能的电子构型下的波函数,因此不得不进行近似。

我们随机选择电子构型,在每个电子排列中局部地估计能量,将每个排列的贡献相加,并将其(而不是真实能量)最小化。

这称为蒙特卡洛方法,因为它有点像赌徒一遍又一遍地掷骰子。虽然是近似值,但如果我们需要使其更精确,则可以随时再次掷骰子。

由于波函数平方代表可以观察到的任何位置的粒子排列,因此最方便的是从波函数本身生成样本(本质上是模拟观察粒子的行为)。

虽然大多数神经网络都是从一些外部数据中训练出来的,但在DeepMind的这个案例中,用于训练神经网络的输入是由神经网络本身生成的。这意味着我们不需要任何训练数据,除了电子在的原子核周围的位置。

上述基本概念被称为变分量子蒙特卡洛(variational quantum Monte Carlo,VMC),自20世纪60年代就出现了,通常被认为是一种廉价但不太精确的计算系统能量的方法。

通过用FermiNet替换基于Slater行列式的简单波动函数,DeepMind极大地提高了该方法在多个系统上的精度。

DeepMind新突破!首次用深度学习从第一性原理计算分子能量

图4:从FermiNet采样的模拟电子围绕双环戊烷分子的运动。

为了确保FermiNet确实代表了SOTA,DeepMind首先研究了简单且经过充分研究的系统,例如元素周期表第一行(氢到氖)中的原子。这些系统很小(少于10个电子)且足够简单,可以用最准确的方法进行处理。

FermiNet的性能远胜于对应的VMC计算(相对于指数缩放计算,通常可以将误差减少一半或更多)。

在更大的系统上,指数缩放方法变得棘手,因此DeepMind将“耦合簇”方法用作基准。该方法对处于稳定构型的分子效果很好,但是当键被拉伸或断裂时会很费力(这对于理解化学反应至关重要)。

尽管耦合聚类的缩放比指数缩放好得多,但它只能用于中等大小的分子。DeepMind将FermiNet逐渐应用于更大的分子,从氢化锂开始,一直到双环丁烷(它具有30个电子)。

在最小的分子上,FermiNet惊人地捕获了耦合簇能量和单个Slater行列式获得的能量之差的99.8%。在双环丁烷上,FermiNet仍捕获了97%或更多的相关能量。

DeepMind新突破!首次用深度学习从第一性原理计算分子能量 图5:FermiNet在分子上捕获的相关能量的分数的图示。紫色条表示99%的相关能量。从左至右:氢化锂、氮、乙烯、臭氧、乙醇和双环丁烷。

尽管耦合簇方法对于稳定的分子非常有效,但计算化学的真正前沿是理解分子如何拉伸、扭曲和断裂。

在那里,耦合簇方法经常会遇到困难,因此我们必须与尽可能多的基准进行比较,以确保获得一致的答案。

DeepMind研究了两个基准拉伸系统——氮分子(N2)和具有10个原子的氢链(H10)。氮是一个特别具有挑战性的分子键,因为每个氮原子贡献3个电子。同时,氢链对于了解电子在材料中的行为方式(例如预测材料是否会导电)很重要。

在这两个系统上,耦合簇在平衡状态下都表现良好,但是随着键的拉伸,问题就出现了。常规的VMC计算结果总体而言效果不佳。但是,无论键长如何,FermiNet都是研究的最佳方法之一。

2

结论

DeepMind表示,FermiNet是深度学习与计算量子化学融合的伟大事物的开始。到目前为止,他们研究的大多数系统都经过了充分的研究和很好的理解。

DeepMind希望FermiNet将激发大量的扩展工作,并为新的甚至更好的网络体系结构激发许多想法。

自从去年DeepMind首次将工作放到arXiv以来,其他小组已经分享了他们将深度学习应用于多电子问题的第一性原理计算的方法。DeepMind表示,他们期待将FermiNet应用于材料科学和凝聚态物理中的难题。

原文链接:https://www.deepmind.com/blog/article/FermiNet

未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。

如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。__扫描以下二维码或点击本文左下角“阅读原文”

DeepMind新突破!首次用深度学习从第一性原理计算分子能量

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反
Stella981 Stella981
2年前
ClickHouse大数据领域企业级应用实践和探索总结
点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源!(https://oscimg.oschina.net/oscnet/bb00e5f54a164cb9827f1dbccdf87443.jpg)!(https://oscimg.oschina.net/oscnet/dc8da835ff1b4
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这