当前位置: 首页 > news >正文

06.消息传递网络

消息传递图神经网络可以描述为:

在这里插入图片描述

xi表示第i和节点,k表示第k层图神经网络。⊕表示某种函数,如求和、均值或最大值。γ和Φ也表示某种可微分的函数,例如多层感知器(MLPs)。

这个公式的意思就是,第k层网络中的第i个节点的特征等于,第k-1层中i节点周围相连接的所有j节点和边(如果有)的特征的某种函数关系(看Φ取什么)的和、均值或最大值(看⊕取什么),再加上(看γ取什么)第k-1层中i节点本身的特征。

一、“消息传递”基类

PyG 提供了 MessagePassing 基类,它通过自动处理消息传递来帮助创建这类消息传递图神经网络。用户只需定义函数Φ ,即 message() ,以及函数 γ,即 update() ,以及要使用的聚合方案⊕,即 aggr="add"aggr="mean"aggr="max"

具体可参考https://pytorch-geometric.readthedocs.io/en/latest/tutorial/create_gnn.html

  • MessagePassing(aggr="add", flow="source_to_target", node_dim=-2) : 在 PyTorch Geometric 中,torch_geometric.nn.MessagePassing 是所有图神经网络层(如 GCN、GAT、GIN)的基类,用于实现消息传递机制。定义了要使用的聚合方案( "add""mean""max" )和消息传递的流向( "source_to_target""target_to_source" )。此外, node_dim 属性指示沿哪个轴进行传播。

  • MessagePassing.propagate(edge_index, size=None, **kwargs) : 开始传播消息的初始调用。图神经网络消息传递的核心函数,用于在 MessagePassing 子类中自动执行 消息构造(message)→ 聚合(aggregate)→ 更新(update) 三个阶段的操作。

  • MessagePassing.message (...):构造消息并发送到节点 i,其方式类似于针对每条边构建映射 。若 flow 为 “source_to_target”,则针对边 (j, i) ∈ ℰ ;若 flow 为 “target_to_source”,则针对边 (i, j) ∈ ℰ 。它可以接收最初传递给 propagate () 的任意参数。此外,传递给 propagate () 的张量可通过在变量名后附加 _i 或 _j ,映射到相应的节点 i 和 j,例如 x_i 和 x_j 。需要注意的是,通常我们将 i 称为聚合信息的中心节点,将 j 称为相邻节点,因为这是最常用的表示方法 。

  • MessagePassing.update(aggr_out, ...) :类似于 γ(的操作),为每个节点i更新节点嵌入。将聚合的输出作为第一个参数,还可接收最初传递给 propagate () 的任意参数 。

二、实现 GCN 层

GCN 层在数学上定义为:

在这里插入图片描述

其中,邻近节点的特征首先通过权重矩阵W进行转换,然后根据其度数进行归一化,并最终求和。最后,我们将偏置向量b应用于聚合后的输出。这个公式可以分为以下步骤:

  1. 在邻接矩阵中添加自循环(因为i节点要聚合自身的特征)。
  2. 对节点特征矩阵进行线性变换(即通过一层线性神经网络进行变换)。
  3. 计算归一化系数(两个根号相乘的倒数)。
  4. 求和邻近节点特征( "add" 聚合,也包含自身,因为添加自环边后,它自己本身也算是它的邻居)。
  5. 应用最终偏置向量。

步骤 1-3 通常在消息传递发生之前计算。步骤 4-5 可以使用 MessagePassing 基础类轻松处理。完整的层实现如下:

import torch
from torch.nn import Linear, Parameter
from torch_geometric.nn 
http://www.dtcms.com/a/272175.html

相关文章:

  • 「日拱一码」023 机器学习——超参数优化
  • 判断当前是否为钉钉环境
  • 【Pandas】pandas DataFrame from_dict
  • 1.2.3_1 OSI参考模型
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • vue3实现pdf文件预览 - vue-pdf-embed
  • 力扣热门算法题 127.单词接龙,128.最长连续序列,130.被围绕的区域
  • MySQL数据库基础教程:从安装到数据操作
  • 快速合并多个CAD图形为单一PDF文档的方法
  • 常见 Docker 错误及解决方法
  • (vue)前端区分接口返回两种格式,一种Blob二进制字节流,一种常规JSON,且将blob响应转为json
  • 基于Catboost算法的茶叶数据分析及价格预测系统的设计与实现
  • 多元函数的切平面与线性近似:几何直观与计算方法
  • 高数附录(1)—常用平面图形
  • 《O-PAS™标准的安全方法》白皮书:为工业自动化系统筑起安全防线
  • msf复现永恒之蓝
  • 每日一SQL 【各赛事的用户注册率】
  • Datawhale AI 夏令营:基于带货视频评论的用户洞察挑战赛 Notebook(下篇)
  • 流媒体服务
  • SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
  • x86架构CPU市场格局
  • WIFI协议全解析05:WiFi的安全机制:IoT设备如何实现安全连接?
  • PHP安全编程实践系列(三):安全会话管理与防护策略
  • 【运维】串口、网络一些基本信息
  • 【超详细】CentOS系统Docker安装与配置一键脚本(附镜像加速配置)
  • Pinia 笔记:Vue3 状态管理库
  • 双模秒切,体验跃迁!飞利浦EVNIA双模游戏显示器27M2N6801M王者降临!
  • UnrealEngine5游戏引擎实践(C++)
  • 如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
  • 字节 Seed 团队联合清华大学智能产业研究院开源 MemAgent: 基于多轮对话强化学习记忆代理的长文本大语言模型重构