图数据在机器学习中的地位越来越重要。社交网络的用户关系、论文引用网络、分子结构,这些都不是传统的表格或序列数据能很好处理的。现实世界中实体之间的连接往往承载着关键信息。
图神经网络(GNN)的出现解决了这个问题,它让每个节点可以从邻居那里获取信息来更新自己的表示。图卷积网络(GCN)是其中的经典代表,但GCN有个明显的限制:所有邻居节点的贡献都是相等的(在归一化之后)。
这个假设在很多情况下并不合理。比如在社交网络中,不同朋友对你的影响程度肯定不一样;在分子中,也不是所有原子对化学性质的贡献都相同。
图注意力网络(GAT)就是为了解决这个问题而设计的。它引入注意力机制,让模型自己学会给不同邻居分配不同的权重,而不是简单地平均处理。用一个比喻来说,GCN像是"听取所有朋友的建议然后求平均",而GAT更像是"重点听那些真正懂行的朋友的话"。
本文文会详细拆解GAT的工作机制,用一个具体的4节点图例来演示整个计算过程。如果你读过原论文觉得数学公式比较抽象,这里的数值例子应该能让你看清楚GAT到底是怎么运作的。
GAT的核心思想
GAT的设计目标很直接:让每个节点能够智能地选择从哪些邻居那里获取信息,以及获取多少信息。
任何图都包含三个基本要素:节点(V)代表图中的实体,边(E)表示实体间的关系,特征(X)是每个节点的属性向量。
GAT层的工作流程可以概括为:输入节点特征,通过线性变换投影到新的特征空间,计算节点间的注意力分数,用softmax进行归一化,最后按注意力权重聚合邻居信息得到新的节点表示。
我们用一个简单的4节点图来演示这个过程。节点A、B、C、D的连接关系如下图所示:
为了便于手工计算,我们设定每个节点的特征维度为3:
节点A:[1.0, 0.5, 0.2]
节点B:[0.9, 0.1, 0.3]
节点C:[0.4, 0.7, 0.8]
节点D:[0.2, 0.3, 0.9]
把这些特征向量按行排列,就得到了特征矩阵 X ∈ ℝ⁴ˣ³:
矩阵的每一行对应一个节点,每一列对应一个特征维度。我们有4个节点,每个节点3个特征,所以是4×3的矩阵。
线性变换:特征投影
GAT计算注意力之前,需要先对节点特征进行线性变换。这一步用共享的权重矩阵W将原始特征投影到新的特征空间。
线性变换的作用有两个:一是让模型能学到更好的特征表示,二是可以调整特征维度来适应不同任务的需要。数学表达式是:
我们设定原始特征维度F=3,变换后的维度F′=2,权重矩阵W的值为(实际应用中这些权重是随机初始化然后训练得到的):
以节点A为例,它的原始特征向量是:
与权重矩阵W相乘得到:
对所有节点进行同样的变换:
变换后的特征矩阵是:
现在每个节点都从3维特征变成了2维特征。
注意力分数计算
有了变换后的特征,接下来要计算注意力分数。这些分数反映了在信息聚合时,一个节点对另一个节点的重要程度。
对于边(i,j),注意力分数的计算公式是:
这里eij可以理解为邻居j对节点i的"原始重要性分数"。
设定变换后的特征维度F′=2,注意力向量a为(实际中这个向量也是训练学习得到的):
使用前面得到的变换特征:
计算边A→B的注意力分数。首先将节点A和B的特征连接起来:
然后与注意力向量a做点积:
0.5(0.26) + 0.6(0.77) + 0.7(0.20) + 0.8(0.59) = 1.204
应用LeakyReLU激活函数(由于结果是正数,值保持不变):
用同样的方法计算其他边的注意力分数:
到这里得到的是未归一化的注意力分数,它们可以是任意实数。下一步需要用softmax对这些分数进行归一化,让它们变成类似概率的形式,便于比较和使用。
更多案例:
vk.com/topic-232893491_55286496
vk.com/topic-232893500_54843508
vk.com/topic-232893488_54258247
vk.com/topic-232893494_53776735
vk.com/topic-232893492_54477835
vk.com/topic-232893486_54128716
vk.com/topic-232893499_54437457
vk.com/topic-232893495_53685925
vk.com/topic-232893485_53685924
vk.com/topic-232893483_54080043
vk.com/topic-232893487_54971955
vk.com/topic-232893489_54437454
vk.com/topic-232893497_54971953
vk.com/topic-232893496_54128715
vk.com/topic-232893493_54080040
vk.com/topic-232893484_53776731
vk.com/topic-232893490_54843503
vk.com/topic-232893491_55286488
vk.com/topic-232893500_54843500
vk.com/topic-232893488_54258237
vk.com/topic-232893494_53776727
vk.com/topic-232893492_54477829
vk.com/topic-232893486_54128711
vk.com/topic-232893499_54437448
vk.com/topic-232893495_53685917
vk.com/topic-232893485_53685916
vk.com/topic-232893483_54080034
vk.com/topic-232893487_54971942
vk.com/topic-232893489_54437446