GAT

GAT图注意力网络是一种高效的图神经网络模型,它利用自注意力机制来加权聚合邻居节点特征,实现节点特征的更新。GAT具有并行计算优势,能适应不同度数的节点,并适用于归纳学习任务。通过多头注意力机制,GAT能够稳定地学习节点间复杂关系。

Paper : Graph Attention Networks
Code :

摘要

注意力机制的核心在于对给定信息进行权重分配,只关注最相关的输入来进行决策。当注意力机制用来生成一个序列的表示时,也被称作是自注意力机制。注意力机制的表示形式如下

在这里插入图片描述
假定Source是需要系统处理的信息源,Query代表某种条件或者先验信息,Attention Value是给定Query信息的条件下,通过注意力机制从Source中提取得到的信息。一般Source里面包含有多种信息,我们将每种信息通过Key-Value对的形式表示出来,那么Attention定义为

Attention(Query,Source) = ∑ i similarity(Query,Key i ) ⋅ Value i \text{Attention(Query,Source)} = \sum_i\text{similarity(Query,Key}_i)\cdot\text{Value}_i Attention(Query,Source)=isimilarity(Query,Keyi)Valuei

其中 similarity(Query,Key i ) \text{similarity(Query,Key}_i) similarity(Query,Keyi) 表示权重,当Query与Key越接近时,答案越依赖于对应的Value的值。GAT将Attention机制应用到GNN中,Attention机制的三要素分别对应到图中的以下要素

  • Query : 某节点的特征向量
  • Source : 上一层所有邻居节点的特征向量
  • Attention Value : 经过聚合后形成的当前层某节点的特征向量

GAT具有以下几个特点

  • 操作高效,可以在 节点-邻居 之间进行并行化计算
  • 通过对邻居指定任意权重,可以应用于度数不同的图节点
  • 该模型直接适用于归纳学习问题,包括必须将模型推广到完全不可见图的任务

GAT结构

