读书笔记8:Graph Attention Networks(ICLR 2018)

https://mila.quebec/wp-content/uploads/2018/07/d1ac95b60310f43bb5a0b8024522fbe08fb2a482.pdf

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

这是一篇将attention机制应用到graph convolution中的文章。但是文章中提出的模型其实是利用了attention的一部分思想,而不是和处理sequence的模型应用的attention机制是不完全一样的。

处理sequence的模型引入的attention机制可以分为两类,一类是在输入sequence本身上计算attention的intertext情形;另一类是另外有一个用来计算attention的文本的intertext情形 。本文中的情形是intratext,是在输入的待处理的graph自身上计算attention,在摘要中作者说明了,本文的attention计算的目的是为每个节点neighborhood中的节点分配不同的权重,也就是attention是用来关注那些作用比较大的节点,而忽视一些作用较小的节点。相比之下,在sequence的模型中,attention的计算是为了在处理局部信息的时候同时能够关注整体的信息,计算出来的attention不是用来给参与计算的各个节点进行加权的,而是表示一个全局的信息并参与计算。

和其他graph convolution方向的论文一样,本文的introduction部分也是先介绍CNN多么多么成功,然后指出很多问题中的数据并不是CNN所擅长处理的网格状(grid-like)形式的,而是以一些不规则的形式存在,但是这些数据都可以用graph表示,因此兴起了graph convolution network。接着稍微详细的介绍一下GCN都分为spectral approaches和non-spectralappproaches。然后,作者用一段文字介绍了attention mechanism进来在sequence based tasks中几乎变成了一个常规配备,然后分析了attention mechanism的好处。接下来的一段紧接着就说,受到attention mechanism的启发,我们也要提出一个attention based的模型来在graph structured data上进行节点分类的任务,想法是为每一个节点更新hidden representation的时候,都要对其neighbors进行一下attention的计算,模仿sequence based task中的intratext的attention的思想。作者指出这个框架有三个特点:1. attention机制计算很高效,为每一个节点和其每个近邻节点计算attention可以并行进行。2. 通过指定任意的权重给neighbor,这个模型可以处理拥有不同“度”(每个节点连接的其他节点的数目)节点,也就是说,无论一个节点连接多少个neighbor,这个模型都能按照规则指定权重。3. 这个模型可以直接应用到归纳推理的问题中(inductive learning problem),包括一些需要将模型推广到完全未知的graph的任务中。作者在四个数据集上进行了实验都取得了state-of-the-art的结果。这四个数据集,三个是引用文献的,一个是蛋白质相互作用网络的。作者在introduction的后面提到,本文的工作可以看做是MoNet的具体形式,并且在不同edge上共享计算网络很像Santoro 2017年的relational networks的和Hoshen 2017年的VAIN,之后还简单提到了一些其他的相关工作。

接下来介绍模型。模型的输入是node feature的集合,即,其中N是node的数量,F是每一个node的feature数量,其实也就是feature vector的长度。模型的输出也是一个集合,N是不变的,但是每一个node的feature数量变成了,不一定还是之前的F了。node的原始的feature可能不够好用,因此先用至少一层线性层来为每个node计算一个表达能力更强的feature,也即用一个应用到每一个node的feature上。之后在node上应用self-attention,这个attention mechanism也是复用的,每个节点都用一样的机制。attention coefficient的计算为,用两个node的feature来计算两个node之间有怎样的一个关系。整个过程便是,即两个node feature先是通过线性变换生成新的表达力更强的feature,然后计算attention coefficient,于是,任意两个node之间都有了attention coefficient,本文的这个attention coefficient其实是用来做加权平均的,即卷积的时候,每个node的更新都是其他node的加权平均(不一定是所有node,本文中实际只用了直接相连的node),但是直接用attention coefficient不太好,因此进行一下softmax,得到,这个系数α就是每次卷积时,用来进行加权求和的系数。以上都是一般性的描述,具体来讲,本文采取的计算attention coefficient的函数a是一个单层的前馈网络,参数是,并且使用了LeakyReLU来处理,整个写好就是

其中||表示连接起来。每次卷积时,除了加权求和,还要再弄一个非线性函数,即

为了使模型更加稳定,文章还提出了multi-head attention机制,这种机制更加有利,这个意思是说不只用一个函数a进行attention coefficient的计算,而是设置K个函数,每一个函数都能计算出一组attention coefficient,并能计算出一组加权求和用的系数,每一个卷积层中,K个attention机制独立的工作,分别计算出自己的结果后连接在一起,得到卷积的结果,即,||依然表示连接在一起的意思,是用第k个计算attention coefficient的函数计算出来的attention coefficient计算出来的。整个过程如下图所示:

