图注意力网络-Graph Attention Network (GAT)
GAT(graph attention networks)网络,处理的是图结构数据。它与先前方法不同的是,它使用了masked self-attention
层。原来的图卷积网络所存在的问题需要使用预先构建好的图。而在本文模型中,图中的每个节点可以根据邻域节点的特征,为其分配不同的权值。GAT结构很简单,功能很强大,模型易于解释。文章的实验证明,GAT模型可以有效地适用于基于图的归纳学习问题与转导学习问题。
1. 图注意力层-Graph Attentional Layer
1.1 图注意力层要做什么
对于一个(N)节点的图,我们一共会构造(N)个图注意力网络,因为每一个节点都需要对于其邻域节点训练相应的注意力。而图注意力网络的层数(K)则根据需要决定。我们在这里先分析(K=1),即一个单层图注意力网络的工作原理。
单层图注意力网络的输入为一个向量集(h = {vec{h_1},vec{h_2},...,vec{h_N}},vec{h_i}in R^F),输出为一个向量集(h'={vec{h_1'},vec{h_2}',...,vec{h_N'}},vec{h_i'}in R^{F'})。即,通过图注意力层后,原本的节点信息(vec{h_i})被更新为了(vec{h_i'})。为了使得网络能够从原始输入中提取更加深层次的信息,通常而言,(F' > F),即图注意力层是一个将信号升维的网络。
1.2 图注意力层是如何工作的
下图为节点(i)单的单层图注意力网络的其中一个邻域节点(j)的结构表示。
对于节点(i),考虑其邻域节点(j)对其的注意力权重的计算过程。
输入为两个向量(vec{h_i},vec{h_j}in R^F),为了将它们变换到(R^{F'}),我们引入一个待学习的权重矩阵(WinR^{F' imes F}),以及一个待学习的向量(vec{a}in R^{2F'})。
- 做两个运算: (W * vec{h_i}) 和 (W * vec{h_j}),得到两个(R^{F'})维向量。
- 计算节点(i)在节点(j)上的注意力值(e_{ij} = alpha(Wvec{h_i},Wvec{h_j}))。(alpha)是一个(R^{F'} imesR^{F'} o R)的映射。
- 最后对于节点(i)的所有邻域节点求得(e)后,利用(softmax)完成注意力权重的归一化操作。
具体到计算过程即为
在归一化所有节点的注意力权重后,就可以通过图注意力层进行节点的信息提取了。整个网络的输出值(vec{h_i'})计算公式如下(其中(sigma)表示激活函数):
2. 多层图注意力网络(Multi-head Attention)

上图为一个三层图注意力网络。多层注意力机制存在的意义在于:不同的特征可能需要分配不同的注意力权重,如果仅仅用单层注意力层,则对于该邻域节点的所有属性都采用了相同的注意力权重,这样将会减弱模型的学习能力。
在引入了多层注意力网络后,进一步调整公式为
特殊情况:如果我们将多层注意力网络应用到最后一层(输出层),应该将公式改为