基本信息

论文题目:GRAPH ATTENTION NETWORKS

时间:2018

期刊:ICLR

主要动机

探讨图谱(Graph)作为输入的情况下如何用深度学习完成分类、预测等问题;通过堆叠这种层(层中的顶点会注意邻居的特征),我们可以给邻居中的顶点指定不同的权重,不需要任何一种耗时的矩阵操作(比如求逆)或依赖图结构的先验知识。

CNN 结构可以有效用于解决网格状的结构数据,例如图像分类等。但是现有的许多任务的数据并不能表示为网格状的结构,而是分布在不规则的区域,如社交网络、生物网络等。这样的数据通常用图的形式来表示。

目前有些研究通过扩展神经网络来处理不规则结构图,包括循环神经网络(RNN)、图神经网络(GNN)及其改进的模型。另一种研究思路是把卷积泛化到图域中,分为谱方法和非谱方法两种。

注意力机制的一个好处是可以处理可变大小的输入,并且关注输入的最相关部分以做出决策。当注意机制用于计算单个序列的表示时,通常将其称为自注意或内注意。该机制和 RNN 结合已经广泛应用于机器阅读、句子表示和机器翻译领域。

作者提出了一种基于注意机制的架构,能够完成图结构数据的节点分类。该方法的思路是通过注意其邻居节点,计算图中的每个节点的隐藏表征,还带有自注意策略。这种架构有多重性质:

  1. 运算高效,因为它可以在 “顶点 - 邻居” 对上并行计算;
  2. 可以通过对近邻节点指定任意的权重应用于不同度的图节点;
  3. 该模型直接适用于归纳学习问题,其中包括需要将模型泛化为此前为见的图的任务。

GAT 架构

