图神经网络与分子表征:7. LEFTNet

news2025/1/17 21:41:53

在执行性质预测任务时,我们需要考虑两个问题:1. 如何正确的将图结构进行编码?2. 如何汇聚编码信息预测整个分子的任务?
LEFTNet 就是通过回答上述问题来进行模型设计的。
原文地址

算法设计

原文中,作者定义了三个图同构问题:

  1. 树同构:任意邻接的两原子间的距离一致即可
  2. 三角同构:任意邻接的三原子构成的三角形一致
  3. 子图同构:任意两个三角形的相对位置保持一致

作者认为,一个好的编码器能够甄别上述所有同构问题,就像一台高分辨率的相机一样。为了方便理解,作者给出了两个案例:
在这里插入图片描述
在图(a)中,作者展示了一种,满足树同构,但不满足三角同构的情况。
在图(b)中,作者展示了一种,满足三角同构,但不满足子图同构的情况。
有了模型设计方向,作者开始讲述设计思路:
首先,为了满足树同构的要求。作者认为,只要正确抽取原子间距离即可,所有的 3DGNN 均满足。
其次,为了满足三角同构的要求。作者认为,三角同构本质上是局域完备性问题。作者设计了一个局域坐标系,通过将原坐标映射到局域坐标,即可满足局域完备性的要求,同时还能满足等变要求。此处直接采用了作者上一篇文章 ClofNet。
注:能够满足局域完备性的模型很多,可以参考我之前的博客
最后,为了满足子图同构的要求,作者认为,不同局域坐标系相对位置不一样,这导致局域信息汇聚过程中遭受信息损失。在信息汇聚过程中有效考虑不同坐标系的相对位置,能够有效解决这一问题。
在这里插入图片描述

如上图所示,点 b 和点 c 分别建立了局域坐标系,在这两个局域坐标系下,cluster(团簇)b 和 cluster c 进行了有效映射。b 处的局域信息如何才能有效和 c 处的局域信息融合呢?
作者指出,通过二者共同的邻居 a,以及两个局域坐标系的相对位置,能够实现信息的转换融合。因此,模型设计时需要考虑两点:

  1. 编码时需要纳入尽可能完备的局域信息;
  2. 信息汇聚时需要考虑不同局域坐标系的相对位置;

算法实现

一共两处 github 仓库与 LEFTNet 的实现有关:m2hub, leftnet

二者差别不大,此处以 m2hub 中的为例。
在这里插入图片描述

作者在原文中给出了模型框架图(上图)和算法流程(下图):
在这里插入图片描述

实际代码实现与原文存在些许区别。按原文的模型框架图,LEFTNet 是向量、标量双通道模型,与 PAINN 一致。
在消息传递模块中,模型会首先通过 LSE 抽取子图信息,并将其抽象成邻居消息的权重 Aij.
邻居消息就是边的 embedding,通过与权重进行糅合,有效融入局域信息。
最后,在消息的聚合阶段,通过考虑不同局域坐标系的相对位置,实现子图级的消息融合。
下面我们读一下代码:

  1. 抽取局域信息的 LSE 模块
    该模块在 interaction 之前,属于数据预处理:
    在这里插入图片描述
  2. 消息传递主函数
    在这里插入图片描述
    实际实现过程中,原文提到的 FTE 模块进行了简化,取消了node_frame的介入,因此可以看做是简单的 scalar vector infusion
  3. 消息传递模块
    此处是直接调用的 torch geometric 的消息传递类
    原文中消息是由三个成分构成,实际代码实现中仅使用了前两项
    在这里插入图片描述
    消息传递模块如下:
    在这里插入图片描述
  4. 标量、向量融合阶段

对应原文中的 FTE(进行了简化)
在这里插入图片描述

核心思路是向量标量化,与原标量信息融合。融合标量再向量化,与原向量信息进行融合。
使用类似融合方法的模型很多,例如:
so3krate 和 torchmd-net, BAMBOO 中的 GET layer,如下图所示:
在这里插入图片描述

写在最后

LEFTNet 这篇论文行文晦涩难懂,这是和其他模型文章最大的区别。大量的定理证明展现了作者扎实的数学功底。在 LEFTNet 之后,西班牙团队很快发展出了 torchmd-net (有名 tensornet, neruips 2023),torchmd-net 在纳入电荷信息后升级到了 torchmd-net 2。字节团队在 torchmd-net 2 之上搭建了 BAMBOO。这些论文相对容易理解,感兴趣的读者可以拓展阅读。

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

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

相关文章

SpringBoot + Redis实现用户信息登录的缓存

🍎前言 🍐项目的背景 背景:🍉当我们在完成用户信息登录时,我们往往每次都会在数据库中查询用户的记录,生成token并返回给前端,不过这样会有一定的问题。 🍐造成的问题 问题&#xf…

【Linux】文件描述符——万字详解

目录​​​​​​​ 前言 预备知识 复习C语言的文件接口 写方式打开文件 追加方式打开文件 读方式打开文件 系统的文件接口 open close write read 文件描述符 0 & 1 & 2 理解文件描述符 文件描述符的分配规则 重定向的本质 dup2 理解Linux下一切…

vue+springboot+websocket实时聊天通讯功能

前言 在我的前一篇文章里 vuespringboot实现聊天功能 🎈🎈🎈🎈🎈🎈🎈 实现了最最基础的聊天功能,可以通过聊天互相给对方发送信息 🎈🎈🎈&…

每日一题 — 最小覆盖子串

76. 最小覆盖子串 - 力扣(LeetCode) 解法一:暴力遍历哈希表 解法二:滑动窗口哈希表 定义left和right初始化为零,固定left,先向右遍历right,放到哈希表中这个时候我们需要统计有效字符的个数&…

