跳转至

图注意力网络 (GAT)

图注意力网络(Graph Attention Network, GAT)由 Velickovic et al. 在 2018 年(ICLR)提出。GAT 的核心创新在于引入注意力机制来自适应地为不同邻居分配不同的权重,而非像 GCN 那样使用固定的归一化权重。这一设计使得模型能够隐式地学习到邻居的重要性,从而获得更强的表达能力。

学习路线: GCN/GraphSAGE 基础 → 注意力机制动机 → GAT 注意力计算 → 多头注意力 → GATv2 改进 → 实验与应用


动机:自适应权重 vs 固定权重

GCN 的权重问题

回顾 GCN 的消息传递规则,节点 \(v\) 在第 \(l\) 层的更新为:

\[ \mathbf{h}_v^{(l)} = \sigma\left(\sum_{u \in \mathcal{N}(v) \cup \{v\}} \frac{1}{\sqrt{d_v d_u}} W^{(l)} \mathbf{h}_u^{(l-1)}\right) \]

权重 \(\frac{1}{\sqrt{d_v d_u}}\) 完全由图的拓扑结构(节点度数)决定,存在以下局限:

问题 描述
权重固定 邻居的权重仅取决于度数,与特征无关
无差别对待 所有邻居被同等对待,无法区分重要邻居
缺乏灵活性 同一节点在不同任务/上下文中对邻居的需求可能不同

GAT 的解决方案:让模型自动学习每个邻居应该获得多大的权重,类似于 Transformer 中的自注意力机制。


注意力机制

注意力系数计算

GAT 对节点 \(v\) 和其邻居 \(u\) 之间的注意力系数计算分为以下步骤:

第 1 步:线性变换

对所有节点的特征做共享的线性变换:

\[ \mathbf{z}_v = W \mathbf{h}_v, \quad \mathbf{z}_u = W \mathbf{h}_u \]

