图学习(一)Graph Attention Networks

本文介绍了图注意力网络(GAT),一种针对图结构数据的新方法,解决了图卷积网络在inductive任务和有向图处理中的局限性。GAT允许节点根据邻居特征分配不同权重,无需预先构建图,适用于动态图问题。通过逐节点的注意力机制,GAT能够在保持计算效率的同时捕捉图的复杂结构。

背景

研究机构:Department of Computer Science and Technology;Centre de Visi´o per Computador, UAB;Montreal Institute for Learning Algorithms
来源:ICLR2018

摘要

针对图结构的数据,本文提出了一种图注意力网络GAT,该网络使用masked self-attention用于解决之前图卷积模型中存在的问题。在GAT中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。GAT的另一个优点在于,无需使用预先构建好的图。

动机

GCN的局限性:
(1)无法完成inductive任务,即处理动态图问题。
inductive任务是指:训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图(subgraph)上进行,测试阶段需要处理未知的顶点。(unseen node)
(2)处理有向图的瓶颈,不容易实现分配不同的学习权重给不同的neighbor。

方法

作者提到,GAT的实现方式可以有两种思路。其一,Global graph attention
即每一个顶点 i i i都对图上任意顶点进行attention操作。优点:完全不依赖于图的结构,可以很好的完成inductive任务。缺点:计算量巨大,并且数据本身的图结构特点丢失,可能导致很差的结果。

其二,Mask graph attention,注意力机制的运算只在邻居顶点上进行。作者采用的是这种方式。
具体细节:
与一般的attention方法类似,GAT的计算步骤也是两步走策略:
(1)计算注意力分布(即用于加权的系数)

对于顶点 i i i,逐个计算各个邻居 j ( j ∈ N i ) j(j\in N_i) j(jNi

<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]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值