GAT论文理解
零、背景
- 传统的GCN难以解决Inductive的问题,也就是说如果有新点,则需要通过重构的方式来进行。
- 而且呢,基于谱的方法比较晦涩难懂,但是作者提出的基于Attention的GNN则写得非常的直观易懂,且做法也简单,有一种我上我也行的感觉,主要是结果还很好[1]。
- 本篇文章的前两页也很细致的回顾了图卷积的背景与经典方法,如基于谱的经典方法和不基于谱的经典方法,感觉作为一篇简单的综述都是很好的
- 作者我有一次看到好像是被称为机器学习领域的三个最大牛之一的人物,所以大牛果然是大牛。
一、模型结构
对于图的表示学习来说,主要目的就是每个点输入的时候有一个表征 h i h_i hi,其维度为 d d d。通过一个GNN,之后要学到一个维度为 d ′ d' d′的新的表征 h i ′ h'_i hi′,通过这个 h i ′ h_i' hi′去进行下游的一些任务如聚类等。
1.1 全连接层
传统的做法首先是将
h
i
h_i
hi通过一个参数共享的全连接层
W
W
W,其中
W
W
W是
d
′
×
d
d' \times d
d′×d维的即
h
i
′
=
W
h
i
h'_i = Wh_i
hi′=Whi
1.2 attention的计算
在图上的话,只通过全连接显然是不够的,要聚合当前点和其他点的关系带来的信息,但是每个点对当前点影响又不一致,因此就要用attention进行计算了,作者先通过attention计算了一个权重
e
i
j
e_{ij}
eij代表点
i
i
i和点
j
j
j的关系,在本文中作者只考虑了对于点
i
i
i的一阶邻居对
i
i
i的影响。
e
i
j
=
a
(
W
h
i
,
W
h
j
)
其
中
,
a
(
W
h
i
,
W
h
j
)
=
L
e
a
k
y
R
e
L
U
(
a
⃗
[
W
h
i
∥
W
h
j
]
)
e_{ij} = a (Wh_i,Wh_j)\\其中,a (Wh_i,Wh_j) = LeakyReLU(\vec{a}[Wh_i\|Wh_j])
eij=a(Whi,Whj)其中,a(Whi,Whj)=LeakyReLU(a[Whi∥Whj])
[
a
∥
b
]
[a\|b]
[a∥b]是将
a
a
a和
b
b
b拼在一起的意思,因此
a
⃗
\vec a
a就是一个维度为
2
d
′
2d'
2d′的向量,得到第
i
i
i个点和第
j
j
j个点聚合的结果,使用
L
e
a
k
y
R
e
L
U
LeakyReLU
LeakyReLU是负数位置也有梯度的
R
e
L
U
ReLU
ReLU,使用这个激活函数我觉得可能是有一些点会起到负数的效果。
接着再用
s
o
f
t
m
a
x
softmax
softmax使相邻点的权重归一化,即
α
i
j
=
e
x
p
(
e
i
j
)
∑
k
∈
N
i
e
x
p
(
e
i
k
)
即
α
i
j
=
e
x
p
(
L
e
a
k
y
R
e
L
U
(
a
⃗
[
W
h
i
∥
W
h
j
]
)
)
∑
k
∈
N
i
e
x
p
(
L
e
a
k
y
R
e
L
U
(
a
⃗
[
W
h
i
∥
W
h
k
]
)
)
\alpha _{ij}= \frac{exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})}\\即\alpha _{ij} = \frac {exp(LeakyReLU(\vec{a}[Wh_i\|Wh_j]))}{\sum_{k\in N_i }exp(LeakyReLU(\vec{a}[Wh_i\|Wh_k]))}
αij=∑k∈Niexp(eik)exp(eij)即αij=∑k∈Niexp(LeakyReLU(a[Whi∥Whk]))exp(LeakyReLU(a[Whi∥Whj]))
其中
N
i
N_i
Ni表示
i
i
i的一阶邻居。
1.3 邻居信息的聚合
有了这个权重,聚合起来就比较方便,就有
h
i
′
=
σ
(
∑
j
∈
N
i
α
i
j
W
h
i
)
h'_i = \sigma(\sum_{j\in N_i}\alpha_{ij}Wh_i)
hi′=σ(j∈Ni∑αijWhi)
即加权聚合到一起
1.4 多头注意力机制
然而呢,注意力机制只做一次效果可能不好,做上K次可能就好了,因此作者又增加了一个多头注意力机制,用两种方式进行聚合,一种是直接拼接,得到一个
K
d
′
Kd'
Kd′维的向量,即
h
i
′
=
∥
k
=
1
K
σ
(
∑
j
∈
N
i
α
i
j
k
W
k
h
i
)
h'_i = \|_{k=1}^K \sigma(\sum_{j\in N_i}\alpha_{ij}^kW^kh_i)
hi′=∥k=1Kσ(j∈Ni∑αijkWkhi)
另一种是进行平均,得到
d
′
d'
d′维的向量
即
h
i
′
=
σ
(
1
K
∑
k
=
1
K
∑
j
∈
N
i
α
i
j
k
W
k
h
i
)
h'_i = \sigma(\frac 1 K \sum_{k=1} ^ K\sum_{j\in N_i}\alpha_{ij}^kW^kh_i)
hi′=σ(K1k=1∑Kj∈Ni∑αijkWkhi)
二、一点想法
- 作者只聚合了一阶邻居,不知道有没有办法可以拓展到更高阶。
- 作者只考虑了 i i i和相邻点的关系,没考虑邻居之间互相的关系,有两个类似的邻居的话,没准会减弱每个的关系,不过我觉得这个学习的时候也能学到。
三、引用
[1] Velikovi P , Cucurull G , Casanova A , et al. Graph Attention Networks[J]. 2017.