一、核心思想
将注意力(attention)机制引入到图卷积模型中,使用attention机制来建模节点间的关联度
作者认为邻域中所有的节点共享相同卷积核参数会限制模型的能力。因为邻域内的每一个节点和中心节点的关联度都是不同的,在卷积聚合邻域节点信息时需要对邻域中的不同的节点区别对待。
二、 实现
接下来描述一个简单的单一GAT层,整体网络由单一层堆叠而成。
单层输入为一系列节点特征: h = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ N } , h ⃗ i ∈ R F h = \{\vec h_1, \vec h_2,\dots,\vec h_N\},\vec h_i \in R^F h={ h1,h2,…,hN},hi∈RF ,N是节点数目,F为输入节点特征数。
输出为: h ′ = { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ N ′ } , h ⃗ i ′ ∈ R F ′ h' = \{\vec h'_1, \vec h'_2,\dots,\vec h'_N\},\vec h'_i \in R^{F'} h′={ h1′,h2′,…,hN′},hi′∈RF′, F ′ F' F′为输出节点的特征,和 F F F不一定相同。
为了有效的将输入特征转化为高级别特征,至少需要一层可学习线性层运用于每个节点。
定义一个共享参数的线性变化矩阵: W ∈ R F ′ × F W\in R^{F'×F} W∈RF′×F
在节点上进行自注意力操作,一种共享注意的注意力机制 a : R F ′ × R F ′ → R a:R^{F'}×R^{F'} \rightarrow R a:RF′×RF′→R:
e i j = a ( W h ⃗ i , W h ⃗ j ) (1) e_{ij} = a(W\vec h_i,W\vec h_j) \tag{1} eij=a(Whi,Whj)(1)
用以说明节点 j j j的特征对节点 i i i的重要性。
在其最一般的公式中,该模型允许每个节点参与到每个其他节点上,删除所有结构信息。但是我们通过执行掩蔽注意将图结构注入到该机制中:只计算那些图中 i i i节点邻域节点 j j j( j ∈ N i j\in N_i j∈Ni)的边权 e i j e_{ij} eij。
实验中选取一阶相连的节点(包括自身)作为中心节点的邻域节点。为了有效计算系数,对权重进行归一化:
α i j = softmax j ( e i j ) = exp ( e i j ) ∑ k ∈ N i exp ( e i k ) (2) \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)} \tag{2} αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)(2)
本实验中注意力机制 a a a只是一个单一的前馈神经网络,为一个权重向量 a ⃗ ∈ R 2 F ′ \vec\mathbf a \in R^{2F'} a∈R2F′。使用LeakyReLU非线性激活( α = 0.2 \alpha =0.2 α=0.2)。完全展开后,由注意机制计算出的系数(如图1(左))可表示为:
α i j = exp ( LeakyReLU ( a → T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N i exp ( LeakyReLU ( a → T [ W h ⃗ i ∥ W h ⃗ k ] ) ) (3) \alpha_{i j}=\frac{\exp \left(\text { LeakyReLU }\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)} \tag{3} αij=∑k∈Niexp( LeakyReLU (aT[Whi∥Whk]))exp( LeakyReLU (aT[Whi∥Whj]))(3)
⋅ T \cdot^T ⋅T代表转置操作, ∥ \| ∥代表Concat操作。
得到归一化注意系数后,再计算与之对应的特征的线性组合,作为每个节点的最终输出特征(进行非线性操作,加激活):
h ⃗ i ′ = σ ( ∑ j ∈ N i α i j W h ⃗ j ) (4) \vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right) \tag{4} hi′=σ⎝⎛j∈Ni∑αijWhj⎠⎞(4)
如图1(Right),将这个自注意力学习过程拓展到多头注意来拓展我们的机制是有益的。由公式(4)实现 K K K个独立的注意力机制,将获得的特征concat,形成最后的输出特征:
h ⃗ i ′ = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) (5) \vec{h}_{i}^{\prime}=\|_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right) \tag{5} hi′=∥k=1Kσ⎝⎛j∈Ni∑αijkWkhj⎠⎞(5)
∥ \| ∥代表concat连接, α i j k \alpha_{i j}^{k} αijk代表第 k k k层注意力机制( α k \alpha ^k αk)计算的标准化注意力系数。 W k W^k Wk代表每层相应的输入线性变换的权值矩阵。如此设置,k层输出的 h ′ h^\prime h′包含 K F ′ KF^\prime KF′个特征(非 F ′ F^\prime F′)。
如果我们使用一个多头的注意力作为最后一层来预测结果是不明智的,因此,我们使用平均,并延迟应用最后的非线性(通常是一个softmax或logistic sigmoid分类问题):
h ⃗ i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h ⃗ j ) (6) \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) \tag{6} hi′=σ⎝⎛K1k=1∑Kj∈Ni∑αijkWkhj⎠⎞(6)
三、对比
1.邻域节点上,不同于GNN(随机游走)、GraphSAGE(均匀采样),GAT直接使用一阶相邻节点作为邻域节点(类似GCN)
2.GAT的所有节点无序,且共享卷积核参数,类似于GraphSAGE。
3.引入注意力机制,是对邻域节点的有区别聚合,能够构建相邻节点的联系。若将注意力系数 α i j \alpha_{ij} αij W W W结合起来看,就相当于隐式的分配了不同的卷积核。