【图神经网络】 GAT原文精讲(全网最细致篇)

请添加图片描述

论文精讲部分

本专栏深入探讨图神经网络模型相关的学术论文,并通过实际代码实验来提高理解。读者可以根据个人需求选择感兴趣的内容进行学习。本章节详尽解读了“GAT模型”的原始论文,适合希望深入了解的读者。对于零基础或初学者,推荐阅读我编写的入门内容,它非常适合新手,点击这里查看易懂的GAT入门材料。在本章节中,大部分内容将直接引用原论文翻译,而对论文的理解和分析则以引用格式呈现,旨在清晰展示对当前研究主题的深入见解。考虑到相关资料相对稀缺,希望各位可以给个免费的点赞收藏。

在这里插入图片描述

😃如果您觉得内容有帮助,欢迎点赞、收藏,以及关注我们哦!👍

0. 摘要

我们提出了图注意力网络(GATs),这是一种新颖的神经网络架构,用于处理图结构数据。

对神经网络附加注意力机制

这些网络通过利用掩蔽自注意力层来弥补基于图卷积或其近似方法的现有不足。通过叠加节点能够关注其邻域特征的层,我们能够(隐式地)为邻域中不同的节点指定不同的权重,而无需进行任何成本高昂的矩阵操作(如求逆)或依赖于预先了解图结构。

这段的意义实际上是想表明其GAT模型是将注意力机制高度集成到了卷积操作。而不需要各种额外的复杂操作实现注意力机制。就是简单直观的完成了注意力在GNN中的集成问题。

通过这种方式,我们同时解决了基于谱的图神经网络的几个关键挑战,并使我们的模型可以轻松应用于归纳性及转导性问题。我们的GAT模型在四个既定的转导性和归纳性图基准测试中达到或匹配了最先进的结果:Cora、Citeseer和Pubmed引文网络数据集,以及一个蛋白质-蛋白质相互作用数据集(测试图在训练期间保持未见)。

1 引言

卷积神经网络(CNNs)已成功应用于解决图像分类(He等人,2016年)、语义分割(Jegou等人,2017年)或机器翻译(Gehring等人,2016年)等问题,这些问题的底层数据表示具有类似网格的结构。这些架构通过将带有可学习参数的局部滤波器应用于所有输入位置,有效地重用了它们的局部滤波器。

GAT的引入通过先聊一下CNN中的由于其规则的结构,欧几里得数据可以很好的实现邻域聚合。卷积核也可以复用

然而,许多有趣的任务涉及到的数据不能用网格状结构表示,而是存在于一个不规则的领域中。例如,三维网格、社交网络、电信网络、生物网络或脑连接体等,这类数据通常可以用图的形式表示。

然后引入非欧几里得的数据,其在日常生活中存在各种地方,并且其是不规则,通过graph来表示
首先聊聊GNN的发展

文献中已经有几次尝试将神经网络扩展以处理任意结构的图。早期工作使用递归神经网络来处理表示为有向无环图的图域中的数据(Frasconi等人,1998年;Sperduti和Starita,1997年)。图神经网络(GNNs)首先由Gori等人(2005年)和Scarselli等人(2009年)引入,作为递归神经网络的泛化,可以直接处理更一般类别的图,例如环形图,有向图和无向图。GNN包括一个迭代过程,该过程传播节点状态直至达到平衡,然后是一个神经网络,根据其状态为每个节点生成输出。Li等人(2016年)采纳并改进了这一理念,并提出在传播步骤中使用门控递归单元(Cho等人,2014年)。

其次聊聊GNN的两种形态

早期的GNN:空域与谱域

在图神经网络(GNN)的发展初期,主要分为两大类:空域(Spatial domain)GNN和谱域(Spectral
domain)GNN。这两种方式各有特色,针对的理解和应用角度略有不同。

谱域GNN 谱域GNN基于谱图理论发展而来,这种方法深入数学层面进行推导。 它利用图的拉普拉斯矩阵(Laplacian Matrix)和傅立叶变换对图结构数据进行分析。通过将图信号变换到傅里叶域,谱域方法搜索图信号的最佳表示,并在此基础上应用卷积操作。

  • 优点:提供了一种理论上坚实的方法来处理图数据,可以精确地控制不同频率的信号成分,从而捕捉到图结构的全局特性。
  • 缺点:实现这一方法需要进行特征值分解等数学上的高成本计算,且对图的结构高度敏感,不易扩展到未见过的图结构上。此外,学习的门槛较高,需要较深的数学背景。

空域GNN 空域GNN则更直观,它基于图中节点的空间关系进行卷积计算。这种方法将图卷积的概念概括为节点及其邻居的信息聚合过程,其中卷积滤波器由节点的局部邻域直接构成,不依赖于任何频域的变换。

  • 优点:空域方法的直观性使得其易于理解和实现,不需要复杂的数学变换,因此上手门槛低。此外,它能直接应用于各种结构的图上,更具灵活性和适应性,便于在现实世界问题中快速部署。
  • 缺点:可能难以捕获图结构的全局特性,特别是在图很大或连接很稀疏时。

发展方向 最新的研究主要聚焦于空域方法,特别是图注意力网络(GATs)和基于邻域聚合(如GraphSAGE)的方法,这些技术通过灵活地聚合邻居信息,并在此过程中学习到节点间相互作用的权重,从而能够有效地捕捉局部和全局的图结构特性。

简而言之,谱域GNN更侧重于数学推导和全局优化,而空域GNN侧重于直观理解和操作的灵活性。随着研究的深入,空域方法因其实现简单和灵活性强而变得更受欢迎,尤其适合于工业界的快速应用和开发。

