图结构之图注意力网络GAT详解

转载 2020-05-20 16:19  阅读 156 次 评论 0 条

\(GAT\)源代码地址:https://github.com/PetarV-/GAT

\(GAT\)论文地址:https://arxiv.org/pdf/1710.10903.pdf

\(GAT\)是在\(GCN\)的基础上进行改进而得以实现的,不熟悉<\( GCN\)的朋友可以阅读我的另一篇文章【图结构】之图神经网络GCN详解,关于输入的特征矩阵的生成方式以及最后如何用\(GAT\)或\(GCN\)进行分类,都在这篇文章中有所讲述!

文章目录

一、在GCN中引入注意力机制——GAT

二、图注意力层Graph Attention layer

  • 2.1 图注意力层的输入与输出
  • 2.2 特征提取与注意力机制
  • 2.3 输出特征
  • 2.4 multi-head attention

三、GAT实现分类

一、在GCN中引入注意力机制——GAT

在\( GCN\)详解那篇文章最后我们提出了\( GCN\)的两个缺点,\( GAT\)就是来解决这两个缺点的:

  • 这个模型对于同阶的邻域上分配给不同的邻居的权重是完全相同的(也就是\(GAT\)论文里说的:无法允许为邻居中的不同节点指定不同的权重)。这一点限制了模型对于空间信息的相关性的捕捉能力,这也是在很多任务上不如\(GAT\)的根本原因。
  • \( GCN\)结合临近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。

\(Graph Attention Network (GAT)\)提出了用注意力机制对邻近节点特征加权求和。邻近节点特征的权重完全取决于节点特征,独立于图结构。

\(GAT\)和\(GCN\)的核心区别在于如何收集并累和距离为1的邻居节点的特征表示。 图注意力模型\(GAT\)用注意力机制替代了\(GCN\)中固定的标准化操作。本质上,\(GAT\)只是将原本\(GCN\)的标准化函数替换为使用注意力权重的邻居节点特征聚合函数。

\(GAT\)优点

  • 在\( GAT\)中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。
  • \(GAT\)的另一个优点在于,引入注意力机制之后,只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息:(1)该图不需要是无向的(如果边缘\( j\to i\)不存在,我们可以简单地省略计算\( \alpha_{ij}\);(2)它使我们的技术直接适用于\(inductive\;learning\)——包括在训练期间完全看不见的图形上的评估模型的任务。

二、图注意力层Graph Attention layer

2.1 图注意力层的输入与输出

图注意力层的输入是:一个节点特征向量集:\(h=\{\vec{h}_1,\vec{h}_2,\cdots,\vec{h}_N\},\vec{h}_i\in R^F\)

其中\(N\)为节点个数,\(F\)为节点特征的个数。矩阵\(h\)的大小是\(N\times F\),代表了所有节点的特征,而R只代表了某一个节点的特征,所以它的大小为\(F \times 1\)。输出同理。

每一层的输出是:一个新的节点特征向量集:

\(h'=\{ \vec{h'}_1,\vec{h'}_2,\cdots,\vec{h'}_N\},\vec{h'}_i\in R^{F'}\)

其中\( F'\)表示新的节点特征向量维度(可以不等于\( F\))。

\(GAT\)与\(GCN\)同样也是一个特征提取器,针对的是\(N\)个节点,按照其输入的节点特征预测输出新的节点的特征。

2.2 特征提取与注意力机制

为了得到相应的输入与输出的转换,我们需要根据输入的特征至少进行一次线性变换得到输出的特征,所以我们需要对所有节点训练一个权重矩阵:

\( W\in R^{F' \times F}\),这个权重矩阵就是输入的\(F\)个特征与输出的\( F'\)个特征之间的关系。

针对每个节点实行\(self-attention\)的注意力机制,注意力系数\((attentioncoefficients)\)为:

\(e_{ij}=a(W\vec{h}_i,W\vec{h}_j)\tag{1}\)

注意:\(a\)不是一个常数或是矩阵,\(a()\)是一个函数,类似于\( f(x)\)那种自己定义好的函数。

  • 这个公式表示了节点\( j\)对节点\(i\)的重要性,而不去考虑图结构的信息。
  • 如前面介绍过的,向量\(h\)就是节点的特征向量。
  • 下标\(i,j\)表示第\(i\)个节点和第\(j\)个节点。

★什么是\(self-attention\)机制?

\(self-attention\)其作用是能够更好地学习到全局特征之间的依赖关系,\(self-attention\)通过直接计算图结构中任意两个节点之间的关系,一步到位地获取图结构的全局几何特征。

\(self-attention\)利用了\(attention\)机制,分三个阶段进行计算:(1) 引入不同的函数和计算机制,根据\(Query\)和某个\( Key_i\),计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量\( Cosine\)相似性或者通过再引入额外的神经网络来求值;(2) 引入类似\(softmax\)的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为\(1\)的概率分布;另一方面也可以通过\( softmax\)的内在机制更加突出重要元素的权重;(3)第二阶段的计算结果\(a_i\) 即为\(value_i\)对应的权重系数,然后进行加权求和即可得到\(attention\)的数值。

作者通过作者通过masked attention将这个注意力机制引入图结构中,masked attention的含义是:仅将注意力分配到节点\(i\)的邻居节点集\( N_i\)上,即\( j \in N_i\)(在本文中节点\(i\)也是\(N_i\)的一部分)。 为了使得注意力系数更容易计算和便于比较,我们引入了\( softmax\)对所有的\(i\)的相邻节点\( j\)进行正则化:

\(\alpha_{ij}=softmax_j(e_{ij})=\frac{exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})}\tag{2}\)

