【GCN】论文笔记:Graph Attention Networks

本文介绍了图注意力网络(GAT),它是一种基于图结构数据的新型神经网络,解决了传统图卷积网络的局限。GAT通过self-attention层实现了节点间不同权重的特征融合,避免了矩阵操作,支持并行计算,适用于归纳和直推问题。模型在多个图基准上表现出色,展示了其在处理不同大小邻域和未知图结构的灵活性。


一、前言

1、GAT概述

我们提出了图注意力网络(GATs),这是一种基于图结构数据的新型神经网络体系结构,它利用隐藏的 self-attention layer 来解决基于图卷积或其近似的先前方法的缺点。通过叠加层,节点能够参与其邻居的特征,我们可以(隐式地)指定不同的权值到一个邻居的不同节点,而不需要任何类型的矩阵操作(如反演)或依赖于预先知道的图结构。
通过这种方式,我们同时解决了基于频谱的图神经网络的几个关键挑战,并使我们的模型适用于归纳和直推问题。我们的GAT模型在四个已建立的直推和归纳图基准上匹配的最新结果:Cora, Citeseer和Pubmed引文网络数据集,以及一个蛋白质蛋白质相互作用数据集(其中测试图在训练期间不可见)

1、GAT特点

针对每一个节点运算相应的隐藏信息,在运算其相邻节点的时候引入注意力机制:

  • 高效:针对相邻的节点对,并且可以并行运算
  • 灵活:针对有不同度(degree)的节点,可以运用任意大小的weight与之对应。
  • 可移植:可以将模型应用于从未见过的图结构数据,不需要与训练集相同。

