前面的文章,我们讲解了图神经网络三剑客GCN、GraphSAGE、GAT中的两个:
本要讲的是GAT(Graph Attention Network),它使用 Attention 机制来对邻居节点进行加权求和,和一般的Attention 机制一样,分为计算注意力系数和加权求和两个步骤。
GAT中的 Attention 机制
先来看看每一层的输入与输出:
input : h = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ N } , h ⃗ i ∈ R F output : h ′ = { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ N ′ } , h ⃗ i ′ ∈ R F \text { input }: \mathbf{h}=\left\{\vec{h}_{1}, \vec{h}_{2}, \ldots, \vec{h}_{N}\right\}, \vec{h}_{i} \in \mathrm{R}^{F} \\ \text { output }: \mathbf{h}^{\prime}=\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{N}^{\prime}\right\}, \vec{h}_{i}^{\prime} \in \mathrm{R}^{F} input :h={
h1,h2,…,hN},hi∈RF output :h′={
h1′,h2′,…,hN′},hi′∈RF
1. 计算注意力系数
首先计算顶点 i i i 与周围邻居节点 j ∈ N i j \in \mathcal N_i j∈Ni 的相似度:
e i j = a ( W h ⃗ i , W h ⃗ j ) e_{i j}=a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right) eij=a(Wh