1️⃣ GCN介绍
回忆一下,在我之前的博客已经介绍CNN架构(Alexnet,VGG,Unet,Resnet)和RNN。
-
CNN为处理图像等二维数据而设计,基于卷积操作实现特征的提取
-
RNN针对序列数据,通过循环结构和门机制捕捉序列中的依赖关系。
那为什么还要提出GCN呢?
实际上图像和序列数据都是欧式空间的数据,结构简单,使用CNN和RNN处理它们的时候需要保证输入格式是固定的 ①所有图像resize成固定大小,然后进行卷积操作得到特征 ②文本固定长度和词向量大小。然而,现实生活中有很多数据是没有固定结构的,其中一种就是图数据,比如社交网络,化学分子结构等。图数据结构不规则,CNN和RNN不好使了,研究人员在上世纪就开始研究如何处理这类数据,有很多方法,例如GNN、DeepWalk 和 node2vec 。而这篇文章介绍的图卷积神经网络是GNN中的一种技术。
图卷积神经网络(Graph Convolutional Networks, GCN)在2017
年被提出,为了处理“图类型”的数据,GCN不要求输入格式固定。说白了,这个和网络CNN一样,都是用于提取特征,只不过提取的是图数据的特征。我们可以利用提取到的特征对图进行节点分类(node classification)、图分类(graph classification)、边预测(link prediction),还可以顺便得到图的嵌入表示(graph embedding)
注意哦,文本也可以表示成图的形式:
2️⃣ 原理
2.1 简述
GCN通过定义图卷积
来处理图数据,现在分析一下图卷积的原理,看看它到底是个什么样子?
瞅瞅下面这个图,假设有一个图数据,咱先定义一些变量。
- A A A表示图的邻接矩阵,表示的是节点之间的连接关系,要是节点相连,那元素就是1
- 图的度矩阵表示为 D D D,这东西图论学过,本质是一个对角矩阵,其中对角元素表示每个节点的度(度就是与该节点相连的边的数量)
- N N N个节点,每个节点上有一个 C C C维的特征,因此所有节点的特征组成一个大小为 N × C N×C N×C的特征矩阵 X X X。
GCN说白了就是对照CNN的卷积,定义了一个图卷积
操作。CNN输入图像,图卷积的输入是前面定义的邻接矩阵 A A A,特征矩阵 X X X,咦,等等,为什么度矩阵 D D D不作为输入,因为 D D D可以通过A推导出来,所以就不输入了。咱先看看GCN的公式是啥:
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=\sigma\Big(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}\Big) H(l+1)=σ(D~−21A~D~−21H(l)W(l))
一看这公式头大了,这都啥东西,听我逐一拆解。
- D ~ − 1 2 \tilde{D}^{-\frac{1}{2}} D~−21:这个东西你可以理解为度矩阵 D D D经过一系列操作得到的结果,后面会对其进行分析
- A ~ \tilde{A} A~:这是对邻接矩阵 A A A经过操作后的结果
- H ( l ) H^{(l)} H(l):第 l l l层GCN的输入,对于输入层,就是我们的特征矩阵 X X X,形状为 N × C N×C N×C,N是节点数,C是特征数
- H ( l + 1 ) H^{(l+1)} H(l+1),输出,形状为 N × C ′ N×C' N×C′, C ′ C' C′是输出特征的维度
- W ( l ) W^{(l)} W(l):第 l l l层GCN的训练参数,大小为 C × C ′ C×C' C×C′
- σ ( ) \sigma() σ():激活函数
其实到这图卷积就结束了,简单来说就是,有一个图结构,我们得到它的邻接矩阵 A A A,特征矩阵 X X X,输入到这个公式里,得到一个输出,over。
2.2 GCN的具体流程
看到这肯定会有人问,为什么图卷积是这样定义的,具体流程是什么,我们来进一步分析。
图卷积的主要思想是让每个节点聚合自身和邻居节点的信息
,从而捕捉图结构中的局部和全局特征。那么如何实现这一点呢?
还是下面这个图结构:
首先,我们让邻接矩阵 A A A与特征矩阵 X X X相乘即可得到邻居节点的信息,看看怎么个回事?
对于A节点,其邻居只有E节点,我们让邻接矩阵 A A A与特征矩阵 X X X相乘后,得到的结果的第一行就是A节点获取了E节点的信息,如图中黑框所示。
但是这样做还存在一个问题,我们没有把节点自身的特征考虑进来
因此我们对邻接矩阵 A A A进行一定的操作,得到新的邻接矩阵 A ~ \tilde{A} A~:
A ~ = A + I N \tilde{A}=A+I_N A~=A+IN
其中 I N I_N IN为单位矩阵
那么 A ~ \tilde{A} A~与特征矩