目录
来源
-
解决:发现了很多CNN、RNN无法解决或者效果不好的问题——图结构的数据
具体: -
对CNN:
核心在于kernel,kernel是一个个小窗口,在图片上平移,通过卷积的方式来提取特征。这里的关键在于图片结构上的平移不变性:一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享 -
对RNN:
对象是自然语言这样的序列信息,是一个一维的结构,通过各种门的操作,使得序列前后的信息互相影响,从而很好地捕捉序列的特征。 -
共同点:都属于欧式空间的数据,欧式空间的数据的特点就是结构很规则
-
问题:
现实生活中,有很多不规则的数据结构,典型的就是图结构,或称拓扑结构,如社交网络、化学分子结构、知识图谱等等;
做目标识别的时候,关注的实际上只是二维图片上的部分关键点,这些点组成的也是一个图的结构。
图的结构是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效
作用
- 跟CNN的作用一样,就是一个特征提取器
- 设计了一种从图数据中提取特征的方法,可以使用这些特征去对图数据进行
- 节点分类(node classification)、图分类(graph classification)、边预测(link prediction),还可以得到图的嵌入表示(graph embedding)
原理
解释
- 图卷积是利用其他结点的信息来推导该结点的信息
- 图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。
- 图数据中的空间特征具有以下特点:
1) 节点特征:每个节点有自己的特征;(体现在点上)
2) 结构特征:图数据中的每个节点具有结构特征,即节点与节点存在一定的联系。(体现在边上)
总地来说,图数据既要考虑节点信息,也要考虑结构信息,图卷积神经网络就可以自动化地既学习节点特征,又能学习节点与节点之间的关联信息。
核心
图卷积的核心思想是利用边的信息对节点信息进行聚合从而生成新的节点表示。
GCN的本质目的就是用来提取拓扑图的空间特征。
图的概念
- 一批图数据,其中有N个节点(node),每个节点都有自己的特征
模型的输入
对于图,我们习惯上用G=(V,E)表示。这里V是图中节点的集合,而E为边的集合,这里记图的节点数为N。一个G中有3个比较重要的矩阵: - 特征矩阵X:这些节点的特征组成一个N×D维的矩阵
- 邻接矩阵A(adjacency matrix):各个节点之间的关系会形成一个N×N维的矩阵
- 度矩阵D:degree matrix,每个节点的度指的是其连接的节点数,这是一个对角矩阵,其中对角线元素
层特征传播公式
A波浪=A+I,I是单位矩阵
D波浪是A波浪的度矩阵(degree matrix),公式为
H是每一层的特征,对于输入层的话,H就是X
σ是非线性激活函数
-
这个部分,是可以事先算好的,因为D波浪由A计算而来,而A是我们的输入之一
- 用这个公式就可以很好地提取图的特征
上图中的GCN输入一个图,通过若干层GCN每个node的特征从X变成了Z,但是,无论中间有多少层,node之间的连接关系,即A,都是共享的。
学习新特征
目标
从图的最初始特征X出发学习到更抽象的特征,比如学习到了某个节点的高级特征,这个特征根据图结构融合了图中其他节点的特征,就可以用这个特征用于节点分类或者属性预测。那么图网络就是要学习新特征,用公式表达就是:
k指的是网络层数,H(k)就是网络第k层的特征
提出
简单的神经网络层:
- 输入:邻接矩阵A和node的特征H;
- 直接做一个内积,
- 再乘一个参数矩阵W,
- 然后激活一下,相当于一个简单的神经网络层
步骤
将上述学习分成三个部分:
变换(transform):对当前的节点特征进行变换学习,这里就是乘法规则(Wx);
聚合(aggregate):聚合领域节点的特征,得到该节点的新特征,这里是简单的加法规则;
激活(activate):采用激活函数,增加非线性。
首先这里的权重是所有节点共享的,类比于CNN中的参数共享;另外可以将节点的邻居节点看成感受野,随着网络层数的增加,感受野越来越大,即节点的特征融合了更多节点的信息。直观的图卷积示意图如下:
图卷积
上述的加法规则只是一个简单实现,其存在两个问题:
-
在计算新特征时没有考虑自己的特征:由于A的对角线上都是0,所以在和特征矩阵H相乘的时候,只会计算一个node的所有邻居的特征的加权和,该node自己的特征却被忽略了
**改进:**给图中每个节点增加自连接,给A加上一个单位矩阵 I ,这样就让对角线元素变成1
- 采用加法规则时,对于度大的节点特征越来越大,而对于度小的节点却相反,这可能导致网络训练过程中梯度爆炸或者消失的问题。
**改进:**可以对邻接矩阵进行归一化,使得A]的每行和值为1,在实现上可以乘以度矩阵的逆矩阵
这里的度矩阵是更新[公式]后重新计算的。这样我们就得到
相比加法规则,这种聚合方式其实是对领域节点特征求平均,这里:
由于
这种聚合方式其实就是求平均,对领域节点的特征是求平均值,这样就进行了归一化,避免求和方式所造成的问题。
更进一步地,我们可以采用对称归一化来进行聚合操作,这就是论文1中所提出的图卷积方法:
这种新的聚合方法不再是单单地对邻域节点特征进行平均,这里:
这种聚合方式不仅考虑了节点i的度,而且也考虑了邻居节点j的度,当邻居节点j的度较大时,而特征反而会受到抑制。
定义了图卷积,我们只需要将图卷积层堆积起来就构成了图卷积网络GCN:
分类
图神经网路(GNN,Graph Neural Network)是一个庞大的家族,如果按照f分类,其可以分成以下类型:
可以看到GCN只是其中的一个很小的分支,我们上面所述的GCN其实是属于谱图卷积。
特点
==即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征就已经十分优秀了!==这跟CNN不训练是完全不一样的,后者不训练是根本得不到什么有效特征的。
- GCN 是对卷积神经网络在 graph domain 上的自然推广
- 它能同时对节点特征信息与结构信息进行端对端学习,是目前对图数据学习任务的最佳选择。
- 图卷积适用性极广,适用于任意拓扑结构的节点与图。
- 在节点分类与边预测等任务上,在公开数据集上效果要远远优于其他方法。
常见问题
-
对于很多网络,我们可能没有节点的特征,这个时候可以使用GCN吗?
答案是可以的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I 替换特征矩阵 X。 -
我没有任何的节点类别的标注,或者什么其他的标注信息,可以使用GCN吗?
当然,就如前面讲的,不训练的GCN,也可以用来提取graph embedding,而且效果还不错。
-GCN网络的层数多少比较好?
论文的作者做过GCN网络深度的对比研究,在他们的实验中发现,GCN层数不宜多,2-3层的效果就很好了。
参考
GCN强烈推荐!解释原理都很好
GCN归一化解释
图卷积神经网络(GCN)入门