论文笔记:GRAPH ATTENTION NETWORKS(GAT图注意力机制)

前言

由于注意力机制在RNN与CNN中都取得了不错的效果,基于此作者在此篇文章提出了图注意力机制。此方法的优点在于可以处理任意大小输入的问题,并且关注最具有影响能力的输入

GCN缺点:

  • 模型对于同阶的邻域上分配给不同的邻居的权重是完全相同的(也就是GAT论文里说的:无法允许为邻居中的不同节点指定不同的权重)。这一点限制了模型对于空间信息的相关性的捕捉能力,这也是在很多任务上不如GAT的根本原因。
  • GCN结合临近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。
    (GAT)提出了用注意力机制对邻近节点特征加权求和。 邻近节点特征的权重完全取决于节点特征,独立于图结构。GAT和GCN的核心区别在于如何收集并累和距离为1的邻居节点的特征表示。 图注意力模型GAT用注意力机制替代了GCN中固定的标准化操作。本质上,GAT只是将原本GCN的标准化函数替换为使用注意力权重的邻居节点特征聚合函数。

GAT优点:

  • 在GAT中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。
  • GAT的另一个优点在于,引入注意力机制之后,只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息:
    (1)该图不需要是无向的(如果边缘 j → i j\to i ji不存在,我们可以简单地省略计算 α i j \alpha_{ij} αij
    (2)使技术直接适用于Unexpected text node——包括在训练期间完全看不见的图形上的评估模型的任务。

论文地址:https://arxiv.org/abs/1710.10903
代码地址:https://github.com/Diego999/pyGAT

1.INTRODUCTION

在摘要中作者说明了,本文的attention计算的目的是为每个节点neighborhood中的节点分配不同的权重,也就是attention是用来关注那些作用比较大的节点,而忽视一些作用较小的节点。

作者指出这个框架有三个特点:

  1. attention机制计算很高效,为每一个节点和其每个近邻节点计算attention可以并行进行。
  2. 通过指定任意的权重给neighbor,这个模型可以处理拥有不同“度”(每个节点连接的其他节点的数目)节点,也就是说,无论一个节点连接多少个neighbor,这个模型都能按照规则指定权重。
  3. 这个模型可以直接应用到归纳推理的问题中(inductive learning problem),包括一些需要将模型推广到完全未知的graph的任务中

作者在四个数据集上进行了实验都取得了state-of-the-art的结果。这四个数据集,三个是引用文献的,一个是蛋白质相互作用网络的。

2.GAT ARCHITECTURE

在这个模块,作者提出了一种图注意力层,通过堆叠这个层来实现图注意力机制。通过与之前的方法进行比较,阐述其优势及局限性。

2.1GRAPH ATTENTIONAL LAYER

2.1.1输入与输出:

输入 f = { h 1 ⃗ , h 2 ⃗ . . . h N ⃗ } , h i ⃗ ϵ R F f=\{\vec{h_1},\vec{h_2}...\vec{h_N}\},\vec{h_i}{\epsilon}{\mathbb{R}}^{F} f={h1 ,h2 ...hN },hi ϵRF

N N N为节点的个数, F F F为feature的个数。代表着输入为 N N N个节点的每个节点的 F F F个feature

输出 f = { h 1 ′ ⃗ , h 2 ′ ⃗ . . . h N ′ ⃗ } , h i ′ ⃗ ϵ R F ′ f=\{\vec{h_{1}^{'}},\vec{h_{2}^{'}}...\vec{h_{N}^{'}}\},\vec{h_{i}^{'}}{\epsilon}{\mathbb{R}}^{F^{'}} f={h1 ,h2 ...hN },hi ϵRF

表示对这 N N N个节点的 F ′ F^{'} F 个输出,输出为 N N N个节点的每个节点的 F ′ F' F个feature

2.1.2特征提取与注意力机制

为了获得足够的转化能力将输入特征转换为更高维的特征,至少一个可学习的线性变换是必须的。因此为每个节点训练一个权值矩阵 W ϵ R F ′ ∗ F W{\epsilon}{\mathbb{R}}^{F^{'}*F} WϵRFF。这个权值矩阵就是输入feature与输出feature的直接关系。
紧接着就需要为每个节点加上此篇文章的重点:共享的注意力机制 a : R F ′ ∗ R F ′ − > R a:{\mathbb{R}}^{F^{'}}*{\mathbb{R}}^{F^{'}}->\mathbb{R} a:RFRF>R。由此可得注意力相关系数公式如下
在这里插入图片描述

1.公式所表达的信息是对于节点i来说节点j的重要性,而忽略图结构性的信息(这个公式模型允许图中所有节点间计算相互间的影响而不是局限于k阶邻居节点)
2.其中 h h h代表的是feature向量。下标 i i i, j j j代表的是哪个节点
3.但是当将此机制引入图结构的时候,作者是通过masked attention引入。这意味着j是i的邻居节点同时为了使得互相关系数更容易计算和便于比较,引入了softmax对所有的i的相邻节点j进行正则化。公式如下图所示
在这里插入图片描述

实验之中,注意力机制a是一个单层的前馈神经网络,通过权值向量来确定 a ⃗ ϵ R 2 F ′ \vec{a}{\epsilon}{\mathbb{R}}^{2F^{'}} a ϵR2F。并且加入了 LeakyRelu的非线性激活,这里小于零的时候LeakyRelu斜率为0.2。因此得到完整的注意力机制公式如下
在这里插入图片描述

1.模型权重 a ⃗ ϵ R 2 F ′ \vec{a}{\epsilon}{\mathbb{R}}^{2F^{'}} a ϵR2F
2.T表示转置
3.||表示concatenation

得到最终的输出特征(Output features)
通过上面,运算得到了正则化后的不同节点之间的注意力互相关系数normalized attention coefficients,可以用来预测每个节点的output feature,公式如下图所示
在这里插入图片描述

1. W W W为与输入feature相乘的权重矩阵
2. α \alpha α为之前计算的注意力互相关系数
3. σ \sigma σ为非线性激活函数
4.考虑masked attention机制,遍历节点为 i i i的邻居节点
5.公式意义:该节点的输出feature与与之相邻的所有节点有关,是他们的线性和的非线性激活。这个线性和的线性系数是前面求得的注意力互相关系数

这是个人总结的推到流程供参考
在这里插入图片描述

2.1.3multi-head attention

在上面的output feature加入计算multi-head的运算公式,公式如下图所示
在这里插入图片描述

1.||为concate操作
2. a k a^k ak表示第 k k k个注意力机制,共需要考虑 K K K个注意力机制
3. W k W^k Wk表示输入特征的线性变换表示
4.最终的输出特征 h ′ h^{'} h K F ′ KF^{'} KF个特征影响

K = 3 K=3 K=3的时候结构如图所示
在这里插入图片描述

节点1在邻域中具有多端注意机制,不同的箭头样式表示独立的注意力计算,通过连接或平均每个head获取 h1对于最终的输出,concate操作可能不那么敏感了,所以我们直接用K平均来取代concate操作,得到最终的公式
在这里插入图片描述

3实验

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

3.1数据集

图结构的数据集,以及数据集之中的信息如下:
在这里插入图片描述

3.2半监督学习transductive learning

在这里插入图片描述

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

3.3 归纳学习inductive learning

在这里插入图片描述

  • 三层GAT 模型
  • 前两层 K=4, F1=256 ,ELU作为非线性函数
  • 最后一层用来分类 K=6, F`=121 , 激活函数为sigmoid
  • 该任务中,训练集足够大不需要使用 正则化 和 dropout
    两个任务都是用Glorot初始化初始的,并且是用Adam SGD来最小化交叉熵进行优化
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值