摘要
本周主要对自己的想法进行代码实现,考虑图注意力机制,对多标签数据集进行分类。
一、什么是图注意力机制?
之前讲过关于ML-GCN的一篇论文,理解了图卷积网络。该论文是将CNN用于特征提取,GCN用于标签嵌入后不断学习一个分类器。最终分类器乘以提取的特征得到分类结果。
GCN的原理是每个节点与其邻居进行加权和传入下一层,成为该节点的下一层数据。每个邻居的权重是一样的。
GAT网络与GCN的区别就是,邻居的权重是不一样的。
h
h
h表示输入样本,
i
,
j
i,j
i,j分别表示不同的样本,
j
j
j还表示是
i
i
i的邻居节点与
W
W
W相乘之后,表示将样本进行降维 ,
a
a
a表示注意系数。
e
i
j
=
a
(
W
h
⃗
i
,
W
h
⃗
j
)
e_{i j}=a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right)
eij=a(Whi,Whj)
α
\alpha
α表示注意力系数,通过
s
o
f
t
m
a
x
softmax
softmax函数计算权重。
α
i
j
=
softmax
j
(
e
i
j
)
=
exp
(
e
i
j
)
∑
k
∈
N
i
exp
(
e
i
k
)
\alpha_{i j}=\operatorname{softmax}_{j}\left(e_{i j}\right)=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(e_{i k}\right)}
αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)
可以表示成下面的式子:
α
i
j
=
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
j
]
)
)
∑
k
∈
N
i
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
k
]
)
)
\alpha_{i j}=\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 \mathcal{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)}
αij=∑k∈Niexp(LeakyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT[Whi∥Whj]))
将上一步得到的权重系数与降维后的邻居相乘求和,用
σ
\sigma
σ表示激活函数
h
⃗
i
′
=
σ
(
∑
j
∈
N
i
α
i
j
W
h
⃗
j
)
\vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right)
hi′=σ⎝⎛j∈Ni∑αijWhj⎠⎞
根据上式可以得到新的节点值。然后根据更新后的节点值可以进行多标签分类。
二、实现方法
1.阅读图注意力机制那篇论文
论文地址:https://arxiv.org/abs/1710.10903
代码地址: https://github.com/Diego999/pyGAT
2.在GitHub上面找了一个代码看懂别人如何实现的
3.自己写代码实现
总结
本周实验结果有待调参改进。
flag数据集,hamming loss评价指标
后面的工作:注重参数的调整,然后达到更好的效果。