其中 \(W \in \mathbb{R}^{F' \times F}\) 是可学习的权重矩阵。

第 2 步:计算原始注意力分数

将变换后的特征拼接,通过一个共享的注意力向量 \(\mathbf{a} \in \mathbb{R}^{2F'}\) 和 LeakyReLU 激活函数得到原始注意力分数:

\[ e_{vu} = \text{LeakyReLU}\left(\mathbf{a}^T \left[\mathbf{z}_v \| \mathbf{z}_u\right]\right) \]

其中 \(\|\) 表示向量拼接(concatenation),LeakyReLU 的负斜率通常设为 0.2。

第 3 步:Softmax 归一化

在节点 \(v\) 的所有邻居上做 softmax,得到归一化的注意力权重:

\[ \alpha_{vu} = \text{softmax}_u(e_{vu}) = \frac{\exp(e_{vu})}{\sum_{k \in \mathcal{N}(v) \cup \{v\}} \exp(e_{vk})} \]

第 4 步:加权聚合

用注意力权重对邻居特征加权求和:

\[ \mathbf{h}_v^{(l)} = \sigma\left(\sum_{u \in \mathcal{N}(v) \cup \{v\}} \alpha_{vu} \mathbf{z}_u\right) \]

注意力机制的直觉

方面 说明
信息源 注意力权重由两个节点的特征共同决定
局部性 只在一阶邻居范围内计算注意力(masked attention)
自适应性 不同节点对同一邻居可以给出不同权重
参数效率 注意力机制参数 \(\mathbf{a}\) 在所有节点对之间共享

多头注意力

为了增强模型的表达能力和训练稳定性,GAT 使用多头注意力(Multi-Head Attention),类似于 Transformer:

中间层使用拼接(concatenation):

\[ \mathbf{h}_v^{(l)} = \overset{K}{\underset{k=1}{\Big\|}} \; \sigma\left(\sum_{u \in \mathcal{N}(v) \cup \{v\}} \alpha_{vu}^k \; W^k \mathbf{h}_u^{(l-1)}\right) \]

其中 \(K\) 是头的数量,\(\|\) 表示拼接。输出维度为 \(K \times F'\)

最后一层使用平均(averaging):

\[ \mathbf{h}_v^{(L)} = \sigma\left(\frac{1}{K}\sum_{k=1}^{K}\sum_{u \in \mathcal{N}(v) \cup \{v\}} \alpha_{vu}^k \; W^k \mathbf{h}_u^{(L-1)}\right) \]
多头注意力参数 原始论文设置
头数 \(K\) 8(中间层)/ 1(输出层)
每头输出维度 \(F'\) 8
注意力 dropout 0.6
特征 dropout 0.6

与 GCN / GraphSAGE 的对比

维度 GCN GraphSAGE GAT
邻居权重 固定(度数归一化) 固定(均匀/Pool) 自适应(注意力学习)
权重依据 图结构 图结构 + 聚合函数 节点特征
表达能力
可解释性 高(可视化注意力权重)
计算复杂度 \(O(\|E\| \cdot F \cdot F')\) \(O(N \cdot S \cdot F \cdot F')\) \(O(\|E\| \cdot F \cdot F' + \|E\| \cdot F')\)
归纳能力 转导式 归纳式 归纳式

GAT 的一个独特优势是可解释性:可以可视化注意力权重来理解模型"关注"了哪些邻居,这在生物信息学和社交网络分析中非常有价值。


GATv2:修复静态注意力问题

GAT 的静态注意力问题

Brody et al. (2022) 发现原始 GAT 存在静态注意力(Static Attention)问题:

原始 GAT 的注意力计算可以分解为:

\[ e_{vu} = \mathbf{a}_l^T W_l \mathbf{h}_v + \mathbf{a}_r^T W_r \mathbf{h}_u \]

其中 \(\mathbf{a} = [\mathbf{a}_l \| \mathbf{a}_r]\)。问题在于:注意力分数是两个独立的关于 \(v\)\(u\) 的函数之和,LeakyReLU 作用在求和之后。

这意味着对于所有查询节点 \(v\),邻居的排序(ranking)可能是固定的——即 GAT 的注意力实际上无法实现真正的动态排序。

GATv2 的修复

GATv2 通过改变运算顺序来解决这个问题——先拼接再做非线性变换:

\[ e_{vu} = \mathbf{a}^T \text{LeakyReLU}\left(W \left[\mathbf{h}_v \| \mathbf{h}_u\right]\right) \]
对比 GAT GATv2
非线性位置 拼接 → 线性 → LeakyReLU 拼接 → 线性 → LeakyReLU → 线性
注意力类型 静态(固定排序) 动态(排序随查询变化)
表达能力 有限 完全动态注意力
计算开销 略低 略高(额外的矩阵乘法)
实验性能 基准 在多数任务上优于 GAT

实验结果与应用

标准基准表现

GAT 在常用引文网络数据集上的节点分类表现:

数据集 节点数 特征维度 类别数 GAT 准确率
Cora 2,708 1,433 7 83.0 ± 0.7%
Citeseer 3,327 3,703 6 72.5 ± 0.7%
Pubmed 19,717 500 3 79.0 ± 0.3%

应用场景

领域 任务 GAT 的优势
分子性质预测 原子级交互建模 注意力权重反映化学键重要性
知识图谱 实体关系推理 自适应关注不同关系类型
文本分类 文档图上的分类 捕捉词/文档之间的语义关联权重
交通预测 路网上的流量预测 注意力区分上下游路段的影响
推荐系统 用户-物品交互 不同物品对用户的吸引力不同

与 Transformer 的联系

GAT 和 Transformer 的自注意力有着深刻的联系:

  • Transformer 可以看作在完全图上的 GAT(每个 token 与所有其他 token 相连)
  • GAT 是在稀疏图上的局部注意力
  • 二者都使用 query-key 机制来计算注意力权重
  • 这种联系启发了后续的 Graph Transformer 系列工作

GAT 将注意力机制优雅地引入图神经网络,为后续诸多 GNN 变体(如 GATv2、Graph Transformer)奠定了基础,是图深度学习领域最具影响力的工作之一。


评论 #