尽管如此,将卷积泛化至图领域的兴趣越来越高。这一方向的进展通常被归类为频谱方法和非频谱方法。一方面,频谱方法使用图的频谱表示,并已在节点分类的背景下成功应用。在Bruna等人(2014年)的工作中,卷积操作在傅立叶域内通过计算图的Laplacian的特征分解来定义,可能导致计算强度高和非空间局部化的滤波器。随后的工作解决了这些问题。Henaff等人(2015年)介绍了具有平滑系数的频谱滤波器的参数化,以使它们具有空间局部性。随后,Defferrard等人(2016年)提出通过Chebyshev展开图的Laplacian来近似滤波器,从而移除了计算Laplacian的特征向量的需求,并产生了空间局部化的滤波器。最终,Kipf和Welling(2017年)通过限制滤波器仅在每个节点周围的一步邻域中操作,简化了之前的方法。然而,在所有上述频谱方法中,学到的滤波器依赖于Laplacian的特征基,这取决于图的结构。因此,针对特定结构训练的模型不能直接应用于具有不同结构的图。

另一方面,我们有非频谱方法(Duvenaud等人,2015年;Atwood和Towsley,2016年;Hamilton等人,2017年),这些方法直接在图上定义卷积,在空间上邻近的邻域组上操作。这些方法面临的挑战之一是定义一个能工作于不同大小邻域并保持CNNs的权重共享属性的运算符。在某些情况下,这需要为每个节点度学习一个特定的权重矩阵(Duvenaud等人,2015年),使用过渡矩阵的幂来定义邻域,同时为每个输入通道和邻域度学习权重(Atwood和Towsley,2016年),或提取并规范化包含固定节点数的邻域(Niepert等人,2016年)。Monti等人(2016年)介绍了混合模型CNNs(MoNet),这是一种空间方法,为图提供了CNN架构的统一泛化。最近,Hamilton等人(2017年)引入了GraphSAGE,这是一种以归纳方式计算节点表示的方法。这种技术通过对每个节点的固定大小邻域进行采样,然后对其执行特定的聚合操作(如对所有采样邻居的特征向量求平均,或将它们通过递归神经网络)。这种方式在几个大规模归纳基准测试中取得了令人瞩目的表现。

再然后聊聊注意力

注意力机制已经几乎成为许多基于序列的任务中的事实标准(Bahdanau等人,2015年;Gehring等人,2016年)。注意力机制的一大优点是它可以处理不同大小的输入,专注于输入中最相关的部分以作出决策。当注意力机制用于计算单个序列的表示时,通常称为自注意力或内部注意力。与循环神经网络(RNNs)或卷积结合使用,自注意力已被证明对于任务如机器阅读(Cheng等人,2016年)和学习句子表示(Lin等人,2017年)非常有用。然而,Vaswani等人(2017年)表明,自注意力不仅可以改善基于RNNs或卷积的方法,而且足以构建一个强大的模型,在机器翻译任务中获得最先进的性能。

主要工作讲解,看起来说的比较杂,后续一点点的分析吧

受这些最近工作的启发,我们引入了一个基于注意力的架构来执行图结构数据的节点分类。这个想法是通过遵循自注意力策略,关注其邻居来计算图中每个节点的隐藏表示。注意力架构具有几个有趣的特性:(1)操作效率高,因为它可以跨节点-邻居对并行化;(2)它可以通过为邻居指定任意权重,应用于具有不同度的图节点;(3)这个模型直接适用于归纳学习问题,包括模型必须概括到完全未见过的图的任务。我们在四个具有挑战性的基准上验证了所提出的方法:Cora、Citeseer和Pubmed引文网络以及一个归纳性蛋白-蛋白相互作用数据集,实现或匹配了最先进的结果,突出了基于注意力模型在处理任意结构图时的潜力。值得注意的是,像Kipf&Welling(2017年)和Atwood&Towsley(2016年)的工作一样,我们的工作也可以被重新表述为MoNet(Monti等人,2016年)的一个特定实例。此外,我们的方法中通过边共享神经网络计算的方式让人想起了关系网络(Santoro等人,2017年)和VAIN(Hoshen,2017年),在这些研究中,对象或代理之间的关系通过使用共享机制逐对聚合。同样,我们提出的注意力模型可以与Duan等人(2017年)和Denil等人(2017年)的工作联系起来,这些工作使用邻域注意力操作来计算环境中不同对象之间的注意力系数。其他相关的方法包括局部线性嵌入(LLE)(Roweis & Saul,2000年)和记忆网络(Weston等人,2014年)。LLE 选择围绕每个数据点的固定数量的邻居,并学习每个邻居的权重系数,以将每个点重构为其邻居的加权和。第二步优化提取点的特征嵌入。记忆网络在我们的工作中也有一些联系,特别是如果我们将节点的邻域解释为用于通过关注其值来计算节点特征的内存,然后通过在同一位置存储新特征来更新它。

2 GAT架构

在本节中,我们将介绍用于构建任意图注意力网络(通过堆叠这一层)的构建块层,并将直接概述与以往神经图处理领域工作相比的理论和实践上的优势及局限性。

2.1 图注意力层

我们将从描述单个图注意力层开始,这是我们所有实验中使用的GAT架构中唯一使用的层。我们使用的特定注意力设置紧密遵循Bahdanau等人(2015)的工作——但该框架对特定选择的注意力机制是不可知的。

该层的输入是一组节点特征, h = { h ~ 1 , h ~ 2 , … , h ~ N } h = \{\tilde{h}_1, \tilde{h}_2, \ldots, \tilde{h}_N\} h={h~1,h~2,,h~N},其中 h ~ i ∈ R F \tilde{h}_i \in \mathbb{R}^F h~iRF N N N 是节点数, F F F 是每个节点的特征数。该层产生一组新的节点特征(可能具有不同的基数 F 0 F_0 F0),输出为 h 0 ′ = { h ~ 01 ′ , h ~ 02 ′ , … , h ~ 0 N ′ } h'_0 = \{\tilde{h}'_{01}, \tilde{h}'_{02}, \ldots, \tilde{h}'_{0N}\} h0={h~01,h~02,,h~0N},其中 h ~ 0 i ′ ∈ R F 0 \tilde{h}'_{0i} \in \mathbb{R}^{F_0} h~0iRF0