GAT层的输入是节点的特征表示 h = { h → i ∣ 1 ≤ i ≤ N } \text h = \{\overrightarrow{h}_i| 1\leq i\leq N\} h={h i1iN} ,其中 h → i ∈ R F \overrightarrow{h}_i \in \mathbb R^F h iRF,输出是聚合后节点的新的特征表示 h ′ = { h ′ → i ∣ 1 ≤ i ≤ N } \text h' = \{\overrightarrow{h'}_i| 1\leq i\leq N\} h={h i1iN} ,其中 h ′ → i ∈ R F ′ \overrightarrow{h'}_i \in \mathbb R^{F'} h iRF。与其他MPNN结构GNN层相似,GAT层需要学习一个线性映射 W ∈ R F ′ × F W\in\mathbb R^{F'\times F} WRF×F ,而节点 j j j 对于节点 i i i 的注意力权重定义为
e i , j = a ( W h → i , W h → j ) e_{i,j} = a(W\overrightarrow h_i, W\overrightarrow h_j) ei,j=a(Wh i,Wh j)

最通用的形式下,该注意力机制可以表示任意节点 j j j 对任意节点 i i i 的权重,但是一般限制为一阶邻居和自己,即
j ∈ N ~ ( v i ) N ~ ( v i ) = N ( v i ) ∪ { v i } \\j\in \widetilde N(v_i) \\ \widetilde N(v_i) = N(v_i) \cup\{v_i\} jN (vi)N (vi)=N(vi){vi}

为了便于比较不同节点之间的相关系数,需要对节点 i i i 所有的邻居节点 j j j 的权重进行正则化

α i , j = softmax j ( e i , j ) = exp ⁡ ( e i , j ) ∑ v k ∈ N ~ ( v i ) exp ⁡ ( e i , k ) \alpha_{i,j} = \text{softmax}_j(e_{i,j}) = \frac{\exp(e_{i,j})}{\sum_{v_k\in \widetilde N(v_i)}\exp(e_{i,k})} αi,j=softmaxj(ei,j)=vkN (vi)exp(ei,k)exp(ei,j)

对于 e i , j e_{i,j} ei,j a a a 可以选择为非参数的相似度函数,也可以选择使用参数化的模型来输出相似度。在GAT中采用单层全连接网络进行相似度评估,即 a → ∈ R 2 F ′ \overrightarrow a \in \mathbb R^{2F'} a R2F,并使用LeakyReLU 参数 α = 0.2 \alpha = 0.2 α=0.2,最终权重可以表示为

α i , j = exp ⁡ ( LeakyReLU ( a → T [ W h → i ∣ ∣ h → j ] ) ) ∑ v k ∈ N ~ ( v i ) exp ⁡ ( LeakyReLU ( a → T [ W h → i ∣ ∣ h → k ] ) ) \alpha_{i,j} = \frac{\exp(\text{LeakyReLU}(\overrightarrow a^{\text T}[W\overrightarrow h_i||\overrightarrow h_j]))}{\sum_{v_k\in\widetilde N(v_i)}\exp(\text{LeakyReLU}(\overrightarrow a^{\text T}[W\overrightarrow h_i||\overrightarrow h_k]))} αi,j=vkN (vi)exp(LeakyReLU(a T[Wh ih k]))exp(LeakyReLU(a T[Wh ih j]))

节点表示向量聚合之后的结果如下

h → i ′ = σ ( ∑ v j ∈ N ~ ( v i ) α i , j W h → j ) \overrightarrow h_i' = \sigma(\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}W\overrightarrow h_j) h i=σ(vjN (vi)αi,jWh j)

为了使自注意力机制的学习过程更加稳定,可以将该方法扩展到multi-head attention,假设同时使用了K个注意力机制,输出是将它们单独的输出进行连接

h → i ′ = ∣ ∣ k = 1 K σ ( ∑ v j ∈ N ~ ( v i ) α i , j k W k h → j ) \overrightarrow h_i' = ||_{k=1}^K \sigma(\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}^kW^k\overrightarrow h_j) h i=k=1Kσ(vjN (vi)αi,jkWkh j)

在这里插入图片描述

如果将多头注意力机制使用到最后一层,那么连接操作不太合适,一般使用均值操作来合并多个注意力机制的结果并延迟sigmoid操作

h → i ′ = σ ( 1 K ∑ k = 1 K ∑ v j ∈ N ~ ( v i ) α i , j k W k h → j ) \overrightarrow h_i' = \sigma(\frac{1}{K}\sum_{k=1}^K\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}^kW^k\overrightarrow h_j) h i=σ(K1k=1KvjN (vi)αi,jkWkh j)

总结

GAT提出了一个只需要知道局部特征就可以计算的Attention机制,算法并行支持很好,而且对于效果也有一定的改善。从实验设置上,可能缺乏一个有关计算代价的实验来支持“低代价计算Attention”的结论。GAT具有以下几个可以改进的方向

  • 处理的batch size的数据
  • 使用Attention分析模型表示能力
  • 从node classification 扩展到graph classification
  • 将edge features考虑进来
05-05
### GAT 图注意力网络简介 图注意力网络(Graph Attention Network,简称GAT)是一种基于图神经网络的模型,专门设计用于处理图结构数据。通过引入注意力机制,GAT能够在节点间动态分配权重,从而更有效地捕捉节点之间的关系和特征信息[^1]。 #### 原理与实现方法 GAT的核心思想是利用自注意力机制为每个节点计算隐藏表示。具体而言,GAT会根据节点及其邻居节点的特征,为其分配不同的权值。这种机制允许模型仅关注与当前节点直接相连的邻居节点,而不必考虑整个图的全局信息[^2]。这种方法不仅提高了计算效率,还使其能够适应不同规模和结构的图数据。 #### 输入与输出 在GAT中,输入通常是一个图 \( G=(V,E) \),其中 \( V \) 表示节点集合,\( E \) 表示边集合。每个节点 \( v_i \in V \) 都有一个对应的特征向量 \( F_i \)。经过一系列变换操作后,GAT会产生一个新的特征表示矩阵 \( H \in R^{N * f} \)[^5]。这一过程涉及多个步骤,包括但不限于线性变换、系数矩阵计算、softmax归一化以及多头注意力机制的应用。 ```python import torch import torch.nn.functional as F from torch_geometric.nn import GATConv class GAT(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, heads=8): super(GAT, self).__init__() self.conv1 = GATConv(input_dim, hidden_dim, heads=heads) self.conv2 = GATConv(hidden_dim * heads, output_dim, heads=1) def forward(self, data): x, edge_index = data.x, data.edge_index x = F.dropout(x, p=0.6, training=self.training) x = F.elu(self.conv1(x, edge_index)) x = F.dropout(x, p=0.6, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) ``` 以上代码展示了一个简单的GAT实现框架,使用PyTorch Geometric库定义了两层GAT卷积层,并应用dropout和激活函数提升性能。 #### 优势分析 相比传统的图神经网络(如GCN),GAT具备显著的优势: - **灵活性**:由于不依赖于拉普拉斯特征基,GAT可以直接应用于具有不同结构的图数据集[^3]。 - **高效性**:支持跨节点邻居的操作并行化,大幅提升了运行速度。 - **适用范围广**:特别适合解决归纳学习问题,即使面对训练阶段未见过的新图也能表现良好[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值