这篇文章提出的图注意力网络两点主要是根据中心节点其邻接点特征向量的取值来构建其对中心节点的影响程度,而不是像Kipf & Welling等人对邻接点统一对待。最后用于计算的邻接点也是一阶邻接点(直接相连)。
每一个邻接点对于中心点的影响程度可以用图注意力系数eij表示,
eij=a(Whi,Whj)
a是注意力计算函数,对于任意节点我们只计算j∈Ni,Ni是节点i的邻接点集合。
在这篇文章中,图注意力机制是一个单层前馈神经网络。简单的抽象理解如下:

为了使不同节点之间的注意力系数可比较,使用softmax函数对注意力系数进行规范化。
αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)
具体的注意力计算时,这篇文章主要使用a∈R2F′(用于注意力计算的权值参数),以及LeakyReLu函数, 注意力系数的具体表达式如下:
αij=∑k∈Niexp(LeakyReLu(aT[Whi∣∣Whk]))exp(LeakyReLu(aT[Whi∣∣Whj]))
模型过程:下面用来具体看一看每一层具体做了什么。
每一层的输出:
每一层的输出(不用于预测时):Hl+1=⎣⎢⎡H11l+1⋮HN1l+1H12l+1⋮HN2l+1⋯⋱⋯H1,KF′l+1⋮HN,KF′l+1⎦⎥⎤每一层的输出(用于预测时):Hl+1=⎣⎢⎡H11l+1⋮HN1l+1H12l+1⋮HN2l+1⋯⋱⋯H1F′l+1⋮HNF′l+1⎦⎥⎤
每一层的输入:
每一层的输入:Hl=⎣⎢⎡H11l⋮HN1lH12l⋮HN2l⋯⋱⋯H1Fl⋮HNFl⎦⎥⎤
神经网络在每一层需要训练的参数,其中转换权值矩阵是直接的网络参数,而注意力矩阵是由神经网络参数a计算而来。
转换权值矩阵:W=⎣⎢⎡W11⋮WF1W12⋮WF2⋯⋱⋯W1F′⋮WFF′⎦⎥⎤注意力矩阵:att=⎣⎢⎡att11⋮attN1att12⋮attN2⋯⋱⋯att1N⋮attNN⎦⎥⎤
每一层首先做的事就是通过转换矩阵将特征维度从F−>F′,之后再进行注意力计算,先由参数a计算任意两条边的注意力系数,根据邻接矩阵显示的节点关系得到最终的注意力系数矩阵,再通过注意力系数矩阵与维度为F’的矩阵相乘得到新的特征矩阵,大小仍为N×F′。由于这篇文章采用的Multi-head attention策略,所以这样的网络有K层,可以分别得到K个N×F′的特征矩阵。最后,如果是中间层,那么仅需要连接这K个矩阵形成N×KF′的新特征矩阵,如果是最后一层,那么对这K个矩阵取均值仍然得到N×F′的矩阵。
当K=3时H1′=Hl×W1,H2′=Hl×W2,H3′=Hl×W3H1l+1=att1×H1′,H2l+1=att2×H2′,H3l+1=att3×H3′当输出层不用于预测时,Hl+1=[H1l+1⋮H2l+1⋮H3l+1]当输出层用于预测时,Hl+1=K1i=1∑KHil+1
图示说明如下:
