• 论文题目:Graph Attention Networks

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

  • 论文代码:https://github.com/PetarV-/GAT

  • 论文引用:Veličković, Petar, et al. “Graph attention networks.” arXiv preprint arXiv:1710.10903 (2017).

写在前面

问题:我们能不能让图自己去学习A节点与A的邻居节点之间聚合信息的权重呢?
本文提出的模型GAT就是答案

Graph Attention Network为了避免与GAN弄混,因此缩写为GAT。

与GCN类似,GAT同样是一种局部网络。因此,(相比于GNN或GGNN等网络)训练GAT模型无需了解整个图结构,只需知道每个节点的邻节点即可。

GCN结合邻近节点特征的方式和图的结构依依相关,这也给GCN带来了几个问题:无法完成inductive任务,即处理动态图问题。

而GAT则能够很好地处理上述问题。

GAT模型简介

(1)输入:h={h⃗1,h⃗2,…,h⃗N},h⃗i∈RF\mathbf{h}=\left\{\vec{h}_{1}, \vec{h}_{2}, \ldots, \vec{h}_{N}\right\}, \vec{h}_{i} \in \mathbb{R}^{F}h={h1​,h2​,…,hN​},hi​∈RF,N表示节点个数,F表示每个节点的特征数量。
(2)经过GAT
(3)输出:h′={h⃗1′,h⃗2′,…,h⃗N′},h⃗i′∈RF′\mathbf{h}^{\prime}=\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{N}^{\prime}\right\}, \vec{h}_{i}^{\prime} \in \mathbb{R}^{F^{\prime}}h′={h1′​,h2′​,…,hN′​},hi′​∈RF′

GAT这个模型的结构比较简单,基本看一下他的公式和论文里的图,就能懂了

为了提升模型的表达能力和训练稳定性,论文中还借鉴了Transformer模型结构中的多头注意力层,也就是用kkk个WkW^kWk得到不同的注意力,再将其拼接在一起或者求平均。

问题探讨

这篇GAT论文的模型不是很难,相比模型,我们可以来思考下几个容易忽视的问题

1. 为什么要研究图神经网络模型?

一句话:图神经网络是研究怎么通过一个图结构抽取出更好的节点特征

当我们有一堆节点的特征x和每个节点对应的标签y的时候,我们是可以直接当做一个结构化的数据,把他放到神经网络去训练模型的,就像MNIST手写识别任务一样。

但是我们现在的数据之间是有关系的,他们的关系可以用图来表示,那么我是不是可以利用这个关系图来帮助我训练呢?显然是可以的,这也是图神经网络要做的。

举个例子,现在我要做一个用户身份识别的任务,最简单的做法自然是直接使用用户特征和用户的标签去训练一个分类模型就行了。但是你拿的用户特征是非常稀疏的,很难准确地表示用户的信息。如果现在我还告诉你用户的社交关系(一个关系图),那你就可以利用这个社交关系去构建更好的用户特征,比如用户A的朋友都是有钱人,那用户A大概率也是有钱人,然后再放到模型中去训练,那效果就会好很多。

简单来说,图神经网络模型,比如GCN,GAT就是把节点特征x放到图模型里面去,然后得到一个更好的节点特征xbetterx_{better}xbetter​,此时我们再把(xbetter,y)(x_{better},y)(xbetter​,y),放到一个神经网络中去进行分类任务,效果就会比(x,y)(x,y)(x,y)要好

2. Transduction Learning和Inductive Learning的区别

引用:归纳式和直推式学习(Inductive vs. Transductive Learning)

归纳式(Inductive)

  • 归纳式学习是我们传统理解的监督学习(supervised learning),我们基于已经打标的训练数据,训练一个机器学习模型。然后我们用这个模型去预测我们没有从未见过的测试数据集上的标签。

直推式(Transduction)

  • 和归纳式不同,直推式学习首先观察全部数据,包括了训练和测试数据,我们从观测到的训练数据集上进行学习,然后在测试集上做预测。即便如此,我们不知道测试数据集上的标签,我们可以在训练时利用数据集上的模式和额外信息

