图神经网络(GNN)中的图注意力网络(GAT)原理详解
题目/知识点描述
图注意力网络(Graph Attention Network, GAT)是一种基于注意力机制的图神经网络模型。它通过自注意力机制,让图中的每个节点能够自适应地、差异化地聚合其邻居节点的信息,而不依赖于预先定义的图结构(如图的度)。GAT的核心思想是为每个邻居节点分配一个可学习的注意力权重,从而更有效地捕捉节点间的重要关系。
解题过程/原理讲解
1. 图神经网络的基本问题
在传统的图卷积网络(GCN)中,节点特征的聚合方式通常是均质的。例如,对于一个中心节点,其邻居节点在信息聚合时的重要性是相等的(或者仅由节点的度决定)。然而,在实际的图结构中,不同的邻居节点对中心节点的重要性往往是不同的。GAT的目标就是解决这种差异性,实现更精细化的信息聚合。
2. 注意力系数的计算
GAT的第一步是为每一对相邻的节点计算一个注意力系数(Attention Coefficient),这个系数表示邻居节点 j 对中心节点 i 的重要性。
-
输入:首先,每个节点 i 都有一个初始的特征向量,记为 \(\mathbf{h}_i\)。
-
线性变换:为了增加模型的表达能力,我们首先用一个共享的权重矩阵 \(\mathbf{W}\) 对所有节点的特征进行线性变换:
\(\mathbf{z}_i = \mathbf{W} \mathbf{h}_i\)
这相当于将节点特征映射到一个新的、可能更高维的特征空间。 -
注意力机制:然后,我们计算节点 i 和它的每一个邻居节点 j (包括节点 i 自身)之间的注意力分数 \(e_{ij}\) 。GAT采用一个单层的前馈神经网络
a来计算这个分数,该神经网络的权重是一个向量 \(\overrightarrow{\mathbf{a}}\)。
\(e_{ij} = \text{LeakyReLU}\left( \overrightarrow{\mathbf{a}}^T [\mathbf{z}_i \, \Vert \, \mathbf{z}_j] \right)\)
这里的 \(\Vert\) 表示向量拼接(Concatenation)操作。LeakyReLU是一个非线性激活函数,确保分数可以是一个非零的实数。这个分数 \(e_{ij}\) 是未归一化的,它直接反映了节点 j 对于节点 i 的“原始”重要性。
3. 注意力权重的归一化
计算出的原始注意力分数 \(e_{ij}\) 通常在数值上差异很大且尺度不一。为了便于比较和模型稳定,我们需要对其进行归一化,使得所有对节点 i 有影响的邻居节点(包括 i 自己)的注意力权重之和为 1。GAT 采用 softmax 函数进行归一化。
- Softmax归一化:节点 j 对于节点 i 的最终注意力权重 \(\alpha_{ij}\) 通过 softmax 计算得到:
\(\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}(i)} \exp(e_{ik})}\)
其中,\(\mathcal{N}(i)\) 表示节点 i 的邻居节点集合,通常包括节点 i 自身(这确保了模型在聚合信息时会考虑自身特征)。这个公式使得 \(\sum_{j \in \mathcal{N}(i)} \alpha_{ij} = 1\),且 \(0 \le \alpha_{ij} \le 1\)。
4. 信息聚合与输出
得到归一化的注意力权重后,我们就可以对邻居节点的变换后特征进行加权求和,从而得到节点 i 的新特征表示。
- 加权求和:节点 i 的新特征 \(\mathbf{h}_i'\) 是其所有邻居节点(包括自身)变换后特征 \(\mathbf{z}_j\) 的加权和,权重就是计算出的 \(\alpha_{ij}\):
\(\mathbf{h}_i' = \sigma\left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij} \mathbf{z}_j \right)\)
这里的 \(\sigma\) 是一个非线性激活函数,如 ELU 或 ReLU。
5. 多头注意力(Multi-head Attention)
为了稳定注意力机制的学习过程并增强模型的表达能力(类似于 Transformer 模型),GAT 通常采用多头注意力。
- 原理:我们独立地执行 K 次上述的注意力计算(即 K 个头)。每次计算都会得到一组不同的注意力权重和一个新的节点特征表示。
- 聚合方式:对于最终输出的节点特征,有两种常见的聚合方式:
- 拼接(Concatenation)(常用于中间层):将 K 个头计算出的 K 个特征向量拼接起来。
\(\mathbf{h}_i' = \Vert_{k=1}^{K} \sigma\left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^k \mathbf{W}^k \mathbf{h}_j \right)\) - 平均(Averaging)(常用于输出层):将 K 个头计算出的 K 个特征向量取平均。
\(\mathbf{h}_i' = \sigma\left( \frac{1}{K} \sum_{k=1}^{K} \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^k \mathbf{W}^k \mathbf{h}_j \right)\)
多头注意力使得模型能够从不同的表示子空间中共同关注信息,从而捕获更丰富的关系。
- 拼接(Concatenation)(常用于中间层):将 K 个头计算出的 K 个特征向量拼接起来。
总结
图注意力网络(GAT)通过引入自注意力机制,实现了对图中邻居节点的差异化信息聚合。其核心步骤包括:1) 通过线性变换提升特征表达能力;2) 使用一个简单神经网络计算节点间的原始注意力分数;3) 用 softmax 对分数进行归一化得到注意力权重;4) 根据权重对邻居特征进行加权求和以更新节点表示;5) (可选)使用多头注意力来增强模型鲁棒性和表现力。GAT 不依赖于完整的图结构,适用于归纳学习任务,并且能够隐式地为不同邻居分配不同重要性,是图神经网络领域的一个重要进展。