(论文速读)GATv2:你的图注意力网络其实并不“注意”
论文题目:HOW ATTENTIVE ARE GRAPH ATTENTION NETWORKS?(图形注意力网络的注意力有多集中?)
会议:ICLR 2022
摘要:图注意网络(GATS)是最流行的GNN体系结构之一,被认为是利用图进行表征学习的最先进的体系结构。在GAT中,每个节点关注其邻居,给出它自己的表示作为查询。然而,在本文中,我们证明了GAT计算的关注度非常有限:关注度分数的排名是无条件的,取决于查询节点。我们正式将这种受限的注意定义为静态注意,并将其与严格意义上更具表现力的动态注意区分开来。由于GAT使用静态注意机制,因此存在GAT无法表达的简单图形问题:在受控问题中,我们证明静态注意阻碍GAT甚至无法匹配训练数据。为了消除这一限制,我们通过修改操作顺序引入了一个简单的修复方法,并提出了GATv2:一种严格比GAT更具表现力的动态图注意变量。我们进行了广泛的评估,表明GATv2在12个OGB和其他基准测试中的性能优于GAT,而我们的参数成本与其相当。我们的代码可在https://github.com/tech-srl/how_attentive_are_Gats.GATv2作为PyTorch几何库、深度图形库和TensorFlow GNN库的一部分提供。
你的图注意力网络其实并不"注意"——GATv2论文详解
一、引言:一个让人意外的发现
图注意力网络(Graph Attention Network,GAT)自2018年由Veličković等人提出以来,迅速成为图神经网络(GNN)领域最流行的架构之一,被认为是图表示学习的最优架构,并被PyTorch Geometric、DGL、TensorFlow GNN等主流库作为默认实现。
GAT的核心思想很直观:每个节点在聚合邻居信息时,根据自身表示作为"查询"(query),对不同邻居赋予不同的注意力权重,从而自适应地选择最相关的邻居。这听起来和Transformer、Bahdanau注意力机制一脉相承。
然而,这篇论文提出了一个令人震惊的问题:
GAT真的在做"注意力"吗?
答案是:并没有。至少不是我们以为的那种注意力。
二、核心问题:GAT只能计算"静态注意力"
2.1 什么是动态注意力 vs 静态注意力?
论文给出了严格的形式化定义:
静态注意力(Static Attention):对于给定的键向量集合,存在一个"得分最高的键",无论查询是什么,这个键的得分永远最高。也就是说,注意力的排名与查询无关。
动态注意力(Dynamic Attention):对于任意一种"查询→键"的映射关系,都存在参数使得每个查询能选出自己对应的键。也就是说,不同的查询可以关注不同的键。
直观地理解:静态注意力是"全图有一个公认的最重要节点",动态注意力是"每个节点根据自身情况选择最相关的邻居"。
【配图:论文 Figure 1——左图(GAT的静态注意力热力图)和右图(GATv2的动态注意力热力图)对比。左图中所有查询节点q0~q9的注意力几乎都集中在k8上,曲线几乎重叠;右图中每个查询节点各自关注不同的键,热力图呈近似单位矩阵形状。】
2.2 GAT为什么只能计算静态注意力?(定理1)
回顾GAT的注意力评分函数(Equation 2):
论文证明(定理1):将a拆分为[a1 ‖ a2],则:
e(hi, hj) = LeakyReLU( a1^T·W·hi + a2^T·W·hj )关键在于:a2^T·W·hj这一项完全不依赖查询节点 hi。因此,存在一个节点j_max使得a2^T·W·hj对所有 j 中取到最大值,由于 LeakyReLU 和 softmax 都是单调函数,j_max对所有查询节点的注意力得分也都是最高的。
换句话说:GAT中,hi 只影响注意力分布的"锐利程度"(sharpness),而不影响注意力的排名(ranking)。全图只有一个全局排名,与查询无关——这正是静态注意力的定义。
多头注意力也不能改变这一本质:每个头各自有一个固定排名,不同头的排名可能不同,但每个头内部仍然是静态的。
三、解决方案:GATv2——仅改变操作顺序
3.1 一个极简的修复
GAT问题的根源在于:线性变换W和向量a被连续应用,两者可以合并为一个线性层,导致 hi 和 hj 的贡献在非线性激活之前就已经解耦。
修复方法极其简单——调换非线性激活的位置:
| 模型 | 评分函数 |
|---|---|
| GAT(Veličković et al., 2018) | e(hi, hj) = LeakyReLU( a^T · [W·hi ‖ W·hj] ) |
| GATv2(本文提出) | e(hi, hj) = a^T · LeakyReLU( W · [hi ‖ hj] ) |
GATv2将非线性激活 LeakyReLU 移到了a^T之前、拼接[hi ‖ hj]之后。这使得 W 先作用于拼接向量,LeakyReLU 在 hi 和 hj 的混合结果上引入非线性,之后再由a^T计算标量得分。
这样,评分函数本质上变成了一个对(hi, hj)联合输入的 MLP,可以近似任意连续函数(万能近似定理),从而实现真正的动态注意力。
3.2 GATv2计算动态注意力(定理2)
论文证明(定理2):GATv2对任意节点表示集合都能计算动态注意力。证明思路是:
- 对任意目标映射
φ: [n]→[n],构造一个目标函数 g("选中"的 (i, φ(i)) 对得分为1,其余为0); - 由于 GATv2 的评分函数本质上是一个作用于
[hi ‖ hj]的 MLP,由万能近似定理,可以以任意精度近似 g; - 因此存在参数使得
e(hi, hφ(i)) > e(hi, hj)对所有j ≠ φ(i)成立,即实现了动态注意力。
3.3 复杂度分析:几乎没有额外代价
GATv2与GAT的时间复杂度完全相同,均为 O(|V|dd' + |E|d')。
参数量上,GATv2的 W 矩阵作用于拼接向量,官方参数量略多(d' + 2dd'),但论文在所有实验中通过约束W = [W' ‖ W']将参数量控制为与GAT相当(d' + dd'),以排除参数量差异对实验结果的影响。
四、实验结果
4.1 合成基准:DictionaryLookup——GAT的"阿喀琉斯之踵"
论文设计了一个专门测试动态注意力能力的合成任务:DictionaryLookup。
任务设置:一个完全二部图,底层为 k 个"键节点"(每个有字母属性A/B/C...和数值1/2/3...),顶层为 k 个"查询节点"(只有字母属性)。目标是让每个查询节点根据属性匹配并预测对应键节点的数值。每张图的属性→数值映射不同,因此模型必须根据查询动态选择正确的键。
【配图:论文 Figure 2——DictionaryLookup问题示意图,展示k=4时的二部图结构。】
实验结果:
【配图:论文 Figure 3——不同k值下各模型的训练/测试准确率曲线。】
- GAT(单头,GAT₁ₕ):对任意 k 值,无论训练多少轮、尝试何种训练方法,均无法拟合训练集,准确率始终在低水平徘徊。
- GAT(8头,GAT₈ₕ):能拟合训练集,但严重过拟合,测试准确率差。
- GATv2(单头):对所有 k 值(包括k=100),均轻松达到100%训练准确率和100%测试准确率。
附录D.1还显示,GIN(被认为比GAT更具表达力的模型)在 k≥20 时同样无法完美拟合训练集,而GATv2依然轻松应对。
【配图:论文 Figure 6(附录)——GATv2 vs GIN在DictionaryLookup上的对比,GATv2在k=100仍达100%精度,GIN从k=20起开始失败。】
这一结果清晰揭示了GAT静态注意力的根本局限:它根本无法表达需要动态选择邻居的问题。
4.2 鲁棒性实验:动态注意力更能抵抗噪声
论文测试了模型对结构噪声的鲁棒性:在原始图 G=(V,E) 中随机加入比例为 p 的噪声边,观察测试准确率随噪声比例 p 增大的变化。
【配图:论文 Figure 4(正文)或 Figure 9(附录,含p值)——ogbn-arxiv 和 ogbn-mag 上,GATv2 vs GAT随噪声比例变化的准确率曲线,以及各点的统计显著性p值。】
在 ogbn-arxiv 和 ogbn-mag 两个数据集上:
- 随着噪声比例 p 从0增大到0.5,两个模型准确率均下降,但 GATv2 的下降幅度明显更小;
- 所有差异均具有统计显著性(p值均 < 0.001)。
论文假设:GAT由于静态注意力,无法区分真实边和噪声边(因为它对源节点和目标节点分别打分,而非联合打分);而GATv2的动态注意力能够联合评估节点对,从而更好地抑制噪声边的影响。
4.3 程序理解任务:VarMisuse
VarMisuse是一个对程序中变量误用进行归因的归纳式节点预测任务,涉及11种句法和语义交互类型,具有复杂的节点间关系。
论文直接使用了Brockschmidt (2020)对GAT进行30组超参数搜索后得到的最优超参数,无需为GATv2另行调参,公平性有保证。
【配表:论文 Table 5(Figure 5)或 Table 10(附录)——VarMisuse上各模型在SeenProj和UnseenProj测试集上的准确率(均值±标准差,5次运行)。】
- GATv2在SeenProj测试集上准确率为88.0±1.1,UnseenProj测试集上为82.8±1.7,均优于所有对比模型(GCN、GIN、GAT、DPGAT);
- 在泛化性更强的UnseenProj集上,GATv2相比GAT提升了1.6%(p值=0.049),显示出GATv2在应对未见过的程序项目时的强泛化能力。
4.4 节点预测:OGB基准
在OGB的四个节点预测数据集(ogbn-arxiv、ogbn-products、ogbn-mag、ogbn-proteins)上,对比了GATv2、GAT、GCN、GraphSAGE。
【配表:论文 Table 1——四个OGB节点预测数据集上各模型的准确率和ROC-AUC(10次运行±标准差)。】
核心结论:
- 所有数据集、所有设置下,GATv2均优于GAT;
- 在ogbn-arxiv、ogbn-products、ogbn-mag上,单头GATv2甚至超过了8头GAT;
- 在ogbn-proteins上,增加注意力头数对GAT带来显著提升(从70.77到78.63),而GATv2单头即可获得接近最优的效果(77.23),展示了单头动态注意力的效率优势。
【配表:论文 Table 15(附录,统计显著性)——30次运行下GATv2 vs GAT的差异p值,ogbn-arxiv: p=0.0022,ogbn-products: p<0.0001,ogbn-mag: p=0.0018,ogbn-proteins: p=0.0349,均显著。】
4.5 图预测:QM9量子化学数据集
QM9数据集包含约13万个分子图,目标是回归预测13个量子化学属性。论文同样沿用Brockschmidt (2020)500组超参数搜索后的GAT最优配置,直接用于GATv2。
【配表:论文 Table 2——QM9数据集上13个属性的平均误差率(5次运行,越低越好)以及相对GAT的综合误差变化。】
- GATv2(8头)在13个预测目标上综合平均误差比GAT(8头)降低了11.5%;
- GAT(8头)在属性6上误差高达52.39,方差极大(±42.58),说明其训练不稳定;而GATv2(8头)在该属性上误差仅为16.37(±0.97),大幅改善;
- 部分属性上GCN或GIN表现更好,作者认为这些属性可能不需要注意力机制。
【配表:论文 Table 17(附录)——20次运行下GATv2 vs GAT在QM9各属性上的统计显著性p值,大多数属性 p<0.05。】
4.6 链路预测
在OGB的两个链路预测数据集(ogbl-collab、ogbl-citation2)上同样进行了对比。
【配表:论文 Table 3——Hits@50和MRR指标(10次运行±标准差)。】
- GATv2在两个数据集上均优于GAT;
- 但非注意力模型GraphSAGE在ogbl-collab上表现最好,作者推测这些数据集中节点平均度数较低(ogbl-collab仅8.2,ogbl-citation2仅20.7),注意力机制的优势在邻居较少时不明显;
- 作者假设:动态注意力在高度数(多邻居)场景下优势最为突出,如ogbn-products(平均度50.5)和ogbn-proteins(平均度597)。
4.7 与Transformer风格注意力(DPGAT)的对比
论文还与点积注意力(DPGAT,即e(hi, hj) = (hi^T Q)(hj^T K)^T / √dk)进行了对比,并从理论上证明:
- 当节点表示线性无关时,DPGAT可以计算动态注意力(定理3);
- 但当节点表示线性相关时,DPGAT存在某些键永远无法被"选中"的情况,因此严格弱于GATv2;
- GATv2对任意节点表示集合都能计算动态注意力,无此限制。
实验结果(Table 10, 11, 12)也印证了这一点:GATv2在VarMisuse的UnseenProj集上(82.8)明显优于DPGAT(81.5),在ogbn-products上(80.63 vs 76.49)差距更为显著。
五、讨论:什么时候该用GATv2?
论文给出了实用性建议:
- 理论上更强不代表实践中总是更好:对于"过于简单"的任务,更强的模型可能反而过拟合;
- 判断依据:如果问题中节点存在全局统一的重要性排名(即所有查询都应关注同一类邻居),GAT足够;如果不同节点需要关注不同邻居,则应选用GATv2;
- 实际建议:节点间交互越复杂、图的节点度数越高,GATv2的优势越明显。
GAT的原作者Veličković也在Twitter上确认:GAT最初是针对Cora、Citeseer、PubMed等"易过拟合"的小型数据集设计的,这些数据集可能本身存在静态的全局节点重要性排名。新的、更具挑战性的基准测试需要更强的注意力机制。
六、总结
| 维度 | GAT | GATv2 |
|---|---|---|
| 注意力类型 | 静态(排名与查询无关) | 动态(每个查询独立排名) |
| 核心公式差异 | 先线性后非线性 | 先非线性后线性 |
| 时间复杂度 | O(|V|dd' + |E|d') | O(|V|dd' + |E|d')相同 |
| 参数量 | 2d' + dd' | d' + dd'(实验中约束) |
| 是否万能近似 | 否 | 是 |
| DictionaryLookup | 单头完全失败 | 单头100%准确 |
| 12项基准测试 | 基准线 | 全面超越GAT |
这篇论文用一个极简的操作顺序调整,揭示并修复了过去4年间被广泛使用的GAT的根本性缺陷。其贡献不仅在于提出了GATv2,更在于提供了分析图注意力机制表达力的形式化框架(静态/动态注意力的定义),以及一个可复用的合成测试基准DictionaryLookup。
如果你的项目正在使用GAT,可以直接替换为GATv2——PyTorch Geometric、DGL、TensorFlow GNN均已支持:
# PyTorch Geometric from torch_geometric.nn.conv.gatv2_conv import GATv2Conv # DGL from dgl.nn.pytorch import GATv2Conv # TensorFlow GNN from tensorflow_gnn.graph.keras.layers.gat_v2 import GATv2Convolution相同的参数量、相同的时间复杂度、更强的表达力——没有理由不升级。