【论文阅读】Semi-supervised classification with graph convolutional networks

论文地址:[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks (arxiv.org)

引言

图神经网络GCN旨在解决的问题是“图中节点的分类问题,且数据集只有一小部分的节点有标签”,称之为“graph-based semi-supervised learning”。

这类问题在GCN之前的一种解决方法用如下公式表示:

这里的 L0是指有标签的那部分节点的分类损失,而 Lreg 是指对于没有标签的节点来讲,根据相邻节点的相似性,限制模型在无标签节点上的输出与和它相邻节点上的输出接近( Aij 是邻接矩阵的元素)。这是个很强的假设,许多实际情况并不是这样的,因此GCN旨在消除这个显式的图正则化限制。

公式

GCN的方式是直接将图中节点的连接关系A(邻接矩阵)作为模型的输入直接参与计算,而不是像上面那个方法那样“稍微有些隐晦地利用”。

GCN的层之间的递推公式如下:

Hl~ 是神经网络第l层的激活输出, H0~ 就是 X (各个节点的值组成的矩阵);

Wl 是可学习的权重矩阵;

A~=A+I ,是邻接矩阵再加上自连接,对角线元素从0变为1,表示每个节点和自身是连接着的;

D~ 是节点的度矩阵, Dii=∑j Aij ,代表与节点i直接连接的节点数(包括此节点自身)。

至于这个公式的来源,论文有提到推理过程,出发点是“图傅里叶变换、图卷积”,经过各种各样的简化(包括为了减少计算复杂度用切比雪夫多项式大致估算并做截断、利用神经网络尺度可学习的特性假设矩阵的最大特征值为2等),就得到了上述公式。

图傅里叶变换、图卷积我并不了解,是通过博客Dwzb:图傅里叶变换大致有了些了解,可参考。

GCN网络

损失的计算只在有标签的那部分节点上计算,不考虑无标签节点的输出。

此外,网络的输入中邻接矩阵A是在层与层的推进中是不变的(这与我之前的一个误解有关,我之前以为图神经网络是一种可以学习并输出图的连接结构的网络,这个假设导致刚开始看的时候总是理解不了,后来才醒悟GCN并不是为了学习图结构而设计,图结构必须是预先就知道并作为网络的输入。GCN不具备学习图结构的能力,只是对利用图结构更好更准确地对节点进行分类,解决的是分类问题。)

相关工作、实验、结果、讨论

(还没看)

工程实践用

作者公开了GCN的源码,地址:tkipf/pygcn: Graph Convolutional Networks in PyTorch (github.com)

一些带讲解的博客:

CODE 01: GCN on Pytorch - 知乎 (zhihu.com)

(1条消息) pytorch框架下—GCN代码详细解读_MelvinDong的博客-CSDN博客_gcn代码

此外,好像有一些与图数据、模型等相关的库,如Pytorch-Geometric、NYU的DeepGraphLibrary等,是从博客(1条消息) [PyG] 1.如何使用GCN完成一个最基本的训练过程(含GCN实现)_sooner高的博客-CSDN博客_gcn训练里看到的,以后有时间我要去学习了解下,说不定在用到的时候能省不少事。