图神经网络与分子表征:2. SchNet

news2024/11/25 2:47:08

SchNet 在2018年的面世彻底引爆了神经网络势函数(NNP, Neural Network Potential)领域,虽然说NNP的开山鼻祖还要更早,但均未像 SchNet 这样真正被物理化学家接受,引发变革。

这篇博客浅浅记录下自己阅读SchNet代码的心得。2023年的今天,网上有关SchNet的解读已经出现了很多,也有很多论文从更高的维度审视这一框架,有很多优秀的代码框架对SchNet代码进行了重构。
本文就按照自己的思路去解析这篇文献。主要参考:

DIG框架中的代码:选择DIG的二创,是因为DIG代码写得清晰,套用了SphereNet的架构,更容易理解。

GNN Expressive:这篇论文和论文附带的幻灯片对理解SchNet有很大帮助。

SchNet JCP原文:看看作者是怎么讲故事的。

GNN 语境下的 SchNet

SchNet 是图神经网络,势函数和力场中的哪一种?这个目前框架很混乱。
在那篇著名的 4 generation of Neural Network Potential 论文里,SchNet 是高维势函数(HDNNP)
在近期的 Forces are not enough 里,SchNet 被叫做机器学习力场(MLFF)
在 GNN Expressive 这篇论文里,SchNet 又变成了 GNN。

按笔者个人理解,力场一般指:相对传统的分子动力学模拟。力场二字源于传统的二体,三体力场函数的拟合。常见于分子体系,溶液体系的分子动力学模拟(MD)。体系中原子坐标给定,求解原子的受力,是一个动力学方程。

势函数脱胎于材料,金属,半导体领域的密度泛函理论计算,源头可以追溯到均匀电子气,体系中各原子坐标给定,求解整个体系的基态能量,是一个能量方程。

读者不必纠结具体的名词,我们暂且将 SchNet 当做一个 GNN,那么 GNN 的核心流程,前文已经讲过了,这里再放一下 GNN 的整体流程:
在这里插入图片描述
输入分子图在经过多次的信息聚合和迭代之后(message passing),变成了一张新的图,最后再使用这张图上的信息去对目标性质做预测。

在 DIG 框架中,SchNet 被改写成了一个典型的 GNN 框架,其流程与上图大致对应:
在这里插入图片描述
即,SchNet 是一个以点集为核心的框架:

  1. 先根据每个原子的元素种类去对该原子做一个映射,这一映射可以被看做是点的初始特征向量。
  2. 随后经过巧妙设计的 message passing layers,该特征向量聚合了周围节点的诸多信息,整张图获得了迭代更新。如何去设计 message passing layers 是整个 SchNet 模型的重中之重。
  3. 基于更新后的图对目标性质做预测,这一操作在 AI 领域叫 Pooling ,在SchNetPack 中叫 Output layer,就是一个简单的前向传递。

下面结合代码看一下各个步骤。

DIG 框架下的代码

DIG 改写后的 SchNet 代码仅有168行,非常适合入门阅读!
我们直接跳到主类的 forward 阶段:
在这里插入图片描述
可以看到,经过改写后的框架还是清晰易懂的,能够跟原文献的几个模块一一对应。
值得注意的是,此处的 update_e 在原文里是 interaction 的意思,在传统的 GNN 框架中就是 message passing.
此外,对元素的 embedding 也是参照了 NLP 的做法,初始化了一个 look up table ,这样可以保证,同样元素的原子初始化向量是一致的。
最后,整张图去进行预测时,也仅仅是保留的点的 feature (这套代码里的edge可以说是聊胜于无,就当成 message 看就行)

OK,下面我们重点看一下 message passing 是如何实现的。
在这里插入图片描述
从 forward 主程序中可以看到,message passing 是由一个 for 循环构成的。在这个 for 循环下面,第一句话是构建 message ,第二句话是 节点feature的迭代。
其实与本专栏第一篇文章中提到的点集上的消息传递框架类似,某一节点根据其邻居节点的 feature 进行更新。这种方式是最简单的消息传递模型。
在 GNN expressive 这篇论文里,SchNet 框架如下所示:
在这里插入图片描述
每个原子(i)有 Ni 个邻居(邻居指在截断半径内),每个邻居在迭代时会创造一个 message ,节点的 feature 在融合诸多 message 后进行下一次的迭代。
SchNet 模型被认为是一个 二体的 不变模型,其原因在于,其每次迭代只涉及 1-hop 的邻居,而且使用不变的距离信息(标量)。
在这里插入图片描述
我们继续看原文中提到的 interaction 模块,其中的 filter generator 在代码中的 update_e 模块。
该模块的物理意义是,邻居原子对目标原子的影响力会随着距离的增大而衰减(C矩阵)。同时,邻居原子对目标原子的影响是一个距离的函数,而且该函数是可学的一个MLP模块(self.mlp(dist_emb))
在这里插入图片描述
在理解了过滤矩阵后,我们再回头看 interaction 模块。其实这里 DIG 的代码和图中所示不太匹配,这里我们需要将 update_e 和 update_v 两个模块的 forward 连起来看。
在这里插入图片描述
两句话连起来对应一个 interaction 模块这一点应该很好理解。整个 interaction 的输入是 vertex embedding + distance embedding。
我们从下往上看,首先,比较明显的是 vertex update 含有一个短接,这一短接在 update_v 的 return 中是可以对上的。那这个 out 再往上过了一个线性层+激活层+线性层,这也分别可以和 56,57,58对应,55 行则对应message的聚合,所以我前面一直强调 message 就是DIG框架中的e。

