论文
这是一篇将attention机制应用到graph convolution中的文章。但是文章中提出的模型其实是利用了attention的一部分思想,和处理sequence的模型应用的attention机制是不完全一样的
。
处理sequence的模型引入的attention机制可以分为两类,一类是在输入sequence本身上计算attention的intertext情形;另一类是另外有一个用来计算attention的文本的intertext情形 。本文中的情形是intratext,是在输入的待处理的graph自身上计算attention,在摘要中作者说明了,本文的attention计算的目的是为每个节点neighborhood中的节点分配不同的权重,也就是attention是用来关注那些作用比较大的节点,而忽视一些作用较小的节点
。相比之下,在sequence的模型中,attention的计算是为了在处理局部信息的时候同时能够关注整体的信息,计算出来的attention不是用来给参与计算的各个节点进行加权的,而是表示一个全局的信息并参与计算。
本文提出了一种新的应用于图数据上的网络结果Graph Attention Networks(GATs),不同于先前一些基于谱域的图神经网络,通过使用masked的self attention,从而克服了先前图卷积网络或其近似的现有方法的缺点。通过堆叠节点能够参与其邻域特征的层layers,我们(隐式地)为邻域中的不同节点指定了不同的权重,而无需任何类型的计算密集型矩阵运算(如求逆)或依赖于图结构。通过这种方式,我们可以同时解决基于频谱的图神经网络的几个关键挑战,并使我们的模型易于适用于归纳(inductive problems)和推理问题(transductive problems)。我们的GAT模型已在四个已建立的transductive and inductive graph benchmarks中达到或匹配了最先进的结果:the Cora, Citeseer and Pubmed citation network datasets, as well as a protein-protein interaction dataset(其中训练时测试图仍然不可见)。
这里插播一下inductive problems和transductive problems: 主要区别是在,训练阶段是否利用了Test data:
- Inductive learning对未来的Testing data并不知,Transductive
- learning则是已知Testing data的,当然Testing data是unlabeled。
这部分分析了从CNN到GNN的发展历程,然后分别剖析了现有基于谱域的GNN方法和非谱域GNN方法的不足之处。
接着,论文介绍了一下Attention mechanism。注意力机制在许多基于序列的任务中几乎已经成为事实上的标准(Bah-danau等人,2015; Gehring等人,2016)。 注意力机制的好处之一是,它们允许处理可变大小的输入,着眼于输入中最相关的部分以做出决策。 当注意力机制用于计算单个序列的表示时,通常称为自我注意力或内部注意力(When an attention mechanism is used to compute a representation of a single sequence, it is commonly referred to as self-attention or intra-attention
)。 自注意力与循环神经网络(RNN)或卷积一起,已被证明对诸如机器阅读(Cheng等人,2016)和学习句子表示(Lin等人,2017)之类的任务很有用。 但是,Vaswani等人(2017)表明,自我注意力不仅可以改善基于RNN或卷积的方法,而且足以构建一个强大的模型,从而获得机器翻译任务的最新性能。
基于以上的工作,受到attention mechanism的启发,我们也要提出一个attention based的模型,在graph structured data上进行节点分类的任务。想法是为每一个节点更新hidden representation的时候,都要对其neighbors进行一下attention(注意力值)的计算,模仿sequence based task中的intratext的attention的思想。作者指出这个注意力框架有三个特点:
(并行处理节点-邻居节点对)
(可以处理有不同度节点)
(该模型是inductive的,即不需要知道整个图的全部信息)
作者在introduction的后面提到,本文的工作可以看做是MoNet的具体形式,并且在不同edge上共享计算网络很像Santoro 2017年的relational networks和Hoshen 2017年的VAIN,之后还简单提到了一些其他的相关工作。
模型的输入是node feature的集合,即 h = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ N } , h ⃗ i ∈ R F \mathbf{h}=\left\{\vec{h}_{1}, \vec{h}_{2}, \ldots, \vec{h}_{N}\right\}, \vec{h}_{i} \in \mathbb{R}^{F} h={h1,h2,…,hN},hi∈RF,其中 N N N是node的数量,F是每一个node的feature数量,其实也就是feature vector的长度
。模型的输出也是一个集合 h ′ = { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ N ′ } , h ⃗ i ′ ∈ R F ′ \mathbf{h}^{\prime}=\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{N}^{\prime}\right\}, \vec{h}_{i}^{\prime} \in \mathbb{R}^{F^{\prime}} h′={h1′,h2′,…,hN′},hi′∈RF′, N N N是不变的,但是每一个node的feature数量变成了 F ′ F^{\prime} F′,不一定还是之前的 F F F了。node的原始的feature可能不够好用,因此先用至少一层线性层来为每个node计算一个表达能力更强的feature,也即用一个 W ∈ R F ′ × F W \in \mathbb{R}^{F^{\prime}×F} W∈RF′×F应用到每一个node的feature上。之后在node上应用self-attention,这个attention mechanism也是复用的,每个节点都用一样的机制。
attention coefficient的计算为 a : R F ′ × R F ′ ⟶ R a:\mathbb{R}^{F^{\prime}}×\mathbb{R}^{F^{\prime}}\longrightarrow \mathbb{R} a:RF′×RF′⟶R,用两个node的feature来计算两个node之间有怎样的一个关系。整个过程便是 e i j = a ( W h i ⃗ , W h j ⃗ ) e_{ij}= a(W\vec{h_i},W\vec{h_j} ) eij=a(Whi,Whj),即两个node feature先是通过线性变换生成新的表达力更强的feature,然后计算attention coefficient,于是,任意两个node之间都有了attention coefficient
,本文的这个attention coefficient其实是用来做加权平均的,即卷积的时候,每个node的更新都是其他node的加权平均(不一定是所有node,本文中实际只用了直接相连的node),但是直接用attention coefficient不太好,因此进行一下softmax,得到 α i j = softmax j ( e i j ) = exp ( e i j ) ∑ k ∈ N i exp ( e i k ) \alpha_{i j}=\operatorname{softmax}_{j}\left(e_{i j}\right)=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(e_{i k}\right)} αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij),这个系数 α α α就是每次卷积时,用来进行加权求和的系数。以上都是一般性的描述,具体来讲,本文采取的计算attention coefficient的函数 a a a是一个单层的前馈网络,参数是 a ⃗ ∈ R 2 F ′ \vec{a} \in \mathbb{R}^{2F^{\prime}} a∈R2F′,并且使用了LeakyReLU来处理,整个写好就是:
α i j = exp ( Leaky ReLU ( a → T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N i exp ( LeakyReLU ( a → T [ W h ⃗ i ∥ W h ⃗ k ] ) ) \alpha_{i j}=\frac{\exp \left(\text { Leaky ReLU }\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right)\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(\text { LeakyReLU }\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{k}\right]\right)\right)} αij=∑k∈Niexp( LeakyReLU (aT[Whi∥Whk]))exp( Leaky ReLU (aT[Whi∥Whj]))
其中||表示concate起来。每次卷积时,除了加权求和,还要再弄一个非线性函数,即 h ⃗ i ′ = σ ( ∑ j ∈ N i α i j W h ⃗ j ) \vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right) hi′=σ(∑j∈NiαijWhj)。
为了使模型更加稳定,文章还提出了multi-head attention机制,这种机制更加有利,这个意思是说不只用一个函数 a a a进行attention coefficient的计算,而是设置K个函数,每一个函数都能计算出一组attention coefficient,并能计算出一组加权求和用的系数,每一个卷积层中,K个attention机制独立的工作,分别计算出自己的结果后连接在一起,得到卷积的结果,即:
h ⃗ i ′ = ∏ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) \vec{h}_{i}^{\prime}=\prod_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right) hi′=∏k=1Kσ(∑j∈NiαijkWkhj)
||依然表示连接在一起的意思, α i j k \alpha_{ij}^{k} αijk是用第k个计算attention coefficient的函数 ( a k ) (a^{k}) (ak)计算出来的。整个过程如下图所示:
对于最后一个卷积层,如果还是使用multi-head attention机制,那么就不采取连接的方式合并不同的attention机制的结果了,而是采用求平均的方式进行处理,即:
h ⃗ i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h ⃗ j ) \vec{h}_{i}^{\prime}=\sigma\left(\frac{1}{K} \sum_{k=1}^{K} \sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right) hi′=σ(K1∑k=1K∑j∈NiαijkWkhj)
2.1小节中描述的attentional layer直接解决了之前用神经网络建模图结构数据的方法中存在的几个问题,同时也指出在几个方面的优点:
https://blog.csdn.net/b224618/article/details/81407969