《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 pRd来计算节点的重要性。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个和3GAM模块,均输出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的不断增大,模型的性能开始下降。这说明该模型关注更多的邻居节点会降低其泛化能力。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值