《Graph Attention Network》阅读笔记
基本信息
论文题目:GRAPH ATTENTION NETWORKS
时间:2018
期刊:ICLR
主要动机
探讨图谱(Graph)作为输入的情况下如何用深度学习完成分类、预测等问题;通过堆叠这种层(层中的顶点会注意邻居的特征),我们可以给邻居中的顶点指定不同的权重,不需要任何一种耗时的矩阵操作(比如求逆)或依赖图结构的先验知识。
CNN 结构可以有效用于解决网格状的结构数据,例如图像分类等。但是现有的许多任务的数据并不能表示为网格状的结构,而是分布在不规则的区域,如社交网络、生物网络等。这样的数据通常用图的形式来表示。
目前有些研究通过扩展神经网络来处理不规则结构图,包括循环神经网络(RNN)、图神经网络(GNN)及其改进的模型。另一种研究思路是把卷积泛化到图域中,分为谱方法和非谱方法两种。
注意力机制的一个好处是可以处理可变大小的输入,并且关注输入的最相关部分以做出决策。当注意机制用于计算单个序列的表示时,通常将其称为自注意或内注意。该机制和 RNN 结合已经广泛应用于机器阅读、句子表示和机器翻译领域。
作者提出了一种基于注意机制的架构,能够完成图结构数据的节点分类。该方法的思路是通过注意其邻居节点,计算图中的每个节点的隐藏表征,还带有自注意策略。这种架构有多重性质:
- 运算高效,因为它可以在 “顶点 - 邻居” 对上并行计算;
- 可以通过对近邻节点指定任意的权重应用于不同度的图节点;
- 该模型直接适用于归纳学习问题,其中包括需要将模型泛化为此前为见的图的任务。
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,然后将各个计算得到的结果进行合并(连接或求和):


模型比较
上一节描述的图注意力层直接解决了之前在图结构上使用神经网络建模的方法的几个问题:
- 计算高效:self-attention 层的操作可以在所有的边上并行,输出特征的计算可以在所有顶点上并行。没有耗时的特征值分解。单层的 GAT 的时间复杂度为 \(O(|V|FF^{'}+|E|F^{'})\) 。尽管 multi-head 注意力将存储和参数要求乘以系数 K,但是单个 head 的计算完全独立且可以并行化。
- 与 GCN 相反,我们的模型允许(隐式)为同一邻域的节点分配不同的重要性,从而实现模型表示能力的飞跃;
- 对于图中的所有边,attention 机制是共享的。因此 GAT 也是一种局部模型。也就是说,在使用 GAT 时,我们无需访问整个图,而只需要访问所关注节点的邻节点即可。这一特点的作用主要有:(1)可以处理有向图(若 \(j\to i\) 不存在,仅需忽略 \(\alpha_{ij}\) 即可);(2)可以被直接用于进行归纳学习。
- 最新的归纳学习方法(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》阅读笔记的更多相关文章
- 阅读《RobHess的SIFT源码分析:综述》笔记
今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...
- RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件
SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...
- RobHess的SIFT源码分析:综述
最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...
- 阅读《RobHess的SIFT源码分析:综述》笔记2
今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...
- element-ui button组件 radio组件源码分析整理笔记(一)
Button组件 button.vue <template> <button class="el-button" @click="handleClick ...
- element-ui 组件源码分析整理笔记目录
element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...
- element-ui Carousel 走马灯源码分析整理笔记(十一)
Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- element-ui MessageBox组件源码分析整理笔记(十二)
MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...
- element-ui switch组件源码分析整理笔记(二)
源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...
随机推荐
- 【WPF】DPI对控件定位产生的影响
原文:[WPF]DPI对控件定位产生的影响 需求 程序界面上是一个Window,当用户点击桌面上除此Window之外的任何地方,都要把这个window隐藏掉.程序有个托盘图标,点击托盘图标不能隐藏wi ...
- WPF滚动条嵌套,响应鼠标滑轮事件的处理
在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个S ...
- Plupload上传插件中文文档
Plupload上传插件中文帮助文档 如有疑问,加群交流:646104701 下载地址:https://www.plupload.com/download/ 配置参数 实例化一个plupload对象时 ...
- 使用MultiByteToWideChar转换UTF8为GBK(UTF8在Windows的代码页是CP_UTF8)
两个使用的函数: 1,UTF8转化为Unicode,inline为了编译后更快运行,老用到了,返回字符串为了使用链式表达式 inline WCHAR *UTF8ToUnicode(const cha ...
- PHPEXCEL 不能输出中文内容,只显示空白
以他带的示例文件为例 01simple-download-xls.php // Add some data $objPHPExcel->setActiveSheetIndex(0) ...
- LoadLibrary方法加载运行DLL库
最近和另一家公司对接,要求用对方提供的测试程序测试我们做的DLL. 接到对方的测试程序,发现和我们以前调用DLL的方式不太一样.但我稍微看了一会代码也看懂其意思了,一天搞定了. 但其中也遇到些小困惑, ...
- iBatisNet 中 iterate标签的使用
<iterate>标签,顾名思义是用来遍历标签用的. 支持的属性如下: 属性 说明 是否必选 open 遍历后生成的这些sql,开始的第一个符号 可选 close 遍历后生成的这些sql, ...
- Git的HTTP proxy设置方法
今天用git push代码到Github死活上不去,最后设置了Http代理才上去了,在这小记一下设置方法 1.依次打开:项目地址-->.git(可能要选择显示隐藏文件夹才能看到)-->co ...
- ThinkPHP 提供Auth 权限管理、支付宝、微信支付、阿里oss、友盟推送、融云即时通讯、云通讯短信、Email、Excel、PDF 等等
多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支付宝.微信支付.阿里oss. ...
- qt中文编码(好多方法)
qt中文编码 来源:http://www.cublog.cn/u1/59481/showart_1947231.html 前些日子,被编码折磨了一段时间,总结一下Qt中的编码. [Qt 编码简单实验] ...