Attention的基本形式
图注意力模型(Graph Attention Network GAN)将attention引入图神经网络。在GAN中有两种思路:
(1)Global graph attention
即在更新图中某一个节点的Embedding时,图上的每一个顶点 i i i 都参与到attention运算。
优点:完全不依赖于图的结构,对于inductive任务无压力
缺点:忽略了图结构的这个特征,影响最终的效果,计算代价大。
(2)Mask graph attention
注意力机制的运算只在邻居顶点上进行,这是论文中采用的方法。
GAT基本原理
回顾nlp中的attention机制:深入理解 Bert核心:Self-Attention与transformer ,基本思路相同,都是先计算注意力系数,然后进行加权求和。然后映入多头机制,增强学习能力。
1、计算attention系数
首先,计算顶点
i
i
i与邻居节点
(
j
∈
N
i
)
(j \in \mathcal N_i)
(j∈Ni) 之间的相似系数:
e
i
j
=
a
(
[
W
h
⃗
i
∣
∣
W
h
⃗
j
]
)
j
∈
N
i
e_{i j}=a\left( \left[\mathbf{W} \vec{h}_{i}|| \mathbf{W} \vec{h}_{j} \right]\right) \;j \in \mathcal N_i
eij=a([Whi∣∣Whj])j∈Ni
其中,
W
W
W是共享参数,相当于对
h
j
h_j
hj特征进行了增强,
[
.
∣
∣
.
]
[.||.]
[.∣∣.]表示对变换后的特征进行concatenate;
a
(
⋅
)
a(\cdot)
a(⋅)把拼接后的特征映射到一个实数上。
通过这个方式,选取合适和 W 和 a ( ) W和a() W和a(),可以有效的捕捉到顶点 i , j i,j i,j之间的相关性。
在进行加权求和之前还要进行归一化操作:
α
i
j
=
softmax
j
(
e
i
j
)
=
exp
(
e
i
j
)
∑
k
∈
N
i
exp
(
e
i
k
)
=
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
j
]
)
)
∑
k
∈
N
i
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
k
]
)
)
\begin{aligned} \alpha_{i j}&=\operatorname{softmax}_{j}\left(e_{i j}\right)\\ &=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in N_{i}} \exp \left(e_{i k}\right)}\\ &=\frac{\exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right)\right)}{\sum_{k \in N_{i}} \exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{k}\right]\right)\right)} \end{aligned}
αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)=∑k∈Niexp(LeakyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT[Whi∥Whj]))
整个过程如下图所示:
2、加权求和
这个比较简单,直接根据得到的权重,对邻居特征进行加权求和,如下图:
h
⃗
i
′
=
σ
(
∑
j
∈
N
i
α
i
j
W
h
⃗
j
)
\vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in N_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right)
hi′=σ⎝⎛j∈Ni∑αijWhj⎠⎞
这样,GAT输出的对于每个顶点
i
i
i 的新特征就融合了邻域信息。
3、引入多头机制的GAT
通过初始化 k k k 个不同的权重 W W W,从不同的角度对原有的embedding进行增强,提取到不同的注意力参数,在进行加权求和。对于不同的注意力系数,又有两种方法对邻居节点进行聚合。
(1)直接横向拼接,这样新的embeddin向量的维度是原来的
k
k
k倍:
h
⃗
i
′
=
∥
k
=
1
K
σ
(
∑
j
∈
N
i
α
i
j
k
W
k
h
⃗
j
)
\vec{h}_{i}^{\prime}=\|_{k=1}^{K} \sigma\left(\sum_{j \in N_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)
hi′=∥k=1Kσ⎝⎛j∈Ni∑αijkWkhj⎠⎞
(2)k个注意力机制的结果取均值:
h
⃗
i
′
=
σ
(
1
K
∑
k
=
1
K
∑
j
∈
N
i
α
i
j
k
W
k
h
⃗
j
)
\vec{h}_{i}^{\prime}=\sigma\left(\frac{1}{K} \sum_{k=1}^{K} \sum_{j \in N_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)
hi′=σ⎝⎛K1k=1∑Kj∈Ni∑αijkWkhj⎠⎞
具体计算过程如下:
GAT的原理
1、引入注意力机制,在聚合时,为邻居节点分配不同的权重,得到更具有代表性的Embedding。
2、可以实现inductive任务,即处理动态图问题,不需要事先得到整个图结构或所有顶点的特征。
tensorflow2.0 实现GAT
参考