Semi-Supervised Classification With Graph Convolutional Networks

图卷积网络的半监督分类

提升了图卷积的性能,使用切比雪夫多项式的1阶近似完成了高效的图卷积架构。原文链接:Semi-Supervised Classification with Graph Convolutional Networks. Kipf & Welling 2017

一开始就提出,

2 Fast Approximate Convolutions On Graphs

介绍基于图的神经网络模型f(X,A)的理论基础:

H^{(l+1)} = \sigma( \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{l} ) (2)

\tilde{A} = A + I_N:加了自连接的无向图的邻接矩阵;

\tilde{D} = \sum_{j} \tilde{A}_{ij}:度矩阵的变形;

 

W^{l}:可训练的权重矩阵;

\sigma(\cdot):激活函数,如ReLU;

H^{(l)} \in R^{N * D}:matrix of activations in the l^{th}layer,H^{(0)} = X

这就是最终的propagation rule(前向传播规则),论文中提供了一个解释:Weisfeiler-Lehman algorithm,附录里面有解释,下面是原论文

Boris Weisfeiler and A. A. Lehmann. A reduction of a graph to a canonical form and an algebraarising during this reduction.Nauchno-Technicheskaya Informatsia, 2(9):12–16, 1968.

下面就是对这个公式的介绍和推导。

摘要:我们提出了一种在图结构数据上的半监督可扩展学习方法,基于高效的图卷积变体。契机是通过一个谱图卷积的局部一阶近似得到的我们的图卷积结构。我们的模型与图的边数呈线性关系,学习到的隐藏层可以对图的顶点和局部图结构同时进行编码。在引文网络和一个知识图谱数据集上的大量实验结果表明我们的方法比相关方法好很多。

引言:我们考虑一个对图顶点进行分类的问题,只有一小部分的顶点有标签。这个问题可以通过基于图的半监督学习任务建模,通过某些明确的图正则化方法(Zhu et al., 2003; Zhou et al., 2004; Belkin et al., 2006; Weston et al., 2012)可以平滑标签信息,举个例子,通过在loss function使用一个图拉普拉斯正则项:

式1依赖于“图中相连的顶点更有可能具有相同的标记”这一假设。然而,这个假设,可能会限制模型的能力,因为图的边并不是必须要编码成相似的,而是要包含更多的信息。
在我们的研究中,我们将图结构直接通过一个神经网络模型f(X,A)进行编码,并且在监督的目标{L_0}下对所有有标记的顶点进行训练,因此避免了损失函数中刻意的对图进行正则化。在图的邻接矩阵上使用f(⋅)可以使模型从监督损失{L_0}中分布梯度信息,并且能够从有标记和没有标记的顶点上学习到他们的表示。
我们的贡献有两点,首先,我们引入了一个简单的,表现很好的针对神经网络的对层传播规则,其中,这个神经网络是直接应用到图上的,并且展示了这个规则是如何通过谱图卷积的一阶近似启发得到的。其次,我们展示了这种形式的基于图的神经网络可以用于对图中的顶点进行更快更可扩展的半监督分类任务。在大量数据集上的实验表明我们的模型在分类精度和效率上比当前在半监督学习中的先进算法要好。 (来自博客:Semi-Supervised Classification With Graph Convolutional Networks)

2.1 Spectral Graph Convolutions

Spectral conv on graph定义为信号 x \in R^{N} (每个节点都是一个标量)与filterg_{\theta} = diag(\theta) (在Fourier domain中由\theta \in R^{N}参数化的filter): 

总结起来,2.1 讲的主要是

  • Spectral conv on graph的定义
  • 如何利用Chebyshev polynomials近似计算(3)式 

然后继续

2.2 Layer-wise Linear model

 将(5)式叠加,并且“each layer followed by a point-wise non-linearity”, 就形成了基于图卷积的神经网络。现在令K=1,那么函数就变成了关于L的线性函数,即“a linear function on the graph Laplacian spectrum”。论文上直观地认为,不去明确限定Chebyshev polynomials的参数可以缓和对图上局部邻居结构的过拟合,这种图有着非常广的节点度分布。