这里注意节点的个数是一致的但是其特征维度可以在卷积过程中调整。

为了获得将输入特征转换为更高级别特征的足够表达能力,至少需要一个可学习的线性变换。因此,作为初始步骤,对每个节点应用了一个由权重矩阵 W ∈ R F 0 × F W \in \mathbb{R}^{F_0 \times F} WRF0×F 参数化的共享线性变换。然后我们对节点执行自注意力——一个共享的注意力机制 a : R F 0 × R F 0 → R a: \mathbb{R}^{F_0} \times \mathbb{R}^{F_0} \rightarrow \mathbb{R} a:RF0×RF0R 计算注意力系数

e i j = a ( W h ~ i , W h ~ j ) e_{ij} = a(W\tilde{h}_i, W\tilde{h}_j) eij=a(Wh~i,Wh~j)

这个过程就是将节点中心节点和邻居节点映射成一个实数。注意这里采用的W是相同的参数矩阵,然后再用共享注意力a进行点积,得到一个实数。也就是说实际上的注意力机制构成依赖于一个线性层的去权重矩阵 W W W一节一个注意力向量 a a a,共同构成的注意力机制。后续的softmax仅仅是作为一百分比转换的辅助操作。

这表示了节点 j j j的特征对节点 i i i的重要性。在其最一般的表述中,模型允许每个节点关注每个其他节点,丢弃所有结构信息。我们通过执行掩蔽注意力将图结构注入机制中——我们仅为节点 j ∈ N i j \in N_i jNi的节点计算 e i j e_{ij} eij,其中 N i N_i Ni是图中节点 i i i的邻域。在我们所有的实验中,这些将准确地是 i i i的一阶邻居(包括 i i i)。为了使系数在不同的节点之间容易比较,我们使用softmax函数在所有 j j j上进行归一化:

通过softmax将中心节点和邻居节点计算的各个数值,使用softmax进行百分比计算。

α i j = softmax j ( e i j ) = exp ⁡ ( e i j ) ∑ k ∈ N i exp ⁡ ( e i k ) \alpha_{ij} = \text{softmax}_j(e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k \in N_i} \exp(e_{ik})} αij=softmaxj(eij)=kNiexp(eik)exp(eij)
在我们的实验中,注意力机制 a a a是一个单层前馈神经网络,由权重向量 a ~ ∈ R 2 F 0 \tilde{a} \in \mathbb{R}^{2F_0} a~R2F0参数化, 并应用LeakyReLU非线性(负输入斜率 α = 0.2 \alpha = 0.2 α=0.2)。注意力机制计算的系数可以表达为:

在图注意力网络(GAT)中,注意力机制 a a a 的设计是关键,尤其是在计算节点之间的注意力系数时。注意力系数的计算通常依赖于节点特征向量的变换和相互作用。

在GAT中,每个节点的特征向量经过一个线性变换后被用于注意力机制。为了计算节点 i i i 和其邻居节点 j j j 之间的注意力系数 e i j e_{ij} eij,我们通常会将变换后的这两个节点的特征向量进行拼接。

注意力向量的维度

关键点在于,注意力机制 a a a 是通过一个权重向量 a ~ ∈ R 2 F 0 \tilde{a} \in \mathbb{R}^{2F_0} a~R2F0参数化的单层前馈神经网络,这里的 2 F 0 2F_0 2F0 表示权重向量的维度是单个变换后的特征向量维度的两倍。这是因为:

  • 向量拼接:中心节点 i i i 和邻居节点 j j j 的特征向量在变换后分别为 W h ~ i W\tilde{h}_i Wh~i W h ~ j W\tilde{h}_j Wh~j(均为 R F 0 \mathbb{R}^{F_0} RF0
    维度)。为了计算这两个节点之间的相互作用,我们首先将这两个向量拼接成一个维度为 2 F 0 2F_0 2F0 的向量。
  • 点积操作:注意力机制使用 a ~ ⊤ \tilde{a}^\top a~ 与上述拼接向量进行点积操作,以输出一个标量,该标量表示这两个节点之间的初步注意力得分。

实际意义

通过设置 a ~ \tilde{a} a~ 的维度为 2 F 0 2F_0 2F0,我们确保了注意力机制能够有效地评估两个节点特征之间的相互关系。这种设计允许模型在聚合节点特征时,以一种自适应的方式重视不同邻居的贡献,从而增强了模型处理异构和复杂图结构的能力。这种方法不仅提高了模型的灵活性,而且还增强了其在处理各种图结构数据时的泛化能力。

下面的这个公式则是将上面的公式进行融合展示而已:

α i j = exp ⁡ ( LeakyReLU ( a ~ ⊤ [ W h ~ i , W h ~ j ] ) ) ∑ k ∈ N i exp ⁡ ( LeakyReLU ( a ~ ⊤ [ W h ~ i , W h ~ k ] ) ) \alpha_{ij} = \frac{\exp \left( \text{LeakyReLU} \left( \tilde{a}^\top [W\tilde{h}_i, W\tilde{h}_j] \right) \right)}{\sum_{k \in N_i} \exp \left( \text{LeakyReLU} \left( \tilde{a}^\top [W\tilde{h}_i, W\tilde{h}_k] \right) \right)} αij=kNiexp(LeakyReLU(a~[Wh~i,Wh~k]))exp(LeakyReLU(a~[Wh~i,Wh~j]))
一旦获得,归一化的注意力系数用于计算对应特征的线性组合,作为每个节点的最终输出特征(在可能应用非线性 σ \sigma σ之后):

