消息传递神经网络(Message Passing Neural Networks, MPNN)
消息传递神经网络(Message Passing Neural Networks, MPNN)
- 一、引言
- 二、消息传递框架概述
- 1.消息传递阶段
- (1)消息生成与传播-message
- (2)消息聚合-aggregate
- (3)消息更新-update
- (4)消息传递机制小结
- 2.读出阶段
- 三、参考资料
一、引言
GNN中的消息传递机制是借助PyG、DGL之类的图神经网络框架来编写自己的消息传播GNN的基础,只有对其了解比较深刻,才能更好的设计自己的GNN模型。
二、消息传递框架概述
消息传递神经网络是Gilmer等人在Neural Message Passing for Quantum Chemistry中提出来的从空域角度定义GNN的范式(框架)。原文以量子化学为例,根据原子的性质(对应节点特征)和分子的结构(对应边特征)预测了13种物理化学性质。
MPNN的前向传播包括两个阶段,第一个阶段称为 message passing(消息传递)阶段,第二个阶段称为readout(读出)阶段。
1.消息传递阶段
假设 X i ( k − 1 ) ∈ R F X_i^{(k-1)} \in \R^F Xi(k−1)∈RF表示节点i在第k-1层的特征, e j , i ∈ R D e_{j,i}\in \R^D ej,i∈RD表示节点j到节点i的边上的特征,则消息传递机制可以用如下公式来描述:
X i ( k ) = γ ( k ) ( X i ( k − 1 ) , ⨁ j ∈ N ( i ) ϕ ( k ) ( X i ( k − 1 ) , X j ( k − 1 ) , e j , i ) ) (1) X_i^{(k)} = \gamma^{(k)} \left(X_i^{(k-1)},\bigoplus _{j\in {\mathcal {N(i)}}} \phi^{(k)} \left( X_i^{(k-1)}, X_j^{(k-1) }, e_{j,i} \right) \right) \tag {1} Xi(k)=γ(k) Xi(k−1),j∈N(i)⨁ϕ(k)(Xi(k−1),Xj(k−1),ej,i) (1)
在消息传递机制中,主要分为三大步骤:消息生成(message)、消息聚合(aggregate)、消息更新(update)。
message passing阶段会执行多次信息传递过程。
(1)消息生成与传播-message
在本阶段中,每个节点将生成自己的消息,然后向自己的邻居节点“传播”自己的消息,也就是公式(1)中的:
ϕ ( k ) ( X i ( k − 1 ) , X j ( k − 1 ) , e j , i ) \phi^{(k)} \left( X_i^{(k-1)}, X_j^{(k-1) }, e_{j,i} \right) ϕ(k)(Xi(k−1),Xj(k−1),ej,i)
其中, ϕ ( k ) \phi^{(k)} ϕ(k)可微函数,例如MLP。在消息生成的过程中,可能会用到:
- 节点自己当前的特征 ( X i ( k − 1 ) ) (X_i^{(k-1)}) (Xi(k−1))
- 节点邻居当前的特征 ( X j ( k − 1 ) ) (X_j^{(k-1)}) (Xj(k−1))
- 节点自己当前的特征 ( e j , i ) (e_{j,i}) (ej,i)
当然上述三者并不都是必须的,具体使用什么来生成节点的消息取决于GNN的构建者。
(2)消息聚合-aggregate
在本阶段,每个节点会聚合来自邻居的消息,也就是公式(1)中的:
⨁ j ∈ N ( i ) ( M e s s a g e ) \bigoplus _{j\in {\mathcal {N(i)}}} \left( Message \right) j∈N(i)⨁(Message)
其中Message指代消息生成与传播中每个节点的消息, N ( i ) \mathcal {N(i)} N(i)表示节点i的领域, ⨁ \bigoplus ⨁表示可微(可导)的、置换不变(permutation invariant)函数。置换不变指聚合邻居的消息的结果与邻居的聚合顺序无关(结点的输入顺序不改变最终结果,这也是为了保证MPNN对图的同构有不变性),常见的包括sum、max、min、mean等。
(3)消息更新-update
在本阶段,每个节点利用聚合自邻居节点的消息生成自己的消息,也就是公式(1)中的:
γ ( k ) ( X i ( k − 1 ) , N e i g h b o r M s g ) \gamma^{(k)} \left(X_i^{(k-1)},NeighborMsg\right) γ(k)(Xi(k−1),NeighborMsg)
其中NeighborMsg指代消息聚合中每个节点聚合自邻居的消息, γ ( k ) \gamma^{(k)} γ(k)也表示可微函数,例如MLP。
(4)消息传递机制小结
经过前面的介绍可知:空域角度定义的GNN间的不同之处便在于它们关于消息生成、消息聚合和消息更新的实现不同。
总的来说,基于消息传递图神经网络框架设计的图神经网络模型,就是通过设计不同的消息生成、消息聚合和消息更新函数实现的,从而用不同的方式聚合自身和邻居特征。
2.读出阶段
readout阶段计算基于整张图的特征向量,可以用如下公式来描述:
y ^ = R ( { X v k ∣ v ∈ G } ) (2) \hat{y} = R\left(\lbrace X_v^k | v \in G \rbrace\right) \tag{2} y^=R({Xvk∣v∈G})(2)
其中, y ^ \hat{y} y^是最终的输出向量, R R R是读出函数,这个函数是可微的、满足置换不变性的。
在设计基于消息传递图神经网络框架设计图神经网络模型的时候可以根据自己的需要设计这个readout函数。
三、参考资料
- PyG中关于MPNN的理解
- Neural Message Passing for Quantum Chemistry
相关文章:
消息传递神经网络(Message Passing Neural Networks, MPNN)
消息传递神经网络(Message Passing Neural Networks, MPNN) 一、引言二、消息传递框架概述1.消息传递阶段(1)消息生成与传播-message(2)消息聚合-aggregate(3)消息更新-update&#…...
常用图像变换方法
伽马变换: void gamma_transform(cv::Mat &img, double gamma) {cv::Mat normalized;img.convertTo(normalized, CV_64F...
从被动响应到主动帮助,ProActive Agent开启人机交互新篇章
在人工智能领域,我们正见证着一场革命性的变革。传统的AI助手,如ChatGPT,需要明确的指令才能执行任务。但现在,清华大学联合面壁智能等团队提出了一种全新的主动式Agent交互范式——ProActive Agent,它能够主动观察环境…...
力扣hot100道【贪心算法后续解题方法心得】(三)
力扣hot100道【贪心算法后续解题方法心得】 十四、贪心算法关键解题思路1、买卖股票的最佳时机2、跳跃游戏3、跳跃游戏 | |4、划分字母区间 十五、动态规划什么是动态规划?关键解题思路和步骤1、打家劫舍2、01背包问题3、完全平方式4、零钱兑换5、单词拆分6、最长递…...
工业齐套管理虚拟现实仿真模拟软件
工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件,借助身临其境的虚拟现实环境,无需停止生产线,即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业,安全…...
ARP表、MAC表、路由表的区别和各自作用
文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...
Android 使用OpenGLES + MediaPlayer 获取视频截图
概述 Android 获取视频缩略图的方法通常有: ContentResolver: 使用系统数据库MediaMetadataRetriever: 这个是android提供的类,用来获取本地和网络media相关文件的信息ThumbnailUtils: 是在android2.2(api8)之后新增的一个,该类为…...
浏览器的事件循环机制
浏览器和Node的事件循环机制 引言浏览器的事件循环机制 引言 由于JS是单线程的脚本语言,所以在同一时间只能做一件事情,当遇到多个任务时,我们不可能一直等待任务完成,这会造成巨大的资源浪费。为了协调时间,用户交互…...
Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文
在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统,通过前后端分离的方式,为在校学生提供便捷的餐厅点餐服务,同时方便餐厅和…...
k8s使用的nfs作为sc。
k8s使用的nfs作为sc。 当前出现一个问题: 1.有一个pod他是通过流进行文件解压并写入到nfs服务器对应的目录中。 2.一个大压缩包下有20多个压缩包,递归解压。解压完成后应该是20多个文件夹,文件夹下有.json文件。 3.pod中的程序解压后去找以.j…...
linux下Qt程序部署教程
文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…...
tp6 合成两个pdf文件(附加pdf或者替换pdf)
最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下: use set…...
工作:三菱PLC防止程序存储器爆满方法
工作:三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时,添加行注释时,记得要选“外围”,这样不会占用PLC程序存储器内存;2、选择“外围”的注释,前面会有个*星号,方便检查 二…...
jmeter 获取唯一全局变量及多线程读写的问题
一、jmeter 获取唯一ID号全局变量 在JMeter中获取唯一ID号并设置为全局变量,可以通过以下几种方法实现: 使用JMeter内置的UUID函数: JMeter提供了一个内置的函数__UUID,可以生成一个随机的UUID,这个UUID是全局唯一的。…...
掌握 Spring Boot 中的缓存:技术和最佳实践
缓存是一种用于将经常访问的数据临时存储在更快的存储层(通常在内存中)中的技术,以便可以更快地满足未来对该数据的请求,从而提高应用程序的性能和效率。在 Spring Boot 中,缓存是一种简单而强大的方法,可以…...
动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
13 设计模式之外观模式(家庭影院案例)
一、什么是外观模式? 1.定义 在日常生活中,许多人喜欢通过遥控器来控制家中的电视、音响、DVD 播放器等设备。虽然这些设备各自独立工作,但遥控器提供了一个简洁的界面,让用户可以轻松地操作多个设备。而这一设计理念正是 外观模…...
单片机学习笔记 12. 定时/计数器_定时
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
Web安全基础实践
实践目标 (1)理解常用网络攻击技术的基本原理。(2)Webgoat实践下相关实验。 WebGoat WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授We…...
Zookeeper集群数据是如何同步的?
大家好,我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB(Zo…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
