图卷积网络(Graph Convolutional networks, GCN) 简述
1 背景
卷积神经网络(CNN)的输入是图片等具有欧几里得结构的图结构,也就是这样的图:
这样的“图”并不是广义上的“图”。我们经常需要提取广义的具有点和边的图的特征:
2 问题描述
我们的目标是提取出这种广义图结构的特征,进而完成一些任务,如标签补全等。
3 解决思路
在问题描述中我们提到两类特征:节点特征和图结构特征。如果我们使用节点特征进行标签补全,那么完全就可以看作是一个标准的结构化特征分类问题,所以我们现在的挑战是如何使用图结构特征帮助训练。公式化的描述为:
其中 H0=X。
解决思路I:
首先,我们可以使用一种简单的思路:
这里 W是上一层特征H的权重; δ是激活函数,此处可以使用简单的 Relu。
这种思路是基于节点特征与其所有邻居节点有关的思想。
邻接矩阵A与特征H相乘,等价于令,某节点的邻居节点的特征相加。
多层隐含层,表示我们想近似利用多层邻居的信息。
这样的思路存在两大问题:
- 如果节点不存在自连接(自身与自身有一条边),邻接矩阵A在对角线位置的值为0。但事实上在特征提取时,自身的信息非常重要。
- 邻接矩阵A没有被规范化,这在提取图特征时可能存在问题,比如邻居节点多的节点倾向于有更大的特征值。
解决思路II:
来源:参考文献[2]
基于以上问题,可以提出改进的思路:
这种思路解决了上述问题1和问题2:
- 解决问题1的方法是利用以下式子:
让邻接矩阵A与单位矩阵I相加,就引入了节点自连接的特征。
2. 解决问题2的方法是让邻接矩阵规范化,其中矩阵D的定义如下:
矩阵D是一个对角线矩阵,其对角线位置上的值也就是相应节点的度。
上述式子也可以表示为:
其中
其中di和dj分别表示节点i和节点j的度。
在这种思路下,使用多层隐含层进行训练,我们就可以使用多层邻居的信息。
4 训练过程
对于整个训练过程,我们只需要对各层的权重矩阵W进行梯度下降训练,而规范化后的邻接矩阵,在训练过程中实际上是个常量:
5 实际问题
我们可以用上述思路解决图数据的标签补全问题。在这个问题中,对于部分节点,我们有其标注的分类,而其他标签,我们需要训练好的模型帮助我们进行分类。
在训练过程中,我们可以看到特征提取层后的结果:
我们可以看到经过特征提取后,相似的节点被嵌入到了相近的位置。
------------------------need to read-----------------
(1)使用GCN的第一篇比较好理解的paper
https://blog.youkuaiyun.com/hongbin_xu/article/details/89670096
(2)一般工业界使用GCN的改进版graphSAGE
(3)graphattenion
(4)https://www.bilibili.com/video/av83519765?from=search&seid=4211414597548239676
(5)GCN挑战
怎么做大:采样fastgcn,asgcn
怎么做深:原因过拟合,过平滑。dropedge,highway