企业智能EDM邮件群发推广软件哪个好?

精准、高效的电子邮件营销已经成为企业触达潜在客户、维护现有客户关系以及提升品牌影响力不可或缺的手段。在这其中,云衔科技以其独树一帜的智能EDM邮件营销系统解决方案,为企业带来了革命性的市场推广体验。 云衔科技凭借前瞻性的战略眼光和深厚的AI技…

抖音在线点赞任务发布接单运营平台PHP网站源码 多个支付通道+分级会员制度

抖音在线点赞任务发布接单运营平台PHP网站源码,多个支付通道分级会员制度。 介绍 1、代理裂变,静态返佣/动态返佣均可设置。 2、自动机器人做任务,任务时间可设置,机器人价格时间可设置。 3、后台可设置注册即送X天机器人。 …

RT-Thread在Win10下编译出现 unsupported pickle protocol: 5解决方案

调试背景: 在WIN10下编译RT-Thread源码:对象处理器平台是Microchip SAMA5D27-SOM1-EK评估板。 unsupported pickle protocol: 5 编译出现报错:ValueError : unsupported pickle protocol: 5 $ scons scons: Reading SConscript files ... Newlib ver…

c语言题目之求最大公约数

题目内容:求最大公约数 给定两个数,求这两个数的最大公约数 例如: 输入:20 40 输出:20 什么叫最大公约数? 方法分析: 提示:这里我们用辗转相除法: 例如:输…

七月论文审稿GPT第4.5版:通过15K条paper-review数据微调Llama2 70B(含各种坑)

前言 当我们3月下旬微调完Mixtral 8x7B之后(更多详见:七月论文大模型:含论文的审稿、阅读、写作、修订 ),下一个想微调的就是llama2 70B 因为之前积攒了不少微调代码和微调经验,所以3月底apple便通过5K的paper-review数据集成功…

Tensorflow2.0笔记 - 使用卷积神经网络层做CIFA100数据集训练(类VGG13)

本笔记记录CNN做CIFAR100数据集的训练相关内容,代码中使用了类似VGG13的网络结构,做了两个Sequetial(CNN和全连接层),没有用Flatten层而是用reshape操作做CNN和全连接层的中转操作。由于网络层次较深,参数量…

鲁棒无监督人群计数与定位

鲁棒无监督人群计数与定位 摘要1 IntroductionMethod 摘要 现有的群体计数模型需要大量的训练数据,而这些数据的标注过程耗时且繁琐。为了解决这个问题,作者提出了一种简单而有效的人群计数方法,通过采用一种名为“Segment-Everything-Every…

高精度算法(1)

前言 今天来讲一讲高精度算法,我们说一个数据类型,有它的对应范围比如int类型最多 可以包含到负2的31次方到2的31次方减一 其实大概就是20亿左右那么其他的类型也同样如此 那么,如何解决一个很大很大的数的运算呢? 我们今天介…

gemini国内能用吗

gemini国内能用吗 虽然 Gemini 的具体功能和性能还未完全公开,但基于 Google 在 AI 领域的强大背景和技术实力,已经火出圈了,很多小伙伴已经迫不及待想了解一下它有什么优势以及如何快速使用上 首先我们来讲一下gemini的优势 多模态能力&a…

43、二叉树-验证二叉搜索树

思路: 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 所以对于当前节点来说:我的左节点要小于我,我的右节点要大于我&a…

顺序表详解(C语言实现)

顺序表介绍 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。 顺序表一般可以分为: 1. 静态顺序表:使用定长数组存储元素。 2. 动态顺序表:使…

世界500强:破解“智慧核能”数智化成功转型密码

近日,实在智能携手中国核能行业协会信息化专业委员会在中国人工智能小镇成功举办“基于大模型的RPA数字员工在核能行业实战应用案例专项培训”,中国核工业集团、中国广核集团、国家电力投资集团等企事业单位共同参加。中核集团作为我国核科技工业的主体&…

screen常用命令

screen是一个在Linux系统中常用的命令行终端模拟器&#xff0c;它允许用户在一个单一终端会话中管理多个终端窗口。以下是一些常用的screen命令 1、创建一个新的screen会话并命名 screen -S <name>2、control a d &#xff1a;分离&#xff08;detach&#xff09;当前的…

TensorRT从入门到了解(2)-学习笔记

目录 1.TensorRT的高性能部署简介2.TensorRT驾驭方案3.如何正确导出onnx4.动态batch和动态宽高的实现5.实现一个自定义插件6.关于封装7.YoloV5案例8.Retinaface案例9.高性能低耦合10.YOLOX集成参考 1.TensorRT的高性能部署简介 tensorRT&#xff0c;nvidia发布的dnn推理引擎&a…

Kotlin语法快速入门--变量声明(1)

Kotlin语法入门–变量声明&#xff08;1&#xff09; 文章目录 Kotlin语法入门--变量声明&#xff08;1&#xff09;一、变量声明1、整型2、字符型3、集合3.1、创建array数组3.2、创建list集合3.3、不可变类型数组3.4、Set集合--不重复添加元素3.5、键值对集合Map 4、kotlin特有…

yolov8 区域计数

yolov8 区域计数 1. 基础2. 计数功能2.1 计数模块2.2 判断模块 3. 主代码4. 实验结果5. 源码 1. 基础 本项目是在 WindowsYOLOV8环境配置 的基础上实现的&#xff0c;测距原理可见上边文章 2. 计数功能 2.1 计数模块 在指定区域内计数模块 def count_objects_in_region(bo…