总体来看,迭代后的节点向量如下:

V i ′ = V i + l i n 1 _ s s p _ l i n 2 ( ∑ j ∈ N m s g j ) V_i'=V_i+lin_1\_ssp\_lin_2(\sum_{j\in \mathcal{N} }^{} msg_j) Vi=Vi+lin1_ssp_lin2(jNmsgj)

message用公式表示如下:
(来自邻居 j 的 message )
m s g j = l i n ( V j ) ∗ f i l t e r _ g e n ( d i s , d i s _ e m b ) msg_j=lin(V_j)*filter\_gen(dis, dis\_emb) msgj=lin(Vj)filter_gen(dis,dis_emb)

最后就剩下最开始的一块了。filter generator 是一个相对独立的小块儿,只与距离有关,对应31,32行,前文以提过。
有了 filter 以后,我们看 33 行。33行的线性层显然是 cfconv 层上面的 atom-wise 64
cfconv 层则对应 34 行,即,卷积核与邻居embedding的乘积。

至此,SchNet 模型中的核心代码已经全部能跟文献对应了。

一些感悟

下面我说一下自己的感悟。

我们深入学习一个模型,在读文献、看代码时,首先要看到整个模型大的模块。本例中,我首先将 SchNet 套到了一个 GNN 的框架里,然后用消息传递去近似原文中晦涩难懂的 interaction 模块。其次,我们要将文献中重点提及的模块跟代码进行一个映射,希望大家不要害怕扒代码。本例中,比较核心的代码加起来不到20句,在多读多思考的情况下,还是可以慢慢理解的(本人看了一天啊啊啊啊!!)。最后是一些 technical 的感悟,我们可以先把代码跑起来,然后在小batch size,debug 模式下进行观察,这将有利于从数据结构的角度理解算法模型!

希望大家看完这篇文章有所收获!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何五分钟设计制作自己的蛋糕店小程序

在现如今的互联网时代,小程序已成为企业推广和销售的重要利器。对于蛋糕店来说,搭建一个小程序可以为其带来更多的品牌曝光和销售渠道。下面,我们将以乔拓云平台为例,来教你如何从零开始搭建自己的蛋糕店小程序。 首先&#xff0c…

Mybatis分页及特殊字符

目录 MyBatis分页 特殊字符 接着上篇博客接下来我们要写的是MyBatis分页 MyBatis分页 首先我们导入pom依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version>…

workbench连接MySQL8.0错误 bad conversion 外部组件 异常

阿里云搭建MySQL实用的版本是8.0 本地安装的版本是: workbench 6.3 需要升级到&#xff1a; workbench 8.0 https://dev.mysql.com/downloads/workbench/

基于 SVG 的图形交互方案实践

不知道从什么时候起&#xff0c;人们开始喜欢上数字大屏这种“花里胡哨”的东西&#xff0c;仿佛只要用上“科技蓝”这样神奇的色调&#xff0c;就可以让一家公司焕然一新&#xff0c;瞬间变得科技感满满。不管数字大屏的实际意义&#xff0c;是用来帮助企业监控和决策&#xf…

压力传感器丨定义、原理、应用

压力传感器是工业实践中常用的设备&#xff0c;作为自控系统的重要组成部分&#xff0c;压力传感器能够用于工业过程中压力参数的测量和控制&#xff0c;常用于高温、低压、腐蚀、振动等环境。 压力传感器的原理是基于压力感测技术&#xff0c;能够将被测压力转化为4G信号&…

开学日临近,送你一份VR校园攻略

开学日临近&#xff0c;各位萌新是否还在心怀激荡&#xff0c;无限憧憬着美丽校园呢&#xff1f;可能有一部分大学已经开学了&#xff0c;那么刚入校园的你们&#xff0c;是不是也想尽快熟悉未来学习、生活的地方呢&#xff1f;这份VR校园攻略带你沉浸式体验校园生活。 首先是大…

