图注意力网络-Graph Attention Network (GAT)
图注意力网络-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'}\),我们引入一个待学习的权重矩阵\(W\in\R^{F'\times F}\),以及一个待学习的向量\(\vec{a}\in \R^{2F'}\)。
- 做两个运算: \(W * \vec{h_i}\) 和 \(W * \vec{h_j}\),得到两个\(\R^{F'}\)维向量。
- 计算节点\(i\)在节点\(j\)上的注意力值\(e_{ij} = \alpha(W\vec{h_i},W\vec{h_j})\)。\(\alpha\)是一个\(\R^{F'}\times\R^{F'}\to R\)的映射。
- 最后对于节点\(i\)的所有邻域节点求得\(e\)后,利用\(softmax\)完成注意力权重的归一化操作。
具体到计算过程即为
在归一化所有节点的注意力权重后,就可以通过图注意力层进行节点的信息提取了。整个网络的输出值\(\vec{h_i'}\)计算公式如下(其中\(\sigma\)表示激活函数):
2. 多层图注意力网络(Multi-head Attention)
上图为一个三层图注意力网络。多层注意力机制存在的意义在于:不同的特征可能需要分配不同的注意力权重,如果仅仅用单层注意力层,则对于该邻域节点的所有属性都采用了相同的注意力权重,这样将会减弱模型的学习能力。
在引入了多层注意力网络后,进一步调整公式为
特殊情况:如果我们将多层注意力网络应用到最后一层(输出层),应该将公式改为