前言
由于注意力机制在RNN与CNN中都取得了不错的效果,基于此作者在此篇文章提出了图注意力机制。此方法的优点在于可以处理任意大小输入的问题,并且关注最具有影响能力的输入
GCN缺点:
- 模型对于同阶的邻域上分配给不同的邻居的权重是完全相同的(也就是GAT论文里说的:无法允许为邻居中的不同节点指定不同的权重)。这一点限制了模型对于空间信息的相关性的捕捉能力,这也是在很多任务上不如GAT的根本原因。
- GCN结合临近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。
(GAT)提出了用注意力机制对邻近节点特征加权求和。 邻近节点特征的权重完全取决于节点特征,独立于图结构。GAT和GCN的核心区别在于如何收集并累和距离为1的邻居节点的特征表示。 图注意力模型GAT用注意力机制替代了GCN中固定的标准化操作。本质上,GAT只是将原本GCN的标准化函数替换为使用注意力权重的邻居节点特征聚合函数。
GAT优点:
- 在GAT中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。
- GAT的另一个优点在于,引入注意力机制之后,只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息:
(1)该图不需要是无向的(如果边缘 j → i j\to i j→i不存在,我们可以简单地省略计算 α i j \alpha_{ij} αij
(2)使技术直接适用于Unexpected text node——包括在训练期间完全看不见的图形上的评估模型的任务。
论文地址:https://arxiv.org/abs/1710.10903
代码地址:https://github.com/Diego999/pyGAT
1.INTRODUCTION
在摘要中作者说明了,本文的attention计算的目的是为每个节点neighborhood中的节点分配不同的权重,也就是attention是用来关注那些作用比较大的节点,而忽视一些作用较小的节点。
作者指出这个框架有三个特点:
- attention机制计算很高效,为每一个节点和其每个近邻节点计算attention可以并行进行。
- 通过指定任意的权重给neighbor,这个模型可以处理拥有不同“度”(每个节点连接的其他节点的数目)节点,也就是说,无论一个节点连接多少个neighbor,这个模型都能按照规则指定权重。
- 这个模型可以直接应用到归纳推理的问题中(inductive learning problem),包括一些需要将模型推广到完全未知的graph的任务中
作者在四个数据集上进行了实验都取得了state-of-the-art的结果。这四个数据集,三个是引用文献的,一个是蛋白质相互作用网络的。
2.GAT ARCHITECTURE
在这个模块,作者提出了一种图注意力层,通过堆叠这个层来实现图注意力机制。通过与之前的方法进行比较,阐述其优势及局限性。
2.1GRAPH ATTENTIONAL LAYER
2.1.1输入与输出:
输入 f = { h 1 ⃗ , h 2 ⃗ . . . h N ⃗ } , h i ⃗ ϵ R F f=\{\vec{h_1},\vec{h_2}...\vec{h_N}\},\vec{h_i}{\epsilon}{\mathbb{R}}^{F} f={h1,h2...hN},hiϵRF
N N N为节点的个数, F F F为feature的个数。代表着输入为 N N N个节点的每个节点的 F F F个feature
输出 f = { h 1 ′ ⃗ , h 2 ′ ⃗ . . . h N ′ ⃗ } , h i ′ ⃗ ϵ R F ′ f=\{\vec{h_{1}^{'}},\vec{h_{2}^{'}}...\vec{h_{N}^{'}}\},\vec{h_{i}^{'}}{\epsilon}{\mathbb{R}}^{F^{'}} f={h1′,h2′...hN′},hi′ϵRF′
表示对这 N N N个节点的 F ′ F^{'} F′ 个输出,输出为 N N N个节点的每个节点的 F ′ F' F′个feature
2.1.2特征提取与注意力机制
为了获得足够的转化能力将输入特征转换为更高维的特征,至少一个可学习的线性变换是必须的。因此为每个节点训练一个权值矩阵
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与与之相邻的所有节点有关,是他们的线性和的非线性激活。这个线性和的线性系数是前面求得的注意力互相关系数
这是个人总结的推到流程供参考
2.1.3multi-head attention
在上面的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′个特征影响
当
K
=
3
K=3
K=3的时候结构如图所示
节点1在邻域中具有多端注意机制,不同的箭头样式表示独立的注意力计算,通过连接或平均每个head获取 h1对于最终的输出,concate操作可能不那么敏感了,所以我们直接用K平均来取代concate操作,得到最终的公式
3实验
实验分成两部分,transductive learning(半监督学习)和inductive learning(归纳学习)。模型用了两层的GAT
3.1数据集
图结构的数据集,以及数据集之中的信息如下:
3.2半监督学习transductive learning
- 两层 GAT
- 在Cora 数据集上优化网络结构的超参数,应用到Citeseer 数据集
- 第一层 8 head, F`=8 , ELU 作为非线性函数
- 第二层为分类层,一个 attention head 特征数C,后跟 softmax 函数,为了应对小训练集,正则化(L2)
- 两层都采用 0.6 的dropout,相当于计算每个node位置的卷积时都是随机的选取了一部分近邻节点参与卷积
3.3 归纳学习inductive learning
- 三层GAT 模型
- 前两层 K=4, F1=256 ,ELU作为非线性函数
- 最后一层用来分类 K=6, F`=121 , 激活函数为sigmoid
- 该任务中,训练集足够大不需要使用 正则化 和 dropout
两个任务都是用Glorot初始化初始的,并且是用Adam SGD来最小化交叉熵进行优化