图神经网络(三)GCN的变体与框架(2)GAT
3.2 GAT
本节要 介绍的是图注意力网络(Graph Attention Network,GAT)[1] ,它通过注意力机制(Attention Mechanism)来对邻居节点做聚合操作,实现了对不同邻居权重的自适应分配,从而大大提高了图神经网络模型的表达能力 [0] 。
3.2.1 注意力机制
DNN中的注意力机制是受到认知科学中人类对信息处理机制的启发而产生的。由于信息处理能力的局限,人类会选择性的关注完整信息中的某一部分,同时忽略其他信息。例如,我们在看一幅画时,通常会把视觉关注焦点放到语义信息更丰富的前景物体上,而减少对背景信息的关注,这种机制大大提高了人类对信息的处理效率。
如图3-2所示,我们的视觉会更加关注画面上的猫,这种对视觉信息集中处理的机制在视觉问答场景中被发挥得淋漓尽致。比如,如果要确定下图中的猫在做什么,人类会把视觉信息快速集中在猫的前爪以及面不上,而忽略对其他视觉信息的辨识,从而准确得出图中的猫在睡觉的答案。

图3-2 注意力机制的处理过程
可见,注意力机制的核心在于对给定信息进行权重分配,权重高的信息意味着需要系统进行重点加工。下面来进一步阐述神经网络中注意力机制的数学表达形式(见图3-3):