图注意力网络(GAT)与图卷积网络(GCN)在处理图结构数据时的一个重要区别。这种差异主要体现在节点聚合方面的权重决定机制上。

GCN中的权重机制

在标准的GCN模型中,节点特征的聚合是依赖于图的度矩阵( D D D)和邻接矩阵( A A A)。具体来说,GCN通过归一化步骤 D − 1 / 2 A D − 1 / 2 D^{-1/2} A D^{-1/2} D1/2AD1/2
来修改邻接矩阵,这样做是为了控制不同度(即连接数)的节点在特征聚合时各自的影响力。这种方法假设节点的重要性可以通过其连接数来量化,并且所有邻居在聚合操作中贡献相等,除非通过度数进行了调整。

GAT中的权重机制

相比之下,GAT不依赖于固定的度矩阵来确定聚合权重,而是引入了一个学习得到的注意力机制。在GAT中,节点间的相互作用(即聚合权重)是通过对应的注意力系数
α i j \alpha_{ij} αij
来动态确定的,这些系数是通过一个可训练的注意力网络计算出来的。每个节点对其邻居的注意力系数是根据节点特征的函数来自适应学习的,而不是预先假定所有邻居贡献均等或仅依赖于其连接数。

实际优势

这种方法的优势在于:

  1. 灵活性: 由于注意力权重是数据驱动的,GAT能够更灵活地捕捉节点间复杂和非均质的依赖关系,而不是仅依赖于拓扑结构。

  2. 适应性: 在不同的上下文中,相同的两个节点可能需以不同的方式互动。GAT通过其注意力机制允许模型适应这种上下文变化,动态调整节点间的互动权重。

  3. 去中心化: 不再需要依赖全局的度矩阵,这使得模型可以更好地扩展到大规模图数据或者动态变化的图结构。

h ~ 0 i ′ = σ ( ∑ j ∈ N i α i j W h ~ j ) \tilde{h}'_{0i} = \sigma \left( \sum_{j \in N_i} \alpha_{ij} W\tilde{h}_j \right) h~0i=σ jNiαijWh~j
为了稳定自注意力的学习过程,我们发现采用多头注意力是有益的,类似于Vaswani等人(2017)。具体而言, K K K个独立的注意力机制执行变换,并将它们的特征连接起来,产生以下的输出特征表示:
h ~ 0 i ′ = ⨁ k = 1 K σ ( ∑ j ∈ N i α k i j W k h ~ j ) \tilde{h}'_{0i} = \bigoplus_{k=1}^K \sigma \left( \sum_{j \in N_i} \alpha_{kij} W_k\tilde{h}_j \right) h~0i=k=1Kσ jNiαkijWkh~j

如何理解多头注意力呢????多头注意力(Multi-head attention)可以类比于在卷积神经网络中使用多个卷积核。这种机制允许模型在不同的表示子空间中并行地捕捉信息,从而增强了模型的学习能力和表现力。就是参数多了各个头不同分工不同视角看待相同的数据提升模型性能。

其中 ⨁ \bigoplus 表示连接操作, α k i j \alpha_{kij} αkij是第 k k k个注意力机制( a k a_k ak)计算的归一化注意力系数, W k W_k Wk是相应输入线性变换的权重矩阵。在这种设置中,最终返回的输出 h 0 ′ h'_0 h0将为每个节点包含 K F 0 KF_0 KF0个特征(而不是 F 0 F_0 F0)。

特别地,如果我们在网络的最终(预测)层执行多头注意力,那么连接就不再合理——相反,我们采用平均,并延迟应用最终的非线性激活函数(通常是用于分类问题的softmax或逻辑sigmoid)直到那时:
h ~ 0 i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α k i j W k h ~ j ) \tilde{h}'_{0i} = \sigma \left( \frac{1}{K} \sum_{k=1}^K \sum_{j \in N_i} \alpha_{kij} W_k\tilde{h}_j \right) h~0i=σ K1k=1KjNiαkijWkh~j

这种多头图注意力层的聚合过程由图1(右)示意。
请添加图片描述

其实这个还是比较好理解的,其图和公式是统一的。这个图仅仅才用了3头注意力进行举例子,不同的颜色代表着不同的注意力,看不懂的同学研究下这里有助于对GAT的理解,最终的得到的结果均值也可以拼接也可以。看具体的效果
下面的这段其实在论文中出现的比较多,就是基本每一段结尾都是会重复自己的工作。

2.2 与相关工作的比较

在子节2.1中描述的图注意力层直接解决了先前用神经网络建模图结构数据时存在的几个问题:

  • 计算高效:自注意力层的操作可以跨所有边并行化,输出特征的计算也可以跨所有节点并行化。不需要特征分解或类似的高成本矩阵操作。单个GAT注意力头计算 F 0 F_0 F0 个特征的时间复杂度可以表示为 O ( ∣ V ∣ F F 0 + ∣ E ∣ F 0 ) O(|V|F F_0 + |E| F_0) O(VFF0+EF0),其中 F F F 是输入特征的数量, ∣ V ∣ |V| V ∣ E ∣ |E| E 分别是图中的节点和边的数量。这种复杂度与基线方法(如图卷积网络GCN,Kipf & Welling, 2017)相当。应用多头注意力会将存储和参数需求乘以一个因子 K K K,同时各个头的计算是完全独立的,可以并行化。