一直转化(具体过程可以参考原文或者博客:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS),变成7式:

重复这个operator会导致数值不稳定和梯度爆炸/消失,因此再用一个renormalization trick: 

I_N + D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \to \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}},令\tilde{A} = A + I_N\tilde{D}_{ii} = \sum_j \tilde{A}_{ij}

之前说X是N×1的,我们可以一般化,使X \in \mathbb{R}^{N \times C},C是input channels。于是(7)式化为:

Z = \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} X \Theta    (8)

 3 Semi-Supervised Node Classification

这里,定义两层GCN做图的半监督节点分类,先计算\hat{A} = \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}},然后有:

Z = f(X, A) = softmax(\hat{A} ReLU(\hat{A} X W^{0})W^{(1)})   (9)

  • ,注,softmax是row-wise的;
  • W^{0},W^{(1)}是通过gradient descent训练得到的,这里用的是batch gradient descent,每次training迭代用的都是整个数据集(需要将dataset放在内存)。
  • Stochasticity in the training process is introduced viadropout (Srivastava et al., 2014). We leave memory-efficient extensions with mini-batch stochasticgradient descent for future work. 训练过程中使用了dropout增加随机性。我们将在未来的工作使用mini-batch随机梯度下降。

Loss function

采用cross-entropy(交叉熵)

L = - \sum_{l \in y_L} \sum_{f =1}^{F} Y_{lf} lnZ_{lf}   (10)

y_L:有label的节点集,Y_lf是标签,Z_lf是output

 

实验:在实践中,用Tensorflow来高效地使用GPU计算(Mart ́ın Abadi et al. TensorFlow: Large-scale machine learning on heterogeneous systems, 2015.),(9)式使用sparse-dense matrix multiplications,复杂度O(|ε|CHF)

7.2 Limitations And Future work

  • 对内存要求比较高
  • 我们的框架并不天然地支持有向图和边的特征
  • 我们假设self-connection与edges to neighboring nodes的重要性是一样的。对于某些数据集可以introduce a trade-off parameter(引入一个权衡参数)λ in the definition of \tilde{A}

\tilde{A} = A + \lambda I_N \tag{11},其中 λλ 可以学习得到。

本文介绍了GCN谱方法的推导以及背后的思路等,这是一种比较严谨和理论的方法。但是,其实可以发现,在傅立叶域上定义出来的GCN操作,其实也可以在空间域上进行理解,其就是所谓的消息传递机制,或者说每次从邻居中聚集信息然后对中心节点进行更新。

如下图所示,红色节点S1的邻居正是蓝色节点B1,B2,B3,这些邻居节点根据一定的规则将信息,也就是特征,汇总到红色节点上。
 

Semi-Supervised Classification With Graph Convolutional Networks_第1张图片

通常来说,会加入一个线性变换矩阵W,以作为汇聚节点特征的特征维度转换(或者说是映射),于是有 

加入激活函数后有:

上式用更为紧致的矩阵形式表达:

不难发现,其实HW的结果乘上邻接矩阵A的目的其实在于选在一阶邻居节点,其实本质就是在于邻居节点的信息传递。但是上式还可以进行一些改进,比如信息聚合时没有考虑节点自己的信息,因此可以在图中加入一个自环,邻接矩阵变为 

 

度矩阵变为:

 为了标准化(或归一化)邻接矩阵A使得每行之和为1,可以令:

这样就行归一化以后,对邻居的聚合就不是求和了而是求平均值。 

例子(来自博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新):

Semi-Supervised Classification With Graph Convolutional Networks_第2张图片

Semi-Supervised Classification With Graph Convolutional Networks_第3张图片

 

Semi-Supervised Classification With Graph Convolutional Networks_第4张图片

上式对邻接矩阵进行了标准化,这个标准化称之为random walk normalization。然而,在实际中,动态特性更为重要,因此经常使用的是renormalization(GCN论文中的叫法):

