【GAT】GRAPH ATTENTION NETWORKS论文笔记

摘要

GCN将局部的图结构和节点特征结合在节点分类任务中获得好的表现。但GCN及其近似模型有两点不足:

  • 一是结合邻近节点特征的方式和图结构相关,限制模型泛化能力;
  • 二是给同阶邻域不同结点分配相同权重,限制模型捕捉空间信息相关性能力;

本文提出了一种新的应用于图数据上的网络结果Graph Attention Networks(GATs),不同于先前一些基于谱域的图神经网络,通过使用masked的self attention,从而克服了先前图卷积网络或其近似的现有方法的缺点。通过堆叠节点能够参与其邻域特征的层layers,我们(隐式地)为邻域中的不同节点指定了不同的权重,而无需任何类型的计算密集型矩阵运算(如求逆)或依赖于图结构。通过这种方式,我们可以同时解决基于频谱的图神经网络的几个关键挑战,并使我们的模型易于适用于归纳(inductive problems)和推理问题(transductive problems)。我们的GAT模型已在四个已建立的transductive and inductive graph benchmarks中达到或匹配了最先进的结果:the Cora, Citeseer and Pubmed citation network datasets, as well as a protein-protein interaction dataset(其中训练时测试图仍然不可见)。

1 Introduction

卷积神经网络(CNNs)已成功应用于解决诸如图像分类、语义分割或机器翻译等问题,其中底层数据表示具有网格状结构。通过将它们应用于所有的输入位置,这些架构有效地使用可学习的参数重用它们的本地过滤器。

然而,许多有趣的任务涉及的数据不能以类似网格的结构表示,而是位于一个不规则的领域。这就是三维网格、社交网络、电信网络、生物网络或大脑连接体的情况。这些数据通常可以用图的形式来表示。

文献中曾多次尝试扩展神经网络以处理任意结构的图。 早期的工作使用递归神经网络来处理在图域中表示为有向无环图的数据。图神经网络 (GNN) 在 Gori 等人中被引入。作为递归神经网络的概括,可以直接处理更一般的图类,例如 循环图、有向图和无向图。 GNN 由一个迭代过程组成,它传播节点状态直到达到平衡; 然后是一个神经网络,它根据每个节点的状态为每个节点生成一个输出。 这个想法被 Li 等人采用和改进,建议在传播步骤中使用门控循环单元 。

然而,人们对将卷积推广到图域越来越感兴趣。在这一方向上的进展通常被归类为谱域方法和非谱域方法。

一方面,谱域方法使用图的谱表示,并已成功地应用于节点分类。在布鲁纳等人(2014)的文章中,通过计算图拉普拉斯矩阵的特征分解,在傅里叶域内定义了卷积运算,从而导致潜在的密集计算和非空间局部滤波器。这些问题在随后的工作中得到了解决。赫纳夫等人(2015)引入了一种具有光滑系数的谱滤波器的参数化方法,以使其具有空间局部化。后来,德弗拉德等人(2016)提出了利用图拉普拉斯算量的切比雪夫展开来近似滤波器,消除了计算拉普拉斯算量的特征向量,并产生空间局部滤波器。最后,Kipf&Welling(2017)简化了之前的方法,将滤波器限制在每个节点周围的一步邻域中操作。然而,在上述所有的谱域方法中,学习到的过滤器依赖于拉普拉斯特征基,这依赖于图的结构。因此,在特定结构上训练的模型不能直接应用于具有不同结构的图。(这一段主要是提谱域方法的一些研究进展,但是上述所有的谱域方法,学习到的过滤器都依赖于拉普拉斯特征基,也就是依赖于图的结构。因此,在特定结构上的训练模型不能直接应用于具有不同结构的图。)

