0
点赞
收藏
分享

微信扫一扫

GAT(Graph Attention Network)

乐百川 2022-04-01 阅读 89

1、引言

在前两篇博文中,我们讨论了基本的图神经网络算法GCN, 使用采样和聚合构建的inductive learning框架GraphSAGE, 然而图结构数据常常含有噪声,意味着节点与节点之间的边有时不是那么可靠,邻居的相对重要性也有差异,解决这个问题的方式是在图算法中引入“注意力”机制(attention mechanism), 通过计算当前节点与邻居的“注意力系数”(attention coefficient), 在聚合邻居embedding的时候进行加权,使得图神经网络能够更加关注重要的节点,以减少边噪声带来的影响。

2、图注意力机制的类型

目前主要有三种注意力机制算法,它们分别是:学习注意力权重(Learn attention weights),基于相似性的注意力(Similarity-based attention),注意力引导的随机游走(Attention-guided walk)。这三种注意力机制都可以用来生成邻居的相对重要性,下文会阐述他们之间的差异。

首先我们对“图注意力机制”做一个数学上的定义:
在这里插入图片描述

2.1 学习注意力权重(使用a)

学习注意力权重的方法来自于Velickovic et al. 2018 其核心思想是利用参数矩阵学习节点和邻居之间的相对重要性。给定节点 v 0 , v 1 . . . v Γ x 0 v_{0},v_{1}...v_{\Gamma x_{0}} v0,v1...vΓx0相应的特征(embedding) x 0 , x 1 . . . x Γ x 0 \bf{x_{0}},\bf{x_{1}}...\bf{x_{\Gamma_{x_{0}}}} x0,x1...xΓx0,节点 v 0 v_{0} v0和节点 v j v_{j} vj注意力权重 α 0 , j \alpha_{0,j} α0,j可以通过以下公式计算:
在这里插入图片描述

其中, e 0 , j e_{0,j} e0,j表示节点 v j v_{j} vj对节点 v 0 v_{0} v0的相对重要性。在实践中,可以利用节点的属性结合softmax函数来计算 e 0 , j e_{0,j} e0,j间的相关性。比如,GAT 中是这样计算的:
在这里插入图片描述
其中, a \bf{a} a表示一个可训练的参数向量,用来学习节点和邻居之间的相对重要性。 W \bf{W} W也是一个可训练的参数矩阵,用来对输入特征做线性变换。 ∣ ∣ || 表示向量拼接(concate)。

2.2 基于相似性的注意力(使用余弦)

上面这种方法使用一个参数向量 a \bf{a} a学习节点和邻居的相对重要性,其实另一个容易想到的点是:既然我们有节点 v v v的特征表示 x \bf{x} x,假设和节点自身相像的邻居节点更加重要,那么可以通过直接计算 x \bf{x} x之间相似性的方法得到节点的相对重要性。这种方法称为基于相似性的注意力机制,比如说论文 TheKumparampil et al. 2018 是这样计算的:
在这里插入图片描述
其中, β \beta β表示可训练偏差(bias), c o s cos cos函数用来计算余弦相似度,和上一个方法类似, W \bf{W} W 是一个可训练的参数矩阵,用来对输入特征做线性变换。

这个方法和上一个方法的区别在于,这个方法显示地使用 c o s cos cos函数计算节点之间的相似性作为相对重要性权重,而上一个方法使用可学习的参数 a \bf{a} a学习节点之间的相对重要性。

2.3 注意力引导的游走法(使用RNN)

前两种注意力方法主要关注于选择相关的邻居信息,并将这些信息聚合到节点的embedding中。第三种注意力的方法的目的不同,我们以Lee et al. 2018 作为例子:

  • 也就是说,如下图当前节点3,之前游走记录是:经从1走到2,再从2走到的自身3;
  • 下一步到底去2还是4还是5?那么就需要计算到那3个点的值大小
  • 走向最大值对应的那个节点(用了RNN机制,将属于的向量映射到k维向量,此例子中是3,然后比较这3个维度上的值大小)
    在这里插入图片描述
举报

相关推荐

0 条评论