实验之中,注意力机制\( a\)是一个单层的前馈神经网络,\( \vec{\rm{a}}\in R^{2F'}\)是神经网络中连接层与层之间的权重矩阵,在该前馈神将网络的输出层上还加入了\(LeakyReLu\)函数,这里小于零斜率为\( 0.2\)。

★什么是\(LeakyReLu\)函数?

\( LeakyReLu\)是给所有负值赋予一个非零斜率,在本论文中以数学的方式我们可以表示为:

\(y_i=\begin{cases}x_i amp; if\;x_i\geq0\\0.2 amp; if\;x_i\leq0\end{cases}\)

综合上述公式(1)和(2),整理到一起可得到完整的注意力机制如下:

\( \alpha_{ij}=\frac{exp(LeakyReLu(\vec{\rm{a}}^T[W\vec{h}_i||W\vec{h}_j]))}{\sum_{k\in N_i}exp(LeakyReLu(\vec{\rm{a}}^T[W\vec{h}_i||W\vec{h}_k]))}\tag{3}\)
  • \(||\;\)∣符号的意思是连接操作\((concatenation \;operation)\)
  • \(\cdot ^T\)表示为转置

注意:

\(e_{ij}\)和\(\alpha_{ij}\)都叫做"注意力系数",只不过\( \alpha_{ij}\)是在\( e_{ij}\)基础上进行归一化后的。

上述过程可用下图来表示:

2.3 输出特征

通过上述运算得到了正则化后的不同节点之间的注意力系数,可以用来预测每个节点的输出特征:

\(\vec{h'}_i=\sigma(\sum_{j \in N_i}\alpha_{ij}W\vec{h}_j)\tag{4}\)
  • \(W\)为与特征相乘的权重矩阵
  • \(\alpha\)为前面计算得到的注意力互相关系数
  • \(\sigma\)为非线性激活函数
  • \(j \in N_i\)中遍历的\(j\)表示所有与\(i\)相邻的节点
  • 这个公式表示就是:该节点的输出特征与和它相邻的所有节点有关,是它们的线性和的非线性激活后得到的。

2.4 multi-head attention

为了稳定\(self-attention\),作者发现扩展我们的机制以采用\(multi-head\;attention\)是有益的。具体而言,\(K\)个独立注意力机制执行公式(4),然后将它们的特征连接起来。但是,如果我们对最终的网络层执行\(multi-head\;attention\),则连接操作不再合理,相反,我们采用\( K\)平均来替代连接操作,并延迟应用最终的非线性函数(通常为分类问题的\( softmax\)或\(logistic \;sigmoid\)),得到最终的公式:

\(\vec{h'}_i=\sigma(\frac{1}{K}\sum_{k=1}^{K}\sum_{j\in N_i}\alpha_{ij}^kW^k\vec{h}_j)\)

  • 共\(K\)个注意力机制需要考虑,\(k\)表示\(K\)中的第\(k\)个
  • 第\(k\)个注意力机制为\( a^k\)
  • 第\(k\)个注意力机制下输入特征的线性变换权重矩阵表示为<\(W^k\)

★什么是\(multi-head\;attention\) ?

这里面\(multi-head\;attention\)其实就是多个\( self-attention\)结构的结合,每个\(head\)学习到在不同表示空间中的特征,多个\(head\)学习到的\( attention\)侧重点可能略有不同,这样给了模型更大的容量。

\(multi-head\;attention\)图例:

在这里插入图片描述

由节点\( \vec{h}_1\)在其邻域上的\(multi-head attention\)(具有\( K = 3\)个头)的图示。不同的箭头样式和颜色表示独立的注意力计算,来自每个头的聚合特征被连接或平均以获得\( \vec{h'}_1\)

三、GAT实现分类

\(GAT\)的分类过程与\(GCN\)的分类过程十分相似,均是采用\( softmax\)函数\( +\)交叉熵损失函数\(+\)梯度下降法来完成的,详细内容可参阅我的另一篇文章【图结构】之图神经网络GCN详解

【参考文献】

本文地址:http://51blog.com/?p=10283
关注我们:请关注一下我们的微信公众号:扫描二维码广东高校数据家园_51博客的公众号,公众号:数博联盟
温馨提示:文章内容系作者个人观点,不代表广东高校数据家园_51博客对观点赞同或支持。
版权声明:本文为转载文章,来源于 張張張張 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情