另一方面,我们有非谱域方法(Duvenaud 等人,2015 年;Atwood 和 Towsley,2016 年;Hamilton 等人,2017 年),它直接在图上定义卷积,对空间上近邻的组进行操作。这些方法的挑战之一是定义一个与不同大小的邻域一起工作并保持 CNN 的权重共享属性的算子。在某些情况下,这需要为每个节点度学习一个特定的权重矩阵(Duvenaud 等,2015),使用转换矩阵的幂来定义邻域,同时学习每个输入通道和邻域度的权重(Atwood & Towsley, 2016),或提取和规范化包含固定数量节点的邻域(Niepert 等人,2016)。蒙蒂等人。 (2016) 提出了混合模型 CNN (MoNet),这是一种空间方法,可将 CNN 架构统一推广到图。最近,汉密尔顿等人。 (2017) 介绍了 GraphSAGE,这是一种以归纳方式计算节点表示的方法。该技术通过对每个节点的固定大小邻域进行采样,然后对其执行特定的聚合器(例如所有采样的邻居特征向量的均值,或通过循环神经网络馈送它们的结果)来运行。这种方法在多个大规模归纳基准测试中取得了令人印象深刻的性能。(这一段提到的是非谱域方法的一些近年来的研究进展,它直接在图上定义卷积,对空间上近邻的组进行操作。主要挑战就是定义一个与不同大小的邻域一起工作并保持CNN的权重共享属性的算子。)

在基于序列的许多任务中,注意机制几乎已经成为事实上的标准(Bahdanau等人,2015年;Gehring等人,2016年)。注意机制的好处之一是,它们允许处理可变大小的输入,集中于输入中最相关的部分来做出决策。当使用一种注意机制来计算单个序列的表示时,它通常被称为自我注意或注意力内注意。与递归神经网络(rnn)或卷积一起,自我注意已被证明对机器阅读(Chengetal.,2016)和学习句子表征(Linetal.,2017)等任务是有用的。然而,瓦斯瓦尼等人。(2017)表明,自我注意不仅可以改进一种基于rnn或卷积的方法,而且它足以构建一个强大的模型,在机器翻译任务上获得最先进的性能。(这一段,文中提到,在基于序列的许多任务中,注意机制几乎已经成为事实上的标准。然后提到了注意机制的好处。self-attention不仅可以改进一种基于RNN或卷积的方法,而且可以构建一个强大的模型。)

下面重点来了!!!下面重点来了!!!下面重点来了!!!

受最近成果的启发,我们引入了一种基于注意力的体系结构来进行图结构数据的节点分类。其思想是通过关注它的邻接节点,遵循一个self-attention策略来计算图中每个节点的隐藏表示。注意架构有几个有趣的特性:
(1)操作是有效的,因为它可以在节点对之间并行;
(2)可以通过指定邻居的任意权重应用于具有不同程度的图节点;
(3)模型直接适用于归纳学习问题,包括模型必须推广到完全看不见的图(也就是不清楚图结构)的任务。

我们在四个具有挑战性的基准上验证了提出的方法:Cora, Citeseer and Pubmed citation networks
as well as an inductive protein-protein interaction dataset,实现或匹配最先进的水平, 突出了在处理任意结构图时基于注意力的模型的潜力

值得注意的是,正如 Kipf & Welling (2017) 和 Atwood & Towsley (2016) 一样,我们的工作也可以重新表述为 MoNet 的一个特定实例 (Monti et al., 2016)。此外,我们跨边共享神经网络计算的方法让人想起关系网络(Santoro 等人,2017 年)和 VAIN(Hoshen,2017 年)的公式,其中对象或代理之间的关系通过采用成对聚合共享机制。同样,我们提出的注意力模型可以连接到 Duan 等人的作品。 (2017) 和 Denil 等人。 (2017),它使用邻域注意操作来计算环境中不同对象之间的注意系数。其他相关方法包括局部线性嵌入 (LLE)(Roweis & Saul,2000)和记忆网络(Weston 等,2014)。 LLE 在每个数据点周围选择固定数量的邻居,并为每个邻居学习一个权重系数,以将每个点重建为其邻居的加权和。第二个优化步骤提取点的特征嵌入。记忆网络也与我们的工作共享一些联系,特别是如果我们将一个节点的邻域解释为内存,它用于通过关注其值来计算节点特征,然后通过将新特征存储在相同的位置。(这一段没什么,大概就是说一下本文的模型和其他现有模型的一些联系)

