【图卷积网络】GAT(Graph Attention Network,图注意力网络),可学习的打分 + 归一化加权求和’构成了注意力

GAT(Graph Attention Network,图注意力网络)是在 GCN 之后提出的 。它由 Petar Veličković 等人于 2017 年 提出(2018 年发表于 ICLR),核心动机正是为了解决你刚才提到的 GCN 的局限性------即 GCN 的聚合权重是固定的、与特征无关的 (αij∝1/didj\alpha_{ij} \propto 1/\sqrt{d_i d_j}αij∝1/didj ),而 GAT 将其升级为数据驱动的、可学习的注意力权重

1 GAT 单层的具体计算公式如下:

1. 线性变换

首先,对每个节点的输入特征 hih_ihi 做一个共享的线性变换(映射到新的特征空间):
zi=Whiz_i = W h_izi=Whi

2. 计算注意力系数(打分)

对于任意相邻节点对 (i,j)(i, j)(i,j),计算原始注意力分数 eije_{ij}eij。这里是把节点 iii 和邻居 jjj 变换后的特征**拼接(concat)**起来,再通过点积和可学习向量 aaa、LeakyReLU 激活函数来打分:
eij=LeakyReLU(a⊤zi ∥ zj)e_{ij} = \text{LeakyReLU}\left( a^\top z_i \\,\\\|\\, z_j \right)eij=LeakyReLU(a⊤zi∥zj)

3. 归一化得到权重

使用 softmax 对节点 iii 的所有邻居(含自环)的分数进行归一化,得到最终的聚合权重 αij\alpha_{ij}αij(值在 0~1 之间,和为 1):
αij=exp⁡(eij)∑k∈N(i)∪{i}exp⁡(eik)\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}(i) \cup \{i\}} \exp(e_{ik})}αij=∑k∈N(i)∪{i}exp(eik)exp(eij)

4. 加权聚合(输出)

最后,将邻居节点(含自身)变换后的特征按学习到的权重 αij\alpha_{ij}αij 加权求和,并通过激活函数 σ\sigmaσ(如 ELU)得到节点 iii 的新特征:
hi′=σ(∑j∈N(i)∪{i}αijzj)h'i = \sigma\left( \sum{j \in \mathcal{N}(i) \cup \{i\}} \alpha_{ij} z_j \right)hi′=σ j∈N(i)∪{i}∑αijzj


与 GCN 的核心区别一目了然:

  • GCN :αij\alpha_{ij}αij 是固定 的 1/d^id^j1/\sqrt{\hat{d}_i \hat{d}_j}1/d^id^j ,只取决于图拓扑结构,不随特征变化。
  • GAT :αij\alpha_{ij}αij 是动态 计算出来的,依赖于 hih_ihi 和 hjh_jhj 的特征内容(通过 aaa 和 WWW 学习),能自动给不同邻居分配不同的重要性。

此外,GAT 通常还会引入 多头注意力(Multi-head attention),即并行运行多个上述注意力机制然后拼接或取平均,以稳定学习过程,这和 Transformer 的设计哲学也是一致的。

2 '可学习的打分 + 归一化加权求和'构成了注意力

1)注意力的"本质结构"是什么?

任意注意力机制,抽象来说只有三步:

  1. 打分(score) :给每对 ((i,j)(i,j)(i,j)) 算一个原始分数 (eije_{ij}eij)
    → 表示"(i) 有多关注 (j)"
  2. 归一化(normalize) :把分数变成权重 (αij\alpha_{ij}αij)(如 softmax)
    → 保证"关注的分配"是一个分布
  3. 加权求和(aggregate)
    hi′=∑jαijvj h_i'=\sum_j \alpha_{ij} v_j hi′=j∑αijvj

只要满足这三点,它就是注意力(不管打分怎么来的)。


2)GAT 里的"点积 + 可学习向量"在做啥?

GAT 的原始形式是:

eij=LeakyReLU(a⊤zi ∥ zj) e_{ij}= \mathrm{LeakyReLU}\big(a^\top z_i\\,\\\|\\,z_j\big)eij=LeakyReLU(a⊤zi∥zj)

这里的含义是:

  • (zi=Whi,  zj=Whjz_i=W h_i,\; z_j=W h_jzi=Whi,zj=Whj):先把节点特征映射到新空间
  • (zi∥zjz_i \\\| z_jzi∥zj):把"中心节点"和"邻居"拼在一起
  • (aaa):可学习向量,相当于一个"关注模板"
  • (a⊤zi∥zja^\top z_i\\\|z_ja⊤zi∥zj):衡量"在当前模板下,(j) 对 (i) 有多重要"

👉 所以这本质上就是一个可学习的相似度/相关性打分函数


3)那"点积"为什么常用来做打分?

在 Transformer 里你看到的是:

eij=qi⊤kj e_{ij}=q_i^\top k_j eij=qi⊤kj

这其实也是一种"可学习打分":

  • (qi=xiWQ,  kj=xjWKq_i=x_i W_Q,\;k_j=x_j W_Kqi=xiWQ,kj=xjWK) 已经把特征投影到"查询/键"空间
  • 点积衡量:在这个空间里,(qiq_iqi) 与 (kjk_jkj) 方向有多一致
  • 方向越一致 → 分数越高 → 关注越多

点积不是必须的,只是:

  • 计算快(矩阵乘法)
  • 有清晰几何含义(余弦相似度变体)
  • 配合 scale((dk\sqrt{d_k}dk ))和 softmax 很稳定

4)为什么"可学习向量 / 可学习投影 + 打分"就算注意力?

因为:

  • 固定权重(如 GCN 的 (1/didj1/\sqrt{d_i d_j}1/didj ))=无注意力
  • 数据依赖权重(如 GAT / Transformer)=有注意力
  • 如果这个权重是通过网络从数据里学出来的,尤其用于对邻居/词分配不同重要性,那就正好是注意力想做的事

所以可以这样记:

固定聚合 → GCN
数据驱动聚合权重 → 注意力
邻居受限 + 可学习打分 → GAT
全局 + 可学习打分 → Transformer


5)一句话总结

用可学习方式给每对 ((i,j)(i,j)(i,j)) 算一个分数,再 softmax 成权重,再加权求和------这才是注意力。*

点积 / 拼接+MLP / 余弦 / 等等,只是不同的"打分实现"。

相关推荐
小拉达不是臭老鼠3 小时前
Unity学习_ScriptableObject
学习·unity
MartinYeung53 小时前
[论文学习]LLM 与其他 AI 模型的隐私考量:输入与输出隐私框架方法
人工智能·学习
(●—●)橘子……4 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
AOwhisky6 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
try2find7 小时前
Agent学习之补充my_plan_solve_agent
学习
想你依然心痛7 小时前
HarmonyOS 6(API 23)实战:打造“光码智学舱“——AI编程学习新范式
学习·ar·ai编程·harmonyos·智能体
一口吃俩胖子9 小时前
【脉宽调制DCDC功率变换学习笔记023】渐进分析法
笔记·学习
m0_377108149 小时前
pid学习
学习
爱喝水的鱼丶9 小时前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
TE-茶叶蛋10 小时前
学习GitNexus中优雅的自动滚动:useAutoScroll Hook 实现
学习