没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
消息传递图神经网络
一、引言
在开篇中我们介绍了,为节点生成节点表征(Node Representation)是图计算任务
成功的关键,我们要利用神经网络 来学习节点表征。消息传递范式是一种聚合邻接
节点信息来更新 中心节点信息的范式,它将卷积算子推广到 了不规则数据领域,实
现了图与神经网络的连接。消息传递范式因为简单、强大的特性,于是被人们广泛
地使用。遵循消息传递范式的图神经网络被称为消息传递图神经网络。本节中,
首先我们将学习图神经网络生成节点表征的范式–消息传递(Message Passing)
范式。
接着我们将初步分析PyG中的MessagePassing基类, 通过继承此基类我们可以方
便地构造一个图神经网络。
然后我们以继承MessagePassing 基类的GCNConv 类为例,学习如何通过继承
MessagePassing基类来构造图神经网络。
再接着我们将对MessagePassing基类进行剖析。
最 后 我 们 将 学 习 在 继 承 MessagePassing 基 类 的 子 类 中 覆 写
message(),aggreate(),message_and_aggreate() 和 update() , 这 些 方 法 的 规
范。
二、 消息传递范式介绍
下方图片展示了基于消息传递范式的聚合邻接节点信息来更新中心节点信息的过
程:
1. 图中黄色方框部分展示的是一次邻接节点信息传递 到中心节点的过程:B节点的
邻接节点(A,C)的信息经过变换后聚合到B节点,接着B节点信息与邻接节点聚
合信息 一起经过变 换得到B节点的 新的节点信息。同 时,分别如红色 和绿色方框
部分所示 ,遵循同样的过程,C、D节点的信息也被更新。实际上,同样的过程
在所有节点上都进行了一遍,所有节点的信息都更新了一遍。
2. 这样的“邻接节点 信息传递到中心节点的过程”会进行多次。如图中蓝色方框 部分
所示 ,A节点的邻接节点(B,C,D)的已经发生过一次更新的节点信息 ,经过变
换、聚合、再变换产生了A节点第二次更新的节点信息。多次更新后的节点信息
就作为节点表征。
图片来源于:Graph Neural Network • Introduction to Graph Neural Networks
消息传递图神经网络遵 循上述的“聚合邻接节点信息来更新中心节点信息的过程”,
来生成节点表征。用 表示 层中节点 的节点表征, 表示从
节点 到节点 的边的属性,消息传递图神经网络可以描述为
其中 表示可微分的、具有排列不变性( 函数输出 结果 与输入参 数的排列 无关)的
函数。具有排列不变性的函数有,sum()函数、mean()函 数和max()函数。 和 表示
可微分的函数,如MLPs(多层感知器)。
此
处
内
容
来
源
于
CREATING MESSAGE
PASSING NETWORKS
。
注(1):神经网络的生成节点表征的操作称为节点嵌入(Node Embedding),节
点表征也可以称为节点嵌入。为了统一此次组队学习中的表述,我们规定节点嵌入
只代指神经网络生成节点表征的操作。
注(2):未经过训练的图神经网络生成的节点表征还不是好的节 点表征,好的节
点表征可用于衡量节点之间的相似性。通过监督学习对图神经网络做很好的训练,
图神经网络才可以生成好的节点表征。我们将在第5节介绍此部分内容。
注(3),节点表征与节点属性的区分:遵循被广泛使用的约定, 此次组队学习我
们也约 定,节点属 性data.x是节点的第0层节点表征,第 层的节点表征经过一次的
节点间信息传递产生第 层的节 点表征。不 过,节点属 性不单指data.x,广义上
它就指节点的属性,如节点的度等。
三、MessagePassing基类初步分析
Pytorch Geometric(PyG)提供了MessagePassing基类,它封装了“消息传递”的运行流
程。 通过继承MessagePassing基 类,可以方 便地构造消息传递图神 经网络。构 造一
个最简单的消息传递图神经网络类,我们只需定义message()方法( )、update()
方 法 ( ) , 以 及 使 用 的 消 息 聚 合 方 案 ( aggr="add" 、 aggr="mean" 或
aggr="max")。这一切是在以下方法的帮助下完成的:
MessagePassing(aggr="add", flow="source_to_target", node_dim=-2) (对象
初始化方法):
aggr:定义要使用的聚合方案("add"、"mean "或 "max");
flow:定义消息传递的流向("source_to_target "或 "target_to_source");
node_dim :定义沿着 哪个维度传 播 ,默认值为 -2 ,也就 是节点 表 征张量
(Tensor)的哪一个维度是节点维度。节点表征张量x 形状为[num_nodes,
num_features],其第0维度(也是第-2维度)是节点维度 ,其第1维度(也是
第-1维度)是节点表征维度,所以我们可以设置node_dim=-2。
注:MessagePassing(……)等同于MessagePassing.__init__(……)
MessagePassing.propagate(edge_index, size=None, **kwargs):
开始传递消息的起始调用,在此方法中message、update等方法被调用。
它 以edge_index(边的端点的索引)和flow(消息的流向)以及一些额外的
数据为参数。
请注意,propagate()不局限于基于形状为[N, N]的对称邻接矩阵进行“消息传
递过程”。基于非对称的邻接矩阵进行消息传递(当图为二部图时),需要传
递参数size=(N, M)。
如果设置size=None,则认为邻接矩阵是对称的。
MessagePassing.message(...):
首先确定要给节点 传递消息的边的集合:
如果flow="source_to_target",则是 的边的集合;
如果flow="target_to_source",则是 的边的集合。
接着为各条边创建要传递给节点 的消息,即实现 函数。
剩余15页未读,继续阅读
资源评论
陈莽昆
- 粉丝: 23
- 资源: 291
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 帮您查看密码navicat-password-decrypt-main.zip
- grpc php教程grpc-php-examples-master.zip
- thrift php教程thrift-tutorial-php-master.zip
- 一键将win10桌面的“此处打开powershell” 替换为 “在此处打开cmd窗口”
- 嵌入式系统通用驱动程序接口及其实现-Spi设备驱动程序
- 高分项目基于STM32单片机的温度控制系统源代码+项目资料齐全+教程文档.zip
- 哈工大软件学院编译原理实验(Python实现)
- 基于matlab app designer设计的一个简易的数独生成与求解器源码+项目说明.zip
- 基于MATLAB实现的一个音乐播放器音乐特效处理时域与频域波形显示等源码+项目说明.zip
- 树状数组(Binary Indexed Tree,BIT)高效地处理动态的区间求和问题
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功