【图卷积网络】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∥zj][z_i \| z_j][zi∥zj]):把"中心节点"和"邻居"拼在一起
  • (aaa):可学习向量,相当于一个"关注模板"
  • (a⊤[zi∥zj]a^\top [z_i\|z_j]a⊤[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 / 余弦 / 等等,只是不同的"打分实现"。

相关推荐
Hua-Jay1 小时前
OpenCV联合C++/Qt 学习笔记(二十)----Harri角点检测、Shi-Tomas角点检测及亚像素级别角点位置优化
c++·笔记·qt·opencv·学习·计算机视觉
白小沫1 小时前
TortoiseSVN 的每个菜单功能是什么??
笔记·学习
奶茶精Gaaa1 小时前
精彩bug--批量修改绩效系数溢出报500
学习
叶~小兮1 小时前
K8S-Helm与灰度发布学习笔记
笔记·学习·kubernetes
Hua-Jay1 小时前
OpenCV联合C++/Qt 学习笔记(十九)----图像分割
c++·笔记·qt·opencv·学习
Fanfanaas2 小时前
Linux 系统编程 文件篇 (一)
linux·运维·服务器·c++·学习
笨鸟先飞的橘猫2 小时前
基于Skynet的分布式游戏场景题:大型MMO的跨服战场系统设计
分布式·学习·游戏·面试·lua
leon_teacher2 小时前
HarmonyOS 6 鸿蒙APP应用实战:基于 ArkUI V2 打造儿童古诗学习宝 App 从 0 到 1
学习·华为·harmonyos
Yingjun Mo2 小时前
1. 在线学习引言
学习·算法