图卷积网络Graph Convolutional Network ,简称GCN ,最近两年大热,取得不少进展。最近,清华大学孙茂松教授组在arXiv 发布了论文Graph Neural Networks: A Review of Methods and Applications,作者对现有的 GNN 模型做了详尽且全 面的综述。 GCN就是GNN中的一种重要的分支。
1.什么是卷积层Convolution
Convolution的数学定义是:
一般称g为作用在f上的filter或kernel。
大家常见的CNN二维卷积示意图如下:
在图像里面卷积的概念很直接,因为像素点的排列顺序有明确的上下左右的位置关系。
2.为什么要有GCN
图的结构一般来说是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。而传统的CNN、RNN是针对有限 的,有平移不变性的,然而,每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效。 所以很多学者从上个世纪就开始研究怎么处理这类数据了。这里涌现出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一种。
比如这个社交网络抽象出来的graph里面,有的社交vip会关联上万的节点,这些节点没有空间上的位置关系,也就没办法通过上面 给出的传统卷积公式进行计算。
GCN (图卷积神经网络),实际上跟CNN的作用一样,就是一个特征提取器,只不过它的对象是图数据。 GCN精妙地设计了一种 从图数据中提取特征的方法,从而让我们可以使用这些特征去对图数据进行节点分类(node classification)、图分类(graph
classification)、边预测(link prediction),还可以顺便得到图的嵌入表示(graph embedding)。
3.GCN的核心公式
GCN 的作用实际上和 CNN 差不多,都是一个特征提取器,只不过 GCN 的处理对象更加复杂。 GCN 设计了一种从图数据当中提 取特征的方法,从而可以应用到对图数据进行节点分类、图分类、边预测、还可以得到图的嵌入表示。
最终的GCN公式如下:
这个公式中:
A波浪=A+I ,I是单位矩阵
D波浪是A波浪的度矩阵(degree matrix)
H是每一层的特征,对于输入层的话, H就是X
σ是非线性激活函数
先不用考虑为什么要这样去设计一个公式。我们现在只用知道:
这个部分是可以事先计算好的就可以了。
所以对于不需要去了解数学原理、只想应用GCN来解决实际问题的人来说,你只用知道:哦,这个GCN设计了一个牛逼的公式, 用这个公式就可以很好地提取图的特征,而一个神经元包含一个函数和一个激活函数,这个公式就代表是神经元里的函数。这就够 了,毕竟不是什么事情都需要知道内部原理,这是根据需求决定的。为了直观理解,我们引用论文中的Zachary空手道俱乐部图网 络到特征表征的转换图如下:
4.PyTorch简单实现一个GCN
安装torch_geometric包。
构建方法:首先继承MessagePassing类,接下来重写构造函数和以下三个方法:
1. message() #构建消息传递
2. aggregate() #将消息聚合到目标节点
3. update() #更新消息节点
完整代码如下:
运行结果: