Press "Enter" to skip to content

GAT: Graph Attention Network | 论文分享

本文作者提出GATs方法,利用一个隐藏的self-attention层,来处理一些图卷积中的问题。不需要复杂的矩阵运算或者对图结构的事先了解,通过叠加self-attention层,在卷积过程中将不同的重要性分配给邻域内的不同节点,同时处理不同大小的邻域。作者分别设计了inductive setting和transductive setting的任务实验,GATs模型在基线数据集Cora、Citeseer、Pubmed citation和PPI数据集上取得了state-of-the-art的结果。

 

GAT

 

将卷积泛化到图表数据领域的方法可以分类为谱方法和非谱方法。其中,谱方法是基于图的谱表达,这类方法已经成功的运用在上下文节点分类上。非谱方法直接在graph上定义卷积,核心是定义一个函数,它作用在中心节点的邻居集合上,并且保留权重共享的属性,这个里每个中心节点邻居集合的大小不确定。Attention机制多用于基于序列的任务中。 Attention机制的特点是,它的输入向量长度可变,通过将注意力集中在最相关的部分,以此做出决定。 attention机制结合RNN或者CNN的方法,在许多任务上取得了不错的表现。

 

基于这两个方面的工作,作者提出了基于attention的图卷积架构,在图结构数据上实现节点的分类。主要方法是,通过遵循self-attention策略,邻域节点参与计算每个中心节点的隐含表达。

 

先构建一个基础的block,整个graph attention网络都是基于这个block叠加构建的。这个基础block叫做graph attention layer。

 

 

layer的输入是N个长度为F的特征向量, 。输出是N个长度为F’的特征向量, 。要得到充分的,将输入特征转化为高级特征的表达能力,至少需要一个线性变换。共享线性变换权重矩阵,运用在所有节点上。再为每个节点加上self-attention。这是一个共享的attention机制 ,a将两个长度为F’的向量转化为一个标量,作为attention系数。

 

 

上式表示的意义是,节点j的特征,对节点i的重要性。在普遍情况下,对于注意力机制,允许其他所有节点参与目标节点特征的计算,也就是说不考虑图结构信息。这里,通过masked attention注入图结构信息,这样一来,对于节点j,只计算节点j的邻居节点i 的注意力系数 。这里邻居节点只考虑一度邻居,为了使注意力系数更容易比较,使用softmax将其归一化。

 

 

作者的实验中,注意力机制a是一个权重向量a参数化的单层前馈神经网络。网络使用非线性函数LeakyReLU作为激活函数。注意力系数的完整计算公式如下。

 

 

其中 表示转置,||代表连接操作。

 

一旦得到归一化的关注系数,就利用关注系数与对应的节点特征做线性变换,再进行一次非线性变换后,作为节点特征的输出。

 

 

对于节点i,它的一阶邻居节点集合为 ,根据节点i对每个邻居节点j的关注系数,计算节点i的输出

 

为了保证注意力机制的稳定性,执行mult-head attention,同时执行三个相互独立的attention机制,并将三次的输出结果concat或者计算平均。

 

 

在最后一层网络,如果执行多头attention机制,concat将不再合适,此时,在最终的非线性判断函数之前,计算平均 :

 

 

实验

 

作者设计了四个graph based数据任务,执行了GAT模型与一系列强大的baseline方法的比较评估。在Transductive和Inductive的配置下,GATs方法均达到state-of-art的效果。

 

 

在transductive的任务中,比较平均分类准确度。为了公平的评估注意力机制的优势,作者进一步评估了一个计算64个隐含特征的GCN模型,并同时尝试了ReLU和ELU激活。由表1,GAT方法在数据集Cora、Citeseer的分类准确度比GCNs高1.5%和1.6%。这说明,将不同的权重分配给邻域内不同的邻居能够有效提高模型表达能力。

 

 

对于Inductive任务,取两个模型从未见过的graph测试,比较节点的F1-score。在PPI数据集上,GAT模型的表现比GraphSAGE的最好成绩还要高20.5%,GAT模型具有良好的inductive setting运用潜力。

 

 

参考论文:

 

https://arxiv.org/pdf/1710.10903.pdf

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注