图神经网络(GAT-2018ICLR)

GRAPH ATTENTION NETWORKS

(2018ICLR)
代码地址:https://github.com/PetarV-/GAT.
在这里插入图片描述

摘要贡献

1.引入masked self-attentional layers 来改进前面图卷积graph convolution的缺点
2.对不同的相邻节点分配相应的权重(隐式的),既不需要矩阵运算(如求逆运算),也不需要事先知道图结构。
四个数据集上达到state of the art的准确率Cora、Citeseer、Pubmed citation 、protein interaction。

self-attention

优点:在许多基于序列的任务中,注意力机制几乎已成为事实上的标准。注意机制的一个好处是,它允许处理可变大小的输入,将注意力集中在输入中最相关的部分以做出决策。当一个注意机制被用来计算单个序列的表示时,它通常被称为自我注意或内部注意。

GAT

图注意层

方法理念:针对每一个节点运算相应的隐藏信息,在运算其相邻节点的时候引入注意力机制:

层的输入与输出

在这里插入图片描述

特征提取与注意力机制

为了获得足够的表达能力将输入特征转换为更高层次的特征,至少需要一个可学习的线性变换。为此,作为一个初始步骤,对每个节点应用一个共享的线性变换,由一个权重矩阵参数化。W∈RF0×F
然后我们在节点上进行自我注意——共享注意机制:
在这里插入图片描述
注意力互相关系数为attention coefficients:
在这里插入图片描述
这表明了节点j的特征对节点i的重要性。
作者通过masked attention将这个注意力机制引入图结构之中,**masked attention的含义 :**只计算节点 i 的相邻的节点 j。节点 j ∈N i _i i,其中N i _i i为节点i的所有相邻节点。为了使得互相关系数更容易计算和便于比较,我们引入了softmax对所有的i的相邻节点j进行正则化:
在这里插入图片描述
实验之中,注意力机制a是一个单层的前馈神经网络,通过权值向量来确定,并且加入了 LeakyRelu的非线性激活,这里小于零斜率为0.2。(这里我们回顾下几种Relu函数,relu:小于0就是0,大于零斜率为1;LRelu:小于零斜率固定一个值,大于零斜率为1;PRelu:小于零斜率可变,大于零斜率为1;还有CRelu,Elu,SELU)。注意力机制如下:
在这里插入图片描述
也就是在这里插入图片描述的带入式子。

解释

1.其中丨丨表示concatenation operation.(串联操作)
2.转置表示为T
3.在这里插入图片描述
在这里插入图片描述

注意力代码

def forward(self, x):
    # [B_batch,N_nodes,C_channels]
    B, N, C = x.size()
    # h = torch.bmm(x, self.W.expand(B, self.in_features, self.out_features))  # [B,N,C]
    h = torch.matmul(x, self.W)  # [B,N,C]
    a_input = torch.cat([h.repeat(1, 1, N).view(B, N * N, C), h.repeat(1, N, 1)], dim=2).view(B, N, N,
                                                                                              2 * self.out_features)  # [B,N,N,2C]
    # temp = self.a.expand(B, self.out_features * 2, 1)
    # temp2 = torch.matmul(a_input, self.a)
    attention = self.leakyrelu(torch.matmul(a_input, self.a).squeeze(3))  # [B,N,N]

    attention = F.softmax(attention, dim=2)  # [B,N,N]
    attention = F.dropout(attention, self.dropout, training=self.training)
    h_prime = torch.bmm(attention, h)  # [B,N,N]*[B,N,C]-> [B,N,C]
    out = F.elu(h_prime + self.beta * h)
    return out

输出特征

通过上面,运算得到了正则化后的不同节点之间的注意力互相关系数normalized attention coefficients,可以用来预测每个节点的output feature:
在这里插入图片描述
其中,

  1. W为与feature相乘的权值矩阵

  2. a为前面算得的注意力互相关系数

  3. sigema为非线性激活

  4. 遍历的j 表示所有与i 相邻的节点

  5. 这个公式表示就是,该节点的输出feature与与之相邻的所有节点有关,是他们的线性和的非线性激活

  6. 这个线性和的线性系数是前面求得的注意力互相关系数

多头attention

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. Attention is all you need. arXiv preprint arXiv:1706.03762, 2017.

在上面的output feature加入计算multi-head的运算公式:
具体来说,K个独立注意机制执行等式(4)的变换,然后将它们的特征串联起来,得到如下输出特征表示:
在这里插入图片描述

  1. concate操作为||

  2. 第k个注意力机制为a k ^k k

  3. K 个注意力机制需要考虑,小 k 表示 K 中的第 k 个

  4. 输入特征的线性变换表示为W k ^k k

  5. 最终的输出为h’ 共由KF’ 个特征影响

特别的,如果我们在网络的最终(预测)层上执行多头注意力,则串联不再合理,我们采用平均值,并延迟应用最终非线性(通常是针对分类问题的softmax或logistic sigmoid):
在这里插入图片描述
例如,K=3时候,结构如下:
在这里插入图片描述
例如此图,节点1在邻域中具有多端注意机制,不同的箭头样式表示独立的注意力计算,通过连接或平均每个head获取 h1

优势

在这里插入图片描述

对比GraphSAGE中的LSTM聚合器

  1. 2017年Hamilton提出的inductive method为每一个node都抽取一个固定尺寸的neighborhood(GraphSAGE),为了计算的时候footprint是一致的(指的应该是计算的时候处理neighborhood的模式是固定的,不好改变,因此每次都抽样出固定数量的neighbor参与计算),这样,在计算的时候就不是所有的neighbor都能参与其中。此外,Hamilton的这个模型在使用一些基于LSTM的方法的时候能得到最好的结果,这样就是假设了每个node的neighborhood的node一直存在着一个顺序,使得这些node成为一个序列。但是本文提出的方法就没有这个问题,每次都可以将neighborhood所有的node都考虑进来,而且不需要事先假定一个neighborhood的顺序。

三、实验与评估

实验分成两部分,transductive learning(半监督学习)和inductive learning(归纳学习)。模型用了两层的GAT。

3.1 数据集

在这里插入图片描述

3.2 半监督学习transductive learning

  1. 两层 GAT
  2. 在Cora 数据集上优化网络结构的超参数,应用到Citeseer 数据集
  3. 第一层 8 head, F`=8 , ELU 作为非线性函数
  4. 第二层为分类层,一个 attention head 特征数C,后跟 softmax 函数,为了应对小训练集,正则化(L2)
  5. 两层都采用 0.6 的dropout,相当于计算每个node位置的卷积时都是随机的选取了一部分近邻节点参与卷积

结果

在这里插入图片描述

3.3 归纳学习inductive learning

  1. 三层GAT 模型
  2. 前两层 K=4, F’=256(共1024个特征) ,ELU作为非线性函数
  3. 最后一层用来分类 K=6, F’=121 , 激活函数为sigmoid
  4. 该任务中,训练集足够大不需要使用 正则化 和 dropout
结果(F1值)

在这里插入图片描述
GraphSAGE*对应于我们只需修改其架构就可以获得的最佳GraphSAGE结果。
Const-GAT对应于一个与GAT具有相同体系结构的模型,但具有恒定的注意机制(对每个邻居分配相同的重要性;类似GCN的归纳算子)。

两个任务都是用Glorot初始化初始的,并且是用Adam SGD来最小化交叉熵进行优化

可视化

在Cora数据集上预先训练的GAt模型的第一个隐藏层的计算特征表示的t-SNE图。节点颜色表示类。边缘厚度表示节点i和j之间的聚集规范化注意系数,跨越所有八个注意头。
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值