前言
之前在推荐排序上开发的一个算法,取得了不错的效果。其中就用到了图神经网络模块,该模块的一部分思想源于GraphSage和GAT,因此对GAT的算法及代码理解还是比较深的,上一篇博文介绍了GraphSage:《GraphSage -《Inductive Representation Learning on Large Graphs》论文详解》,本文对GAT算法部分进行剖析。
GAT的核心思想就是 加权聚合周围邻居的信息。其原理与GraphSage的Mean aggregator基本一致,只是作者增加了一些Tricks。
虽然GAT在论文中讨论的是有监督学习,但依旧可以使用GraphSage中论文提到的方式进行无监督学习。因为两者的层输出都是节点的embedding。
正文
图注意力机制层(Graph Attentional Layer)
层的输入
层的输入是节点特征的集合:
h
=
{
h
1
,
h
2
,
…
,
h
N
}
,
h
i
∈
R
F
\bold{h}=\{\bold{h}_1,\bold{h}_2,\ldots,\bold{h}_N\},\bold{h}_i\in\mathbb{R}^F
h={h1,h2,…,hN},hi∈RF 其中,
N
N
N 是节点个数,
F
F
F 是每个节点输入的特征维度。
注意力系数
注意力系数是每两个直接邻居节点之间的权重,包括节点本身的注意力系数。(作者表示,使用直接邻居而不是整个图的两个节点之间求注意力系数,相当于注入了结构信息。)
e
i
j
=
a
(
W
h
i
,
W
h
j
)
=
L
R
e
L
U
(
a
T
[
W
h
i
∥
W
h
j
]
)
(
1
)
\begin{aligned} e_{ij}=a\Big(\bold{W}\bold{h}_i\,, \bold{W}\bold{h}_j\Big) =LReLU\Big( \bold{a}^T [ \bold{W}\bold{h}_i \| \bold{W}\bold{h}_j ] \Big) \,\,\,\,(1) \end{aligned}
eij=a(Whi,Whj)=LReLU(aT[Whi∥Whj])(1) 其中,
a
→
T
∈
R
2
F
′
\overrightarrow{a}^T\in\mathbb{R}^{2F'}
aT∈R2F′,为全连接层
a
a
a 的参数;
W
∈
R
F
′
×
F
\bold{W}\in\mathbb{R}^{F'\times F}
W∈RF′×F 是对节点特征的一个线性变换的参数,目的是为了增强表达能力;
∥
\|
∥ 是concat操作;(1)式的结果生成的注意力系数
e
i
j
∈
R
e_{ij}\in\mathbb{R}
eij∈R,图示如下:
e
i
j
e_{ij}
eij 表示节点
j
j
j 的特征对节点
i
i
i 的重要性。
归一化注意力系数
为了使系数在不同节点之间易于比较,对注意力系数进行归一化。
α
i
j
=
s
o
f
t
m
a
x
j
(
e
i
j
)
=
e
x
p
(
e
i
j
)
∑
k
∈
N
i
e
x
p
(
e
i
k
)
\begin{aligned} \alpha_{ij}=softmax_j(e_{ij})={\frac {exp(e_{ij})} {\sum_{k\in\mathcal{N_i}} exp(e_{ik})}} \end{aligned}
αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij) 其中,
N
i
\mathcal{N}_{i}
Ni 是节点
i
i
i 的直接邻居节点集合。(2)式表示对节点
i
i
i 的直接邻居节点之间进行归一化。
综合(1)式可得归一化注意力系数的表达式为:
α
i
j
=
e
x
p
(
L
R
e
L
U
(
a
T
[
W
h
i
∥
W
h
j
]
)
)
∑
k
∈
N
i
e
x
p
(
L
R
e
L
U
(
a
T
[
W
h
i
∥
W
h
k
]
)
)
\begin{aligned} \alpha_{ij}={\frac {exp(LReLU\Big( \bold{a}^T [ \bold{W}\bold{h}_i \| \bold{W}\bold{h}_j ] \Big))} {\sum_{k\in\mathcal{N_i}} exp(LReLU\Big( \bold{a}^T [ \bold{W}\bold{h}_i \| \bold{W}\bold{h}_k ] \Big))}} \end{aligned}
αij=∑k∈Niexp(LReLU(aT[Whi∥Whk]))exp(LReLU(aT[Whi∥Whj]))
通过邻居节点更新自身节点
这里使用过注意力机制,对邻居进行加权求和,然后聚合到自己身上,其原理与GraphSage基本一致,只是作者做了一些trick。
-
加权求和
h i ′ = σ ( ∑ j ∈ N i α i j W h j ) \begin{aligned} \bold{h}_i'=\sigma\Big( \sum_{j\in\mathcal{N}_i} \alpha_{ij} \bold{W} \bold{h}_j \Big) \end{aligned} hi′=σ(j∈Ni∑αijWhj) 从上式可以看到,Attention的K,Q,V均来自输入节点,因此GAT的Attention是Self-Attention。 -
Multi-head Attention
使用 Multi-head 可以稳定 Self-Attention 的学习过程,然后将每个 head 的输出进行concat。
h i ′ = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h j ) \begin{aligned} \bold{h}_i^{\prime}=\|_{k=1}^K \sigma\left(\sum_{j \in \mathcal{N}_i} \alpha_{i j}^k \mathbf{W}^k \bold{h}_j\right) \end{aligned} hi′=∥k=1Kσ⎝⎛j∈Ni∑αijkWkhj⎠⎞ 其中, ∥ \| ∥ 是concat操作, α i j k \alpha_{i j}^k αijk 由第 k k k 个注意机制计算的归一化注意力系数;由于是concat,因此 h i ′ ∈ R K F ′ \bold{h}_i^{\prime}\in\mathbb{R}^{KF^{\prime}} hi′∈RKF′ 。
在Transformer的Multi-Head Attention中,对拼接起来的Attention结果,使用一个线性变换再变化原来的维度。
作者认为在在网络的最终(预测)层concat多头注意力结果不合理,因此作者对多头进行了平均:
h i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h j ) \begin{aligned} \bold{h}_i^{\prime}= \sigma\left({\frac 1 K}\sum_{k=1}^{K}\sum_{j \in \mathcal{N}_i} \alpha_{i j}^k \mathbf{W}^k \bold{h}_j\right) \end{aligned} hi′=σ⎝⎛K1k=1∑Kj∈Ni∑αijkWkhj⎠⎞ 生成注意力系数及Multi-head Attention的解释如下图:
右图中不同颜色表示不同的head,一共有三个head。
层的输出
输出节点也是节点特征的集合:
h
′
=
{
h
→
1
′
,
h
→
2
′
,
…
,
h
→
N
′
}
,
h
→
i
′
∈
R
F
′
\bold{h}'=\{\overrightarrow{h}_1',\overrightarrow{h}_2',\ldots,\overrightarrow{h}_N'\},\overrightarrow{h}_i'\in\mathbb{R}^{F'}
h′={h1′,h2′,…,hN′},hi′∈RF′
F
′
F'
F′ 是每个节点输出的特征维度。
GAT相比于先前研究的优势
-
计算高效
Self-Attention层的可以跨所有边并行化,输出特征的计算可以跨所有节点并行化。(个人认为这一点不算优势,GraphSage也可以做到) -
可解释
类似于机器翻译Attention的可解释。 -
Inductive learning
可以泛化到未见过的节点和图。(个人认为这一点也不算优势,GraphSage也可以做到) -
解决GraphSage的缺点
- GraphSage不能在推理期间访问所有邻居。(其实使用Mean Aggregator的GraphSage可以对所有邻居进行采样。)
- LSTM Aggregator有排序问题。
-
GAT可以重新表述为MoNet的特定实例(这个需要分析一下,待续…)
附作者简介
Petar Velickovic: 佩塔尔·维利奇科维奇,DeepMind的研究员,剑桥大学的附属讲师,剑桥大学克莱尔霍尔的副研究员,研究涉及几何深度学习,由于Petar的突出贡献,被公认为几何深度学习计划中的ELLIS学者。Petar 拥有剑桥大学(三一学院)的计算机科学博士学位。
Guillem Cucurull: 吉列姆·库库尔,Blue Prism研究工程师,从事机器学习和计算机视觉方面的工作。
Arantxa Casanova:蒙特利尔综合理工大学/蒙特利尔学习算法研究所博士生。目前在FAIR, Meta AI工作。
Adriana Romero:Meta AI的研究科学家,也是麦吉尔大学的兼职教授。研究重点是开发能够从多模态数据中学习的算法,推理概念关系,并利用主动和自适应数据采集策略。
Pietro Lio:剑桥大学计算机科学与技术系的正教授、人工智能小组的成员、剑桥人工智能医学中心的成员。研究兴趣集中在开发人工智能和计算生物学模型,以了解疾病的复杂性并解决个性化和精准医学问题。目前的重点是图神经网络建模。Pietro Lio拥有剑桥大学的硕士学位,复杂系统和非线性动力学博士学位(意大利佛罗伦萨大学信息学院工程系)和(理论)遗传学博士学位(意大利帕维亚大学)。
Yoshua Bengio:大牛!