《Graph Representation Learning via Hard and Channel-Wise Attention Networks》
前言
2019 KDD上的文章。
图注意力机制(GAO) 会消耗大量的计算资源,这阻碍了将其应用于大型数据集上。在这篇文章中作者引入了 硬注意力机制(hGAO) 以及 逐通道注意力机制(cGAO) 来减小计算资源的消耗,并提高模型的性能。
论文地址:https://arxiv.org/abs/1907.04652
代码地址:暂时还没有找到…
一、相关工作
1.注意力机制
注意力操作通常有三个输入:查询矩阵 Q = [ q 1 , q 2 , . . . , q m ] ∈ R d × m Q=[q_1, q_2, ... , q_m]∈R^{d×m} Q=[q1,q2,...,qm]∈Rd×m、键矩阵 K = [ k 1 , k 2 , . . . , k n ] ∈ R d × n K=[k_1, k_2, ... , k_n]∈R^{d×n} K=[k1,k2,...,kn]∈Rd×n以及值矩阵 V = [ v 1 , v 2 , . . . , v n ] ∈ R p × n V=[v_1, v_2, ... , v_n]∈R^{p×n} V=[v1,v2,...,vn]∈Rp×n。
对于每一个查询向量 q i q_i qi,都需要计算它与任意一个键向量 k i k_i ki的内积。其次,根据这些内积计算相应的权值,即做softmax。最后,权值与对应值向量的乘积和即为输出。
自注意力机制是一种比较特殊的形式,其中 Q = K = V Q=K=V Q=K=V。
除了上图中的点积,还有很多方法可以用来计算响应值,如高斯函数以及拼接操作等。一般而言,可以先对输入的矩阵做线性变化,再进行以上的步骤:
软注意力机制的时间复杂度和空间复杂度分别是 O ( n × m × ( d + p ) ) O(n×m×(d+p)) O(n×m×(d+p))、 O ( n × m ) O(n×m) O(n×m)。
2.硬注意力机制
软注意力机制计算的是所有值向量的加权和。而硬注意力机制则计算查询向量与部分键向量的内积,并输出部分值向量的加权和(比如选择 k k k个)。硬注意力机制的性能比软注意力机制的性能要好,因为它只关注部分重要的特征向量。
时间复杂度和空间复杂度分别为 O ( m × k × d ) O(m×k×d) O(m×k×d)、 O ( m × k ) O(m×k) O(m×k)。
3.图注意力机制GAO
最出名的应该还是GAT的那篇文章,GAT中用的是软注意力机制,即计算所有邻居节点的特征向量的加权和。定义GAO为:
注意,这里的softmax函数只作用于 E ~ \tilde{E} E~的非零元素,不然会给非邻居节点分配权重。
GAO消耗大量的计算资源(时间复杂度 O ( N 2 d ) O(N^2d) O(N2d),空间复杂度 O ( N 2 ) O(N^2) O(N2)),以致于阻碍了其在大型数据集上的应用。
二、模型
1.hGAO:图的硬注意力机制
这里和gPool中的处理相似,都设了一个可训练的投影向量 p ∈ R d p∈R^d p∈Rd来计算节点的重要性。gPool是在所有的节点中选出 k k k个最重要的节点,而hGAO是在查询节点的一阶邻居中选出 k k k个最重要的节点。
其中
a
t
t
n
(
)
attn()
attn()代表注意力机制。
时间复杂度为 O ( N × l o g N × k + N × k × d 2 ) O(N×logN×k+N×k×d^2) O(N×logN×k+N×k×d2);空间复杂度为 O ( N 2 ) O(N^2) O(N2),因为这个方法还是用需要存储邻接矩阵 A A A。
还有一种方法是先计算系数矩阵 E E E,然后再选择出与查询节点最相似的 k k k个节点。但这种方法的时间复杂度为 O ( N 2 × d ) O(N^2×d) O(N2×d)。
2.cGAO:图的逐通道注意力机制
hGAO的空间复杂度并没有降低,因为它使用到了邻接矩阵。为了进一步减少内存的消耗,作者提出了Channel-Wise Graph Attention Operator(cGAO)。
cGAO从通道的角度使用注意力机制:计算每一个通道与其余所有通道之间的系数(即所有节点的某一个属性 X i : X_{i:} Xi:与其他属性 X j : X_{j:} Xj:)。
e
i
j
=
∑
k
=
1
N
X
i
k
×
X
j
k
e_{ij}=\sum_{k=1}^NX_{ik}×X{jk}
eij=∑k=1NXik×Xjk,可以理解为同一个节点内的属性与属性之间关联,而不同节点之间的属性没有关联。
这种注意力机制不需要邻接矩阵提供信息,所以就减少了内存的消耗。时间复杂度 O ( N d 2 ) O(Nd^2) O(Nd2),空间复杂度 O ( d 2 ) O(d^2) O(d2)。
3.GANet
这里定义了一个GAM:注意力层 + 卷积层。
在GAO和hGAO中,可能会存在某些权值接近于零的情况,这阻碍了信息的传递;而cGAO压根不涉及到节点间的信息传递。因此,作者加了GCN层来帮助节点聚合邻居的信息。
第一个GCN层用于特征降维;最后一个GCN层将特征映射到指定维度。
三、实验
1.数据集
归纳式数据集:
直推式数据集:
2.参数设置
归纳式学习:基本框架选择的是DGCNN(卷积层 + 池化层 + 1-D卷积 + 全连接层),将其中的卷积层替换为hGANet或cGANet。
hGANet和cGANet都由 起始GCN层 + 4个GAM模块 + 结尾GCN层 组成。
起始GCN层输出的节点属性为48维,每个GAM都输出12维,结尾GCN层则输出97维。
skip connection采用的则是拼接操作,拼接每个GAM的输入及输出向量。
k k k设为8。
在每一个GCN层中,都将属性矩阵的丢弃率 p p p设为0.5。
直推式学习:起始GCN层 + n个GAM模块 + 结尾GCN层
起始GCN层输出48维。
Cora、Citeseer和Pubmed分别使用了4个、2个和3个GAM模块,均输出16维。
结尾GCN层则根据不同数据集的标签数,输出与标签数相等的维度的向量。
每一层属性矩阵的丢弃率为0.88。
k k k设为8。
为了防止过拟合,还加入了 L 2 L_2 L2正则化,设 λ = \lambda= λ= 0.0001。
所有的参数都用Glorot初始化,并采用Adam优化来训练模型。
3.效率对比
三种注意力机制的时间复杂度以及空间复杂度:
数据集越大,越可以看出hGAO和cGAO对计算资源的节省。
4.归纳式学习任务
对比DGCNN和hGANet(如上所述,hGANet是在DGCNN基础上设计的),可以看出hGANet的性能还是有较大的提升的。相比于GCN层,hGAO对信息提取的能力更强。
5.直推式学习任务
hGANet比GAT又要好上一些,说明硬注意力机制的表现更好。
6.hGAO、cGAO及GAO对比
GANet在跑D&D数据集的时候,内存直接爆了。但hGANet没有,这说明该模型还是有节省一点内存的。
cGANet的性能虽然比hGANet要差,但也没有差很多。鉴于cGANet的效率以及对计算资源的节省程度,在跑大型数据集时,可以考虑使用cGANet。
7.参数敏感性
当
k
>
8
k>8
k>8时,随着
k
k
k的不断增大,模型的性能开始下降。这说明该模型关注更多的邻居节点会降低其泛化能力。