图神经网络和分子表征:5. Completeness
大家都知道 “两点确定一线,三点确定一平面”,那么多少个变量可以确定一个分子呢?这是最近顶刊们热烈讨论的话题。
(据笔者不完全统计)最早在 SphereNet (2022 ICLR)论文里,摘要上就开始讨论 completeness 了。后来,ClofNet (2022 ICML)和 ComENet (2022 NeruIPS)直接在标题里就标明 Complete (两个Net名字中的 C 就是 Complete 意思)。
从模型设计角度看,实现 Completeness 似乎成为了提升模型性能的一条捷径。诸多研究小组加入战场,completeness 这个词逐渐演变成了罗生门。在最近的 LEFTNet (2023 NeruIPS)中,作者重新提及 completeness ,似乎能够从一个更高的视角看待这一问题。
本文将首先介绍 SphereNet 和 ClofNet 中有关完备性的观点。两篇论文的作者均花费很多篇幅强调模型的完备性,却没有深入思考 local completeness 如何转化为 global completeness。ComENet 首先意识到了这一点,通过固定两个刚体结构间的旋转键尝试固定整个分支。然而,ComENet 对刚体结构间的相对自由度进行了误判,仅仅考虑了两刚体结构共线平面中的一个自由度,没有将其放在立体的环境中思考。最后,LEFTNet 仔细论证了这一点,补齐了全部三个自由度,最终实现了 Global Completeness。
这篇博客中,我将首先介绍不变模型考虑 Completeness 的代表 SphereNet,向量模型考虑 Completeness 的代表 ClofNet。最后,我将介绍对 local to global 展开讨论的两篇文章 ComENet 和 LEFTNet。
SphereNet 中的 Completeness
在 图神经网络和分子表征:3. 不变网络最后的辉煌-CSDN博客 中我们提到,SphereNet 是 DimeNet 的改进之作。一个朴素的想法是,在引入角度的基础上进一步引入二面角将十分有潜力进一步提高精度。当然,这并非是 AI 研究员首创的想法。
在传统的计算化学领域,距离、角度、二面角所构成的内坐标体系已经被广泛用于改造输入坐标。基于内坐标的几何构型优化被认为大幅降低了势能面的自由度,提高了构型优化的速度。例如,Gaussian 就支持冗余(Redundant)内坐标、z-matrix,广义内坐标(generalized internal coordinates)等关键词。大家感兴趣可以看以下链接中的说明:
z-matrix:
- 维基百科:https://en.wikipedia.org/wiki/Z-matrix_(chemistry)
- 一个案例:https://www.chm.bris.ac.uk/pt/ajm/mmhtm/MM_L2p16.htm
- 优缺点详细解析:https://www.cup.uni-muenchen.de/ch/compchem/geom/internal.html
冗余内坐标(Gaussian 构型优化默认格式):https://gaussian.com/opt/
广义内坐标:https://gaussian.com/gic/
形式多样内坐标的设计本意是希望3D坐标能够由距离、角度、二面角唯一表示,并能够据此复现出原始结构。如下所示:

SphereNet 原文中多次提到的完备性正是基于这样的理念:
- 3D 坐标可以预测性质。
- 3D 坐标能够转化为不变性的距离、角度、二面角。
- 距离、角度、二面角能够预测不变性质。

作者思路可以进一步小结为:之前的模型只是将 3D 坐标转换成了距离和角度,我把二面角添上就完备了,所以一定会有精度提高!具体转换框架见 图神经网络和分子表征:3. 不变网络最后的辉煌-CSDN博客
其实这样的想法忽略了很多问题:
-
3D 坐标转化为距离、角度、二面角不能有信息损失。换言之,作者设计的转换框架需要有效鉴别所有结构。但是作者在原文就列举了一个反例,作者设计的框架可以鉴别手性分子(下图a,b),但不能鉴别一些特殊案例(下图b,c):

-
3D 坐标转换为内坐标的方式并非只有唯一解。在 z-matrix 的这个案例中(Internal coordinates of a molecule (bris.ac.uk)),乙烯6个原子,3个原子的确定都涉及了二面角,但是参考平面可以有多种选择。作者在原文指出,GemNet 3-hop 的消息传递模式可以做到完备性,笔者此处表示质疑。如何设计规则拿到正则、完备、物理的几何信息,传统的量子化学软件已经给出了很多解(见上),SphereNet 和 GemNet 显然没有达到上述方法的理论深度。

