图卷积神经网络(gcn)综述与实现(pytorch版)(代码片段)

Torture_L Torture_L     2023-04-16     534

关键词:

图卷积神经网络(GCN)综述与实现(PyTorch版)


本文的实验环境为PyTorch = 1.11.0 + cu113,PyG = 2.0.4,相关依赖库和数据集的下载请见链接


一、图卷积神经网络介绍

1.1 传统图像卷积

卷积神经网络中的卷积(Convolution)指的是在图像上进行的输入和卷积核之间离散内积运算,其本质上就是利用共享参数的滤波器,通过计算中心值以及相邻节点的值进行加权获得带有局部空间特征的特征提取器。

其具有三个重要的特征,分别为:

  • 稀疏连接
    • 相较于全连接层,卷积层输入和输出间的连接是稀疏的,能够大大减少参数的数量,加快网络的训练速度。
  • 参数共享
    • 卷积核的权重参数可以被多个函数或操作共享,这样只需要训练一个参数集,而不需要对每个位置都训练一个参数集。此外,由于卷积核的大小一般是小于输入大小,也能起到减少参数数量的作用
  • 等变表示
    • 事实上,每个卷积层可以通过多个卷积核来进行特征提取,并且在卷积运算后,卷积神经网络对输入的图像具有平移不变性(有严格的数学论证)

一般在卷积层后,会通过一个池化层进行降维,进一步降低网络的复杂度和非线性程度。在那之后,可以将通过卷积池化层后的特征输入全连接层或反卷积层进行进一步的分类、分割、重建工作。当然,传统的卷积操作一般适用于结构化数据。

1.2 图结构

图作为一种典型的非结构化非线性数据(非欧几里得数据),其可以表示一对一、一对多、多对多的关系,因而常被用于描述复杂的数据对象,譬如社交网络、知识图谱、城市路网、3D点云等。与结构化数据不同,图的局部输入维度可变,即每个节点的邻居节点数量不同;图具有无序性,即节点间并不存在先后关系,仅存在连接关系(点云是置换不变性,在无序性的基础上,交换两点或多点不会影响整体结果)。由于图结构的特殊性,传统CNN和RNN对其的表征能力并不理想。

对于图结构,我们可以将其抽象表示为:
G = ( V , E ) G=(V,E) G=(V,E)
在这里 V V V表示图中节点的集合,而 E E E为边的集合。对于图特征,我们一般有三个重要矩阵进行表示。

  • 邻接矩阵 A A Aadjacency matrix用来表示节点间的连接关系。

∣ 0 1 0 0 0 0 1 0 1 1 0 0 0 1 1 0 ∣ \\beginvmatrix &0 & 1 & 0 & 0&\\\\ &0 & 0 & 1 & 0&\\\\ &1 & 1 & 0 & 0&\\\\ &0 & 1 & 1 & 0&\\\\ \\endvmatrix 0010101101010000
​ 对于带权的图,邻接矩阵将把1替换为对应的权重

  • 度矩阵 D D Ddegree matrix用来表示节点的连接数,可以表征某个节点在图中的重要程度,是一个对角矩阵,例如针对上图的入度矩阵:
    ∣ 1 0 0 0 0 3 0 0 0 0 2 0 0 0 0 0 ∣ \\beginvmatrix &1 & 0 & 0 & 0&\\\\ &0 & 3 & 0 & 0&\\\\ &0 & 0 & 2 & 0&\\\\ &0 & 0 & 0 & 0&\\\\ \\endvmatrix 1000030000200000

  • 特征矩阵 X X Xfeature matrix用来表示节点的特征

1.3 图卷积神经网络

目前主流的图卷积基本上可以分为两类,一种是基于谱的图卷积,一种是基于空域的图卷积。

基于谱的图卷积通过傅里叶变换(FFT干的一件事情就是连接空域和频域)将节点映射到频域空间,通过频域空间上的卷积来实现时域上的卷积,最后将特征映射回空域。而基于空域的图卷积则是直接基于节点与邻居进行卷积提取特征,没有做域上的变换。

图卷积算子可表示为:
h i l + 1 = σ ( ∑ j ∈ N i 1 C i j h j l w R j l ) h_i^l+1=\\sigma(\\sum_j\\in N_i\\frac1C_ijh_j^lw_R_j^l) hil+1=σ(jNiCij1hjlwRjl)
其中,设中心结点为 i i i h i l h_i^l hil为结点 i i i l l l层的特征表达; σ \\sigma σ是非线性激活函数; C i j C_ij Cij则是归一化因子,譬如结点度的倒数、反距离权重、高斯衰减权重等; N i N_i Ni是结点 i i i的邻接节点(包括自身); R i R_i Ri表示节点 i i i的类型; W R j W_R_j WRj表示 R j R_j Rj类型的节点变换权重参数。