单个 graph attentional layer 的输入是一个节点特征向量集合,\(h=\lbrace \vec{h_1},\vec{h_2},\dots,\vec{h_N} \rbrace,\; \vec{h_i}\in R^F\),其中 \(N\) 表示节点的数目,\(F\) 表示每个节点的特征的数目。并生成一个新的节点特征集合 \(h^{'}=\lbrace \vec{h_1^{'}},\vec{h_2^{'}},\dots,\vec{h_N^{'}} \rbrace,\; \vec{h_i^{'}}\in R^{F^{'}}\) 作为输出,其中 \(F\) 和 \(F^{'}\) 具有不同的维度。

为了获得足够的表达能力以将输入特征变换为更高级别的特征,需要至少一个可学习的线性变换。为此,作为初始步骤,一个共享的线性变换参数矩阵 \(W\in R^{F^{'}\times F}\) 被应用于每一个节点。然后执行 self-attention 处理:

\[e_{ij}=a(W\vec{h_i}, W\vec{h_j})\tag{1}\]
其中,\(a\) 是一个 \(R^{F^{'}}\times R^{F^{'}}\to R\) 的映射,公式(1)表示了节点 \(j\) 的特征对于节点 \(i\) 的重要性。一般来说,self-attention 会将注意力分配到图中所有的节点上,这种做法显然会丢失结构信息。为了解决这一问题,作者使用了一种 masked attention 的方法 -- 仅将注意力分配到节点 \(i\) 的邻居节点集上,即 \(N_i\),其中节点 \(i\) 也包括在 \(N_i\) 中。为了使系数在不同节点之间易于比较,我们使用 softmax 函数在 \(j\) 的所有选择中对它们进行标准化:

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

注意力机制 \(a\) 是一个单层前馈神经网络,其中 \(\vec{a}\in R^{2F^{'}}\) 是权重参数,使用 LeakyReLU 作为激活函数。完全展开后,由注意机制计算的系数可以表示为:

归一化的注意力系数用于计算与它们对应的特征的线性组合,以用作每个节点的最终输出特征,采用非线性的函数:

为了提高模型的拟合能力,在本文中还引入了多抽头的 self-attention(如图 1 右侧部分。与《Attention is All You Need》一致),即同时使用多个 \(W^k\) 计算 self-attention,然后将各个计算得到的结果进行合并(连接或求和):

模型比较

上一节描述的图注意力层直接解决了之前在图结构上使用神经网络建模的方法的几个问题:

  1. 计算高效:self-attention 层的操作可以在所有的边上并行,输出特征的计算可以在所有顶点上并行。没有耗时的特征值分解。单层的 GAT 的时间复杂度为 \(O(|V|FF^{'}+|E|F^{'})\) 。尽管 multi-head 注意力将存储和参数要求乘以系数 K,但是单个 head 的计算完全独立且可以并行化。
  2. 与 GCN 相反,我们的模型允许(隐式)为同一邻域的节点分配不同的重要性,从而实现模型表示能力的飞跃;
  3. 对于图中的所有边,attention 机制是共享的。因此 GAT 也是一种局部模型。也就是说,在使用 GAT 时,我们无需访问整个图,而只需要访问所关注节点的邻节点即可。这一特点的作用主要有:(1)可以处理有向图(若 \(j\to i\) 不存在,仅需忽略 \(\alpha_{ij}\) 即可);(2)可以被直接用于进行归纳学习。
  4. 最新的归纳学习方法(GraphSAGE 2017)通过从每个节点的邻居中抽取固定数量的节点,从而保证其计算的一致性。这意味着,在执行推断时,我们无法访问所有的邻居。然而,本文所提出的模型是建立在所有邻节点上的,而且无需假设任何节点顺序。

我们能够生成一个利用稀疏矩阵运算的 GAT 层版本,将存储复杂性降低到节点和边缘数量的线性,并在较大的图形数据集上实现 GAT 模型。然而,我们使用的张量操作框架仅支持秩 - 2 张量的稀疏矩阵乘法,这限制了当前实现的层的批处理能力(特别是对于具有多个图的数据集),适当地解决这一限制是未来工作的重要方向。根据现有图形结构的规律性,在稀疏场景中,GPU 相比于 CPU 可能无法提供主要的性能优势。

实验评估

归纳学习(Inductive Learning):先从训练样本中学习到一定的模式,然后利用其对测试样本进行预测(即首先从特殊到一般,然后再从一般到特殊),这类模型如常见的贝叶斯模型。

演绎学习(Transductive Learning):先观察特定的训练样本,然后对特定的测试样本做出预测(从特殊到特殊),这类模型如 k 近邻、SVM 等。

在演绎学习中使用三个标准的引证网络数据集——Cora、Citeseer 与 Pubmed。在这些数据集中,节点对应于文档,边(无向的)对应于引用关系。节点特征对应于文档的 Bag of Words 表示。每个节点拥有一个类别标签(在分类时使用 softmax 激活函数)。每个数据集的详细信息如下表所示:

演绎学习的实验结果如下表所示,可以看到,GAT 模型的效果要基本优于其他模型:

对于归纳学习,本文使用了一个蛋白质关联数据集(protein-protein interaction, PPI),在其中,每张图对应于人类的不同组织。此时,使用 20 张图进行训练,2 张图进行验证,2 张图用于测试。每个节点可能的标签数为 121 个,而且,每个节点可以同时拥有多个标签(在分类时使用 sigmoid 激活函数),其实验结果如下:

《Graph Attention Network》阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. 如何获取app配置文件内容

    App.config: <appSettings> <add key="FCPConnection" value="Data Source=192.16 ...

  2. WPF中画蚂蚁线的实现

    这是一个比较偏的功能,看了其他的很多博客都没有介绍,最后看自己试出来了. 先上效果图 <Path Data="M 100,240 C 510,300 80,100 300,160 H4 ...

  3. background-blend-mode叠加代码

    <html> <head> <style> .container { background: url("p1.jpg"), url(" ...

  4. Android零基础入门第22节:ImageView的属性和方法大全

    原文:Android零基础入门第22节:ImageView的属性和方法大全 通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开 ...

  5. Windows 10预装应用太多?一个命令删除!

    Windows 10预装了很多应用软件,虽然有些其实也不难用,但是使用率可能比较低,很多人也不喜欢预装的东西,而且还占空间,那么这些预装的如何彻底清除呢? 其实微软是自带了命令可以执行这样的操作,用它 ...

  6. SSL Converter & Formats

    https://www.sslshopper.com/ssl-converter.html PEM Format The PEM format is the most common format th ...

  7. 在 .pro里加入 QMAKE_CXXFLAGS += /MP 将并行编译(VC),加快编译速度(姚冬的办法),或者-j4参数(MinGW)

    但是只对VC编译器有效果. 另外还可以自己设置stdafx.h文件 http://www.zhihu.com/question/23045749 C:\Qt\Qt5.6.2_static\bin\qm ...

  8. 适配DirectFB到qt4.8.5(嵌入式Linux)

    适配DirectFB到qt4.8.5 1.编译qt4.8.5 这部在qt官网上其实已经有较详细的说明,了解更多,请点击链接进入. 首先是配置选项,如下是我的配置选项: ./configure \ -p ...

  9. 浅谈js闭包(closure)

    相信很多从事js开发的朋友都或多或少了解一些有关js闭包(closure)的知识. 本篇文章是从小编个人角度,简单地介绍一下有关js闭包(closure)的相关知识.目的是帮助一些对js开发经验不是很 ...

  10. IOS 数据存储(NSKeyedArchiver 归档篇)

    什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...