由于注意力机制在RNN与CNN中都取得了不错的效果,基于此作者在此篇文章提出了图注意力机制。此方法的优点在于可以处理任意大小输入的问题,并且关注最具有影响能力的输入
GCN缺点:
GAT优点:
论文地址:https://arxiv.org/abs/1710.10903
代码地址:https://github.com/Diego999/pyGAT
在摘要中作者说明了,本文的attention计算的目的是为每个节点neighborhood中的节点分配不同的权重,也就是attention是用来关注那些作用比较大的节点,而忽视一些作用较小的节点。
作者指出这个框架有三个特点:
作者在四个数据集上进行了实验都取得了state-of-the-art的结果。这四个数据集,三个是引用文献的,一个是蛋白质相互作用网络的。
在这个模块,作者提出了一种图注意力层,通过堆叠这个层来实现图注意力机制。通过与之前的方法进行比较,阐述其优势及局限性。
N N N为节点的个数, F F F为feature的个数。代表着输入为 N N N个节点的每个节点的 F F F个feature
表示对这 N N N个节点的 F ′ F^{'} F′ 个输出,输出为 N N N个节点的每个节点的 F ′ F' F′个feature
为了获得足够的转化能力将输入特征转换为更高维的特征,至少一个可学习的线性变换是必须的。因此为每个节点训练一个权值矩阵 W ϵ R F ′ ∗ F W{\epsilon}{\mathbb{R}}^{F^{'}*F} WϵRF′∗F。这个权值矩阵就是输入feature与输出feature的直接关系。
紧接着就需要为每个节点加上此篇文章的重点:共享的注意力机制 a : R F ′ ∗ R F ′ − > R a:{\mathbb{R}}^{F^{'}}*{\mathbb{R}}^{F^{'}}->\mathbb{R} a:RF′∗RF′−>R。由此可得注意力相关系数公式如下
1.公式所表达的信息是对于节点i来说节点j的重要性,而忽略图结构性的信息(这个公式模型允许图中所有节点间计算相互间的影响而不是局限于k阶邻居节点)
2.其中 h h h代表的是feature向量。下标 i i i, j j j代表的是哪个节点
3.但是当将此机制引入图结构的时候,作者是通过masked attention引入。这意味着j是i的邻居节点同时为了使得互相关系数更容易计算和便于比较,引入了softmax对所有的i的相邻节点j进行正则化。公式如下图所示
实验之中,注意力机制a是一个单层的前馈神经网络,通过权值向量来确定 a ⃗ ϵ R 2 F ′ \vec{a}{\epsilon}{\mathbb{R}}^{2F^{'}} aϵR2F′。并且加入了 LeakyRelu的非线性激活,这里小于零的时候LeakyRelu斜率为0.2。因此得到完整的注意力机制公式如下
1.模型权重 a ⃗ ϵ R 2 F ′ \vec{a}{\epsilon}{\mathbb{R}}^{2F^{'}} aϵR2F′
2.T表示转置
3.||表示concatenation
得到最终的输出特征(Output features)
通过上面,运算得到了正则化后的不同节点之间的注意力互相关系数normalized attention coefficients,可以用来预测每个节点的output feature,公式如下图所示
1. W W W为与输入feature相乘的权重矩阵
2. α \alpha α为之前计算的注意力互相关系数
3. σ \sigma σ为非线性激活函数
4.考虑masked attention机制,遍历节点为 i i i的邻居节点
5.公式意义:该节点的输出feature与与之相邻的所有节点有关,是他们的线性和的非线性激活。这个线性和的线性系数是前面求得的注意力互相关系数
在上面的output feature加入计算multi-head的运算公式,公式如下图所示
1.||为concate操作
2. a k a^k ak表示第 k k k个注意力机制,共需要考虑 K K K个注意力机制
3. W k W^k Wk表示输入特征的线性变换表示
4.最终的输出特征 h ′ h^{'} h′由 K F ′ KF^{'} KF′个特征影响
节点1在邻域中具有多端注意机制,不同的箭头样式表示独立的注意力计算,通过连接或平均每个head获取 h1对于最终的输出,concate操作可能不那么敏感了,所以我们直接用K平均来取代concate操作,得到最终的公式
实验分成两部分,transductive learning(半监督学习)和inductive learning(归纳学习)。模型用了两层的GAT