1、引言
在前两篇博文中,我们讨论了基本的图神经网络算法GCN, 使用采样和聚合构建的inductive learning框架GraphSAGE, 然而图结构数据常常含有噪声,意味着节点与节点之间的边有时不是那么可靠,邻居的相对重要性也有差异
,解决这个问题的方式是在图算法中引入“注意力”机制(attention mechanism), 通过计算当前节点与邻居的“注意力系数”(attention coefficient), 在聚合邻居embedding的时候进行加权,使得图神经网络能够更加关注重要的节点,以减少边噪声带来的影响。
2、图注意力机制的类型
目前主要有三种注意力机制算法,它们分别是:学习注意力权重(Learn attention weights),基于相似性的注意力(Similarity-based attention),注意力引导的随机游走(Attention-guided walk)。这三种注意力机制都可以用来生成邻居的相对重要性,下文会阐述他们之间的差异。
首先我们对“图注意力机制”做一个数学上的定义:
2.1 学习注意力权重(使用a)
学习注意力权重的方法来自于Velickovic et al. 2018 其核心思想是利用参数矩阵学习节点和邻居之间的相对重要性。给定节点
v
0
,
v
1
.
.
.
v
Γ
x
0
v_{0},v_{1}...v_{\Gamma x_{0}}
v0,v1...vΓx0相应的特征(embedding)
x
0
,
x
1
.
.
.
x
Γ
x
0
\bf{x_{0}},\bf{x_{1}}...\bf{x_{\Gamma_{x_{0}}}}
x0,x1...xΓx0,节点
v
0
v_{0}
v0和节点
v
j
v_{j}
vj注意力权重
α
0
,
j
\alpha_{0,j}
α0,j可以通过以下公式计算:
其中,
e
0
,
j
e_{0,j}
e0,j表示节点
v
j
v_{j}
vj对节点
v
0
v_{0}
v0的相对重要性。在实践中,可以利用节点的属性结合softmax函数来计算
e
0
,
j
e_{0,j}
e0,j间的相关性。比如,GAT 中是这样计算的:
其中,
a
\bf{a}
a表示一个可训练的参数向量,用来学习节点和邻居之间的相对重要性。
W
\bf{W}
W也是一个可训练的参数矩阵,用来对输入特征做线性变换。
∣
∣
||
∣∣表示向量拼接(concate)。
2.2 基于相似性的注意力(使用余弦)
上面这种方法使用一个参数向量
a
\bf{a}
a学习节点和邻居的相对重要性,其实另一个容易想到的点是:既然我们有节点
v
v
v的特征表示
x
\bf{x}
x,假设和节点自身相像的邻居节点更加重要,那么可以通过直接计算
x
\bf{x}
x之间相似性的方法得到节点的相对重要性。这种方法称为基于相似性的注意力机制,比如说论文 TheKumparampil et al. 2018 是这样计算的:
其中,
β
\beta
β表示可训练偏差(bias),
c
o
s
cos
cos函数用来计算余弦相似度,和上一个方法类似,
W
\bf{W}
W 是一个可训练的参数矩阵,用来对输入特征做线性变换。
这个方法和上一个方法的区别在于,这个方法显示地使用 c o s cos cos函数计算节点之间的相似性作为相对重要性权重,而上一个方法使用可学习的参数 a \bf{a} a学习节点之间的相对重要性。
2.3 注意力引导的游走法(使用RNN)
前两种注意力方法主要关注于选择相关的邻居信息,并将这些信息聚合到节点的embedding中。第三种注意力的方法的目的不同,我们以Lee et al. 2018 作为例子:
- 也就是说,如下图当前节点3,之前游走记录是:经从1走到2,再从2走到的自身3;
- 下一步到底去2还是4还是5?那么就需要计算到那3个点的值大小
- 走向最大值对应的那个节点(用了RNN机制,将属于的向量映射到k维向量,此例子中是3,然后比较这3个维度上的值大小)