2 GAT体系结构

在本节中,我们将展示用于构建任意图注意网络的building block layer(通过堆叠该层),并直接概述其与之前在神经图处理领域的工作相比,其在理论和实践上的优点和局限性。

2.1 GRAPH ATTENTIONAL LAYER(图注意层)

我们将首先描述一个单一的图注意力层,作为我们实验中使用的所有 GAT 架构中使用的唯一层。 我们使用的特殊注意设置与 Bahdanau 等人(2015)的工作密切相关。——但该框架与注意力机制的特定选择无关。

该层的输入是一组节点特征

其中,

  • N是节点数
  • F是每个节点中的特征数。

该层产生一组新的节点特征(可能具有不同的基数F’)
在这里插入图片描述
作为其输出。

为了获得足够的表达能力,将输入特征转换为更高级的特征,至少需要一个可学习的线性变换。为此,作为初始步骤,由一个权重矩阵
在这里插入图片描述
应用于每个节点。

==然后,我们对节点执行self-attention——一个共享的注意机制
在这里插入图片描述
计算注意系数
在这里插入图片描述

==这表明了节点j的特征对节点i的重要性。==在其最一般的公式中,该模型允许每个节点参加每个其他节点,从而删除所有的结构信息。我们通过执行masked attention将图结构注入到该机制中——我们只计算节点j∈Ni的eij,其中Ni是图中节点i的某个邻接节点。在我们所有的实验中,这些都是i(包括i)的一阶邻居。为了使系数在不同节点之间容易比较,我们使用softmax函数对j的所有选择对它们进行归一化:
在这里插入图片描述
在我们的实验中,注意机制a是一个单层前向反馈神经网络,由一个权值向量~a∈R2F0
参数化,并应用LeakyReLU非线性(小于0的输入的斜率为α=0.2)。完全展开后,注意机制计算的系数(如图1(左)示)可以表示为:
在这里插入图片描述

  • 左图:我们的模型使用的注意机制a(Whi,Whj),由一个权重向量α来参数化,并使用LeakyRelu激活函数。
  • 右图:节点1的multi-head注意(K=3)的说明。不同的箭头样式和颜色表示独立的注意力计算。来自每个头部的聚合特征被连接或平均,以获得~h01。

在这里插入图片描述
其中,·T表示转置,||为连接操作。

一旦获得,归一化后的注意力系数将用于计算与其对应的特征的线性组合,作为每个节点的最终输出特征(在潜在地应用非线性之后,σ):
在这里插入图片描述
为了稳定self-attention的学习过程,我们发现将我们的机制扩展到使用multi-head attention是有益的,类似于Vaswani等人。(2017).具体来说,K个独立的注意机制执行方程4的变换,然后将它们的特征连接起来,得到以下输出特征表示:
在这里插入图片描述
其中||表示连接,αkij为由第k个注意机制(ak)计算的归一化注意系数,Wk为对应的输入线性变换的权重矩阵。请注意,在此设置中,最终返回的输出h’将由每个节点的K F’特性(而不是F’)组成。

特别地,如果我们在网络的最终(预测)层上执行multi-head attention,那么连接并不是明智的——相反,我们采用平均,并延迟应用最终的非线性函数(通常是 softmax 或logistic sigmoid 用于分类问题),这样就有:
在这里插入图片描述
multi-head图注意层的聚合过程如图1(右)所示。

2.2 与相关工作的比较

