图神经网络和分子表征:4. PAINN

news2024/10/6 12:21:56

如果说 SchNet 带来了【3D】的火种,DimeNet 燃起了【几何】的火苗,那么 PAINN 则以星火燎原之势跨入 【等变】时代。

在 上一节 中,我们提到, PAINN 在看到 DimeNet 取得的成就之后,从另一个角度解决了三体几何问题,顺带着建立起了一个真正超越不变网络的等变模型。在本篇博客中,我们将详细解读 PAINN 原文,并简单罗列其核心代码结构。

PAINN 故事背景

虽然 PAINN 作者不会在文章里写,他们的灵感源泉,他们受哪篇论文启发。但 PAINN 字里行间都透露着对 DimeNet 的模仿。

例如,PAINN 的 Table 1, Figure 1 都在讲,我这个模型是如何处理角度信息的,以及这种处理方式的优越性。甚至整个 Figure 4 都在 diss DimeNet。虽然这么说显得笔者非常不专业,但笔者依然认为,PAINN 这篇工作就是受 DimeNet 启发展开的。

那 DimeNet 是怎么引入三体信息的呢?下面请允许我进行简单的 前情回顾 。
在这里插入图片描述
我们套用简单的国王-大臣-乡绅模型。
国王(i)要向下收税,委托大臣(j)办事,大臣收集完各个乡绅的税( m k 1 j m_{k_1j} mk1j, m k 2 j m_{k_2j} mk2j, m k 3 j m_{k_3j} mk3j)以后进行整合( m j i m_{ji} mji),最后传给 国王 (i)。
这其中涉及到了简单的三体信息,即国王、大臣和乡绅构成的夹角。
PAINN 巧妙地利用 2-hop 的消息传递模型将角度信息纳入,在多个数据集上取得了当年的 SOTA.

谁看谁不眼馋啊!

作为 AI for Molecular property 的老祖师爷,schnet 的课题组很快跟进了这项工作,只不过他们看待问题的视角更加物理。

PAINN 的故事

可极化

Schnet 的一作叫 Schutt ,但在很多场合里,Schutt 并不说 Schnet 是 Schutt,而说是 Schrodinger(薛定谔) Net 。借此可见他们讲故事的能力。

那这个 PAINN 是什么的缩写呢?官方给的解释是:Polarizable Atom Interaction Neural Network (PAINN) 可极化原子相互作用神经网络。

在 Schutt 课题组的文章中很少出现 message passing 的字眼。因为他们认为,原子 A 传给原子 B 的信息,事实上是原子 A 与 原子 B 的相互作用(Interaction),所以大家看 SchNet 和 DTNN 这两篇论文经常会云里雾里,啥是相互作用(Interaction)?啥又是连续卷积?不明觉厉!

实际上所谓的相互作用(Interaction)就是原子之间的消息传递,所谓的连续卷积就是构建消息的时候使用 MLP 和一个衰减函数对距离的 embedding 做了一个过滤,连续二字指 MLP 中的激活函数换成了连续可到的 shifted softplus 函数(就是换了一个激活函数)(详情见系列第2篇文章)

那么 PAINN 中的可极化原子又是啥嘞?听起来文邹邹的。

这里要再回顾一下之前的模型,在 PAINN 之前,大家 embedding 原子的时候都会调用 pytorch 里默认的一个 look up table:

from torch.nn import Embedding

点进去这个模块,注释是这样写的:

