论文笔记:详解图注意力网络(GAT)

整理了GAT( ICLR2018 Graph Attention Network)论文的阅读笔记

背景

图神经网络的任务可以分为直推式(Transductive)学习与归纳(Inductive)学习:

Inductive learning,翻译成中文可以叫做 "归纳式学习",就是从已有数据中归纳出模式来,应用于新的数据和任务。在图学习的训练过程中,看不到没有标注的节点,训练时只需要图的局部,不必一次性输入整张图,由于这个特性,归纳式学习是可以迁移的。即,在这个图上训练好的模型,可以迁移到另外一个图中使用。

Transductive learning,翻译成中文可以叫做 "直推式学习",指的是由当前学习的知识直接推广到给定的数据上。就是训练期间可以看到没有标注的节点(训练需要整个图里面所有的节点参与),那么换一个图就需要重新训练。

之前对将卷积网络推广到图结构的研究主要包括谱方法(spectral approaches)和非谱方法(non-spectral approaches)。

谱方法(代表:GCN)学习到的滤波器依赖于拉普拉斯特征基,而拉普拉斯特征基依赖于图的结构。因此,在特定结构上训练的模型不能直接应用于具有不同结构的图。必须基于相应的图结构才能学到拉普拉斯矩阵,对于一个图结构训练好的模型,不能运用于另一个图结构,这就是GCN的一大弊端:无法完成inductive任务,即无法处理动态图。

非谱方法(代表:GraphSAGE)以归纳的方式计算节点表示,通过对每个节点的固定大小的邻域进行采样,然后对其执行特定的聚合器(例如对所有采样邻域的特征向量取平均值)。取得了很好的效果。

本文引入了一种基于注意力的架构来执行图结构数据的节点分类。其思想是通过对其邻居节点的自注意力策略计算图中每个节点的隐藏表示。它具有以下几个特性:

  1. 操作效率高,因为它可以跨节点邻居对并行化。
  2. 通过对相邻节点指定权重,可将其应用于度数不同的节点。
  3. 该模型直接适用于归纳学习(Inductive learning)问题,包括模型必须推广到完全看不见的图的任务。

图注意力网络的构建模块

模块的输入:节点特征的集合 h h h:
h = { h 1 , h 2 , . . . , h N } h ⃗ i ∈ R F h={\{h_1,h_2,...,h_N\}}\ \ \vec h_i\in R^F h={h1,h2,...,hN} h i∈RF  其中,N是节点数量,F是每个节点的特征维度,模块的输出是更新后的节点特征集合 h ′ h^{'} h′,为了获得更新的特征矩阵,首先对每个节点应用一个权值共享的参数矩阵 W ∈ R F ′ × F W\in R^{F^{'}×F} W∈RF′×F,然后我们对每个节点对执行自注意力机制: a : R F ′ × R F = R a:R^{F^{'}}×R^F=R a:RF′×RF=R计算相应的注意力系数, e i j e_{ij} eij表示节点j对节点i的重要性:
e i j = a ( W h i , W h j ) e_{ij}=a(Wh_i,Wh_j) eij=a(Whi,Whj)  在GAT中,作者提出两种运算方式:Global graph attention和Mask graph attention,Global graph attention指的是就是每一个顶点i都对于图上所有顶点都进行attention运算。这种方法的弊端明显:(1)计算量大;(2)丢掉了图结构特征,无异于自废武功。Mask graph attention指的是注意力机制的运算只在邻居顶点上进行。很明显,这才是正确的打开方式,对于每一个节点i,我们对每一个节点 j ∈ N i j \in N_i j∈Ni计算他们的注意力系数, N i N_i Ni就是节点i的所有一阶邻居节点,然后应用一个softmax归一化:
a i j = s o f t m a x j ( e i j ) = e x p ( e i j ) ∑ k ∈ N i e x p ( e i k ) a_{ij}=softmax_j(e_{ij})=\frac {exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})} aij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)  文章所使用的注意力机制a是一个单层前馈网络,参数化为 a ⃗ ∈ R 2 F ′ \vec a\in R^{2F^{'}} a ∈R2F′,应用LeakyReLU非线性激活函数,最终的展开式为:
a i j = e x p ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∣ ∣ W h ⃗ j ] ) ) ∑ k ∈ N i e x p ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∣ ∣ W h ⃗ k ] ) ) a_{ij}=\frac {exp(LeakyReLU({\vec a}^T[W\vec h_i||W\vec h_j]))}{\sum_{k\in N_i}exp(LeakyReLU({\vec a}^T[W\vec h_i||W\vec h_k]))} aij=∑k∈Niexp(LeakyReLU(a T[Wh i∣∣Wh k]))exp(LeakyReLU(a T[Wh i∣∣Wh j]))  其中 ∣ ∣ || ∣∣表示串联操作,可视化的样子:

但是这样显得有些单薄了,作者又发现使用多头注意力可以为模型带来进一步提升,于是就变成了这样的情况:
  上图是节点1在其邻域上的多头注意(三头)的图示。不同的箭头样式和颜色表示独立的注意力计算。通过将每个头部的聚合特征进行连接或平均,对特征矩阵进行更新。于是,假如我们加入了k头注意力机制,公式就变成了:
