本文《Semi-Supervised Classification with Graph Convolutional Networks》受到卷积神经网络的启发,提出了卷积神经网络的变种方法,可以直接在图结构的数据上直接进行计算. 模型的计算复杂度与图结构边(edges)的数量呈线性增长. 隐层节点的参数权重可以用来表达子图(local graph)的特征或是节点(nodes)的特征.

论文地址:
https://arxiv.org/pdf/1609.02907.pdf

引言

在现实世界中,有许多数据的结构可以被当作是图结构. 例如, 文章与文章之间的关系. 可以把每篇文章看作是图结构中的节点; 而每篇文章的所属的学科(“数学”, “文学”, “生物”, “历史”等等)可以被看作是节点的类别(label); 此外, 每篇文章是否包含特定关键词的列表向量可以看作是节点的特征(feature); 文章与文章之间的引用关系可以形成一个邻接矩阵(adjacency matrix).

数据集

引用网络数据集有Citeseer, Cora, Pubmed. 知识图类型的数据集有NELL.


例如: Cora中的Features维度为1433, 指的是每篇文章用固定的1433个关键词来表征, 文章中出现了某个关键词, 则在该维度上置为1, 否则为0.

想法的来源

图的定义

图半监督学习 python代码_图结构


V代表节点, N为节点个数, E代表边.

邻接矩阵A的定义:

一个最简单想法

假设邻接矩阵为A, 节点的特征为图半监督学习 python代码_论文_02

图半监督学习 python代码_人工智能_03拼接在一起作为全连接网络的输入, 图半监督学习 python代码_图结构_04 , 则如下图所示:


这样处理的问题在于, 有时网络节点的个数极其巨大, 导致网络的参数量也会急剧增加.此外, 网络的输入节点会随着图节点个数的变化而变化, 只要节点个数一变, 网络就需要重新训练. 丝毫没有泛化能力.

CNN的思想

CNN在图像领域取得了很好的实践效果, 其最重要的思想便是”权重共享(weight sharing)”, 将同一组参数运用在图像的不同位置.



假设CNN的卷积核为3x3, 那么对于中间点的激励,只与其自身和它周围的点会参与计算.

将CNN的思想用在图结构上


GCN借助CNN共享权重的想法, 某个节点的激励只与它自身和与它邻接的节点有关. 与CNN类似的, 得到下式:


其中, W是可训练参数, h是节点的特征, 图半监督学习 python代码_人工智能_05是激励函数.

此时当图节点的个数发生变化时, 只需要改变邻接矩阵, 而训练好的权重可以重复利用.

写成矩阵的形式:


如果将自身节点与邻接节点同等对待:

模型的整体结构


以Cora分类为例, 输入图半监督学习 python代码_邻接矩阵_06, 图半监督学习 python代码_人工智能_07.

假设隐层维度为16, 分类层维度为7, 则可训练的参数总数为:(1433x16 + 16 + 16x7 + 7).

实验结果


因为是半监督学习, 所有的样本都会参与训练, 但是只有一小部分的样本是有标签的(Label rate). 没有加上标签的数据均被作为验证集(validation dataset). 以Cora为例, 只有140篇文章有标签(2708*0.052). 但是邻接矩阵是完全已知的(2708 X 2708).


可以看到GCN在各个数据集上的表现均大幅超越了以前的方法.

结论

(1)本文提出了一种用于图结构数据的半监督分类的新方法GCN(Graph Convolution Network).
(2)该方法具有良好的扩展性, 在标准数据集上的表现也大幅领先与同期的其他方法.