两者区别:直推式学习不会建立一个预测模型,如果一个新数据节点加入测试数据集,那么我们需要重新训练模型,然后再预测标签。然而,归纳式学习会建立一个预测模型,遇到新数据节点不需要重新运行算法训练。


我的理解:

  • Transductive learning(意为直推学习)就是在训练阶段已经看到过测试集节点的一些信息,比如在GCN中就是节点的结构信息已经被看到了,然后在测试阶段你只能处理这些测试集,不能处理新的节点,因为这些节点的结构信息你训练阶段没见过,模型就懵了。换句话说,测试集只是没有用标签的信息来帮助训练共享的参数W(训练集的节点和标签会帮助我训练W),但是图的结构必须包含测试集的节点
  • Inductive learning(意为归纳学习),它在训练阶段完全不需要用到测试集的信息,也就是说你测试集不管是训练的时候见过的(利用过某些信息的),或者没见过的,我都无所谓。

3. GAT为什么可以是Inductive Learning

GAT的论文中提到GAT这个model也可以解决Inductive learning的问题

GAT中注意力系数的计算公式:

多头GAT的Average聚合公式:

GAT在训练阶段学习参数a和W,然后在预测阶段,对于一个新的图结构,我虽然没在训练阶段见过这个图结构,但是我只要知道节点i的表征hih_ihi​和它邻居的表征hjh_jhj​,我就能通过学习好的参数a和W计算出聚合后节点i的表征hi′h_i'hi′​。所以说GAT不依赖与完整的图结构,只依赖于边,因此可以用于inductive任务

而GCN是transductive learning,不是inductive learning,因为他训练模型后,如果直接应用于未知的图结构,那拉普拉斯矩阵就会发生改变,以前训练好的基于原图的模型也就失效了。

GCN需要利用图的结构来提取节点iii(原特征为hih_ihi​)更好的表征hi′h_i'hi′​,你现在如果来一个新的节点,我之前训练的时候没见过它的图结构,那也就无法用GCN提取它的表征hi′h_i'hi′​,进而无法去做后续的节点标签预测了

两层GCN模型:

其中N表示结点个数,C表示每个节点的特征向量维度,F表示经过两层GCN后,每个结点的新的特征向量的维度,W(0),W(1)W^{(0)}, W^{(1)}W(0),W(1)是需要学习的参数

我们可以看一下GCN是怎么划分训练集和测试集的:

dataset = CoraData().data
node_feature = dataset.x / dataset.x.sum(1, keepdims=True)
tensor_x = tensor_from_numpy(node_feature, DEVICE)
tensor_y = tensor_from_numpy(dataset.y, DEVICE)
tensor_train_mask = tensor_from_numpy(dataset.train_mask, DEVICE)
tensor_val_mask = tensor_from_numpy(dataset.val_mask, DEVICE)
tensor_test_mask = tensor_from_numpy(dataset.test_mask, DEVICE)
normalize_adjacency = CoraData.normalization(dataset.adjacency)   # 规范化邻接矩阵num_nodes, input_dim = node_feature.shape #(N,D)indices = torch.from_numpy(np.asarray([normalize_adjacency.row, normalize_adjacency.col]).astype('int64')).long()
values = torch.from_numpy(normalize_adjacency.data.astype(np.float32))
tensor_adjacency = torch.sparse.FloatTensor(indices, values, (num_nodes, num_nodes)).to(DEVICE)

可以看到它是把所有数据放在一起,然后得到一个邻接矩阵adjacency,然后再通过mask的方式获得train, val, test datasets,这就是我上面说的,GCN需要利用到测试集上的一些额外信息(构建邻接矩阵)

参考资料

  • 祥瑞Coding:图注意力网络(GAT) ICLR2018, Graph Attention Network论文详解 (详细)
  • 知乎:《Graph Attention Networks》阅读笔记
  • 知乎:为什么GAT能够实现Inductive learning,而GCN不行?

