图卷积网络GCN(3)
图卷积网络(GCN)
论文地址:Semi-supervised Classification with Graph Convolutional Networks
GCN是一种能够直接作用于图并且利用其结构信息的卷积神经网络。
这篇文章解决的是在一个图中,只有少部分结点的标签是已知情况下(Semi-supervised learning)的结点分类问题。
主要思想
正如GCN名字中的卷积所揭示的,该思想是由图像领域迁移到图领域的。然而图像通常具有固定的结构,而图的结构却更加灵活、复杂。
GCN的主要思想:对于每个结点,我们都要考虑其所有邻居以及其自身所包含的特征信息。假设我们使用 average() 函数,那对每一个结点进行上述操作后,就可以得到能够输入到神经网络的平均值表示。
在上图中,我们以一个简单的“文章相互引用网络”为例。每一个结点代表一篇文章,而边代表代表引用情况。在这里首先有一个预处理的步骤,也就是将论文的原始文本通过NLP嵌入的方法先转化为向量???。
接下来让我们考虑绿色结点。首先,得到包括其自身的所有节点的特征值(共5个节点),然后取平均(5个节点均值),然后该平均值向量可以输入到一个神经网络中(上图右侧),再得到一个向量。
上面的例子使用的是平均值函数,然而在实际应用当中我们可以采用更为复杂的聚合函数,GCN神经网络的结构也可以比上面图中的网络结构更复杂。如下图就是一个两层全连接GCN的例子,每一层的输出都作为下一层的输入。
直观理解与数学原理
接下来进一步介绍GCN背后的数学原理。
首先我们需要确定一些符号
我们要如何才能够得到一个结点的邻居的特征向量的信息呢?一个可能的解决方法就是将 A A A与 X X X进行相乘。
首先让我们看邻接矩阵的第一行,可以看到结点A连接着结点E。而结果矩阵中的第一行其实就是结点E的特征向量。类似地,结果矩阵中的第二行就是界定D与结点E的加和。通过这样一种处理,我们可以得到结点所有邻居的特征加和向量。
但是这样的处理存在着一些问题:
- 我们遗漏了所分析的结点本身的信息,比如,结果矩阵的第一行中应该包含结点A的信息才对。
- 我们应该使用平均值函数甚至是更好的加权平均值函数而非直接加和来处理邻居的特征向量。那为什么不能直接使用加和函数呢?原因就在于,当使用加和函数的时候,具有较大度值的结点会有很大的表示向量,而较低度的结点会有较小的聚合向量,这可能会导致梯度爆炸或梯度消失的问题(比如使用sigmoid函数时)。此外,神经网络对于输入数据的标度是非常敏感的,我们需要将这些向量进行标准化以消除潜在的问题。
GCN网络层数
网络层数的含义
网络的层数代表着结点特征所能到达的最远距离。比如一层的GCN,每个结点只能得到其一阶邻居身上的信息。对于所有结点来说,信息获取的过程是独立、同时开展的。当我们在一层GCN上再堆一层时,就可以重复收集邻居信息的过程,并且收集到的邻居信息中已经包含了这些邻居结点在上一个阶段所收集的他们的邻居结点的信息。这就使得GCN的网络层数也就是每个结点的信息所能达到的maximum number of hops。因此,我们所设定的层的数目取决于我们想要使得结点的信息在网络中传递多远的距离。需要注意的是,通常我们不会需要结点的信息传播太远。经过6~7个hops,基本上就可以使结点的信息传播到整个网络,这也使得聚合不那么有意义。
我们所使用的GCN应该有多少层?
在文章中,作者对于深层GCNs和浅层GCNs的效果开展了一些实验,由图可以看到,2~3层的网络应该是比较好的。当GCN达到7层时,效果已经变得较差,但是通过加上residual connections between hidden layers可以使效果变好。
小结笔记
- GCNs可以用于网络中的半监督学习问题
- GCNs可以用于学习网络中结点的特征与网络结构的信息
- GCN的主要思想是对每个结点的邻居及其自身的信息作加权平均,从而得到一个可以传入神经网络的结果向量。
- 可以通过加深GCNs以获得更大的信息传播范围,如果要较大的层数,需要残差连接以提升效果。通常使用2~3层的GCN。
- 当看到矩阵时,可以当作是一种矩阵标准化的过程。
- 有一个GCN的demo库,提供了一些包括GCN在内的GNN算法。
**注意:**本文所提出的框架目前仅适用于有权或无权的无向图。然后有向图是可以通过添加额外的结点转化为无相图的。
以下(以上)内容来自(参考):
https://blog.csdn.net/qq_43787862/article/details/113830925