论文 | 图注意力网络 | GRAPH ATTENTION NETWORKS
编者 | 梦梦
论文链接:https://arxiv.org/abs/1710.10903
摘要
本文提出了图注意力网络(GATs),这是一种新的作用在图结构数据上的神经网络框架。Attention机制利用masked self-attentional layers来解决以前基于图卷积或者与图卷积近似的前人方法中的不足之处。通过堆叠这样的层 —— 当层中节点在更新自身特征的时候能够兼顾它所有邻居节点的特征,我们在不引入任何形式的密集型矩阵计算操作(如计算逆矩阵)和不依赖于先验地了解图结构的情况下,隐式地对于一个节点的所有邻居节点指定不同的权重。采用这种方法,我们同时解决了许多基于频谱的图神经网络的关键性的挑战。我们的模型也适用于归纳和转导学习。我们的GAT模型在4个已建立的转导和归纳图基准数据集上达到了最好的效果(Cora,Citeseer,Pubmed citation network datasets,protein-protein interaction dataset(在训练的过程中测试图是不可见的))。
1、简介
卷积神经网络(CNNs)已经被成功地应用于解决例如图像分类(He et al.,2016),语义分割(Jegou et al.,2017)或机器翻译(Gehring et al.,2016)等领域。在这些应用领域底层的数据的表示都有类似网格的结构。这样的体系结构高效地重复利用其局部的可学习的卷积核,这些卷积核被用在所有的输入位置上。
然而,许多有趣的任务,它们的数据不能被表示为类似网格的结构。所不同的是,这些任务的数据是在不规则域中的。例如3D网格,社交网络,电话网络,生物网络和脑连接体的情况等。像这样的数据,通常被表示为图的形式。
现有文献中已经有许多尝试,将神经网络拓展以解决任意的结构化图。早期的工作使用递归神经网络来处理在图域中表示的数据,作为有向非循环的图(Frasconi et al.,1998;Sperduti & Starita,1997)。图神经网络(GNNs)在2005年Gori et al.的文章中和2009年的Scarselli et al.的文章中被当作递归神经网络的推广而介绍。它可以处理更加广泛的图的类别,例如:循环图、有向图和无向图。GNNs由迭代的过程组成,该过程传播节点的状态直到平衡;紧随其后的是一个神经网络,神经网络为每个节点在它的状态下生成输出。这个想法在Li et al.(2016)年的文章中被采纳和提升,在这篇文章提出在传播的过程中采用门控递归单元(Cho et al.,2014)。
然而,人们越来越关注将卷积推广到图域。这个方向上的进展经常被分为频谱方法和非频谱方法。
一方面,频谱方法通过图的频谱表示来实现,且已经成功地应用于节点分类的上下文中。在Bruna et al.(2014)年的文章中,通过计算图的拉普拉斯矩阵的特征分解,卷积被定义在傅里叶域。这导致潜在的密集的计算和非空间局部化的卷积核。这些问题通过随后的工作被解决。Henaff et al.(2015)引入频谱滤波器的参数化来使得滤波器在空间上是局部化的,这些滤波器都有着平滑的系数。后来,Defferrard et al.(2016)提出将图的拉普拉斯进行切比雪夫拓展来近似卷积核,这样一来就将计算拉普拉斯的特征向量的需求移除了,产生空间局部化的卷积核。最后,Kipf & Welling(2017)简化了前人的方法,他们限制卷积核在每个节点周围的1-step邻域。然而,在前面提到的所有的频谱方法方法中,学得的滤波器依赖拉普拉斯的特征基,这会依赖于图结构。因此,一个在特定的图结构上训练出来的模型不能被直接应用在一个有着不同结构的图上。
在另一个方面,我们有非频谱的方法(Duvenaud et al.,2015;Atwood & Towsley,2016;Hamilton et al.,2017),这些方法直接将卷积定义在图上。卷积操作实施于在空间上相近的邻居节点的节点组。这些方法的挑战之一是如何定义一个可以在不同邻居数目的节点上进行的操作,而且还要保持CNNs的权值共享的特性。在一些情况下,这要求为每个节点的度学习一个具体的权值矩阵(Duvenaud et al.,2015),使用转移矩阵的幂来定义邻居,当学习每个输入通道和邻居的度的权重的时候(Atwood & Towsley,2016),或者提取和归一化包含固定数量节点的邻居(Niepert et al.,2016)。Monti et al.(2016)提出混合CNNs模型(MoNet),它是一种空间的方法,提供了一种将CNN的架构统一的泛化到图上的方法。最近,Hamilton et al.,(2017)引入GraphSAGE,这是一种以归纳的方式计算节点表示的方法。这种技术的运作方式是对每个节点的固定大小的邻域进行采样,然后对这个固定大小的邻域执行特定的聚合器(例如对所有采样的邻居节点的特征向量取平均值,或者将他们通过前馈神经网络以后的的结果在送入递归神经网络),这个方法已经在几个大规模的归纳学习的基准数据集上产生了令人印象深刻的表现。
以下我们直接进入重点部分的介绍:图注意力网络机制的讲解。
作者将注意力机制和图卷积相结合,已达到对节点分类的任务取得更好的效果。我认为他这么做的依据主要有两点:一是图结构,图网络的图结构是需要提供信息的,这也是图网络能产生好的效果的原因,但是越稠密的图,蕴含的信息是越少的,极端的情况就是全连接图,就是将所有的节点都连接起来,这样的图的结构基本没有提供任何有用的结构信息,所以,越稀疏的图往往能提供越多的信息,但是当人没法先验的决定图中的两个点是否连接的时候,我们还是希望能得到一个稀疏图,这时候,我们就可以让节点自己学习是否和它现有的临边相连,从而产生一个稀疏图,我个人认为注意力机制能产生效果有一部分是这样来的;二是注意力机制实属万金油,基本放到哪儿都能有一点效果。作者说GAT有三个不错的特点:(1)高效,节点对的计算是并行的(a是由节点对计算得到);(2)它可以作用于拥有不同入度的节点(作用对象是节点对,当然接受可变入度);(3)模型能够直接适用于归纳学习问题。
2、GAT 网络架构
图注意力层(Graph Attentional Layer)
--- 通过堆叠单个的图注意力层来构建任意的图注意力网络。
单个图注意力层的输入:图中所有节点特征向量的集合
N 是图中总结点数, F是每个节点的特征数
单个图注意力层的输出:图中节点更新后的特征向量的集合(更新后新的特征向量的维数可能与之前的特征向量维数不同)
现在我们来看怎么引入注意力机制。实际上本文所说的注意力机制就是在正常的GCN上,对每一个节点,在传递信息的时候,乘上一个系数,最后我们实际体现在GCN中的就是这个系数,那么,两个节点之间的注意力系数怎么求?首先作者定义一个所有节点共享(原文中指出所有节点的权重矩阵都相同,但是dgl库里面GAT的实现所使用的两个节点的W是不同的,也就是说使用了两个权重矩阵,这一点和论文中有所差别)的线性转换层来得到更高层的特征。设这一层的权重矩阵为;
紧随其后,我们在中心节点和它的邻居节点之间进行自注意力 的计算,这个注意力机制在所有的节点对之间共享。以此来计算中心节点与其邻居节点的注意力系数:,这个注意力系数表明了节点的邻居节点对其的重要程度。
在这个自注意力机制的最原始的表达式里,这个注意力模型允许每个节点跟图中其它所有的节点进行注意力系数的计算,但是这么一来,图中所有的结构信息都被丢失了。我们通过Masked attention机制,可以将图的结构信息注入图的自注意力机制中,即对于一个节点,我们只计算它与包括其自己在内的所有一阶邻居节点(表示包括自己在内的所有一阶邻居节点)之间的自注意力系数。
为了使不同节点之间的系数易于比较,,我们取遍所有的,将计算得到的系数用函数归一化:
在我们的实验里,注意力机制是一层单层的前馈神经网络加上一个(负输入斜率),前馈神经网络的参数是一个权重向量
最终上面一系列过程的表达式可以总结地写为:
这里是转置操作,是串联操作()。
我们得到这个归一化的系数后,将其与对应的特征向量作线性的组合,将结果作为每个这样的中心节点的更新后的特征向量(在通过一个非线性激活函数之后):
为了使自注意力的学习过程稳定下来,作者在每一个更新层增加了多个并行的。也就是说,每一次GCN的更新,多次使用注意力机制。作者称之为”多头注意力“(即Multi-Head Attention),这与Vaswani et al.(2017)的文章相似。具体而言,在最后一层之前的层,每层里个独立的注意力机制执行上式的变换,然后将它们的特征串联起来(Concatenated)从而得到节点特征的输出表示:
这就是GCN的更新。
在最后一层,作者采用取平均的方式:
图1形象地描述了多头图注意力层在更新节点特征向量时的聚合过程。
3、Evaluation
作者源代码:https://github.com/PetarV-/GAT
实验中,对于Croa数据集,作者的网络中,除最后一层外,所有层的k值为8(实际上一共就两层),最后一层的k值为1,中间隐藏层的特征长度为8,对特征和中间层都使用dropout层(0.6),初始学习率设置为0.005,l2正则项的值设为0.0005,Leaky_relu层的α值设为0.2。
结果: