——本文发表在2018ICLR上,将注意力机制运用到GCN上,使得图神经网络更加完善,达到了state-of-the-art的效果。原文地址: https://arxiv.org/abs/1710.10903
CNN在处理格状数据(例如图片)分类任务上得到了很好的效果,但现实中很多数据无法表达为格状数据,例如社会网络、三维网络、生物网络等都是不规则的数据。
GNN的提出为解决任意结构的图状数据提供了很好的思路。GNN迭代地计算图中节点的传播过程直至收敛,再经过一系列神经网络处理可以得到节点的输出结果。
GCN做到了将卷积的思想运用到了GNN上,在网络节点划分任务上取得了很好的效果,但是对节点的特征表示却局限于图的结构,因此对于一个新的图结构我们总是要去训练一个新的模型。同时GCN是基于图的拉普拉斯矩阵来做卷积操作,其中涉及了大量的矩阵运算。
attention机制在基于seq的模型上取得了很好的效果,几乎成为处理seq任务的行业标准。attention输入可以是不同大小的序列数据,self-attetion\intra-attention常用于处理计算单序列表达的任务。
作者由此提出GAT——Graph Attention Networks,一种将attention机制运用到图结构数据节点分类任务的方法。它结合了attention高并行性的特点,并且对于不同度的节点的不同邻居赋予各自的权值,GAT还能泛化与之前没有训练过的图,直接适用于归纳学习问题。
图注意力层——graph attention layer
先介绍一个单层的graph attentional layer。
输入为节点特征向量:
输出为变换后的节点特征向量:
首先,要对输入节点做一个线性变换,使节点带有更高表达能力的高级特征。这一步使用一个共享的权值矩阵并行的应用于每一个节点。之后使用共享的自注意力机制
来计算attention系数:
,其中eij定义了j的特征对i的重要程度,这里我们只计算i的一阶邻居节点j∈Ni。之后softmax归一化:
在本文实验中,注意力机制a实际上是一个单层的前馈神经网络,其中参数是,然后使用非线性激活函数LeakyReLU激活,最终得到的归一化attention系数表达如下:
图中所示:两个向量先进行线性特征变换,拼接后乘上网络权重a,经过一个非线性激活,然后softmax输出得到attention系数αij。
将这种操作应用于每个邻居节点,再经过一个非线性激活函数,得到该节点的输出特征:
为了使模型更加稳定,本文还将多头注意力机制引入,即为每个节点使用K个独立的注意力机制,同时用K个W与原始特征向量进行线性变换,从而得到K个αij,然后将K个头的输出做一个拼接再平均,最后通过一个激活函数(通常是logistic sigmoid或softmax)得到最后的输出及结果:
图中为K=3即三个头的自注意力机制。中心节点将每个邻居的多头注意力系数平均后拼接,作为这一层的输出。
以上就是GAT的模型架构。
构造了一个使用系数矩阵运算的GAT layer,将存储复杂度降低到点数与边数的线性,以便于以后在大规模数据集上的运算。然而,我们使用的张量操作框架仅支持秩 - 2 张量的稀疏矩阵乘法,这限制了当前实现的层的批处理能力(特别是对于具有多个图的数据集),适当地解决这一限制是未来工作的重要方向。根据现有图形结构的规律性,在稀疏场景中,GPU 相比于 CPU 可能无法提供主要的性能优势。https://www.cnblogs.com/ydcode/p/11038186.html
数据集
归纳学习(Inductive Learning): 先从训练样本中学习到一定的模式,然后利用其对测试样本进行预测(即首先从特殊到一般,然后再从一般到特殊),这类模型如常见的贝叶斯模型。
实验方法:
使用两层的GAT layer,第一层K=8,F’=8,使用ELU(exponential linear unit)作为非线性激活函数;第二层单头attention,输出特征C维,也就是类别个数,再通过softmax输出。dropout = 0.6.先在Cora数据集上训练然后再用于Citeseer数据集上。对于Pubmed第二层使用8个头。
演绎学习(Transductive Learning):先观察特定的训练样本,然后对特定的测试样本做出预测(从特殊到特殊),这类模型如 k 近邻、SVM 等。
实验方法:
三层GAT,前两层K=4,F’ = 256,ELU激活,最后一层用于多标签分类,令K=6,输出121个特征,每个节点可能有多个标签。