Semi-Supervised Classification With Graph Convolutional Networks_第5张图片

 

Semi-Supervised Classification With Graph Convolutional Networks_第6张图片

renormalization后有:

这就是在GCN谱方法推导中中提到的拉普拉斯矩阵要这样标准化的原因了。
经过邻接矩阵添加自环(renormalization)之后,可以得到:

 这就是GCN用谱方法推导出来的公式,这样就可以从空间结构的角度理解一阶ChebNet(GCN)了。

关于带权图问题
GCN论文里的针对的是无权的无向图,并且采用的是平均聚合的方法,邻居之间没有权重。但是,现实生活中更多的是带权图。比如,我们都认识马化腾,但是张志东与马化腾的亲密度要比我们和马化腾的亲密度高得多。因此,可以预测张志东的工资比我们更接近马化腾。

不过GCN还是可以直接处理带权图,原来的邻居矩阵取值只能是0和1,现在可以取更多的权值。

关于有向图问题
前面的都是针对于无向图的问题,所有拉普拉斯矩阵是对称矩阵,但是在有向图中,就不能定义拉普拉斯矩阵了。目前的两种解决思路:
(a)要想保持理论上的完美,就需要重新定义图的邻接关系,保持对称性
比如这篇文章MotifNet: a motif-based Graph Convolutional Network for directed graphs
提出利用Graph Motifs定义图的邻接矩阵。

(b)个人认为基于空间域的GCNs都可以处理有向图,比如GraphSAGE、GAT等,聚合邻居信息时根据有向边判断是否是邻居即可

节点没有特征的图
对于很多网络,可能没有节点的特征,这个时候也是可以使用GCN的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I替换特征矩阵X,有的地方也用节点度作为节点特征。
 

 GCN的优点

1)、权值共享,参数共享,从AXWAXWAXW可以看出每一个节点的参数矩阵都是W,权值共享;
2)、具有局部性Local Connectivity,也就是局部连接的,因为每次聚合的只是一阶邻居;
上述两个特征也是CNN中进行参数减少的核心思想
3)、感受野正比于卷积层层数,第一层的节点只包含与直接相邻节点有关的信息,第二层以后,每个节点还包含相邻节点的相邻节点的信息,这样的话,参与运算的信息就会变多。层数越多,感受野越大,参与运算的信息量越充分。也就是说随着卷积层的增加,从远处邻居的信息也会逐渐聚集过来。
4)、复杂度大大降低,不用再计算拉普拉斯矩阵,特征分解

GCN的不足

1)、扩展性差:由于训练时需要需要知道关于训练节点、测试节点在内的所有节点的邻接矩阵AAA,因此是transductive的,不能处理大图,然而工程实践中几乎面临的都是大图问题,因此在扩展性问题上局限很大,为了解决transductive的的问题,GraphSAGE:Inductive Representation Learning on Large Graphs 被提出;
2)、局限于浅层:GCN论文中表明,目前GCN只局限于浅层,实验中使用2层GCN效果最好,为了加深,需要使用残差连接等trick,但是即使使用了这些trick,也只能勉强保存性能不下降,并没有提高,Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning一文也针对When GCNs Fail ?这个问题进行了分析。虽然有一篇论文:DeepGCNs-Can GCNs Go as Deep as CNNs?就是解决GCN局限于浅层的这个问题的,但个人觉得并没有解决实质性的问题,这方面还有值得研究的空间;
3)、不能处理有图:理由很简单,推导过程中用到拉普拉斯矩阵的特征分解需要满足拉普拉斯矩阵是对称矩阵的条件;

数据集格式:GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式

代码分析:图卷积网络GCN代码分析(Tensorflow版)

其实文章也不算很难,难的是里面涉及的数学知识推导,基础薄弱而没有时间的同学可以暂时放一放,看最终的结果即可(即论文的式(2)、式(8)、式(9)、式(10))

本文参考汇总:

SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

Semi-Supervised Classification With Graph Convolutional Networks

图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新

你可能感兴趣的:(GNN)