尽管 GCN 避免了特征分解,但它依赖于矩阵乘法运算,特别是邻接矩阵和度矩阵与特征矩阵的乘积。在大规模的图中,这些矩阵乘法尤为耗费资源,这可能导致随着图的大小(节点和边的数量)增大,计算和存储需求显著增加。谱域图卷积网络(Spectral GCN)通常依赖于图的特征分解。所以性能也不行,GAT的优势就上来了。还有就是提到的可并行化操作,都是GCN’不行的。

  • 与GCNs的主要区别:我们的模型允许(隐式地)为同一邻域的节点分配不同的重要性,从而在模型能力上实现飞跃。此外,分析学到的注意力权重可能会在可解释性方面带来好处,正如在机器翻译领域对Bahdanau等人(2015年)的定性分析所示。

注意力就是最好的差别,相较于根据度信息判断这样能让模型尽可能的学习自己觉得重要的特征。

  • 注意力机制的应用:在图中的所有边上以共享方式应用,并且不依赖于事先访问全局图结构或其所有节点的(特征)(许多先前技术的局限性)。这具有几个理想的含义:注意向量是共享的

    • 图不需要是无向的(我们可以简单地不计算 α i j \alpha_{ij} αij 如果边 j → i j \rightarrow i ji 不存在)。支持无向边
    • 使我们的技术直接适用于归纳学习——包括在训练期间完全未见过的图上评估模型的任务。
  • **Hamilton等人(2017年)**发布的归纳方法对每个节点采样固定大小的邻域,以保持其计算占用一致;这不允许访问整个邻域。此外,当使用基于LSTM(Hochreiter & Schmidhuber, 1997)的邻域聚合器时,该技术实现了一些最佳效果。这假设在邻域之间存在一致的顺序节点排序,作者通过随机排序序列输入到LSTM中来纠正这一点。我们的技术不受这些问题的困扰——它处理整个邻域(尽管计算占用是变化的,但与方法如GCN相当),且不假设其中的任何排序。在保证性能的同时,其并不会限制邻居采样的个数

  • 如第1节所提及的,GAT可以被重新表述为MoNet(Monti等人,2016年)的一个特定实例。更具体地说,将伪坐标函数设置为 u ( x , y ) = f ( x ) ∥ f ( y ) u(x, y) = f(x) \| f(y) u(x,y)=f(x)f(y),其中 f ( x ) f(x) f(x) 代表节点 x x x 的(可能经过MLP变换的)特征, ∥ \| 是连接;并将权重函数设置为 w j ( u ) = softmax ( MLP ( u ) ) w_j(u) = \text{softmax}(\text{MLP}(u)) wj(u)=softmax(MLP(u))(在一个节点的整个邻域上执行softmax),使得MoNet的补丁操作符与我们的相似。尽管如此,应当注意的是,与之前考虑的MoNet实例相比,我们的模型使用节点特征进行相似性计算,而不是节点的结构属性(这将假设事先知道图结构)。

这个monet埋个坑后面有机会聊聊,
我们的模型使用节点特征进行相似性计算,而不是节点的结构属性(这将假设事先知道图结构)

我们成功开发出了一种使用稀疏矩阵运算的GAT层版本,这降低了对存储的复杂性,使其与节点和边的数量呈线性关系,从而使GAT模型能够处理更大的图数据集。

在代码中也可以看到模型存在两种版本一个是常规的,一个是针对稀疏矩阵的版本。

然而,我们使用的张量处理框架仅支持对二阶张量进行稀疏矩阵乘法,这限制了层的批处理能力,尤其是对于包含多个图的数据集而言。因此,适当解决这一限制是未来工作的一个重要方向。

由于torch平台的限制其稀疏矩阵版本还是存在众多局限性。不能实现单次卷积行为的分批处理。

根据图结构的规则性,GPU可能无法在这些稀疏场景中提供比CPU更显著的性能优势。

还提出使用稀疏矩阵方式存储图结构的原因,GPU上高速训练还是存在问题。不能像CNN模型实现大规模的并行化加快运算。这也是模型研究的方向。

还应注意,我们模型的“感受野”大小受到网络深度的上限约束(与GCN及类似模型相同)。
然而,可以适当使用诸如跳连(He等人,2016年提出)等技术来扩展深度。

指出其模型也存在深度受限的问题,但是他们没做实验,给出了使用残差结构实际上可以继续研究的方向,后续的resGAT也确实有人做出来了。

最后,尤其是在分布式方式下,跨所有图边的并行化可能会涉及许多冗余计算,因为在感兴趣的图中,邻域往往会高度重叠。

这句话的意思就是分布式环境下GAT或者是GNN还是要存在较多局限性,主要归因于图数据的结构特性,特别是在有高度重叠邻域的图中。

3 评估

我们对GAT模型进行了与众多强基准和以往方法的对比评估,这些评估覆盖了四个已建立的基于图的基准任务(既有归纳性任务也有演绎性任务),在所有这些任务中,GAT模型达到或匹配了最先进的性能。本节总结了我们的实验设置、结果及对GAT模型提取的特征表示的简要定性分析。

3.1 数据集

请添加图片描述
直推学习:我们使用三个标准的引文网络基准数据集:Cora、Citeseer 和 Pubmed(Sen等人,2008年),并紧密遵循Yang等人(2016年)的演绎实验设置。在所有这些数据集中,节点对应于文档,边对应于(无向的)引用。节点特征对应于文档的词袋表示。每个节点有一个类标签。我们只允许每个类使用20个节点进行训练——然而,为了保持演绎设置,训练算法可以访问所有节点的特征向量。在1000个测试节点上评估训练模型的预测能力,并使用额外的500个节点进行验证(与Kipf & Welling (2017)使用的相同)。

这里使用的数据分割方式实际上和GCN都是一样的。都是基于GCN文中yang的分割结果划分的创造的数据集。

Cora数据集包含2708个节点,5429条边,7个类别和每个节点1433个特征。Citeseer数据集包含3327个节点,4732条边,6个类别和每个节点3703个特征。Pubmed数据集包含19717个节点,44338条边,3个类别和每个节点500个特征。