第2.1小节中描述的图注意层直接解决了之前使用神经网络建模图结构数据的方法中存在的几个问题:

  • 在计算上,它是高效的self-attention 层的操作可以跨所有边并行,输出特征的计算可以跨所有节点并行。 不需要特征分解或类似的昂贵矩阵运算。 单个 GAT attention head计算F’特征的时间复杂度可以表示为 O(|V|FF’ + |E|F’),其中 F 是输入特征的数量,|V| 和 |E| 分别是图中的节点数和边数。 这种复杂性与图卷积网络 (GCN) (Kipf & Welling, 2017) 等基线方法相当。 应用multi-head attention将存储和参数要求乘以K倍,而单个头的计算是完全独立的并且可以并行化
  • 与gcn不同,我们的模型允许(隐式地)将不同的重要性分配给相同邻域的节点,从而实现模型容量的飞跃。此外,分析学习到的注意权重可能会带来可解释性方面的好处,如机器翻译领域(例如Bahdanou等人的定性分析。(2015)).
  • 注意机制以一种共享的方式应用于图中的所有边,因此它不依赖于对全局图结构或(其所有节点的特性)的预先访问(这是许多先前技术的限制)。这其中有几个可取的含义:
    • 该图不需要一定是无向的(如果边j→i不存在,我们可以简单地不计算αij)。
    • 它使我们的技术直接适用于归纳学习——包括在训练过程中完全看不到的图上进行模型评估的任务。
  • 汉密尔顿等人(2017)最近发表的归纳方法采样每个节点的一个固定大小的邻域,以保持其计算足迹的一致;这不允许它在执行推理时访问整个邻域。此外,当使用基于LSTM(霍克雷特&施米德胡伯,1997)的邻域聚合器时,这种技术取得了一些最强的结果。这假设存在一个跨邻域的一致的顺序节点顺序,并且作者已经通过一致地向LSTM提供随机顺序的序列来纠正它。我们的技术没有受到这些问题的影响——它适用于整个邻域(以牺牲可变的计算占用为代价,这仍然与GCN这样的方法相同),并且不假设其中有任何排序。
  • 如第 1 节所述,GAT 可以重新表述为 MoNet 的一个特定实例(Monti 等,2016)。 更具体地说,将伪坐标函数设置为 u(x, y) = f(x)||f(y),其中 f(x) 表示节点x的(潜在 MLP 转换的)特征,||是连接; 并且权重函数为 wj (u) = softmax(MLP(u))(在节点的整个邻域上执行 softmax)将使 MoNet 的补丁算子与我们的相似。 然而,应该注意的是,与之前考虑的 MoNet 实例相比,我们的模型使用节点特征进行相似性计算,而不是节点的结构属性(假设预先知道图结构)。

我们能够生成一个 GAT 层版本,它利用稀疏矩阵运算,将存储复杂性降低到节点和边数的线性,并能够在更大的图形数据集上执行 GAT 模型。然而,我们使用的张量操作框架仅支持秩为 2 的张量的稀疏矩阵乘法,这限制了当前实现的层的批处理能力(特别是对于具有多个图的数据集)。妥善解决这一制约因素是今后工作的重要方向。根据现有图形结构的规律性,在这些稀疏场景中,与 CPU 相比,GPU 可能无法提供主要的性能优势。还应该注意的是,我们模型的“receptive field”的大小受网络深度的上限限制(类似于 GCN 和类似模型)。然而,可以很容易地应用跳跃连接(He et al., 2016)等技术来适当地扩展深度。最后,所有图边的并行化,尤其是以分布式方式,可能涉及大量冗余计算,因为邻域通常在感兴趣的图中高度重叠。

3 评估

我们已经在四个既定的基于图的基准任务(推理和归纳)上针对各种强基线和以前的方法对 GAT 模型进行了比较评估,在所有这些任务中实现或匹配了最先进的性能 . 本节总结了我们的实验设置、结果以及对 GAT 模型提取的特征表示的简要定性分析。
在这里插入图片描述

3.1 数据集

  • 推理学习数据集使用情况
  • 归纳学习数据集使用情况

3.2 最先进的方法

推理学习:对于转换学习任务,我们与Kipf&Welling(2017)中指定的相同的强基线和最先进的方法进行了比较。这包括标签传播(LP)(朱等人,2003)、半监督嵌入(SemiEmb)(韦斯顿等人,2012)、流形正则化(ManiReg)(贝尔金等人,2006)、基于skip-gram的图形嵌入(深度行走)(Perozzi等人,2014)、迭代分类算法(ICA)(Lu&Getoor,2003)和行星(Yang等人,2016)。我们还直接将我们的模型与GCNs(Kipf&Welling,2017),以及使用高阶切比雪夫滤波器的图卷积模型(德弗拉德等人,2016),以及Monti等人提出的MoNet模型(2016)进行比较。

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