对于最后一个卷积层,如果还是使用multi-head attention机制,那么就不采取连接的方式合并不同的attention机制的结果了,而是采用求平均的方式进行处理,即 

接下来作者将模型与其他相关的工作进行了对比,指出attentional layer在几个方面的优点:1. 计算很高效,attention机制在所有边上的计算是可以并行的,输出的feature的计算在所有节点上也可以并行。像特征分解这种非常费资源的操作都不需要。单层的GAT的multi-head的一个head的时间复杂度可以表示为,这里面指的应该是计算attention机制的复杂度,每一个节点计算attention coefficient是O(FF'),然后每个节点都只计算其与周围几个直接连接的近邻节点之间的coefficient,即O(|V|),因此整个就是O(|V|FF'),计算α应该是加上了一个O(|V|)的复杂度。而|E|F'是用来计算卷积的时间复杂度,每个edge都对应将一个node乘上权重并包含到卷积的加权求和中,而每一个node有F'个feature,加进来就是F'次操作,因此整个就是O(|E|F')的复杂度。这个复杂度和Kipf&Welling 2017年的Graph Convolutional Networks(GCNs)的复杂度相当         2. 和GCN不同,本文的模型可以对同一个neighborhood的node分配不同的重要性,使得模型的容量(自由度)大增。并且分析这些学到的attentional weights有利于可解释性(意思可能是分析一下模型在分配不同的权重的时候是从哪些角度着手的),就像机器翻译里的情况(这个其实没看懂是什么意思,作者给了个例子是Bahdanau 2015年的qualitative analysis) 3. attention机制是对于所有edge共享的,不需要依赖graph全局的结构以及所有node的特征(很多之前的方法都有这个缺陷,但是作者没有说是什么方法,这种很笼统的话都不太好懂)。这也表明了两点:一是graph不需要是无向的。二是我们的技术适合inductive learning,包括一些任务中,用来测试的graph在训练阶段完全未知(由于本文做的多是在一个大graph上的node分类,因此训练和测试可能是在一个graph上的)。4. 2017年Hamilton提出的inductive method为每一个node都抽取一个固定尺寸的neighborhood,为了计算的时候footprint是一致的(指的应该是计算的时候处理neighborhood的模式是固定的,不好改变,因此每次都抽样出固定数量的neighbor参与计算),这样,在计算的时候就不是所有的neighbor都能参与其中。此外,Hamilton的这个模型在使用一些基于LSTM的方法的时候能得到最好的结果,这样就是假设了每个node的neighborhood的node一直存在着一个顺序,使得这些node成为一个序列。但是本文提出的方法就没有这个问题,每次都可以将neighborhood所有的node都考虑进来,而且不需要事先假定一个neighborhood的顺序  5. 这个是说明了之前提到的GAT如何被看做MoNet的一个特例,用到了一些MoNet的东西,需要看一下才知道在说啥。

接下来作者介绍了对模型的考量,也就是实验部分。实验分两部分,transductive learning和inductive learning,前者的模型用了两层GAT,网络结构的超参数是在Cora数据集上进行优化的,然后应用到了Citeseer数据集上。第一层8head,F'=8,跟着exponential linear unit (ELU)作为非线性函数,第二层作为分类层,一个attention head,feature数就是C,也就是类别数,后面跟着softmax函数。为了应对数据集小的问题,模型内使用了regularization,训练时使用了λ=0.0005的L2 regularization,此外,两层网络的输入都采用了p=0.6的dropout,这个dropout对normalized attention coefficient也使用了,相当于计算每个node位置的卷积时都是随机的选取了一部分近邻节点参与卷积。在inductive learning任务中,采用了3层的GAT模型,前两层K=4,F‘=256,用了ELU,最后一层用来分类,K=6,F'=121,紧跟着一个logistics sigmoid激活函数。这个任务中,训练集足够大,不需要使用regularization和dropout,但是成功的使用了skip connection(跨过中间一些层传递信息),此外,为了验证attention机制的好处,作者在这里还设了对比组,将所有a(x,y)=1。

两个任务都是用Glorot初始化初始的,并且是用Adam SGD来最小化交叉熵进行优化。

猜你喜欢

转载自blog.csdn.net/b224618/article/details/81407969