《Self-Attention Graph Pooling》阅读笔记

《Self-Attention Graph Pooling》阅读笔记

  • 前言
  • 一、模型
    • 1.自注意图池化
      • 1).自注意力掩膜
      • 2).图池化
      • 3).SAGPool的变体
        • 1.多跳形式
        • 2.堆叠形式
        • 3.多头形式
    • 2.具体结构
      • 1).卷积层
      • 2).读出层
      • 3).全局池化模型
      • 4).层次池化模型
  • 二、实验
    • 1.数据集
    • 2.对比试验
    • 3.变体实验
    • 4.节点数的影响
  • 总结

前言


因为自己目前在做的实验也有可能涉及到图池化的方法,所以近期读的关于图池化的文章比较多。经常会在文章的相关工作中看到SAGPool,今天终于抽空把它看掉了。这篇文章最主要的贡献就是利用自注意力机制实现图池化,既利用了节点的特征,又利用了图的拓扑信息。

论文链接:https://arxiv.org/pdf/1904.08082.pdf

代码链接:https://github.com/inyeoplee77/SAGPool



一、模型

1.自注意图池化


整体框架如下图所示:
《Self-Attention Graph Pooling》阅读笔记_第1张图片
这是一个比较容易理解的模型。首先通过图卷积以及激活函数处理,得到各个节点的自注意力得分;其次,根据自注意力得分的排序,保留前k个得分最高的节点组成掩膜;最后,根据掩膜保留指定节点的特征以及这些节点之间的拓扑信息


1).自注意力掩膜


现在在模型中加入注意力机制已经不是什么新鲜事了。注意力机制说白了就是让模型多关注重要的信息,少关注不重要的信息。自注意力机制是注意力机制的改进版,减少了对外部信息的依赖,更善于捕捉特征的内在相关性。

首先通过图卷积的方法来计算节点的自注意力得分 Z ∈ RN × 1图卷积既能利用节点的特征,又能利用图的拓扑信息

在这里插入图片描述


其次根据各个节点自注意力得分的**降序**,**选择一定比例的节点进行保留**(按比例保留,可以不受输入节点数量的影响)

在这里插入图片描述
所保留节点的索引就构成了池化掩膜。



2).图池化


有了掩码之后,还需要定义池化后的图的特征矩阵以及邻接矩阵

特征矩阵:

  1. 根据掩膜索引,从原特征矩阵中抽取相应的特征向量
    在这里插入图片描述
  2. 将这些向量与其对应的自注意力系数相乘,得到下一层的特征矩阵
    在这里插入图片描述

邻接矩阵:

  1. 在原邻接矩阵中,抽取这些被保留节点之间的邻接关系构成下一层的邻接矩阵
    在这里插入图片描述


3).SAGPool的变体


1.多跳形式

在用图卷积计算自注意力得分时,通过添加二阶邻接矩阵的形式,将节点的二阶邻居考虑进来。记为SAGPollaugmentation

在这里插入图片描述

2.堆叠形式

在用图卷积计算自注意力得分时,通过堆叠两层GNN的形式,将节点的二阶邻居考虑进来。记为SAGPollserial

在这里插入图片描述

3.多头形式

通过多个并行的GNN分别计算节点的自注意力得分,最后取其均值作为结果。记为SAGPollparallel

在这里插入图片描述



2.具体结构


1).卷积层

有很多的图卷积方法可以使用,本文则采用了GCN。

在这里插入图片描述


2).读出层

将节点的特征聚合成一个长度固定的表示向量,本文采用了mean-pooling和max-pooling的拼接。

《Self-Attention Graph Pooling》阅读笔记_第2张图片


3).全局池化模型

《Self-Attention Graph Pooling》阅读笔记_第3张图片
每层的卷积结果进行拼接,整个模型仅作一次池化。


4).层次池化模型

《Self-Attention Graph Pooling》阅读笔记_第4张图片
模型进行多次池化,逐渐缩小图的尺寸;并且,每次池化后都接读出层,总结该图的特征表示。



二、实验

1.数据集

《Self-Attention Graph Pooling》阅读笔记_第5张图片



2.对比试验

《Self-Attention Graph Pooling》阅读笔记_第6张图片
不管是全局池化还是层次池化,SAGPool的效果都比对比方法要好一些。
节点数少的数据集上,全局池化模型要好;节点数多的数据集上,层次池化模型相对较好。
由于SAGPool比gPool多考虑了拓扑结构,所以性能有所提升。



3.变体实验

《Self-Attention Graph Pooling》阅读笔记_第7张图片
对比了不同框架的GNN对结果的影响,好像差不太多,略有起伏吧;对比了各种变体对结果的影响,除了SAGPoolh,parallel,M=2要差一点,其他的也不能说差别特别大吧。



4.节点数的影响

《Self-Attention Graph Pooling》阅读笔记_第8张图片
DiffPool是通过GNN的方式来生成分配矩阵,将节点分配到不同的簇中。这个方法有两个明显的弊端:第一,节点数对模型参数量影响相当大;第二,簇的数量要根据每个图重新选择。而SAGPool和gPool则没有这种弊端。



总结

继续我的康复训练。

你可能感兴趣的:(《Self-Attention Graph Pooling》阅读笔记)