h i ′ ⃗ = ∣ ∣ k = 1 K σ ( ∑ j ∈ N i α i j k W k h i ⃗ ) \vec{h_i^{'}}={||{k=1}^K}\sigma(\sum{j\in N_i}\alpha_{ij}^kW^k\vec{h_i}) hi′ =∣∣k=1Kσ(j∈Ni∑αijkWkhi )  其中, ∣ ∣ || ∣∣表示拼接, α i j k \alpha_{ij}^k αijk表示第k个头的归一化注意力系数, W k W^k Wk是线性变换的参数矩阵,如果是拼接的设置,那我们最终会得到的每个节点的特征维度就不再是 F F F,而是 K F KF KF。对于最终预测层,concate操作可能不那么敏感了,所以我们直接用K平均来取代concate操作:
h i ′ ⃗ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h i ⃗ ) \vec{h_i^{'}}=\sigma(\frac 1K{\sum_{k=1}^K}\sum_{j\in N_i}\alpha_{ij}^kW^k\vec{h_i}) hi′ =σ(K1k=1∑Kj∈Ni∑αijkWkhi )  到这里,模型的推导的就结束了。

与其他模型对比

  1. 首先,GAT的算法复杂度很低,单个头计算得到 F ′ F{'} F′的时间复杂度为 O ( ∣ V ∣ F F ′ + ∣ E ∣ F ′ ) O(|V|FF{'}+|E|F{'}) O(∣V∣FF′+∣E∣F′),其中, F F F是一个节点的特征维度, ∣ V ∣ |V| ∣V∣和 ∣ E ∣ |E| ∣E∣是节点和边的个数,这种复杂性与GCN相当,如果有K个头,就将参数需求乘以K倍,每个头是可以并行化计算的。
  2. 与GCN相比,GCN与GAT都是将邻居顶点的特征聚合到中心顶点上(一种aggregate运算),利用graph上的local stationary学习新的顶点特征表达。不同的是GCN利用了拉普拉斯矩阵,GAT利用attention系数。一定程度上而言,GAT会更强,因为顶点特征之间的相关性被更好地融入到模型中,并且GAT对干扰有更强的鲁棒性。
  3. 与LSTM的方法相比,Hamilton等人(2017)最近发表的归纳方法对每个节点的固定大小的邻域进行采样,以保持其计算足迹的一致性;这不允许它在执行推理时访问整个邻域。此外,当使用基于LSTM的邻域聚合器时,假设存在一个跨邻域的一致的顺序节点排序,并且作者通过持续地向LSTM提供随机排序的序列来纠正它。我们的技术没有这些问题------它可以处理整个邻域(代价是可变的计算空间,这仍然与GCN等方法相当),并且不假设其中有任何排序。
  4. 此外,GAT的运算方式是逐顶点的运算(node-wise),每一次运算都需要循环遍历图上的所有顶点。这意味着摆脱了拉普利矩阵的束缚,使得GAT可以应用于有向图。GAT中重要的学习参数是 w w w与 a ( ⋅ ) a(\cdot) a(⋅) ,因为上述的逐顶点运算方式,这两个参数仅与顶点特征相关,与图的结构无关。所以测试任务中改变图的结构,对于GAT影响并不大,只需要改变 N i N_i Ni,重新计算即可。这让它可以进行Inductive learning。

实验

文章在四个经典的数据集上进行试验,数据集信息:
1、半监督学习transductive learning,实验设置:

两层 GAT

在Cora 数据集上优化网络结构的超参数,应用到Citeseer 数据集

第一层 8 head, F'=8 , ELU 作为非线性函数

第二层为分类层,一个 attention head 特征数C,后跟 softmax 函数,为了应对小训练集,正则化(L2)

两层都采用 0.6 的dropout,相当于计算每个node位置的卷积时都是随机的选取了一部分近邻节点参与卷积

实验结果:

2、归纳学习inductive learning,实验设置:

三层GAT 模型

前两层 K=4, F1=256 ,ELU作为非线性函数

最后一层用来分类 K=6, F'=121,激活函数为sigmoid

该任务中训练集足够大不需要使用正则化和 dropout

实验结果:

论文地址:https://arxiv.org/abs/1710.10903

代码地址: https://github.com/Diego999/pyGAT

欢迎点赞 关注 留言私信交流 📝 如有错误敬请指正!

本文的引用部分来自:图注意力网络(GAT)详解

相关推荐
PythonFun2 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
程序喵;2 小时前
A Learning-Based Approach to Static Program Slicing —— 论文笔记
论文阅读
炼丹师小米3 小时前
Ubuntu24.04.1系统下VideoMamba环境配置
python·环境配置·videomamba
GFCGUO3 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
985小水博一枚呀4 小时前
【深度学习基础模型】神经图灵机(Neural Turing Machines, NTM)详细理解并附实现代码。
人工智能·python·rnn·深度学习·lstm·ntm
萧鼎5 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
IFTICing6 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
大神薯条老师6 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析
程序员爱德华6 小时前
Python环境安装教程
python
huanxiangcoco6 小时前
152. 乘积最大子数组
python·leetcode