class Embedding(Module):
    r"""A simple lookup table that stores embeddings of a fixed dictionary and size.

    This module is often used to store word embeddings and retrieve them using indices.
    The input to the module is a list of indices, and the output is the corresponding
    word embeddings.

也就是说,对于同样的输入,这个类会返回同样的一个 embedding 向量。

同样的原子得到的初始的特征向量是一致的,因为原子所处环境不同,多轮消息传递后,各个原子的特征向量往往大相径庭,最后对目标性质的预测也是基于原子所携带的这些特征向量进行的(在 schnetpack 里叫 outputnet )。不过这些都是后话了。重点是,每个原子最开始取的都是一个一维的特征向量。这些特征向量只能代表标量信息,无法代表原子的任何有方向的信息。

PAINN 正是瞄准这一点展开的,即,每个原子最开始取特征向量时,不仅取标量,还要取一个向量。这些向量可以代表原子有方向的性质,例如偶极矩等,还可以更进一步通过张量积的形式表示高阶特征。

作者举了一个例子,电荷密度在空间某处的多级展开。
零阶 q 对应该点处的 电荷
一阶 u 对应该点处的 偶极
二阶 Q 对应四极
在这里插入图片描述
之前的工作如果只对原子进行标量特征嵌入的话,最多只能表达电荷密度。但如果给原子一个向量嵌入,可以下探至 偶极,更进一步通过张量积就可以实现 四极 的拟合。
在这里插入图片描述
这就是 PAINN 名字中 可极化 的含义。

角度信息的引入

在拿到向量形式的特征向量后,我们可以通过对向量的简单加和完成角度信息的引入,同时能将计算量从 o ( n k 2 ) o(nk^2) o(nk2) (DimeNet 2-hop)降至 o ( n k ) o(nk) o(nk)(1-hop)。
在这里插入图片描述
作者在表 1 中详细对比了 3 种方式。

  1. 对于键长的变化,只有距离信息能够捕捉。
  2. 对于键角的变化,显式的 angle 和隐式的 direction 都能捕捉,但是 隐式的 direction 是 1-hop 的消息传递,只依赖第一圈的邻居,而 angle 则需要 2-hop,两圈的邻居。(虽然comenet里,这一点已经降到了 1-hop)

此外,作者指出,隐式的 direction 还能鉴别出更多的分子结构:
在这里插入图片描述
上图中,如果使用显式的 angle,无法鉴别(左)
但如果使用 隐式的 direction (右),则可以很好的鉴别。

这一发现后面衍生出了 Geometric W-L test 的工作:GNN Expressive

等变开山之作?

并不是。在 PAINN 原文中,作者指出,先前已经有很多人尝试了等变表征,但均未取得预期成果:
在这里插入图片描述
但 PAINN 的伟大在于,他是第一个将等变模型调参到超越不变模型的。
PAINN 对于等变做了哪些小心翼翼的调整呢?
在这里插入图片描述
在消息传递模块,所以对 向量特征 的变换都要遵循线性变化。可以是 scale, 可以是 线性的 MLP,矩阵的线性加和。但不能包含非线性(例如非线性的激活函数)。

另一方面,对于 标量特征 ,可以进行任何的 非线性操作。(上图第一条)

此外,PAINN 在输出时设计了一个巧妙的 模块:
在这里插入图片描述
这个模块可以保证等变的向量特征在经过消息传递后,预测向量/张量目标性质时,依然保持等变!这就不得不提到 PAINN 最后一个令人叹服的点了。

不忘初心:解决物理问题

写到这里,我已经吹累了。但还没完。

作为一篇 232 被引的文献,PAINN:

  1. 在 1-hop 消息传递成本下,引入了角度信息
  2. 首个超越不变模型的等变模型
  3. 刷爆了数据集(略夸张)

此外,PAINN 还不忘初心,教大家怎么用“可极化”解决真实的物理问题。

例1:
分子偶极矩的预测。
PAINN 之前:
在这里插入图片描述
PAINN:
在这里插入图片描述
相当于零阶展开进化到1阶展开!

例2:
极化张量:
在这里插入图片描述
(翻译累了,自己看吧(其实我也没看懂(捂脸)))
总之就是用张量积将一阶向量升维到了二阶张量。
例3:
拉曼红外也能预测了!!
在这里插入图片描述
一个字,绝!

好,收,下篇见!

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

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

相关文章

css3对文字标签不同宽,不同高使用瀑布流对齐显示

<div class"wrapper" style"padding: 0;"><span class"wf-item task-tags text-center" v-for"(item,index) in data.categorys" :key"index">{{ item }}</span> </div>/* 名称瀑布流显示 */ .wrap…

基于PyTorch的交通标志目标检测系统

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7PyTorch 1.7.0 二、制作交通标志数据集&#xff0c;如下图 三、配置好数据集的地址&#xff0c;然后开始训练 python train.py --data traffic_data.yaml --cfg traffic_yolov5s.yaml --weights pretrained/yolov5s.pt --e…

嵌入式基础知识-DMA

本篇来介绍DMA的一些基础知识。 1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌…

(笔记七)利用opencv进行形态学操作

&#xff08;1&#xff09;程序清单 形态学操作是一种图像处理技术&#xff0c;它基于数学形态学理论&#xff0c;用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…

2023-9-4 最大公约数

题目链接&#xff1a;最大公约数 #include <iostream>using namespace std;int gcd(int a, int b) {return b ? gcd(b, a % b) : a; }int main() {int n;cin >> n;while(n--){int a, b;cin >> a >> b;cout << gcd(a, b) << endl;}return …

uniapp 处理 分页请求

我的需求是手机上一个动态滚动列表&#xff0c;下拉到底部时&#xff0c;触发分页数据请求 uniapp上处理分页解决方案 主要看你是如何写出滚动条的。我想到的目前有三种 &#xff08;1&#xff09;页面滚动&#xff1a;直接使用onReachBottom方法&#xff0c;可以监听到达底部…

【python爬虫】16.爬虫知识点总结复习

文章目录 前言爬虫总复习工具解析与提取&#xff08;一&#xff09;解析与提取&#xff08;二&#xff09;更厉害的请求存储更多的爬虫更强大的爬虫——框架给爬虫加上翅膀 爬虫进阶路线指引解析与提取 存储数据分析与可视化更多的爬虫更强大的爬虫——框架项目训练 反爬虫应对…

8K视频来了,8K 视频编辑的最低系统要求

当今 RED、Canon、Ikegami、Sony 等公司的 8K 摄像机以及 8K 电视&#xff0c;许多视频内容制作人和电影制作人正在认真考虑 8K 拍摄、编辑和后期处理&#xff0c;需要什么样的系统来处理如此海量的数据&#xff1f; 中央处理器&#xff08;CPU&#xff09; 首先&#xff0c;…

Redis 集群环境案例安装步骤

1. 3主3从redis集群配置 1.1 找3台真实虚拟机&#xff0c;各自新建 mkdir -p /myredis/cluster 1.2 新建6个独立的redis实例服务 1.2.1 本次案例设计说明(ip有变化) https://processon.com/diagraming/5fe6d76ce401fd549c8fe708 1.2.2 IP: 192.168.111.175端门6381/端口6…

基于Matlab实现多个图像压缩案例(附上源码+数据集)

图像压缩是一种将图像数据量减少的技术&#xff0c;以减少存储空间和传输带宽的需求。在本文中&#xff0c;我们将介绍如何使用Matlab实现图像压缩。 文章目录 简单案例源码数据集下载 简单案例 首先&#xff0c;我们需要了解图像压缩的两种主要方法&#xff1a;有损压缩和无…

深入理解联邦学习——联邦学习的分类:基础知识

分类目录&#xff1a;《深入理解联邦学习》总目录 在实际中&#xff0c;孤岛数据具有不同分布特点&#xff0c;根据这些特点&#xff0c;我们可以提出相对应的联邦学习方案。下面&#xff0c;我们将以孤岛数据的分布特点为依据对联邦学习进行分类。 考虑有多个数据拥有方&…

[国产MCU]-W801开发实例-MQTT客户端通信

MQTT客户端通信 文章目录 MQTT客户端通信1、MQTT介绍2、W801的MQTT客户端相关API介绍3、代码实现本文将详细介绍如何在W801中使用MQTT协议通信。 1、MQTT介绍 MQTT 被称为消息队列遥测传输协议。它是一种轻量级消息传递协议,可通过简单的通信机制帮助资源受限的网络客户端。 …

thinkphp6 入门(5)-- 模型是什么 怎么用

一、模型 MVC架构 之前开发一个功能&#xff0c;后端为在控制器&#xff08;C&#xff09;中写 php SQL&#xff0c;前端为在页面&#xff08;V&#xff09;中写html css js&#xff0c;这就形成了 VC 架构。 但是发现&#xff0c;相同的数据逻辑&#xff08;SQL&#xf…

会话跟踪技术学习笔记(Cookie+Session)+ HTTP学习笔记

一、会话跟踪技术&#xff08;CookieSession&#xff09; 1.1 预备知识 1. 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 2. 会话跟踪&a…

l8-d6 socket套接字及TCP的实现框架

一、socket套接字 /*创建套接字*/ int socket(int domain, int type, int protocol); /*绑定通信结构体*/ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); /*监听套接字*/ int listen(int sockfd, int backlog); /*处理客户端发起的连接&#xff0…

Beats:安装及配置 Metricbeat (二)- 8.x

这篇文章是继文章 “Beats&#xff1a;安装及配置 Metricbeat &#xff08;一&#xff09;- 8.x” 的续篇。你可以先阅读之前的那篇文章再继续阅读这篇文章。我们在这篇文章中继续之前的探讨。 使用 fingerprint 来代替证书 在实际的使用中&#xff0c;我们需要从 Elasticsear…

【Eclipse】Project interpreter not specified 新建项目时,错误提示,已解决

目录 0.环境 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 1.解决思路 2.具体步骤 0.环境 windows 11 64位&#xff0c;Eclipse 2021-06 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 由于我手欠&#xff0c;将…

[github-100天机器学习]day4+5+6 Logistic regression

https://github.com/MLEveryday/100-Days-Of-ML-Code/blob/master/README.md 逻辑回归 逻辑回归用来处理不同的分类问题&#xff0c;这里的目的是预测当前被观察的对象属于哪个组。会给你提供一个离散的二进制输出结果&#xff0c;一个简单例子&#xff1a;判断一个人是否会在…

一加11/Ace2/10Pro手机如何实现全局120HZ高刷-游戏超级流畅效果

已经成功root啦。安卓13目前也一样支持LSPosed框架&#xff0c;如果你对LSP框架有需求&#xff0c;也可以使 自测120HZ刷新率诞生以后&#xff0c;很多小伙伴用上了就很难回来啦&#xff0c;一加11/Ace2/10Pro/9pro手 机厂商也对新机做了很多的适配&#xff0c;让我们日常使用起…

【Spring Boot】使用MyBatis注解实现数据库操作

使用MyBatis注解实现数据库操作 MyBatis还提供了注解的方式&#xff0c;相比XML的方式&#xff0c;注解的方式更加简单方便&#xff0c;无须创建XML配置文件。接下来好好研究注解的使用方式。 1.XML和注解的异同 1&#xff09;注解模式使用简单&#xff0c;开发效率高&#…