-
即便转换过程没有损失,消息传递(local to global)过程 也会带来损失。SphereNet 原文完全没有考虑到消息传递(local to global)过程。这一点同样出现在 ClofNet 中,而 ComENet 和 LEFTNet 都对这一过程进行了讨论。
总体来说,SphereNet 中的 Completeness 还是一个 local Completeness。作者的想法就是对 3D 坐标完成不变替代,没有深入考虑后续传递过程。
ClofNet
ClofNet 这个框架本系列还没详细讲过。这篇论文和 LEFTNet 一样,读起来让人非常痛苦。下面就简单介绍下笔者的理解吧。
ClofNet 故事起源
ClofNet 在故事开头指出,现有表征框架无法有效纳入恒电势等真实物理环境。

在之前的表征框架中(EGNN),两原子排斥力可以映射到原子向量差上。但原子向量差的形式无法有效反应外加的恒电场。作者指出,如果我们能够建立起一个局域的坐标系,就可以将各种方向的向量标量化。如此以来,我们在消息传递的内部,可以只用标量。
ClofNet 中的 Complete local frame
ClofNet 论文读起来有着对 EGNN 非常明显的模仿痕迹。比如公式 1 直接照搬了 EGNN 的定义

EGNN 本身是一个非常经典的框架,此处碍于笔者的精力,不作展开。
但原作者一个很明显的思路是:EGNN 基于原子坐标向量差去做迭代,只能做原子连线上的性质预测,例如原子受力,类似恒电势就不行。为了解决这个问题,作者拓展了原子坐标向量差的概念:坐标向量差,坐标向量叉乘定义一个平面,加上该平面上的法向向量,三个向量构成了一个正则坐标系。

任何有关两原子的向量在该正则坐标系下均有唯一标量坐标,这样即可完成向量向标量的映射。
ClofNet 中的消息传递
写到这里的时候,笔者已经看 ClofNet 这篇论文很久了。这篇论文里的定理证明实在是太多了,这里只放一下笔者粗浅的理解。
一种尝试理解新模型的方式是用已经建立起的框架规则去套。在 On the Expressive Power of Geometric Graph Neural Networks 这篇论文里,作者对 PAINN 做了如下归纳总结:

其消息传递过程可以归纳为向量和标量两条平行的路径。
前文已经提到,ClofNet 的消息传递和 EGNN 是基本一致的:

我们从下往上看,第2,3行公式表明 ClofNet 依旧是面向点编程的,将点的性质作为核心的迭代对象。同时,ClofNet 采用和 PAINN 一致的思路,即,标量、向量两条并行的迭代路线。
ClofNet 和 PAINN 的不同之处在于消息本身的设计(第一行),以及消息是如何影响向量性质迭代的(第二行),标量性质的迭代似乎和 PAINN 是一样的。
PAINN 里,消息分为了标量的消息和向量的消息,分别用于标量和向量的迭代。但是 ClofNet 似乎仅有标量的消息,向量的消息通过标量的向量化实现。(第二行)
其实说到这里,把上述三段话中的 ClofNet 换成 EGNN 也完全成立。标量的向量化这个概念已经出现在了 EGNN 的设计框架中。所以,ClofNet 真正的创新在于局域坐标系的建立,进而拓展了向量标量间相互转化这个概念。
现在我们小结一下 ClofNet 的消息传递过程:
-
从大的视角看, ClofNet 遵从了 PAINN 的设计思想,面向点编程+向量、标量两条平行的迭代路线。我们可以直接套用 PAINN 的图:

-
当然,需要把两个 m 的来源抹掉,同时向量 m 依赖于标量 m