此外,对于这两个任务,我们都提供了每个节点共享的多层感知器(MLP)分类器的性能(都不包含图结构)。

3.3 实验设置

推理学习对于转换学习任务,我们应用了一个两层的GAT模型。它的架构超参数已经在Cora数据集上被优化,然后被Citeseer重用。第一层由K=8 attention head计算每个F’=8特征(共64个特征),然后是一个指数线性单位(ELU)(Clevertetal.,2016)非线性。第二层用于分类:一个计算C特征的单个注意力头(其中C是类的数量),然后是一个softmax激活。为了应对较小的训练集规模,正则化在模型中被自由地应用。在训练期间,我们应用 L2 正则化,λ = 0.0005。 此外,p = 0.6 的 dropout (Srivastava et al., 2014) 应用于两个层的输入以及归一化的attention系数(关键是,这意味着在每次训练迭代中,每个节点都暴露于随机采样的邻居)。 与 Monti 等人观察到的类似。(2016),我们发现 Pubmed 的训练集大小(60 个示例)需要对 GAT 架构稍作改动:我们应用了K = 8个输出attention head(而不是一个),并将 L2 正则化增强为 λ = 0.001。 否则,该架构与用于 Cora 和 Citeseer 的架构相匹配。

归纳学习:==对于归纳学习任务,我们应用了三层 GAT 模型。 前两层都由 K = 4 个attention head组成,计算 F’ = 256 个特征(总共 1024 个特征),然后是 ELU 非线性。 最后一层用于(多标签)分类:K = 6 个attention hea,每个计算 121 个特征,取平均值,然后是逻辑 sigmoid 激活。 ==这项任务的训练集足够大,我们发现不需要应用 L2 正则化或 dropout——然而,我们已经成功地在中间注意力层上使用了跳过连接 (He et al., 2016)。 我们在训练期间使用 2 个图的批量大小。 为了严格评估在此设置中应用注意力机制的好处(即与近似 GCN 等效模型进行比较),我们还提供了使用恒定注意力机制 a(x, y) = 1 时的结果,其中相同的架构——这将为每个邻居分配相同的权重。

两个任务都是用Glorot初始化初始的,并且是用Adam SGD来最小化交叉熵进行优化

3.4 结果

我们的比较评价实验的结果汇总见表2和表3。

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

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

在这里插入图片描述
在这里插入图片描述

我们的结果成功地证明了在所有四个数据集上都实现或匹配了最先进的性能——这与我们的预期相一致,如第2.2节中的讨论。更具体地说,我们能够在Cora和Citeseer上分别提高gcn1.5%和1.6%,这表明为同一邻域的节点分配不同的权重可能是有益的。值得注意的是,PPI数据集的改进:我们的GAT模型提高了20.5%w.r.t.我们能够获得的最好的GraphSAGE结果表明,我们的模型有潜力应用于归纳设置,并且可以通过观察整个邻域来利用更大的预测能力。进一步提高了3.9%的w.r.t.Const-GAT(具有持续注意机制的相同架构),再次直接证明了能够为不同的邻接节点分配不同的权重的重要性。

学习到的特征表示的有效性也可以进行定性研究,为此,我们提供了t-SNE(Maaten&Hinton,2008)转换的特征表示的可视化,该特征表示由在Cora数据集上预先训练的GAT模型的第一层提取(图2)。该表示法在投影的二维空间中表现出可识别的聚类性。请注意,这些聚类对应于数据集的7个标签,验证了模型在Cora的7个主题类别上的鉴别能力。此外,我们可视化了归一化注意系数的相对强度(在所有8个注意头部的平均值)。正确解释这些系数(如Bahdanau等人执行。(2015))将需要关于所研究数据集的进一步领域知识,并留给未来的工作。

4 结论