归纳学习:我们使用一个蛋白质-蛋白质相互作用(PPI)数据集,该数据集由对应不同人类组织的图组成(Zitnik & Leskovec, 2017)。数据集包含20个训练图,2个验证图和2个测试图。关键的是,测试图在训练期间完全未被观察。为了构建图,我们使用了Hamilton等人(2017年)提供的预处理数据。每个图的平均节点数为2372。每个节点有50个特征,这些特征由位置基因集、基序基因集和免疫标志组成。每个节点集从基因本体中获得121个标签,这些标签来自分子标志数据库(Subramanian等人,2005年),一个节点可以同时拥有多个标签。

这是提到了归纳学习和转导式学习。我简单说一下:
在机器学习的图处理领域,通常根据模型处理训练数据和测试数据的方式,可以分为演绎学习(Transductive Learning)和归纳学习(Inductive Learning)两种主要的学习设置:

直推学习(Transductive Learning)翻译问题不用过多纠结

在直推学习的设置中,训练和测试过程中使用的都是同一张图的不同部分。例如,在一个包含10个节点的图中,可以选择8个节点及其相关的边用于训练模型,而剩下的2个节点则用于评估模型的性能。关键点在于模型在训练过程中已经接触到了整个图,包括那些将用于测试的节点。尽管模型可能没有利用测试节点的标签信息,但它在训练时已经对这些节点的特征有所了解。这种学习模式被称为演绎的,即模型试图从已见过的样本泛化到同一图中未见过标签的样本上。

归纳学习(Inductive Learning)

与演绎学习不同,归纳学习的特点是模型在测试时将面对完全未见过的新节点或新图。在这种设定中,模型可能在一个图上进行训练,例如学习某类特定节点的属性或特征,然后需要在一个完全不同的新图上进行测试。这要求模型具备更强的泛化能力,能够将在一个图上学到的模式和知识应用到结构和特征可能完全不同的新环境中。归纳学习的关键挑战在于如何捕捉和理解训练图的内在规律,并将这些规律有效地转移到新的、未知的图结构上。

简而言之, 直推学习着重于模型在同一图中节点之间的知识传递,而归纳学习强调的是模型从一个图到另一个图的知识迁移和泛化能力。选择哪种学习方式取决于具体的应用场景和可用数据的特征。
最后再简单点就是GCN再训练的时候更新了全部的节点特征,而GAT仅仅更新了训练节点,这就造成了其实际上并未看过全部的特征数据和图。GCN则全看完了。所以归纳学习就像是在做迁移学习,你在一个图上训练可以引入其他图直接使用。而GCN显然不适用图的变化。

3.2 最新技术方法

简单的聊下这样划分情况下,两种技术的进展,当然这确实是能投体现作者对当前领域的理解力。可以看到直推学习从谱图领域发展而来。这个归纳学习就是空域对图卷积理解的直接实现。

直推学习
对于演绎学习任务,我们比较了与Kipf & Welling(2017年)指定的相同的强基准和最新方法。这包括标签传播(LP)(Zhu等人,2003年)、半监督嵌入(SemiEmb)(Weston等人,2012年)、流形正则化(ManiReg)(Belkin等人,2006年)、基于跳词模型的图嵌入(DeepWalk)(Perozzi等人,2014年)、迭代分类算法(ICA)(Lu & Getoor,2003年)以及Planetoid(Yang等人,2016年)。我们还直接将我们的模型与GCNs(Kipf & Welling,2017年)进行比较,以及使用高阶Chebyshev滤波器的图卷积模型(Defferrard等人,2016年)、以及Monti等人(2016年)介绍的MoNet模型。

归纳学习
对于归纳学习任务,我们比较了Hamilton等人(2017年)提出的四种不同的监督GraphSAGE归纳方法。这些方法提供了在采样邻域内聚合特征的多种方式:GraphSAGE-GCN(将图卷积式操作扩展到归纳设置)、GraphSAGE-mean(取特征向量的逐元素均值)、GraphSAGE-LSTM(通过将邻域特征输入到LSTM中来聚合)以及GraphSAGE-pool(取通过共享非线性多层感知机转换的特征向量的逐元素最大化操作)。其他的演绎方法要么在归纳设置中完全不合适,要么假设节点是逐渐添加到单个图中的,使它们无法用于测试图在训练期间完全未见过的设置(如PPI数据集)。

也是实践关系决定的,在GAT之前主流的模型就这么多而大图性能强筋的GraphSAGE给出了一个大图赛道的问题,如果你要比比你的模型性能就需要进行大图实验。模型就要具备归纳学习仅仅依赖于局部信息更新训练的能力,所以聊了半天的直推学习是为了引入节点分类任务。而体现模型在大图上的性能则样利用归纳学习的任务提现。

此外,对于这两种任务,我们还提供了一个每节点共享的多层感知机(MLP)分类器的性能(该分类器根本不考虑图结构)。

3.3 实验设置

演绎学习
对于演绎学习任务,我们应用了一个两层的图注意力网络(GAT)模型。模型的架构超参数在Cora数据集上进行了优化, 并随后在Citeseer数据集上重用。第一层包括K=8个注意力头 ,每个头计算F0=8个特征(总共64个特征 ),接着是指数线性单元(ELU)(Clevert等人,2016年)的非线性激活函数。第二层用于分类:一个单独的注意力头计算C个特征(其中C是类别的数量),紧跟一个softmax激活函数。为了应对小训练集的情况,我们在模型中大量应用了正则化。在训练过程中,我们使用L2正则化,λ = 0.0005。 此外,dropout(Srivastava等人,2014年)以p = 0.6应用于两层的输入,以及标准化的注意力系数(这意味着在每次训练迭代中,每个节点都暴露于随机采样的邻域中)。正如Monti等人(2016年)观察到的,我们发现Pubmed的训练集大小(60个示例)需要对GAT架构做出一些小的调整:我们应用了K=8个输出注意力头(而不是一个),并加强了L2正则化到λ = 0.001除此之外,架构与用于Cora和Citeseer的匹配。