-
在构建这两个 m 的过程中, ClofNet 设计了一个完备的局域坐标系,将向量标量化,进行迭代计算后再重新向量化。
具体实现细节,请各位读者阅读原文和源码。
ClofNet 中的 Completeness
前文中,我们介绍了 SphereNet 的 Completeness。可以看到,作者十分强调3D坐标向不变几何信息转化的过程中不能出现信息损失。 ClofNet 中并不涉及复杂的多体几何关系, ClofNet 和 PAINN 一样是向量、标量双通路模型。因此,角度、二面角信息隐藏在了向量模型的加减中,无需多虑。笔者认为, ClofNet 中的 Completeness 更多是相对于 EGNN 而言的。因为 EGNN 只能表示原子连线方向的性质(原子相互作用力等),而 ClofNet 则进一步,通过设计局域坐标系,实现了恒电势等向量信息的拟合。意义不在于增加了多少的几何鉴别能力,而是增加了完备的、无损的向量信息拟合能力,因此叫 complete。
值得注意的是,此处的 complete 依然是一个局域的概念,因为作者并没有考虑 local to global 对 Completeness 的影响,这一点在 LEFTNet 中被重点讨论。
ComENet 和 LEFENet 中的 Completeness
ComENet 的消息传递过程在前面博客已经讲过了。图神经网络和分子表征:3. 不变网络最后的辉煌-CSDN博客
在 ComENet 论文的2.2节,作者详细介绍了引入第二个二面角的目的:
- 在距离+角度+一个二面角的模式下,我们可以做到局域结构的完备性,但这只局限于一近邻的范围。这跟 SphereNet 的思路基本一致 (SphereNet 做到了二近邻的完备性)。
- 如下图所示,局域坐标系的设定可以将R1和R2两个基团变成刚体(完备性),但是包含R1和R2的整个分支是否是一个刚性结构呢?

- 这就是前文多次提到的,local to global 的完备性。ComENet 是这样解释的:i 的 local 是蓝色区域,可以看作上图中的其中一个基团 R1。j 的 local 是黄色区域,可以看作上图基团 R2. 刚性结构 R1 和 R2 间唯一的自由度就是两个刚性结构的夹角,下右图。如果我们把这个夹角固定,整个分支就变成了一个刚性结构。考虑到每个节点都将衍生出一个 local,只要我们能将相邻两个 local 完全冻住,整个体系又是一个连通图,这样整个体系都将被唯一确定。

- 这是 ComENet 中的描述,整个论证过程十分精彩,但是在 LEFTNet 中,作者指出 刚性结构 R1 和 R2 间自由度并不唯一,如果我们在 R1 和 R2 中分别建立局域正交坐标系,那么两个坐标系间的相互转换存在 3 个自由度。 ComENet 描述简化了两个刚体结构。将 刚体结构 R1 简化为了 上右图紫色平面, R2 简化为了上右图黄色平面。如果我们只是平面间的 Freeze,确实只需要一个自由度。但事实是,两个刚体结构都是立体的,我们应该考虑的是两个立体空间相互之间的转换。

