GCN相关论文整理

文章目录

    • GAT
      • 主要思想
        • pytorch实现代码
    • GraphSAGE
      • Mean aggregator
      • Pooling aggregator
      • LSTM aggregator
    • JK-Net
      • 问题提出
      • 网络结构

GAT

主要思想

对于一个一节点,计算所有邻接节点与其的相关系数(包括该节点自身),然后通过聚合这些邻接特征得到该节点的新特征。
GCN相关论文整理_第1张图片
相关系数的计算公式
GCN相关论文整理_第2张图片
N i N_i Ni表示节点 i i i的邻近节点,包括 i i i本身。

文中还涉及到一个新概念,叫多抽头注意力,如图1右边的图像所示,不同颜色的箭头都代表独立的一个注意力计算,进行多次注意力计算然后拼接或求平均。
GCN相关论文整理_第3张图片
在这里插入图片描述

pytorch实现代码

GraphSAGE

GCN相关论文整理_第4张图片
个人认为和空域gcn思想的区别不大,都是通过聚合邻接节点的信息来更新节点,只是提供了三种不同的的聚合方式(第5行类似于跳跃连接)。其目的和node2vec一样,得到节点的向量表示供下游任务使用。
:邻接节点是通过某个固定采样大小采样得到的(只采样了一阶邻接),并不像gcn要得到整个图的邻接矩阵,所有GraphSAGE属于归纳(inductive)学习,能泛化到未知节点,而GCN则是转导(transductive)学习,对于新增节点只能重新训练。

Mean aggregator

将自身特征与邻接节点特征一起求平均,也就是将如下公式替换掉上图算法中的4、5行,
在这里插入图片描述
此时就类似于gcn中的传播规则了。

Pooling aggregator

分为max pooling和mean pooling,如下是max pooling的聚合方式
在这里插入图片描述

LSTM aggregator

通过将邻居序列的嵌入作为LSTM的输入来实现邻居节点的聚合。

JK-Net

问题提出

我们知道,对于gcn,堆叠几层就相当于聚合几阶邻域的节点的信息,对于比较中心且密集的节点,层数如果较深的话,聚合信息就会很快地扩展到全图,而对于那些比较边缘且稀疏的点,如果层数较少的话,就只能聚集到局部很少的信息。作者做了一个实验来验证。
GCN相关论文整理_第5张图片
如上图,方块形的节点为起始节点,蓝色为影响的节点,对比a、b,同样扩展4步,在核心的节点的影响分布几乎覆盖整个图,在边枝节点的影响分布就很少。对比b、c,随着步数的增加,影响分布会越来越广。
作者表示,太快的信息扩张可能会导致平均范围过广,丢失重要信息,同时在一个图的其他部分,为了稳定节点表示,一个充足的邻接信息可能是需要的。至此,作者提出了一个对每个节点和任务自适应调节聚合邻接范围的网络。

网络结构

GCN相关论文整理_第6张图片
如上图,是一个4层的JK-Net,每层的输出表示聚合了不同范围的邻接信息,将每层的输出都送到最后一层进行层级聚合来得到最终输出。
层级聚合分三种:
1、拼接
拼接 [ h v ( 1 ) , . . . , h v ( k ) ] [h_v^{(1)},...,h_v^{(k)}] [hv(1),...,hv(k)]之后我们可以进行一个线性变换,如果线性变换矩阵是共享的,则该方法并不是节点自适应的。
2、最大池化
m a x ( h v ( 1 ) , . . . , h v ( k ) ) max(h_v^{(1)},...,h_v^{(k)}) max(hv(1),...,hv(k)),按元素选取信息最重要的层,该方法是自适应的,同时没引入任何参数。
3、LSTM-attention
对于每个节点 v v v计算每层 l l l的注意力分数 s v ( l ) ( ∑ l s v ( l ) = 1 ) s_v^{(l)}(\sum_ls_v^{(l)}=1) sv(l)(lsv(l)=1),将 h v ( 1 ) , . . . , h v ( k ) h_v^{(1)},...,h_v^{(k)} hv(1),...,hv(k)输入到双向LSTM,为每层 l l l产生一个前向特征 f v ( l ) f_v^{(l)} fv(l)和反向特征 b v ( l ) b_v^{(l)} bv(l),将两者拼接 [ f v ( l ) ∣ ∣ b v ( l ) ] [f_v^{(l)}||b_v^{(l)}] [fv(l)bv(l)]进行一个线性映射再加个softmax得到每层的注意力分数 s v ( l ) s_v^{(l)} sv(l) ∑ l s v ( l ) h v ( l ) \sum_ls_v^{(l)}h_v^{(l)} lsv(l)hv(l)得到最终输出。同样该方法是自适应的,且适用于比较大而复杂的图结构。

作者将JK-Net结合GCN、GraphSAGE、GAT在不同的数据集上都取得了不错的效果提升,且对于不同复杂程度的图数据,要采用合适的层级聚合策略才能达到最好的效果。

你可能感兴趣的:(gcn,gat)