前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ICLR 2018 | GAT:图注意力网络

ICLR 2018 | GAT:图注意力网络

作者头像
Cyril-KI
发布2022-11-10 11:24:49
6100
发布2022-11-10 11:24:49
举报
文章被收录于专栏:KI的算法杂记KI的算法杂记

题目:Graph Attention Networks

会议: International Conference on Learning Representations, 2018

论文地址:https://arxiv.org/pdf/1710.10903.pdf

在前面的几篇文章中,主要介绍了GCN以及GraphSAGE两种结构:

  1. ICLR 2017 | GCN:基于图卷积网络的半监督分类
  2. NeurIPS 2017 | GraphSAGE:大型图的归纳表示学习

其中GCN通过聚合相邻节点的特征来形成节点新的特征,GraphSAGE通过对节点的邻居进行采样,然后对采样节点的特征执行某种特定方式的聚合,最后再与本身特征结合以形成自身新的特征。无论是GCN还是GraphSAGE,其在聚合邻居节点特征的过程中都是同等看待每个邻居节点。

为此,我们很容易想到引入Attention机制来给不同的邻居节点赋予不同的重要性,然后节点在聚合邻居节点特征的过程中会更多地提取重要邻居的特征,从而带来整体效果的提示。在这种背景下,GAT(Graph Attention Networks)便被提了出来。

1. GAT

GAT是通过堆叠多层graph attentional layer,也就是图注意力层来实现节点的特征变换。

1.1 图注意力层

图注意力层的输入定义为:

h=\left\{\vec{h}_1,\vec{h}_2,...,\vec{h}_N \right\}

,其中

\vec{h}_i \in R^F

h

为节点特征集合。

图注意力层的输出为经过变换后的节点特征集合:

h^{'}=\left\{\vec{h}_1^{'},\vec{h}_2^{'},...,\vec{h}_N ^{'}\right\}

,其中

\vec{h}_i^{'} \in R^{F^{'}}

在图注意力层中,节点输入的特征首先要经过一个线性变换:

W\vec{h}_i

,其中

W \in R^{F^{'} \times F}

,也就是说经过一个线性变换后,所有节点的特征维度从原来的

F

变成了

F^{'}

接着,需要对节点执行自注意力机制以计算注意力系数:

e_{ij}=a(W\vec{h}_i, W\vec{h}_j)

这里

e_{ij}

表示节点

j

的特征对节点

i

的重要性,是一个具体的数。有了上述公式后,我们就可以计算图中所有节点特征对节点

i

的重要性,但一般来讲,我们只需要计算节点

i

一阶邻居节点特征对节点

i

的重要性

在利用上述公式计算得到节点

i

所有邻居节点的特征对节点

i

的重要性之后,为了便于比较这些节点的重要性,我们可以使用softmax函数对所有重要性进行规范化:

\alpha_{ij}=softmax_j(e_{ij})=\frac{exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})}

在GAT中,注意力机制

a

用于计算两个节点特征向量的相关度,是一个单层前馈神经网络,其权重为一个向量

\vec{a}\in R^{2F^{'}}

,特征向量经过单层神经网络后再经过一个LeakyRELU激活函数,就能得到最终的相关度,即:

\alpha_{ij}=\frac{exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})}

中的注意力系数

e_{ij}

的计算公式为:

e_{ij}=LeakyRELU(\vec{a}^T[W\vec{h}_i||W\vec{h}_j])

其中

||

表示连接操作。

也就是说,为了计算两个节点特征向量间的注意力系数,首先将其经过一个线性变换

W

,将其特征从输入时的

F

变成

F^{'}

,然后再将两个向量连接在一起变成一个维度为

2F

的向量,接着经过一个前馈神经网络

a

和一个LeakyRELU激活函数,最终得到一个数

e_{ij}

,这个数用于衡量节点

j

特征对节点

i

的重要性。

最后,使用softmax函数对所有注意力系数

e_{ij}

进行归一化处理,得到归一化注意力系数

\alpha_{ij}

,然后使用这些

\alpha_{ij}

对节点

i

的所有邻居节点

j

的特征进行线性加权,以得到更新后节点

i

的特征

\vec{h}_i^{'}

\vec{h}_i^{'}=\sigma(\sum_{j\in N_i}\alpha_{ij}W\vec{h}_j)

上述整个过程可以用下图概括:

1.2 多头注意力

为了使注意力学习过程更加稳定,一般会考虑使用多头注意力机制。具体来讲,

K

个独立的注意力机制来对节点特征进行更新,然后将结果拼接到一起:

需要注意的是,经过拼接后,节点更新后的特征的维度不再是之前的

F^{'}

,而是

KF^{'}

如果我们在最后一层图注意力层执行多头注意力机制,那么输出将没有意义,因此,我们一般是将它们求平均:

2. GAT与现有工作的比较

GAT与现有GNN相比,主要解决了以下几个问题:

  1. 计算高效:自注意力层的操作可以在所有边上并行化,不需要特征分解或者类似的代价高昂的矩阵操作。
  2. 与GCN不同,GAT可以对不同邻居赋予不同的重要性,这大大提升了模型性能。
  3. 注意力机制以共享的方式应用于图中的所有边,因此它不依赖于对全局图结构或其所有节点(特性)的前期访问。因此,使用GAT时,图不需要无向,也可以用作归纳学习。

3. 实验

数据集:

实验分为Transductive learning和Inductive learning。

Transductive learning只能够在一张固定的图上来学习节点的嵌入表示,并不能直接泛化到未知节点,也不能够跨图进行节点表示学习。代表方法有GCN、MLP、DeepWalk等,实验结果如下所示:

Inductive learning,也就是归纳学习方法,这种方法可以直接计算出新节点的嵌入表示,而不需要经过重新训练,代表方法有GraphSAGE,实验结果如下表所示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KI的算法杂记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. GAT
    • 1.1 图注意力层
      • 1.2 多头注意力
      • 2. GAT与现有工作的比较
      • 3. 实验
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档