图3-3 注意力机制的数学表达形式
如图3-3所示,
Source
\text{Source}
Source 是需要系统处理的信息源,
Query
\text{Query}
Query 代表某种条件或者先验信息,
Attention Value
\text{Attention Value}
Attention Value 是给定
Query
\text{Query}
Query 信息的条件下,通过注意力机制从
Source
\text{Source}
Source 中提取得到的信息,我们将每种信息通过
Key-Value
\text{Key-Value}
Key-Value 对的形式表示出来,注意力机制的定义如下:
Attention(Query,Source)
=
∑
i
similarity
(
Query
,
Key
i
)
⋅
Value
i
\text{Attention(Query,Source)}=∑_i\text{similarity}(\text{Query},\text{Key}_i)⋅\text{Value}_i
Attention(Query,Source)=i∑similarity(Query,Keyi)⋅Valuei
上式中的
Query
\text{Query}
Query、
Key
\text{Key}
Key、
Value
\text{Value}
Value、
Attention Value
\text{Attention Value}
Attention Value 在实际计算时均可以是向量形式。
similarity
(
Query
)
\text{similarity}(\text{Query})
similarity(Query) 表示
Query
\text{Query}
Query 向量和
Key
\text{Key}
Key 向量的相关度,最直接的方法是可以取两向量的内积
⟨
Query
,
Key
i
⟩
\langle\text{Query}, \text{Key}_i\rangle
⟨Query,Keyi⟩(用内积取表示两个向量的相关度是DNN(深度神经网络)里面经常用到的方法,对于两个单位向量,如果内积接近
1
1
1 ,代表两向量接近重合,相似度就高)。上式清晰地表明,之一李机制就是对所有的Value信息进行加权求和,权重是
Query
\text{Query}
Query 与对应
Key
\text{Key}
Key 的相关度。
我们可以继续通过上述视觉问答的例子来说明注意力机制是怎样运用的。
首先,显然
Query
\text{Query}
Query 应该是代表问题的句子“小猫在做什么?”的语义向量表达,一般我们用LSTM模型进行提取。
Query
\text{Query}
Query 表示整张图像在经过CNN模型后得到的特征图张量
H
∈
R
H
′
×
W
′
×
C
′
H∈R^{H'×W'×C'}
H∈RH′×W′×C′ ,
H
′
H'
H′、
W
′
W'
W′、
C
′
C'
C′ 分别代表特征图的高度、宽度和通道数。通过前面所学的知识我们知道,人类的视觉系统分配给图例不同位置的信息的注意力是不同的。所以很自然地,我们将特征图
H
H
H 转化成
H
∈
R
L
×
C
′
H∈R^{L×C'}
H∈RL×C′ ,
L
=
H
′
×
W
′
L=H'×W'
L=H′×W′ 表示空间位置的长度,
H
i
,
∶
′
∈
R
C
H_{i,∶}'∈R^C
Hi,∶′∈RC 表示特征图上某个空间位置的向量表达。在这个例子中,由于没有明显的
Key
\text{Key}
Key、
Value
\text{Value}
Value 之别,所以我们令
Key
=
Value
=
H
i
,
∶
′
\text{Key}=\text{Value}=H_{i,∶}'
Key=Value=Hi,∶′ ,则在给定
Query
\text{Query}
Query 问题的条件下,注意力机制下的输出为:
Attention(Query,Source)
=
∑
i
L
⟨
Query
,
H
i
,
∶
′
⟩
⋅
H
i
,
∶
′
\text{Attention(Query,Source)}=∑_i^L\langle\text{Query}, H_{i,∶}'\rangle⋅H_{i,∶}'
Attention(Query,Source)=i∑L⟨Query,Hi,∶′⟩⋅Hi,∶′
通过上述例子,我们可以很清晰地看到DNN是如何利用注意力机制在视觉问答的任务中从图里更加有效地抽取出内容信息的。事实上,在DNN中,注意力机制已经被看作一种更具表达力的信息融合手段,其在计算机视觉与自然语言处理中得到了广泛的应用,如在视觉问答、视觉推理、语言模型、机器翻译、机器问答等场景中,注意力机制得到了长足的应用与发展。
3.2.2 图注意力层
本节我们来介绍如何将注意力机制应用到图神经网络聚合邻居的操作中,根据注意力机制里面的三要素: Query \text{Query} Query 、 Source \text{Source} Source 、 Attention Value \text{Attention Value} Attention Value ,我们可以很自然地将 Query \text{Query} Query 设置为当前中心节点的特征向量,将 Source \text{Source} Source 设置为所有邻居的特征向量,将 Attention Value \text{Attention Value} Attention Value 设置为中心节点经过聚合操作后的新的特征向量。
正式的定义如下:设图中任意节点
v
i
v_i
vi 在第一层所对应的特征向量为
h
i
,
h
i
∈
R
d
(
l
)
\boldsymbol{h}_i , \boldsymbol{h}_i∈R^{d^{(l)}}
hi,hi∈Rd(l) ,
d
(
l
)
d^{(l)}
d(l) 表示节点的特征长度,经过一个以注意力机制为核心的聚合操作之后,输出的是每个节点新的特征向量
h
i
′
,
h
i
′
∈
R
d
(
l
+
1
)
\boldsymbol{h}_i', \boldsymbol{h}_i'∈R^{d^{(l+1)}}
hi′,hi′∈Rd(l+1) ,
d
(
l
+
1
)
d^{(l+1)}
d(l+1) 表示输出的特征向量的长度。我们将这个聚合操作称为图注意力层(Graph Attention Layer,GAL)(见图3-4)。

图3-4 图注意力层 [1]
假设中心节点为
v
i
v_i
vi ,我们设邻居节点
v
j
v_j
vj 到
v
i
v_i
vi 的权重系数为:
e
i
j
=
a
(
W
h
i
,
W
h
j
)
e_{ij}=a(W\boldsymbol{h}_i,W\boldsymbol{h}_j)
eij=a(Whi,Whj)
W
∈
R
d
(
l
+
1
)
×
d
(
l
)
W∈R^{d^{(l+1)}×d^{(l)}}
W∈Rd(l+1)×d(l) 是该层节点特征变换的权重参数。
a
(
⋅
)
a(⋅)
a(⋅)是计算两个节点相关度的函数,原则上,这里我们可以计算图中任意一个节点到节点
v
i
v_i
vi 的权重系数,但是为了简化计算,我们将其限制在一阶邻居内,需要注意的是在GAT中,作者将每个节点也视作自己的邻居。关于
a
a
a 的选择,前面我们介绍了可以用向量的内积来定义一种无参形式的相关度计算
⟨
W
h
i
,
W
h
j
⟩
\langle W\boldsymbol{h}_i, W\boldsymbol{h}_j\rangle
⟨Whi,Whj⟩ ,也可以定义成一种带参的神经网络层,只要满足
a
:
R
d
(
l
+
1
)
×
R
d
(
l
+
1
)
→
R
a: R^{d^{(l+1)}}×R^{d^{(l+1)}}→R
a:Rd(l+1)×Rd(l+1)→R ,即输出一个标量值表示二者的相关度即可。此处作者选择了一个单层的全连接层:
e
i
j
=
Leaky ReLU
(
a
T
[
W
h
i
∥
W
h
j
]
)
e_{ij}=\text{Leaky ReLU}(a^\text{T} [W\boldsymbol{h}_i∥W\boldsymbol{h}_j])
eij=Leaky ReLU(aT[Whi∥Whj])
其权重参数
a
→
R
2
d
(
l
+
1
)
a→R^{2d^{(l+1)}}
a→R2d(l+1) ,激活函数设计为
LeakyReLU
\text{LeakyReLU}
LeakyReLU 。为了更好地分配权重,我们需要将所有邻居计算出的相关度进行统一的归一化处理,具体形式为
softmax
\text{softmax}
softmax 归一化:
α
i
j
=
softmax
j
(
e
i
j
)
=
exp
(
e
i
j
)
∑
v
k
∈
N
~
(
v
i
)
exp
(
e
i
k
)
\alpha_{ij}=\text{softmax}_j(e_{ij})=\frac{\text{exp}(e_{ij})}{∑_{v_k∈\tilde{N}(v_i)}\text{exp}(e_{ik})}
αij=softmaxj(eij)=∑vk∈N~(vi)exp(eik)exp(eij)
α
\alpha
α 是权重系数,通过上式的处理,保证了所有邻居的权重系数加和为1。图3-4所示为计算过程的示意图,下式给出了完整的权重系数的计算公式:
α
i
j
=
exp
(
LeakyReLU
(
a
T
[
W
h
i
∥
W
h
j
]
)
)
(
∑
v
k
∈
N
~
(
v
i
)
exp
(
LeakyReLU
(
a
T
[
W
h
i
∥
W
h
j
]
)
)
\alpha_{ij}=\frac{\text{exp}(\text{LeakyReLU}(a^\text{T} [W\boldsymbol{h}_i∥W\boldsymbol{h}_j]))}{(∑_{v_k∈\tilde{N}(v_i)}\text{exp}(\text{LeakyReLU}(a^\text{T} [W\boldsymbol{h}_i∥W\boldsymbol{h}_j]))}
αij=(∑vk∈N~(vi)exp(LeakyReLU(aT[Whi∥Whj]))exp(LeakyReLU(aT[Whi∥Whj]))
一旦完成上述权重系数的计算,按照注意力机制加权求和的思路,节点
v
i
v_i
vi 新的特征向量为:
h
i
′
=
σ
(
∑
v
j
∈
N
~
(
v
i
)
a
i
j
W
h
j
)
\boldsymbol{h}_i'=σ\Bigg(∑_{v_j∈\tilde{N}(v_i )}a_{ij}W\boldsymbol{h}_j\Bigg)
hi′=σ(vj∈N~(vi)∑aijWhj)
3.2.3 多头图注意力层
为了更进一步提升注意力层的表达能力,可以加入多头注意力机制(multi-head attention),也即对
h
i
′
=
σ
(
∑
v
j
∈
N
~
(
v
i
)
a
i
j
W
h
j
)
\boldsymbol{h}_i'=σ(∑_{v_j∈\tilde{N}(v_i)}a_{ij}W\boldsymbol{h}_j)
hi′=σ(vj∈N~(vi)∑aijWhj)调用
K
K
K 组相互独立的注意力机制,然后将输出结果拼接在一起:
h
i
′
=
∥
k
=
1
K
σ
(
∑
v
j
∈
N
~
(
v
i
)
a
i
j
(
k
)
W
(
k
)
h
j
)
\boldsymbol{h}_i'={\Vert}_{k=1}^Kσ(∑_{v_j∈\tilde{N}(v_i )}a_{ij}^{(k)}W^{(k)}\boldsymbol{h}_j)
hi′=∥k=1Kσ(vj∈N~(vi)∑aij(k)W(k)hj)
其中
∥
\Vert
∥ 代表拼接操作,
a
i
j
(
k
)
a_{ij}^{(k)}
aij(k) 是第
k
k
k 组注意力机制计算出的权重系数,
W
(
k
)
W^{(k)}
W(k) 是对应的学习参数。当然为了减少输出的特征向量的维度,也可以将拼接操作替换成平均操作。
增加多组相互独立的注意力机制,使得多头注意力机制能够将注意力的分配放到中心节点与邻居节点之间多处相关的特征上,可使得系统的学习能力更加强大。多头注意力机制的计算流程如图3-5所示,其中不同的颜色表示不同注意力计算过程,图中
K
=
3
K=3
K=3 ,计算完后,将上述结果进行拼接或者平均操作。

图3-5 多头注意力机制示意图 [1]
图注意力层比GCN里面的图卷积层多了一个自适应的边权重系数的维度。回到GCN的核心过程 L ~ sym X W \tilde{L}_\text{sym}XW L~symXW ,我们可以将 L ~ sym \tilde{L}_\text{sym} L~sym 拆分成两个部分,引入一个权重矩阵 M ∈ R N × N M∈R^{N×N} M∈RN×N ,然后核心过程就变成了 ( A ~ ⊙ M ) X W (\tilde{A}\odot M)XW (A~⊙M)XW 。由此可以看到,图注意力模型相较于GCN多了一个可以学习的新维度——边上的权重系数。在之前的模型中,这个权重系数矩阵是图的拉普拉斯矩阵,而图注意力模型可以对其进行自适应的学习,并且通过运用注意力机制,避免引入过多的学习参数。这使得图注意力模型具有非常高效的表达能力。这种机制从图信号处理的角度来看,相当于学习出一个自适应的图位移算子,对应一种自适应的滤波效应。当然,和GraphSAGE模型一样,图注意力模型的计算也保留了非常完整的局部性,一样能进行归纳处理。
参考文献
[0] 刘忠雨, 李彦霖, 周洋.《深入浅出图神经网络: GNN原理解析》.机械工业出版社.
[1] VeličkovićP , Cucurull G , Casanova A , et al.Graph attention networks[J].arXiv preprint arXiv:1710.10903,2017.