2、相关工作

  • 谱方法:Semi-Supervised Classification with Graph Convolutional Networks
    在每个节点周围对卷积核做一阶邻接近似。但是此方法也有一些缺点:
    ----必须基于相应的图结构才能学到拉普拉斯矩阵L;
    ----对于一个图结构训练好的模型,不能运用于另一个图结构(所以此文称自己为半监督的方法)。
  • 非谱方法:每个节点的相邻节点数量是不一样的,重点在于如何能设置相应的卷积尺寸来保证CNN能够对不同的相邻节点进行操作。
  • 注意力机制 self-attention:可以处理任意大小输入的问题,并且关注最具有影响能力的输入。
    理解直推式和归纳式学习(https://blog.youkuaiyun.com/DreamHome_S/article/details/106165051)

二、方法推导

1、输入与输出

  • 输入:一组节点特征,h={ h ⃗ 1 \vec{h}_1 h 1, h ⃗ 2 \vec{h}_2 h 2,…, h ⃗ N \vec{h}_N h N,}, h ⃗ i \vec{h}_i h i R F R^F RF
    其中 N 为节点数, F 为每个节点的特征数,即输入N个节点的每个节点的F个特征
  • 输出:一组新的节点特征,h’={ h ′ ⃗ 1 \vec{h'}_1 h 1, h ′ ⃗ 2 \vec{h'}_2 h 2,…, h ′ ⃗ N \vec{h'}_N h N,}, h ′ ⃗ i \vec{h'}_i h i R F ′ R^{F'} RF

目的:针对这N个节点,按照其输入的特征预测输出的特征。

2、计算注意系数

对每一个节点应用权重矩阵,W R F ′ × F R^{F'×F} RF×F, 接着我们在每一个节点上使用注意机制 a: R F ′ R^{F'} RF × R F ’ R^{F’} RF →R

注意系数: e i j e_{ij} eij=a(W h ⃗ i ^{\vec{h}_i} h i,W h ⃗ j ^{\vec{h}_j} h j)表示节点 j 的特征对节点 i 的重要性。
在这里,我们只计算 e i j e_{ij} eij,j∈ N i N_i Ni,实验表明,当 N i N_i Ni代表节点 i 的一阶邻居时效果最好。
为了使系数在不同节点之间易于比较,我们使用softmax函数对 j 的所有选择进行标准化:
在这里插入图片描述
在我们的实验中,注意机制a是一个单层前馈神经网络,被一个权重向量 a ⃗ \vec a a R 2 F ’ R^{2F’} R2F参数化,并应用LeakyReLU非线性(负输入斜率α= 0.2)。完全展开后,注意机制计算出的系数可以表示为:
在这里插入图片描述
其中,||表示级联(拼接)操作。

3、加权求和

得到归一化的注意系数之后,就用它来计算其对应特征的线性组合,作为每个节点的最终输出特征:
在这里插入图片描述

4、multi-head attention

为了稳定自我注意的学习过程,我们发现扩展我们的机制以使用multi-head是有益的。具体来说,将K个独立的注意机制进行如下变换,然后将它们的特征进行串级,得到如下输出特征表示:

在这里插入图片描述
其中, α i j k \alpha_{ij}^k αijk表示第k个注意机制计算的归一化注意系数,W为对应的输入的线性变换的权重矩阵,注意,返回的输出 h ′ ⃗ i \vec{h'}_i h i中每个节点将包含KF’个特征(超过F’)。
如果我们对网络的最终(预测)层进行multi-head关注,||就不再是明智的了,相反,我们使用平均,并延迟应用最终的非线性(通常是softmax或logistic sigmoid用于分类问题),直到:
在这里插入图片描述

三、总结

1、GAT优点

  • 在计算上是高效的,self-attentional layer的操作可以在所有边上并行化,输出特征的计算可以在所有节点上并行化,不需要特征分解或类似代价高昂的矩阵操作。采用multi-head注意机制将存储和参数要求乘以K,而各个头的计算完全独立,可以并行化。
  • 与GCNs相反,我们的模型允许(隐式地)为同一邻居的节点分配不同的重要性,从而实现模型容量的飞跃。
  • 注意机制以一种共享的方式应用于图中的所有边,因此它不依赖于对全局图结构或所有节点(特征)的预先访问(许多先前的技术的局限性)。这有几个可取的含义:
    – 图不需要是无向的(如果边j→i不存在,我们可以省去计算αij)。
    –这使得我们的技术直接适用于归纳学习——包括在训练过程中完全看不见的图形上评估模型的任务。

2、结论

我们提出了图注意网络(GATs),一种基于图结构数据的新型卷积式神经网络,利用隐藏的自我注意层。图注意力层利用在这些网络是计算有效(不需要昂贵的矩阵运算,可平行的所有节点图中),在处理不同大小的邻域时允许不同重要性(隐式地)分配到不同的节点,和不依赖于知道整个图结构与先前的spectral-based upfront-thus解决许多理论问题的方法。我们利用注意力的模型在四个完善的节点分类基准(包括直推和归纳)中成功实现或匹配了最先进的性能(特别是使用完全看不见的用于测试的图表)。

<think>好的,用户想了解2018年提出的图注意力网络(Graph Attention Networks)的相关信息或论文,特别是关于实现的部分。首先,我需要回忆一下GAT的基本结构和主要贡献。GAT由Velickovic等人在2018年提出,核心是使用注意力机制来动态计算节点之间的重要性权重,替代了传统的基于图结构的方法,比如GCN中的固定归一化。 接下来,用户提到的是论文的实现,所以需要详细说明模型的架构,特别是多头注意力机制和参数共享的部分。记得要引用用户提供的参考资料中的相关部分,比如引用[4]提到的注意力机制公式,这可能与GAT中的注意力函数有关。需要确认引用中的符号是否与GAT论文一致,例如$a(W\vec{h_i}, W\vec{h_j})$,这里可能对应GAT中的注意力系数计算。 然后,用户可能需要代码示例,所以应该提供一个简单的PyTorch实现,包括图注意力层的定义和前向传播过程。要注意代码中的关键部分,比如线性变换、注意力系数的计算、LeakyReLU激活函数以及softmax的应用。同时,多头注意力的实现可能需要将多个注意力头的结果拼接或平均,这部分也需要在代码中体现。 用户的问题中还提到了相关问题的生成,需要根据GAT的特点和应用场景来设计问题。例如,GAT与GCN的区别、多头注意力的作用、如何处理动态图等。这些问题需要简洁明了,能够引导用户进一步探索。 另外,需要检查是否有遗漏的要点,比如训练方法。引用[3]提到了使用REINFORCE算法训练策略网络,但GAT通常使用监督学习,可能需要指出这点差异。同时,引用[1]和[2]提到的图网络结构和双层GCN可能作为对比,说明GAT的灵活性和优势。 最后,确保回答符合系统级指令,数学公式用$...$,独立公式用$$...$$,正确使用中文,并且引用标识正确添加。例如,在提到注意力机制时引用[4],在讨论图卷积网络时引用[2]。</think># 图注意力网络(GAT) 2018论文实现解析 ## 一、核心机制 2018年提出的图注意力网络(Graph Attention Networks, GAT)[^4] 创新性地将注意力机制引入图神经网络,其核心是通过$α_{ij}$注意力系数动态计算节点间关系: $$e_{ij} = \text{LeakyReLU}(\vec{a}^T[W\vec{h_i}||W\vec{h_j}])$$ $$α_{ij} = \text{softmax}_j(e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k∈\mathcal{N}_i}\exp(e_{ik})}$$ 其中$\vec{a}∈\mathbb{R}^{2F'}$是可训练参数向量,$W∈\mathbb{R}^{F'×F}$是共享线性变换矩阵[^4] ## 二、模型架构 ### 2.1 单头注意力层 ```python import torch import torch.nn as nn import torch.nn.functional as F class GraphAttentionLayer(nn.Module): def __init__(self, in_features, out_features, dropout=0.6): super().__init__() self.W = nn.Linear(in_features, out_features) self.a = nn.Linear(2*out_features, 1) self.dropout = nn.Dropout(dropout) self.leakyrelu = nn.LeakyReLU(0.2) def forward(self, h, adj): Wh = self.W(h) # [N, out_features] N = Wh.size(0) # 构造所有节点对 Wh_repeated = Wh.unsqueeze(1).repeat(1, N, 1) # [N, N, out_features] Wh_repeated_transposed = Wh_repeated.transpose(0,1) concat = torch.cat([Wh_repeated, Wh_repeated_transposed], dim=2) # [N, N, 2*out_features] e = self.leakyrelu(self.a(concat).squeeze(2)) # [N, N] zero_vec = -9e15*torch.ones_like(e) attention = torch.where(adj > 0, e, zero_vec) attention = F.softmax(attention, dim=1) attention = self.dropout(attention) h_prime = torch.matmul(attention, Wh) # [N, out_features] return F.elu(h_prime) ``` ### 2.2 多头注意力机制(论文关键创新) $$h_i' = \|_{k=1}^K σ(\sum_{j∈\mathcal{N}_i} α_{ij}^k W^k h_j)$$ 其中$\|$表示拼接操作,$K$为注意力头数量[^4] ## 三、训练要点 1. 参数初始化:使用Glorot初始化权重矩阵 2. 正则化:在注意力系数上应用dropout(0.6概率) 3. 激活函数:ELU非线性激活 4. 优化器:Adam优化器(初始学习率0.005) ## 四、性能优势 与GCN相比,GAT具有三大优势: 1. 隐式指定不同邻居的权重,无需预先知道图结构 2. 适用于inductive学习任务 3. 多头注意力机制增强模型稳定性 ## 五、典型应用场景 1. 蛋白质相互作用网络分析 2. 社交网络用户行为预测 3. 知识图谱补全 4. 交通流量预测[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值