前言
大家好,我是阿光。
本专栏整理了《图神经网络》,内包含了不同图神经网络的原理以及相关代码实现,详细讲解图神经网络,理论与实践相结合,如GCN、GraphSAGE、GAT等经典图网络,每一个代码实例都附带有完整的代码+数据集。
正在更新中~ ✨
🚨 我的项目环境:
- 平台:Windows10
- 语言环境:python3.7
- 编译器:PyCharm
- PyTorch版本:1.11.0
- PyG版本:2.1.0
💥 项目专栏:【入门图神经网络】
一、GNN模型的通用计算管道
对于GNN模型来说可以将其看成一个通用的图模型管道,对于管道那么就会有通用的流水线设计,对于这个流水线中的常见步骤有4步,找出任务中的图结构信息
、指定图类型
、设计指定任务的损失函数
、使用计算模块构建模型
。
二、找出任务中的图结构信息
使用GNN的前提就是我们首先需要判断我们的任务能够使用GNN来进行建模,其次就是如果符合那么我们的图数据是什么。
通常有两种情景:结构性情景
和非结构性情景
。
在结构场景中,图结构在应用中是显式的,例如蛋白质分子结构
、智慧交通、知识图谱、推荐系统等应用。
在非结构场景中图是隐式的,因此我们必须首先从任务中构建图,例如像现在的文本处理我们也可以使用GNN来进行建模,但是GNN是基于图数据的,但是我们的文本数据并不是属于图结构,所以我们必须要进行构造,常用构建方式就可以设计一个窗口,将窗口内的词进行连接,将每个词看成图中的节点。
三、指定图类型
- 有向和无向图:有向图中的边都是从一个节点指向另一个节点的,这提供了比无向图更多的信息。无向图中的每条边也可以看作是两条有向边。
同构图和异构图
:同构图中的节点和边具有相同的类型,而异构图中的结点和边具有不同的类型。节点和边的类型在异构图中起着重要作用,应该进一步考虑。- 静态图和动态图:当输入特征或图的拓扑随时间变化时,该图被视为动态图。在动态图中应仔细考虑时间信息。
对于这些类型我们可以随意组合,例如,可以处理动态有向异构图。还有其他几种图形类型是为不同的任务设计的,如超图和签名图。我们不会在这里列举所有类型,但最重要的想法是考虑这些图提供的附加信息。一旦我们指定了图形类型,在设计过程中应该进一步考虑这些图形类型提供的附加信息。
四、设计指定任务的损失函数
对于不同的任务我们需要设计不同的损失函数,常见的图应用有节点级任务
、边级任务
、图级任务
。
- 节点级任务侧重于节点,包括节点分类、节点回归、节点聚类等。节点分类试图将节点分类为几个类,节点回归预测每个节点的连续值。节点聚类旨在将节点划分为几个不相交的组,其中相似的节点应该在同一组中。
- 边级任务是边缘分类和链接预测,这要求模型对边缘类型进行分类,或预测两个给定节点之间是否存在边缘。
- 图级任务包括图分类、图回归和图匹配,所有这些都需要模型来学习图表示。
五、使用计算模块构建模型
我们需要针对不同的任务设计不同的模块
来获得相应的信息。
- 传播模块:传播模块用于在节点之间传播信息,以便聚合的信息可以捕获特征和拓扑信息。在传播模块中,卷积算子和递归算子通常用于聚集来自邻居的信息,而跳过连接操作用于从节点的历史表示中收集信息并缓解过度平滑问题。
- 采样模块:当图很大时,通常需要采样模块来对图进行传播。采样模块通常与传播模块相结合。
- 池化模块:当我们需要高级子图或图的表示时,需要池模块来从节点中提取信息。
利用这些计算模块,通常通过组合它们来构建典型的GNN模型
。其中卷积算子、递归算子、采样模块和跳过连接用于在每一层传播信息,然后添加池模块以提取高层信息。这些层通常被堆叠以获得更好的表示。请注意,这种架构可以概括大多数GNN模型。
参考文章
- Graph neural networks: A review of methods and applications