我们提出了图形注意网络(GATs),一种新型的卷积风格的神经网络,它操作在图形结构的数据上,利用了masked self-attention 层。在这些网络中使用的图注意层计算效率高(不需要昂贵的矩阵操作,并且在图中的所有节点上并行化),允许(隐式)将不同的重要性分配给不同的节点,而不依赖于预先了解整个图结构,从而用以前基于光谱的方法解决了许多理论问题。我们利用注意力的模型已经成功地在四个成熟的节点分类基准中实现或匹配了最先进的性能,包括推理和归纳(特别是用于测试的完全看不见的图)

对于图形注意网络有几个潜在的改进和扩展,可以作为未来的工作来解决,例如克服第2.2小节中描述的实际问题,以能够处理更大的批处理规模。一个特别有趣的研究方向是利用注意机制对模型的可解释性进行彻底的分析。此外,从应用程序的角度来看,将该方法扩展到执行图分类而不是节点分类也是相关的。最后,将模型扩展到合并边的特征(可能表明节点之间的关系)将使我们能够解决更多种类的问题

  • 引用了注意力机制,并且模型性能达到state of the art.

  • 运算相邻节点,更加具有鲁棒性,不需要整张图。

  • 更具有可解释性,公式也更直观。

在这里插入图片描述
Cora 数据集上预训练 GAT 模型的第一个隐藏层的计算特征表示的 t-SNE 图。 节点颜色表示类。 边的厚度表示节点 i 和 j 之间的聚合归一化注意力系数,跨越所有8个注意力头

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用PyTorch实现GAT的代码示例: ``` python import torch import torch.nn as nn import torch.nn.functional as F class GATLayer(nn.Module): def __init__(self, in_dim, out_dim): super(GATLayer, self).__init__() self.in_dim = in_dim self.out_dim = out_dim self.W = nn.Parameter(torch.zeros(size=(in_dim, out_dim))) self.a = nn.Parameter(torch.zeros(size=(2*out_dim, 1))) nn.init.xavier_uniform_(self.W.data, gain=1.414) nn.init.xavier_uniform_(self.a.data, gain=1.414) def forward(self, h, adj): Wh = torch.mm(h, self.W) a_input = self._prepare_attentional_mechanism_input(Wh) e = F.leaky_relu(torch.matmul(a_input, self.a).squeeze(2)) zero_vec = -9e15*torch.ones_like(e) attention = torch.where(adj > 0, e, zero_vec) attention = F.softmax(attention, dim=1) h_prime = torch.matmul(attention, Wh) return h_prime def _prepare_attentional_mechanism_input(self, Wh): N = Wh.size()[0] Wh_repeated_in_chunks = Wh.repeat_interleave(N, dim=0) Wh_repeated_alternating = Wh.repeat(N, 1) all_combinations_matrix = torch.cat([Wh_repeated_in_chunks, Wh_repeated_alternating], dim=1) return all_combinations_matrix.view(N, N, 2*self.out_dim) class GAT(nn.Module): def __init__(self, n_feat, n_hid, n_class, dropout, alpha, n_heads): super(GAT, self).__init__() self.dropout = dropout self.attentions = [GATLayer(n_feat, n_hid) for _ in range(n_heads)] for i, attention in enumerate(self.attentions): self.add_module('attention_{}'.format(i), attention) self.out_att = GATLayer(n_hid*n_heads, n_class) self.alpha = alpha def forward(self, x, adj): x = F.dropout(x, self.dropout, training=self.training) x = torch.cat([att(x, adj) for att in self.attentions], dim=1) x = F.dropout(x, self.dropout, training=self.training) x = F.elu(self.out_att(x, adj)) return F.log_softmax(x, dim=1) ``` 在此示例中,我们实现了一个包含多头注意力机制的GAT模型。其中,GATLayer是GAT的核心组件,每个GATLayer都包含一个注意力头。在GAT模型中,我们将多个注意力头的输出连接在一起,再通过一个输出层进行分类。在forward函数中,我们首先对输入进行dropout,然后通过多个GATLayer进行特征提取,最后通过输出层进行分类并使用log_softmax进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值