下面围绕Semi-supervised Classification with Graph Convolutional Networks一文中提出的GCN结构进行分析。

该篇文章由阿姆斯特丹(the University of Amsterdam)大学机器学习专业的Thomas Kipf 博士于2016年提出,并于2017年被深度学习的顶会ICLR(International Conference on Learning Representations)接收!这位大佬的研究方向是学习结构化数据和结构化表示/计算,包括推理、(多智能体)强化学习和结构化深度生成模型。

核心思想

该篇文章提出了一种新的网络结构,用于处理非结构化的图数据,并解决了在一个图中,只有少部分节点的标签是已知情况下的节点分类问题(半监督学习)。

对于带有特征的图结构,例如下图中的 n × 3 n\\times3 n×3网络结构,有部分是带有标识的,而有部分则是无标识的。

GCN通过考虑节点本身以及邻居节点的特征信息来提取潜在的关系。比如我们在中心节点拼接了邻居的特征后,使用平均池化的方式对这些特征进行聚合,再通过浅层网络进行学习训练得到新的数据。

每个GCN层做的事情:

  • 获取当前节点和邻接节点特征
  • 通过聚合函数获取局部特征(带有拓扑关系)
  • 浅层学习训练,获取高维特征

数学推导

对于一个如上图所示的无向图,我们要怎么样才能获取到某个节点以及其邻居节点的特征呢?一种非常直观的想法💡是,在当前节点的特征之后,根据权重拼接与之相邻节点的特征。此时,空域上的距离往往成为了权重的影响因素。

那么,邻接表就成了我们考虑节点间拓扑关系最重要的结构。我们写成 A × X × W A\\times X\\times W A×X×W A A A是邻接矩阵, X X X是特征矩阵, W W W是权重。右乘相当于控制行,左乘相当于控制列, A A A左乘 X X X,相当于在对应节点处,使用哪些节点特征构建新的特征:
∣ 0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 0 ∣ × ∣ 1 1 1 1 2 2 2 2 3 3 3 3 40 40 40 40 ∣ = ∣ 2 2 2 2 43 43 43 43 42 42 42 42 3 3 3 3 ∣ \\beginvmatrix &0 & 1 & 0&0&\\\\ &0 & 0 & 1&1&\\\\ &0 & 1 & 0&1&\\\\ &1 & 1 & 0&0&\\\\ \\endvmatrix\\times \\beginvmatrix &1 & 1 & 1&1&\\\\ &2 & 2 & 2&2&\\\\ &3 & 3 & 3&3&\\\\ &40 & 40 & 40&40&\\\\ \\endvmatrix= \\beginvmatrix &2 & 2 & 2&2&\\\\ &43 & 43 & 43&43&\\\\ &42 & 42 & 42&42&\\\\ &3 & 3 & 3&3&\\\\ \\endvmatrix 000110110100011gcn-图卷积神经网络算法简单实现(含python代码)(代码片段)

本文是就实现GCN算法模型进行的代码介绍,上一篇文章是GCN算法的原理和模型介绍。代码中用到的Cora数据集:链接:https://pan.baidu.com/s/1SbqIOtysKqHKZ7C50DM_eA 提取码:pfny 文章目录目的一、数据集介绍二、实现过程... 查看详情

深度学习100例|第52天-图卷积神经网络(gcn):实现论文分类(代码片段)

文章目录一、GCN是什么二、数据集-CoraDataset1.数据集介绍2.准备数据三、划分训练集、测试集和验证集四、模型训练1.Loss计算2.训练模型3.结果可视化五、同系列作品🚀我的环境:语言环境:Python3.6.5编译器:jupytern... 查看详情

图卷积网络gcn

GCNCNN中的卷积本质上就是共享参数的过滤器,可以较为有效地提取空间特征而很多其他的研究中还有很多非欧拉结构的数据1.CNN无法处理非欧拉结构的数据,传统的离散卷积在NonEuclideanStructure的数据上无法保持平移不变性... 查看详情

gcn图卷积网络入门详解

...术A在这篇文章中,我们将仔细研究一个名为GCN的著名图神经网络。首先,我们先直观的了解一下它的工作原理,然后再深入了解它背后的数学原理。字幕组双语原文:【GCN】图卷积网络(GCN)入门详解英语原文:GraphConvolutionalNetwor... 查看详情

深入浅出图神经网络|gnn原理解析☄学习笔记图信号处理与图卷积神经网络(代码片段)

