【Deep Learning】 GCN

前言

关于图卷积神经网络(GCN)的学习文章非常多,但是大部分,都从GCN的公式开始介绍,这对于一个初入门的学习者非常不友好。下面是我在学习过程中参考的几个链接,这是我认为写的非常不错的几篇文章。记录在此,方便以后查阅。

(从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二))
https://www.cnblogs.com/SivilTaram/p/graph_neural_network_2.html

(GNN论文推荐)
https://github.com/thunlp/GNNPapers

何时能懂你的心——图卷积神经网络(GCN)
https://zhuanlan.zhihu.com/p/71200936

【Graph Neural Network】GCN: 算法原理,实现和应用
https://zhuanlan.zhihu.com/p/78624225

回顾CNN

卷积这个操作是提取局部特征以及层次全局特征的利器!

在开始学习GCN之前,我们需要了解以下几点概念。

【Deep Learning】 GCN_第1张图片

定义顶点的度为该顶点与其他顶点连接权值之和:
在这里插入图片描述

度矩阵和邻接矩阵

【Deep Learning】 GCN_第2张图片

所以我们对A做一个标准化处理。首先让A的每一行加起来为1,我们可以乘以一个 D-1 ,D就是度矩阵。我们可以进一步把 D-1 拆开与A相乘,得到一个对称且归一化的矩阵: D-1 A D-1

度矩阵D的逆矩阵(D-1)与邻接矩阵A相乘得到的新矩阵: 这个矩阵的每一行的元素和为1。

阅读笔记

(1)CNN的特点:

CNN的核心在于它的kernel,kernel是一个个小窗口,在图片上平移,通过卷积的方式来提取特征。这里的关键在于图片结构上的平移不变性:一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享。这就是CNN的精髓所在。

(2)CNN的弊端

欧式空间中的卷积操作实际上是用固定大小可学习的卷积核来抽取像素的特征,比如这里就是抽取绿色结点对应像素及其相邻像素点的特征。但是因为图里的邻居结点不固定,所以传统的卷积核不能直接用于抽取图上结点的特征。

(3)一句话理解GCN

在这里插入图片描述

GCN是谱图卷积的一阶局部近似,是一个多层的图卷积神经网络,每一个卷积层仅处理一阶邻域信息,通过叠加若干卷积层可以实现多阶邻域的信息传递

从而实现了通过一次卷积,GCN可以让每个节点都拥有其邻居节点的信息。(不准确的讲,图的邻接矩阵乘以图节点embedding,就相当于是做一次卷积)

示意图:
【Deep Learning】 GCN_第3张图片

新生成的 L(N x K) 矩阵的每一个节点的K个维度,都是对应该节点的相邻节点邻接权重乘以相邻节点在这个维度上的值的累加和。

新生成的0号节点的向量全部由相邻的1号节点和3号节点的向量等加权求和得到。从而实现了周边节点卷积(加权求和)得到新的自身的目的。

(邻接矩阵A第一行0 1 0 1表示0号节点和1,3号节点相连,和2号不连接)

如果要让节点拥有周边更广泛的节点信息,可以多次进行卷积。

在这里插入图片描述
上面的如果用邻接矩阵替代的话有两个缺点。

  • 没有考虑节点自身对自己的影响,因为邻接矩阵对角线为0;

  • 邻接矩阵没有被规范化,这在提取图特征时可能存在问题,比如邻居节点多的节点倾向于有更大的影响力。

因此更常用的公式是:
在这里插入图片描述

又称为规范化对称邻接矩阵(normalized symmetric adjacency matrix)。

你可能感兴趣的:(深度学习)