【ICLR 2018图神经网络论文解读】Graph Attention Networks (GAT) 图注意力模型相关推荐

  1. 图神经网络概述:Graph Neural Networks

    本文参照以下两篇blog,这两篇应该是目前介绍GNN和GCN最好的blog了. https://distill.pub/2021/gnn-intro/ https://distill.pub/2021 ...

  2. Graph Attention Network (GAT) 图注意力模型

    文章目录 1. GAT基本原理 1.1 计算注意力系数(attention coefficient) 1.2 特征加权求和(aggregate) 1.3 multi-head attention 2. ...

  3. 图注意力网络——Graph attention networks (GAT)

    文章目录 摘要 引言 GAT结构 数据集与评估结果 未来改进方向 参考文献 摘要   图注意力网络,一种基于图结构数据的新型神经网络架构,利用隐藏的自我注意层来解决之前基于图卷积或其近似的方法的不足. ...

  4. 《图神经网络综述》Graph Neural Networks: A Review of Methods and Applications

    作者:清华大学 zhoujie 等 *表示相同的贡献.周洁,张正艳,程阳,刘志远(通讯作者),孙茂松,清华大学计算机科学与技术学院,北京100084.电子邮件:fzhoujie18, zhangzhe ...

  5. 哈佛NLP组论文解读:基于隐变量的注意力模型 | 附开源代码

    作者丨邓云天 学校丨哈佛大学NLP组博士生 研究方向丨自然语言处理 摘要 Attention 注意力模型在神经网络中被广泛应用.在已有的工作中,Attention 机制一般是决定性的而非随机变量.我们 ...

  6. 【NIPS 2016图神经网络论文解读】Variational Graph Auto-Encoders (VGAE) 基于VAE的图变分自编码器

    写在前面 论文题目:Variational Graph Auto-Encoders 论文作者:Thomas N. Kipf, Max Welling 论文组织:University of Amster ...

  7. [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 摘要 1 简介 1.1 GNN简史 1.2 Related surveys on graph neural networks 1.3 Graph neural networks vs. ne ...

  8. 论文翻译-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 1 简介 1.1 GNN简史 1.2 GNN的相关研究 1.3 GNN vs 网络嵌入 1.4 文章的创新性 2 基本的图概念的定义 3 GNN分类和框架 3.1 GNNs分类 3.2 框架 ...

  9. [EGNN] Exploiting Edge Features for Graph Neural Networks 利用图神经网络的边特征 论文详解 CVPR 2019

    文章目录 1 简介 1.1 GAT和GCN的局限性 1.2 EGNN的创新点 2 相关工作 3 EGNN网络 3.1 符号定义 3.2 EGNN和GNN的对比 3.3 Doubly stochasti ...

最新文章

  1. CF20C Dijkstra?( Dijkstra!练手)难度⭐⭐⭐
  2. RPi 2B GPIO 测试
  3. python基础_格式化输出(%用法和format用法)(转载)
  4. 创业新力量缔造新未来,岳麓峰会再增“长沙势能”
  5. JQuery对象与DOM对象
  6. JAVA实现可设置背景的MDI窗口
  7. python的字符串内建函数
  8. highCharts使用中问题总结
  9. 慎用dictionaryWithObjectsAndKeys方法
  10. QT3与QT4中uic的使用差异---李家凯老师
  11. python成长之路第三篇(2)_正则表达式
  12. 苹果高通“情变”祸及所有中国 iPhone 用户!
  13. 【Part1】用JS写一个Blog(node + vue + mongoDB)
  14. 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码
  15. JS动态插入插件后,不能马上使用,必须刷新
  16. react 中加载静态word文档(或加载静态的html文件)
  17. 【华为机试真题 JAVA】最大股票收益-100
  18. mongodb数据检索大全
  19. Ubuntn16.04 迅雷安装
  20. react钩子_使用Web动画API和React钩子创建高性能动画

热门文章

  1. LENOVO System X3650 M5安装Windows server 2008系统(U 盘+DVD的方法)
  2. FJUT-cwl的女朋友3 凑钱最少张数问题
  3. 2023五一杯数学建模A题B题C题思路分析汇总 五一数学建模思路
  4. ps2改usb接口_DIY轻松把键盘、鼠标PS2接口改造成USB接口
  5. C++读取HDF5文件
  6. 【什么是iMessage苹果推?】什么是苹果推信?什么是苹果推?
  7. Conda:miniconda
  8. 复旦大学自考计算机软件难度,复旦大学自考本科难吗
  9. 《写给大家看的设计书》读后感
  10. MATLAB:矩阵(基础知识)