深入浅出图神经网络|GNN原理解析☄学习笔记(五)图信号处理与图卷积神经网络文章目录深入浅出图神经网络|GNN原理解析☄学习笔记(五)图信号处理与图卷积神经网络矩阵乘法的三种形式图信号与图的拉普拉... 查看详情

图卷积神经网络gcn的一些理解以及dgl代码实例的一些讲解(代码片段)

...例1例2DGL中的GCN实例dgl.DGLGraph.update_all参考前言近些年图神经网络十分火热,因为图数据结构其实在我们的现实生活中更常见,例如分子结构、人的社交关系、语言结构等等。NLP中的句法树、依存树就是一种特殊的图,... 查看详情

pytorch实现gcn(基于messagepassing消息传递机制实现)(代码片段)

...完整代码前言大家好,我是阿光。本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代... 查看详情

如何使用图卷积网络对图进行深度学习(代码片段)

...行深度学习的系列文章中的第一篇,GCN是一种强大的神经网络,旨在直接处理 查看详情

从0到1实现gcn——最详细的代码实现(代码片段)

最近论文中需要使用图卷积神经网络(GNN),看了一些关于GCN的代码,还有基于PyTorchGeometricTemporal的代码实现,在这里做一下记录。GCN原始代码关于GCN的原理在这里不进行过多阐述,其他文章里面解释的已... 查看详情

考虑关系的图卷积神经网络r-gcn的一些理解以及dgl官方代码的一些讲解(代码片段)

文章目录前言R-GCN传播公式正则化DGL中的R-GCN实体分类的实例nn.Parametertorch.matmul参考前言昨天写的GCN的一篇文章入榜了,可喜可贺。但是感觉距离我的目标还是有点远,因为最后要用R-GAT,我感觉可能得再懂一点R-GCN和G... 查看详情

图卷积网络gcn

GCNCNN中的卷积本质上就是共享参数的过滤器,可以较为有效地提取空间特征而很多其他的研究中还有很多非欧拉结构的数据1.CNN无法处理非欧拉结构的数据,传统的离散卷积在NonEuclideanStructure的数据上无法保持平移不变性... 查看详情

图卷积网络gcn

GCNCNN中的卷积本质上就是共享参数的过滤器,可以较为有效地提取空间特征而很多其他的研究中还有很多非欧拉结构的数据1.CNN无法处理非欧拉结构的数据,传统的离散卷积在NonEuclideanStructure的数据上无法保持平移不变性... 查看详情

图卷积的演变-从谱图卷积到gcn

基础傅里叶级数是对周期为T的确定性信号做展开,而傅里叶变换将周期推广到无穷,能对具有任意长度的信号做展开。https://www.zhihu.com/question/21665935/answer/2367861632\\[\\hatf(t)=\\intf(x)\\exp^-iwtdx=\\intf(x)\\left(cos(wx)+isin(wx)\\right)dx\\]要在... 查看详情

带你换个角度理解图卷积网络

摘要:本文带大家从另一个角度来理解和认识图卷积网络的概念。本文分享自华为云社区《技术综述十二:图网络的基本概念》,原文作者:一笑倾城。基础概念笔者认为,图的核心思想是学习一个函数映射f(... 查看详情

图神经网络—gcn-pytorch版本代码详解

...与训练参考资料写在前面…在研究生的工作中使用到了图神经网络,所以平时会看一些与图神经网络相关的论文和代码。写这个系列的目的是为了帮助自己再理一遍算法的基本思想和流程,如果同时也能对其他人提供帮... 查看详情

gcn笔记:graphconvolutionneuralnetwork,chebnet

在 GNN笔记:图卷积_UQI-LIUWJ的博客-CSDN博客中,我们知道了谱图卷积相当于是那么问题在于,如何设计含有可训练的、共享参数的kernel呢? 1GCN-ver1.0(2013)1.0原理SpectralNetworksandDeepLocallyConnectedNetworksonGraphs... 查看详情

从图(graph)到图卷积(graphconvolution):漫谈图神经网络模型(代码片段)

本文属于图神经网络的系列文章,文章目录如下:从图(Graph)到图卷积(GraphConvolution):漫谈图神经网络模型(一)从图(Graph)到图卷积(GraphConvolution):漫谈图神经网络模型(二)从图(Graph)到图卷积(GraphConvolution):漫谈图神经网络模型(三)... 查看详情

行为提取和动作识别

性能分析https://www.aiuai.cn/aifarm715.html openposehttps://github.com/CMU-Perceptual-Computing-Lab/openpose 用于PyTorch中基于骨架的动作识别的空间时间图卷积网络(ST-GCN)https://github.com/yysijie/st-gcn  查看详情