归纳学习
对于归纳学习任务,我们应用了一个三层的GAT模型。前两层各由K=4个注意力头组成,每个头计算F0=256个特征(总共1024个特征),接着也是ELU非线性激活。**最后一层用于(多标签)分类K=6个注意力头每个头计算121个特征,这些特征被平均**,然后通过逻辑sigmoid激活。这项任务的训练集足够大,我们发现无需应用L2正则化或dropout——但是,我们已成功地在中间注意力层采用跳过连接(He等人,2016年)。

我们在训练期间使用2图的批处理大小。为了严格评估在这种设置下应用注意力机制的好处(即与几乎等同于GCN的模型进行比较),我们还提供了当使用恒定注意力机制,a(x, y) = 1时的结果,具有相同的架构——这将为每个邻居分配相同的权重。两种模型都使用Glorot初始化(Glorot & Bengio, 2010)进行初始化,并使用Adam SGD优化器(Kingma & Ba, 2014)最小化训练节点上的交叉熵,初始学习率对于Pubmed是0.01,对所有其他数据集是0.005。在这两种情况下,我们都使用了基于验证节点的交叉熵损失和准确度(演绎)或micro-F1分数(归纳)的早停策略,耐心度为100个epoch。

3.4 结果

我们的比较评估实验结果总结在表2和表3中。
请添加图片描述

对于直推任务,我们报告了在100次运行后,我们方法在测试节点上的平均分类准确率(带有标准差),并重用了在Kipf & Welling(2017)和Monti等人(2016)已报告的状态艺术技术的指标。具体来说,对于基于Chebyshev滤波器的方法(Defferrard等人,2016),我们提供了滤波器阶数为K=2和K=3的最高报告性能。为了公正评估注意力机制的好处,我们进一步评估了一个计算64个隐藏特征的GCN模型尝试了ReLU和ELU激活函数,并报告(作为GCN-64)100次运行后的更好结果(在所有三种情况下均为ReLU)*。

对于归纳任务,我们报告了在两个未见测试图的节点上,经过10次运行后的微平均F1分数,并重用了Hamilton等人(2017)已报告的其他技术的指标。具体来说,由于我们的设置是监督的,我们与监督的GraphSAGE方法进行比较。为评估跨整个邻域聚合的好处,我们进一步提供(作为GraphSAGE*)我们能够通过仅修改其架构达到的最佳GraphSAGE结果**(这是使用了三层GraphSAGE-LSTM,每层计算的特征为[512, 512, 726],用于聚合邻域的特征为128)。**最后,我们报告了我们的常量注意力GAT模型(作为Const-GAT)的10次运行结果,以公正评估注意力机制与GCN类似的聚合方案的好处(采用相同的架构)。

简而言之就是GCN不具备和这个能力但是graphsage可以通过调整graphsage的池化方式就能得到类似于GCN的能力,进行评估。可以看到实际就是和GraphSAGE进行对比了。仅仅是不同的池化改变了,还有就是注意力机制取消掉看下效果。
在图注意力网络(GAT)中,常规的注意力机制通常涉及使用一种计算策略(如基于图节点特征的相似性经过一个神经网络,然后通过 softmax 函数进行归一化)来动态确定图中每个节点与其邻居之间的连接强度或重要性。这种机制允许模型依据节点间的关系和自身特征来学习和调整每个连接的重要性,从而实现对信息流动的有效控制。

**常量注意力机制的图注意力网络(Const-GAT)**则是一种简化版本,其中注意力权重不是通过学习得到,而是被固定为常量,通常设置为1。这意味着网络不会根据节点间的特征差异或相对重要性来动态调整邻接节点对目标节点的贡献,而是平等地对待所有邻接节点的信息。在这种设置中:

  • 没有使用权重学习:所有边的注意力权重都设为相同的常数值,如 a ( x , y ) = 1 a(x, y) = 1 a(x,y)=1

这种方法的意义和应用
采用常量注意力机制的目的通常是为了在实验中基准比较,以验证学习到的(动态)注意力权重相对于简单平等权重分配的影响与效益。通过比较动态注意力模型(如标准的GAT)和常量注意力模型的表现,研究人员可以评估注意力机制自身在模型性能中的作用,特别是在区分邻居节点的重要性方面的贡献。
例如,如果一个常量注意力GAT的性能与一个具有复杂注意力机制的GAT相当,这可能表明在特定的任务或数据集中,学习复杂的邻居权重分布对性能的提升不大。反之,则说明注意力机制确实为模型提供了重要的性能优势。

我们的结果成功地在所有四个数据集上实现或匹配了最新技术性能——这与我们在2.2节中的讨论一致。更具体地说,我们能够在Cora和Citeseer上分别提高GCN 1.5%和1.6%,表明对同一邻域的节点赋予不同的权重可能是有益的。值得注意的是,在PPI数据集上取得的改进:我们的GAT模型比我们能够获得的最佳GraphSAGE结果提高了20.5%,表明我们的模型有潜力应用于归纳设置,并且通过观察整个邻域可以发挥更大的预测能力。此外,与Const-GAT(具有相同架构的恒定注意力机制)相比,它提高了3.9%,再次直接证明了能够对不同邻居赋予不同权重的重要性。 所学习的特征表示的有效性还可以定性地进行调查——为此,我们提供了在Cora数据集上预训练的GAT模型第一层提取的特征表示的**t-SNE(Maaten & Hinton, 2008)转换可视化(**图2)。

