最近需要用的GAT的中心节点周围节点分配权重的思想,不得不提到注意力Attention机制的重要性,因此阅读GAT。
前言
GCN模型可以分为频谱域和空间域两大类。应用较多的还是在频谱类,使用拉普拉斯矩阵借助图谱进行卷积操作。但是他也存在一些缺陷,比如依赖拉普拉斯矩阵,不能直接用于有向图,模型训练依赖整个图结构,且图结构必须保持静态,不能应用于动态图,同时卷积时无法为邻居节点分配不同的权重。因此GAT的出现就可解决GCN存在的问题。
一、Introduction
本文提出的方法可以隐式的制定不同的权重到一个邻居的不同节点,同时不需要任何类型的代价很高的矩阵操作。他可以处理任意大小的输入,同时可以重视某些重要的节点并忽视影响力较小的节点。在这篇文章中简单概述一下GAT的核心算法,不对论文做过多的详解。
二、GAT Architecture
三个特点:
- 高效:针对相邻节点,可以并行运算。
- 灵活:针对不同度的节点,可以运用不同大小的权值与之对应。
- 可移植:可将模型应用于全新的图结构,不需要与训练集相同。
输入和输出
输入
h
=
{
h
⃗
1
,
h
⃗
2
,
.
.
.
,
h
⃗
N
}
,
h
⃗
i
∈
R
F
\mathbf h=\{ \vec h_1,\vec h_2,...,\vec h_N\},\vec h_i \in \mathbb R^F
h={h1,h2,...,hN},hi∈RF,
N为节点个数,F为特征个数,表示输入为N个节点的F个特征。
输出
h
′
=
{
h
⃗
1
′
,
h
⃗
2
′
,
.
.
.
,
h
⃗
N
′
}
,
h
⃗
i
′
∈
R
F
\mathbf h'=\{ \vec h_1',\vec h_2',...,\vec h_N'\},\vec h_i' \in \mathbb R^F
h′={h1′,h2′,...,hN′},hi′∈RF,
表示对这N个节点的F‘个输出,输出为N个节点的每个节点的F’个特征。
按照输出的feature预测输出的feature
特征提取和注意力机制
为了得到输入和输出的转换,需要根据俄输入的feature至少一次线性变换得到输出的feature,所以需要对所有节点训练一个权值矩阵,
W
∈
R
F
′
×
F
\mathbf W\in\mathbb R^{F'\times F}
W∈RF′×F,这个权值矩阵就是输入与输出的特征之间的关系。
接着针对每个节点实行self-Attention。
self-attention
e
i
j
e_{ij}
eij表示节点j的特征对节点i的重要性,该模型允许每个节点注意其他每个节点,删除所有的结构信息。通过masked attention,计算节点
e
i
j
,
j
∈
N
i
e_{ij}, j \in N_i
eij,j∈Ni,其中
N
i
N_i
Ni是图中节点i的某个邻域。这是基本方法
实际应用
相当于,先把节点i、j的特征向量拼接,各自乘函数,然后和一个
2
F
′
2F'
2F′维的权重参数化向量
α
⃗
,
α
⃗
∈
R
2
F
′
\vec \alpha,\vec \alpha\in \mathbb R^{2F'}
α,α∈R2F′计算内积。再经过激活函数。通过softmax分类器得到归一化后的该节点i对于j的重要程度。分类后,他的特征值在GCN中就改变了,变成了具有加权信息的特征向量。当然也可以将多个权值计算之后(即一个节点相对于他的邻域内多个节点计算出的
α
⃗
\vec \alpha
α值)连接,若是最后一层则不拼接,将k个attention的输出取平均。
总结
我们可以合理的利用Attention机制来处理传统GCN无法实现的任务。这让数据的输入更加灵活,可接受的输入形式更广泛。与DropEdge仍有区别,也有相似之处。第一是他们的思路都是从数据集处理,只处理单次且全局共享,DropEdge随机放弃几个相连接的边,作用是防止过拟合和过平滑,让性能优化;而GAT是对节点进行处理的,保留了拓扑信息和所有的节点特征但是使用了处理函数,更耗时,而且文章中没有对模型的过拟合和过平滑程度进行评估。两者最相同的特点都是相当于对原图信息做了预处理,但是下游任务仍未改变。思路类似但是做法不同。
参考
GAT 图注意力网络 Graph Attention Network
图注意力网络(GAT) ICLR2018, Graph Attention Network论文详解