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

news2024/11/24 10:58:51

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。
最后就剩下最开始的一块了。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/914519.html

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

相关文章

shell 脚本基础(四十三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1. 概念 2. 学习路径 2.1表达式 2.2 语句 2.3 函数 2.4 正则表达式 2.5 文件操作四剑客 二、表达式 1.shell 2.1 变量 2.2.1组成 2.2.2 类型 2.2.3 作用域…

二级评论列表功能

一:需求场景 我的个人网站留言列表在开发时,因为本着先有功能的原则。留言列表只有一级,平铺的。 当涉及多人回复,或者两个人多次对话后, 留言逻辑看着非常混乱。如下图 于是,我就打算将平铺的列表&#…

【数据备份、恢复、迁移与容灾】上海道宁与云祺科技为企业用户提供云数据中心容灾备份解决方案

云祺容灾备份系统支持 主流虚拟化环境下的虚拟机备份 提供对云基础设施 云架构平台以及 应用系统的全方位数据保护 云祺容灾备份系统规范功能 增强决策能力 高效恢复数据至可用状态 有效降低恢复成本 更大限度减少业务中断时间 保障业务可访问性 开发商介绍 成都云祺…

部署 Windows 域(一)

目录 简介 1. 部署 AD 前的准备 2. 部署 Windows 域的过程 2.1 安装域控制器 2.2 将客户机加入域 1.联机加入域 2.脱机加入域 简介 前面章节介绍了域的相关概念,以及工作组和域的主要区别,想要实现域环境,就必须部署至少一台域控制器。…

BUCK电路-TL494方案 持续更新大概2周更新完成

目录 一、电磁感应现象 这个现象是如何产生的 磁生电的变换的条件 二、电感的伏安特性 计算磁场大小可以用上面这个公式 磁感应强度B来表示 u0是真空磁导率 N是线圈的匝数 I是通过这个线圈的的电流大小 电生磁的过程就是由I来生成这个B 可以加入磁芯提高磁感应强度 …

Lnton羚通云算力平台【PyTorch】教程:关于Tensors的基础知识

Tensors Tensors 是一个特殊的数据结构,非常类似于数组和矩阵,在 PyTorch 中,我们使用 tensors 编码模型的输入和输出,以及模型的参数。 Tensors 非常类似于 NumPy 的 ndarrays, tensors 可以运行在 GPU 以及其他硬件…

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …

webrtc学习(七)-媒体协商

一.概述 媒体协商嘴主要的作用就是看通信双方都支持那些编解码器,这些编解码器又包含那些参数,比如音频的参数包括采样率,采样大小,通道数,对于视频的参数包括分辨率帧率等一系列参数,此外传输中用的payloa…

基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 LSTM: GRU 2.算法运行软件版本 matlab2022a 3.部分核心程序 %构建GRU网络模型 layers [ ...sequenceInputLayer(N_feature)gruLayer(N_hidden)f…

SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 从极简实现到IOC改进

目录 引出git代码仓库准备工作支付宝沙箱api内网穿透 [natapp.cn](https://natapp.cn/#download) springboot整合—极简实现版1.导包配置文件2.controller层代码3.进行支付流程4.支付成功回调 依赖注入的改进1.整体结构2.pom.xml文件依赖3.配置文件4.配置类,依赖注入…

SQL注入之联合查询

文章目录 联合查询是什么?联合查询获取cms账号密码尝试登录 联合查询是什么? 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用union select 语句,该语句会同时执行两条select 语句,实现跨库、跨表查询。 必要条件 两…

IDEA项目实践——会话跟踪、Web当中的jsp编程以及jsp开发模型和EL与JSTL以及过滤器介绍

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践…

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*,可以快速高效地…

UE Mesh Draw Pipeline 解析

为什么引入Mesh Draw Pipeline -------------作者:mx 常规渲染管线(老的渲染管线)的弊端 ①无法很好的进行排序以及剔除,以UE为例,使用位图 来表示物体可见性,无法快速找到最前面的物体,drawlist无法实现动态物体和静态物体的 draw sorting ②无法很好的进行合批。…

【javaweb】学习日记Day4 - Maven 依赖管理 Web入门

目录 一、Maven入门 - 管理和构建java项目的工具 1、IDEA如何构建Maven项目 2、Maven 坐标 (1)定义 (2)主要组成 3、IDEA如何导入和删除项目 二、Maven - 依赖管理 1、依赖配置 2、依赖传递 (1)查…

使用Pytorch和OpenCV实现视频人脸替换

“DeepFaceLab”项目已经发布了很长时间了,作为研究的目的,本文将介绍他的原理,并使用Pytorch和OpenCV创建一个简化版本。 本文将分成3个部分,第一部分从两个视频中提取人脸并构建标准人脸数据集。第二部分使用数据集与神经网络一…

二级MySQL(四)——完整性约束

一种规则,限制存储的数据 保证数据库中数据的正确,有效和完整 分类: 非空——得有值——NOT NULL 唯一——唯一的,不重复——UNIQUE 主键——非空且唯一——PRIMARY KEY 默认——给出默认值——DEFAULT 检查——保证某个条件…

CentOS Stream 9中安装MySQL的详细步骤

文章目录 卸载MySQL在线安装离线安装忘记密码 卸载MySQL 安装前先卸载系统上旧版本的 MySQL(没有则跳过此步骤) 查看已安装的MySQLrpm -qa | grep mysql卸载查询到的所有安装包rpm -e PackageName # 可批量删除删除my.cnf 查看/etc/my.cnf文件是否还存…

【consul】

consul 一、什么是服务注册与发现1.11.2 二、 什么是consul2.1定义2.2特性2.2.1服务注册与发现:2.2.2健康检查:2.2.3Key/Value存储: 三、consul部署-datacenter :指定数据中心名称,默认是dc1。consul :指定…

Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!

文章目录 前言dayofweek 函数官方说明BUG 重现Spark SQL 中的使用总结 前言 使用的集群环境为: hive 3.1.2spark 3.0.2 dayofweek 函数官方说明 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, …, 7 Saturday). …