请添加图片描述
该表示在投影的2D空间中展示了可辨识的聚类。注意这些簇对应于数据集的七个标签,验证了模型在Cora的七个主题类别上的区分能力 。此外,我们还 可视化了(平均在所有八个注意力头上)标准化的注意力系数的相对强度。 正确解释这些系数(如Bahdanau等人(2015)所执行的那样)将需要对所研究数据集的更多领域知识,这留待未来工作。

4 结论

我们介绍了图注意力网络(GATs),这是一种新型的卷积风格神经网络,它处理基于图结构的数据,并利用了遮掩的自注意力层。这些网络中普遍使用的图注意力层在计算上具有高效性(不需要昂贵的矩阵运算,并且可以在图中所有节点上并行处理),能够在处理不同大小的邻居区域时(隐式地)赋予不同节点不同的重要性,并且不依赖于预先知道整个图的结构——从而解决了以往基于频谱方法的多个理论问题。我们利用注意力机制的模型在四个成熟的节点分类基准上均成功达到或匹配了最先进的性能,包括直推和归纳学习(特别是在用于测试的完全未见过的图上)。

图注意力网络还有几个潜在的改进和扩展方向,可以作为未来的工作,例如解决2.2小节描述的实际问题以处理更大的批次大小。一个特别有趣的研究方向是利用注意力机制进行模型可解释性的彻底分析。此外,将该方法扩展到执行图分类而非节点分类,从应用角度来看也具有相关性。最后,将模型扩展以纳入边特征(可能表明节点间的关系)将使我们能够处理更广泛的问题。

5 笔者总结

图注意力网络(GAT)的主要优势之一在于它不依赖于全图信息来进行学习,这使得它在处理那些结构动态变化或者只部分可见的图数据时表现出了极大的灵活性和效力。这一特性尤其在处理大规模图或者需要实时更新模型的应用场景中,显得尤为重要。由于不需要全局的图信息,GAT可以更容易地适应新的、未见过的图结构,如在归纳学习任务中对未见过的图进行预测。这与传统的基于频谱的方法形成了鲜明对比,后者通常需要对整个图的结构有全面的了解。

其次的才是,GAT引入注意力机制到图神经网络(GNN)中,增强了模型处理图结构数据的能力,使得模型能够更加精细地捕捉节点间的相对重要性。这种机制允许模型在聚合邻接节点的信息时给予不同节点不同的关注程度,相比传统GNN方法如GCN(图卷积网络)采用的均等或平均策略,能更有效地提取和利用网络中的信息。这不仅改进了模型的性能,也增强了模型在各种图处理任务中的适用性和灵活性。

正是由于这些优势,GAT不仅在节点分类等传统任务中表现优异,在迁移学习的场景中也展示出了强大的潜力,能够更好地泛化到新的图数据上。因此,GAT在需要处理复杂和动态图数据的现代应用中,例如社交网络分析、生物信息学和推荐系统等,都是一种极具吸引力和潜力的模型选择。

对了对了,对这些内容感兴趣的朋友们,通过点赞、收藏和关注来表达你们的支持是对我的极大鼓励,如果你感觉还不错的话也可以打赏一杯咖啡钱,非常感谢大家!有任何问题或建议,欢迎随时通过私信与我交流。期待你们的积极参与和反馈。

下一小节将在pytorch中复现GAT模型在Cora数据集下的实验结果,👏欢迎大家观看哦
在这里插入图片描述

以下是一个简单的GAT(Graph Attention Network)图神经网络的代码示例: ```python import torch import torch.nn as nn import torch.nn.functional as F class GATLayer(nn.Module): def __init__(self, in_features, out_features, dropout=0.6, alpha=0.2): super(GATLayer, self).__init__() self.dropout = dropout self.alpha = alpha self.W = nn.Linear(in_features, out_features, bias=False) self.a = nn.Linear(2*out_features, 1, bias=False) def forward(self, X, adj_matrix): h = self.W(X) N = h.size(0) a_input = torch.cat([h.repeat(1, N).view(N*N, -1), h.repeat(N, 1)], dim=1).view(N, -1, 2*h.size(1)) e = F.leaky_relu(self.a(a_input).squeeze(2), negative_slope=self.alpha) zero_vec = -9e15*torch.ones_like(e) attention = torch.where(adj_matrix > 0, e, zero_vec) attention = F.softmax(attention, dim=1) attention = F.dropout(attention, p=self.dropout, training=self.training) h_prime = torch.matmul(attention, h) return F.elu(h_prime) class GAT(nn.Module): def __init__(self, in_features, hidden_features, out_features, num_layers, dropout=0.6, alpha=0.2): super(GAT, self).__init__() self.hidden_features = hidden_features self.num_layers = num_layers self.layers = nn.ModuleList([GATLayer(in_features, hidden_features, dropout=dropout, alpha=alpha)]) self.layers.extend([GATLayer(hidden_features, hidden_features, dropout=dropout, alpha=alpha) for _ in range(num_layers-2)]) self.layers.append(GATLayer(hidden_features, out_features, dropout=dropout, alpha=alpha)) def forward(self, X, adj_matrix): h = X for layer in self.layers: h = layer(h, adj_matrix) return h ``` 这是一个简单的GAT图神经网络的实现,包括了GATLayer和GAT两个类。GATLayer定义了一个GAT层的操作,GAT则将多个GAT层串联起来构成整个图神经网络。其中,in_features表示输入特征的维度,hidden_features表示隐层特征的维度,out_features表示输出特征的维度,num_layers表示GAT层数,dropout表示dropout率,alpha表示LeakyReLU的斜率。 希望这个代码示例对你有帮助!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个男人是小帅

请小弟喝杯咖啡☕️鼓励下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值