机器学习论文笔记-Semi-Supervised Classification with Graph Convolutional Networks

Semi-Supervised Classification with Graph Convolutional Networks

Thomas N.Kipf Max Welling

University of Amsterdam

Canadian Institute for Advanced Research(CIFAR)

Introduction

本文发表在ICLR2017,作者来自阿姆斯特丹大学,二作Max Welling也是CIFAR实验室的,之前听过他关于Generalizing Convolutions for Deep Learning的报告,是个大牛,一作应该是他的博士生,个人主页做的挺不错的:PhD Student @ Univ. of Amsterdam,值得学习。

本篇文章的主要工作是将卷积扩展到图结构的数据中,能够得到比较好的数据表示,并且在半监督任务中也取得了不错的效果。

Semi-Supervised Classification on Graphs

图结构的数据在现实应用中非常常见,比如: Social Networks, Citation Netwoks, Knowledge Graphs等。

图半监督学习的setting是,在给定的图结构的数据中,只有少部分节点是有标记的,大部分节点是未标记的。其任务就是预测出未标记节点的label。

经典的方法大概可以分为两类:

1)Standard Approach

--基于平滑正则,即假设相邻的节点具有相似的label–[Zhu et al., 2003]

其中,第一项是fitting error,即在有标记数据上的误差,第二项是平滑正则项,两个节点的 A_{ij} 越大,表明越相关,则标记应该越接近。

但是,平滑性假设在一定程度上限制了模型的表达能力。

2) Embedding-based Approach

第二类方法是基于embedding的,大致可以分为两步:

a) 学习一个节点的embedding

b) 在学得的embedding上训练一个分类器。

Examples:

--DeepWalk –[Perozzi et al., 2014]

--node2vec –[Grover & Leskovec, 2016]

这种方法的主要缺点是,embedding和分类器是分开学习的,也就是说学得的embedding针对该分类任务来说不一定是最优的。

本文的Motivation就是能不能将卷积扩展到图结构的数据上,从而end-to-end的训练分类器。

Graph Convolutional Networks

首先给出GCN的符号定义:

对于一个图 G=(V, E),我们有输入 X 是一个 N\times D 的矩阵,表示每个节点的特征,同时有图的邻接矩阵 A 。我们希望得到一个 N\times F 的特征矩阵 Z ,表示我们学得的每个节点的特征表示,其中 F 是我们希望得到的表示的维度。

对于 L 层的神经网络来说,可以表示为: H^{l+1} = f(H^l,A) ,其中 H^0=X,H^L=Z

GCN可以通过简单的两个trick来理解。传统的图卷积,可以看做对于每一个节点,都加上其邻居节点的信息,如上图左所示,那么对于图来说,也可以通过下式完成类似的操作:

f(H^l,A)=\sigma(AH^lW^l)

不难看出,乘以邻接矩阵 A 就相当于对于每个节点,都加上了其邻居节点的feature,但是没有加自身的feature,除非该节点有自环。

所以第一个trick就是,对于每一个节点,都强行加上自环,即: A=A+I

第二个trick是, A 矩阵是没有正则化的,我们需要对其进行正则化,使得每一行的和都为1,比如 D^{-1}AD 是度矩阵,在论文中采用的方式是 D^{-\frac{1}{2}}AD^{-\frac{1}{2}}

采用这两个trick之后,propagation rule就变成了:

f(H^l,A)=\sigma(\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}}H^lW^l) 其中, \hat{A}=A+I

这是比较简单的理解本文提出的算法的方式。不过,作者也给这个propagation rule找到了理论解释。第一种理论解释是建立了该方法与经典的Weisfeiler-Lehman algorithm之间的联系,将该propagation rule解释为一种特殊的hash function。第二种是从Spectral Graph Theory推导而来。理论解释这里就不细说了,感兴趣的可以去看paper。方法直观容易理解,同时又能找到比较好的理论解释,这样就能发一篇比较好的文章了,膜拜。

另外,作者展示了一个用三层网络在karate club network数据上的结果,在没有用到任何节点信息的情况下,只利用图的邻接矩阵,就能够学得效果不错的表示,结果还是很Nice的

左图为数据信息,右图为学得的embedding


Semi-Supervised Classification

半监督的部分就比较简单了,就是简单的在最后一层加了一个有标记数据上的交叉熵作为Loss。

下面给了一个例子,一共有四类,每类各有一个有标记数据,发现学得的表示结果还是很不错的。

https://www.zhihu.com/video/968126545126281216

Experiments

实验部分作者采用了四个常用的数据集,三个citation networks和一个knowledge graphs,都取得了不错的效果。

CPU和GPU上的训练时间:

模型深度对性能的影响:

可以看出,3层左右的时候效果比较好。

Conclusions

总结的话,本文将卷积扩展到图结构的数据上并且提出了一个非常好的图半监督学习的方法,是一篇非常不错的工作,引用也已经有200+了。不管是做图的表示学习还是做图半监督学习,都值得follow一下。

另外,本文的写作也很值得学习,写的很好,膜!

代码链接: github.com/tkipf/gcn

参考文献

[1] Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.

[2] Perozzi B, Al-Rfou R, Skiena S. Deepwalk: Online learning of social representations[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014: 701-710.

[3] Grover A, Leskovec J. node2vec: Scalable feature learning for networks[C]//Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2016: 855-864.

[4] Niepert M, Ahmed M, Kutzkov K. Learning convolutional neural networks for graphs[C]//International conference on machine learning. 2016: 2014-2023.

[5] Yang Z, Cohen W W, Salakhutdinov R. Revisiting semi-supervised learning with graph embeddings[J]. arXiv preprint arXiv:1603.08861, 2016.

编辑于 2018-04-13

文章被以下专栏收录