- 如上图所示,作者十分犀利的指出,ComENet 中的 torsion angle 只是两个 local frames 相互转换间的其中一个自由度。
- LEFTNet 通过设计合理的消息传递机制(FTE)实现了 local to global 的完备性. LEFTNet 的技术细节太多,后面再详细展开。
相关文章:
图神经网络和分子表征:5. Completeness
大家都知道 “两点确定一线,三点确定一平面”,那么多少个变量可以确定一个分子呢?这是最近顶刊们热烈讨论的话题。 (据笔者不完全统计)最早在 SphereNet (2022 ICLR)论文里,摘要上就…...
css-渐变色矩形
效果图: 代码: html: <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"initial-scale1.0, user-scalableno" /><title></title><link …...
使用easypoi-spring-boot-starter 4.1.1导入excel报错NoSuchMethodError和NoSuchMethodError
前言 使用easypoi进行excel的导入遇到的错误以及解决办法 easypoi项目地址:https://gitee.com/lemur/easypoi easypoi的Maven依赖: <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter<…...
matlab中类的分别之handle类和value类——matlab无法修改类属性值的可能原因
写在之前(吐槽) 最近由于变化了一些工作方向,开始需要使用matlab进行开发,哎哟喂,matlab使用的我想吐,那个matlab编辑器又没代码提示,又没彩色,我只好用vscode进行代码编辑…...
3. t2t_vit inference
前言 对vit 进行fp16推理 参考链接: https://github.com/open-mmlab/mmpretrain/tree/master/configs/t2t_vit run code : https://mmclassification.readthedocs.io/en/latest/getting_started.html#inference-and-test-a-dataset https://mmclassification.readthedo…...
SpringMVC Day 05 : Spring 中的 Model
前言 欢迎来到 SpringMVC 系列教程的第五天!在之前的教程中,我们已经学习了如何使用控制器处理请求和返回视图。今天,我们将深入探讨 Spring 中的 Model。 在 Web 应用程序开发中,数据的传递和展示是非常重要的。SpringMVC 提供…...
redis6.0源码分析:字典扩容与渐进式rehash
文章目录 字典数据结构结构设计dictType字典类型为什么字典有两个哈希表?哈希算法 扩容机制扩容前置知识字典存在几种状态?容量相关的关键字段定义字典的容量都是2的幂次方 扩容机制字典什么时候会扩容?扩容的阈值 & 扩容的倍数哪些方法会…...
【C++迭代器iterator】
迭代器 i t e r a t o r 迭代器iterator 迭代器iterator 在 容器 v e c t o r 容器vector 容器vector 中的使用 迭代器 i t e r a t o r 迭代器iterator 迭代器iterator 一般使用在 容器 v e c t o r 容器vector 容器vector 的 遍历 遍历 遍历,充当 遍历指针 遍…...
基于群居蜘蛛算法的无人机航迹规划
基于群居蜘蛛算法的无人机航迹规划 文章目录 基于群居蜘蛛算法的无人机航迹规划1.群居蜘蛛搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用群居蜘蛛算法来优化无人机航迹规划。 …...
火爆全网,Python+Requests+Pytest+YAML+Allure实现接口自动化测试(附源码)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 本项目实现接口自…...
【深度学习】【NLP】如何得到一个分词器,如何训练自定义分词器:从基础到实践
文章目录 什么是分词?分词算法使用Python训练分词器步骤1:选择分词算法步骤2:准备训练语料步骤3:配置分词器参数步骤4:训练分词器步骤5:测试和使用分词器 代码示例:使用SentencePiece训练分词器…...
线程池的线程回收
线程池 线程池里面分为核心线程和非核心线程。 核心线程是常驻在线程池里面的工作线程,它有两种方式初始化: 向线程池里面添加任务的时候,被动初始化 主动调用 prestartAllCoreThreads 方法 当线程池里面的队列满了的情况下,为了增…...
【2023.10.25练习】数据库-函数1
任务描述 本关任务:编写函数fun_1完成学生选课操作。输入参数:学号、课程名,函数返回值:操作结果。 如果该生已有该门课程的选修记录,则函数返回-1;如果该门课程无先修课,则将选课信息添加到选…...
基于水循环算法的无人机航迹规划-附代码
基于水循环算法的无人机航迹规划 文章目录 基于水循环算法的无人机航迹规划1.水循环搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用水循环算法来优化无人机航迹规划。 1.水循环…...
JVM调优(10)JVM的运行时数据区
一、概述 对于 C C 来说,在内存管理领域,JVM既拥有最高的权利,但是同时他们又是从事最基础工作的劳动人员,因为他们担负着每一个对象从开始到结束的维护责任。而对于Java来说,再虚拟机自动内存管理的帮助下࿰…...
Python网络爬虫介绍
视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 什么是网络爬虫? 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者)ÿ…...
iOS QR界面亮度调整
亮度调事,不久在QR界面切换的时候还要考虑进入前台后台时的操作 1.QR界面功能实现代码。 QR界面- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];[[NSUserDefaults standardUserDefaults] setValue:([UIScreen mainScreen].brightness) …...
Linux shell编程学习笔记17:for循环语句
Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算,同样也需要进行根据条件进行流程控制,提供了if、for、while、until等语句。 之前我们探讨了if语句,现在我们来探讨for循环语句。 Li…...
Go语言用Resty库编写的音频爬虫代码
目录 一、Go语言与Resty库简介 二、音频爬虫的实现 1、确定抓取目标 2、使用Resty发送HTTP请求 3、解析响应数据 4、下载音频文件 5、并发下载音频文件 三、注意事项 总结 随着互联网的飞速发展,网络爬虫逐渐成为数据获取和分析的重要工具。在音频领域&…...
AWTK 液体流动效果控件发布
液体流动效果控件。 主要特色: 支持水平和垂直方向。支持正向和反向流动。支持设置头尾的图片。支持设置流动的图片。支持设置速度的快慢。支持启停操作。 准备 获取 awtk 并编译 git clone https://github.com/zlgopen/awtk.git cd awtk; scons; cd -运行 生成…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
