背景
作为对比算法被应用在我们的算法中
Veli?kovi? P, Cucurull G, Casanova A, et al. Graph attention networks[J]. arXiv preprint arXiv:1710.10903, 2017.(应该是发表在了ICLR)
模型
图注意力网络 (Graph Attention Networks)被提出\upcite{18}。
X
{\bf{X}}
X 表示所有样本对应的特征,
X
∈
R
N
×
F
{\bf{X}} \in {\mathbb{R}^{N \times F}}
X∈RN×F,其中
N
N
N 表示样本的数量,
F
F
F 表示单个样本对应的特征纬度。
x
i
{\bf{x}}_i
xi?表示为单个样本的特征,
x
i
∈
R
F
{{\bf{x}}_i} \in {\mathbb{R}^F}
xi?∈RF。
a
t
t
(
?
)
{\rm{att}}( \cdot )
att(?)表示注意力系数的计算, 一般注意力机制中
a
t
t
(
?
)
{\rm{att}}( \cdot )
att(?)表示为
R
H
×
R
H
→
R
{\mathbb{R}^H} \times {\mathbb{R}^H} \to \mathbb{R}
RH×RH→R。在图注意力网络中,注意力机制系数通过前向传播的神经网络计算得到。
c
i
j
=
c
x
i
W
T
⊕
x
j
W
{c_{ij}}{\rm{ = }}\begin{matrix}{{c}} {{{\bf{x}}_i}{{\bf{W}}^{\rm{T}}}} \end{matrix} \oplus {{\bf{x}}_j}{\bf{W}}
cij?=cxi?WT?⊕xj?W
⊕
\oplus
⊕是将
c
W
x
i
T
\begin{matrix}{{c}} {{\bf{W}}{{\bf{x}}_i}^{\rm{T}}} \end{matrix}
cWxi?T?转置得到的结果中第
i
i
i个值与
W
x
j
{\bf{W}}{{\bf{x}}_j}
Wxj?中第
j
j
j个值进行相加。表示
c
i
j
{c_{ij}}
cij?节点
i
i
i与节点
j
j
j 的注意力系数,
j
∈
N
i
j \in {{\mathcal N}_i}
j∈Ni?,
N
i
{{\mathcal N}_i}
Ni?是
j
j
j的领域节点。 在GAT中,使用LeakyRelu函数,并进行归一化,如下所示:
δ
i
j
=
exp
?
(
L
e
a
k
y
R
e
L
u
(
c
i
k
)
)
∑
k
∈
N
i
exp
?
(
L
e
a
k
y
R
e
L
u
(
c
i
k
)
)
{\delta _{ij}} = \frac{{\exp ({\rm{LeakyReLu(}}{c_{ik}}{\rm{)}})}}{{\sum\nolimits_{k \in {{\mathcal N}_i}} {\exp ({\rm{LeakyReLu(}}{c_{ik}}{\rm{)}})} }}
δij?=∑k∈Ni??exp(LeakyReLu(cik?))exp(LeakyReLu(cik?))? 通过注意力计算后,得到的新的特征表示为: KaTeX parse error: Undefined control sequence: \cal at position 62: …imits_{j \in {{\?c?a?l? ?N}_i}} {{\delta…
σ
\sigma
σ是一个非线性的激活函数。引入多头注意力机制如下
h
′
i
=
∣
∣
m
=
1
M
σ
(
∑
j
∈
N
i
δ
i
j
m
W
m
x
j
)
{{\bf{h'}}_i}{\rm{ = }}\mathop {{\rm{||}}}\limits_{m = 1}^M \sigma {\rm{(}}\sum\limits_{j \in {{\mathcal N}_i}} {\delta _{_{ij}}^m{{\bf{W}}^m}{{\bf{x}}_j}} {\rm{)}}
h′i?=m=1∣∣M?σ(j∈Ni?∑?δij?m?Wmxj?)
h
′
i
{{\bf{h'}}_i}
h′i? 表示多头注意力通过拼接得到的结果,
∣
∣
{\rm{||}}
∣∣表示拼接。最终,对多头注意力做平均,如下所示
h
′
′
i
=
σ
(
1
M
∑
m
=
1
M
∑
j
∈
N
i
δ
i
j
m
W
m
x
j
)
{{\bf{h''}}_i}{\rm{ = }}\sigma {\rm{(}}\frac{1}{M}\sum\limits_{m = 1}^M {\sum\limits_{j \in {{\mathcal N}_i}} {\delta _{_{ij}}^m{{\bf{W}}^m}{{\bf{x}}_j}} } {\rm{)}}
h′′i?=σ(M1?m=1∑M?j∈Ni?∑?δij?m?Wmxj?)
h
′
′
i
{{\bf{h''}}_i}
h′′i?表示多头注意力机制平均得到的结果。 图注意力网络通过自注意力机制解决图网络中的卷积运算。注意力机制在计算上不需要进行矩阵运算操作,通过邻域节点的重要性进行节点特征表示。除此以外,注意力机制可以被用来研究模型的可解释性。
代码
邻接矩阵处理方式
size:[2708]
adj: [1,2708,2708]
def adj_to_bias(adj, sizes, nhood=1):
nb_graphs = adj.shape[0]
mt = np.empty(adj.shape)
for g in range(nb_graphs):
mt[g] = np.eye(adj.shape[1])
for _ in range(nhood):
mt[g] = np.matmul(mt[g], (adj[g] + np.eye(adj.shape[1])))
for i in range(sizes[g]):
for j in range(sizes[g]):
if mt[g][i][j] > 0.0:
mt[g][i][j] = 1.0
return -1e9 * (1.0 - mt)
github链接
包含使用torch实现的gat代码
https://github.com/ChenaniahMe/codes/tree/main/GNN/comgat
注意
模型部分为本人整理内容,转载请注明出处。
|