基于前端技术原生HTML、JS、CSS 电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了纸…

亚马逊出口灯具需要做的认证fcc认证UL认证ROHS认证CE认证

灯具CE认证&#xff1a; ​CE认证是产品进入欧盟及欧洲贸易自由区国家市场的通行证。任何国家的产品要进入欧盟、欧洲自由贸易区必须进行CE认证&#xff0c;在产品上加贴CE标志。LED灯具CE认证检测&#xff0c;为各国产品在欧洲市场进行贸易提供了统一的技术规范&#xff0c;C…

寻找最佳财务软件:简单易用的首选推荐

现代企业越来越依赖高效的财务管理工具&#xff0c;而财务软件成为了许多企业的首选。然而&#xff0c;市场上众多的财务软件让人眼花缭乱&#xff0c;财务软件哪个最好用最简单&#xff1f; Zoho Books是由Zoho Corporation开发的一款全功能财务管理软件。它提供了一系列强大的…

Leetcode---111双周赛

题目列表 2824. 统计和小于目标的下标对数目 2825. 循环增长使字符串子序列等于另一个字符串 2826. 将三个组排序 2827. 范围中美丽整数的数目 一、统计和小于目标的下标对数目 这题直接暴力求解&#xff0c;时间复杂度是O(n^2)&#xff0c;代码如下 class Solution { pu…

知识推荐:化工企业ERP系统如何选型?

多年来&#xff0c;在政策激励、舆论倡导和产业实践的不断推动下&#xff0c;智能制造的理念已经深入人心&#xff0c;成为化工行业的普遍共识。在当前经济新常态下&#xff0c;化工产业面临着产能过剩、效益下滑、环境恶化等多重压力&#xff0c;必须从战略高度认识并积极应对…

Kali 软件管理测试案例

案例1 &#xff1a;显示目录树 tree ┌──(root㉿kali)-[~] └─# tree --help usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-L level [-R]] [-H baseHREF][-T title] [-o filename] [-P pattern] [-I pattern] [--gitignore][--gitfile[]file] [--matchdirs] [--metafirs…

PotPlayer+LAV+MadVR+XySubFilter 配置指南(修订版)

Introduction Potplayer 作为 Windows 上很受欢迎的一款播放器&#xff0c;公认的最佳配置为结合 LAV、madVR、XySubfilter 进行使用。本文将介绍一种对其简单配置的方法。 LAV&#xff1a;一套主流的开源解码 filterMadVR&#xff1a;一个高性能的视频渲染器XySubFilter&…

keepalived双机热备

一、概述 Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题 原理 在一个 LVS 服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器&#xff0c…

19篇ICCV 2023自动驾驶精选论文解析 | 涵盖3D目标检测、语义分割、点云等方向

ICCV 2023榜单上月已出&#xff0c;今年共收录了2160篇论文&#xff0c;这次是精选了今年ICCV 2023 会议中自动驾驶相关的最新论文来和大家分享&#xff0c;涵盖了3D目标检测、BEV感知、目标检测、语义分割、点云等方向&#xff0c;共19篇。 论文原文以及开源代码文末领取&…

Apipost:提升API开发效率的利器

在数字化时代&#xff0c;API已经成为企业和开发者实现业务互通的关键工具。然而&#xff0c;API的开发、调试、文档编写以及测试等工作繁琐且复杂。Apipost为这一问题提供了完美的解决方案。 Apipost是一款专为API开发人员设计的协同研发平台&#xff0c;旨在简化API的生命周…

多数元素00

题目链接 多数元素 题目描述 注意点 给定的数组总是存在多数元素多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素 解答思路 初始想到使用map存每个元素和元素出现的次数&#xff0c;但是时间和空间都不理想因为本题给定的数组总是存在多数元素&#xff0c;使用投票算…

在CSS中,盒模型中的padding、border、margin是什么意思?

在CSS中&#xff0c;盒模型&#xff08;Box Model&#xff09;是用来描述和布局HTML元素的基本概念。它将每个HTML元素看作是一个矩形的盒子&#xff0c;这个盒子包括了内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;border&a…

第二节 分支和循环语句

第二节 分支和循环语句 目录 一&#xff0e; 什么是语句&#xff1f;二&#xff0e; 分支语句&#xff08;选择结构&#xff09;三&#xff0e; 循环语句 本章重点&#xff1a; 分支语句  if  switch 循环语句  while  for  do while goto语句 一&#xff0e; 什么是…

Spark on Yarn集群模式搭建及测试

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 点击传送&#xff1a;大数据学习专栏 持续更新中&#xff0c;感谢各位前辈朋友们支持学习~ 文章目录 1.Spark on Yarn集群模式介绍2.搭建环境准备3.搭建步骤 1.Spark on Yarn集群模式介…