趋近智
图神经网络中的一个挑战是如何有效地聚合来自节点邻域的信息。许多现有的方法,如图卷积网络 (GCN) 和 GraphSAGE,以固定或统一的权重来处理每个邻居。例如,GCN 层根据节点度分配权重,而使用均值聚合的 GraphSAGE 层则平等地对待每个邻居。这引发了一个问题:对于定义中心节点的作用或属性,所有的邻居都同样吗?
在许多图中,答案是否定的。例如,在引用网络中,来自一篇开创性论文的引用通常应该比来自一篇普通论文的引用具有更高的权重。图注意力网络 (GAT) 通过引入一种机制来解决这个问题,该机制允许模型学习不同邻居的相对权重。GAT 不使用固定的聚合权重,而是为每条边计算注意力系数,从而学习节点在聚合过程中应该对每个邻居投入多少“注意力”。
GAT 层的核心是直接应用于图结构的自注意力机制。这个过程通过关注邻居来计算每个节点的更新特征。该操作可以分为几个不同的步骤。
首先,与其他 GNN 类似,对每个节点的特征向量 应用一个由权重矩阵 参数化的共享线性变换。这将特征投影到一个可能不同的维度空间,使模型能更好地学习区分性属性。
接着,对于从邻居 到目标节点 的每条边,模型会计算一个原始的、未归一化的注意力得分 。这个得分表示节点 的特征对节点 的权重。这通常由一个简单的单层前馈网络计算,该网络由权重向量 参数化,并以两个节点的变换后特征向量拼接作为输入。
这里, 表示拼接。应用 LeakyReLU 激活函数是为了引入非线性。这种机制在图中所有的边上共享,这意味着模型学习的是一个计算注意力的通用函数。
这些原始得分 在不同的邻域之间不具备直接可比性。为了解决这个问题,我们对节点的所有邻居 使用 softmax 函数进行归一化。这会将原始得分转换为注意力系数 的概率分布。
生成的系数 代表了学习到的邻居 对节点 的权重。
最后,节点 的更新特征向量(记作 )被计算为邻居变换后特征的加权和,使用注意力系数作为权重。通常会对结果应用激活函数 (如 ReLU)。
这整个过程构成了一个 GAT 层。通过学习注意力权重 ,模型可以动态调整每个邻居的影响,与 GCN 的静态聚合相比,这在表达能力上有了明显的提升。
GAT 层为指向目标节点的每条边计算注意力系数 ()。这些系数决定了每个邻居对目标节点更新表示的贡献权重。在此图中,邻居 具有最高的注意力权重。
为了使学习过程更稳定,并允许模型捕捉不同类型的关系,GAT 采用了多头注意力机制。这类似于卷积神经网络使用多个卷积核来捕捉不同的特征(如垂直边缘、水平边缘、颜色)。
在多头注意力中,几个独立的注意力机制(或称“头”)并行执行注意力计算。每个头都有自己的一组参数(第 个头的 和 ),并计算自己的一组注意力系数 。
每个头都会生成一个嵌入。然后将这些嵌入组合起来形成最终输出。对于中间层,通常将输出进行拼接。如果我们使用 个注意力头,公式如下:
其中 再次表示拼接。这产生的输出特征向量的大小是单个头输出的 倍。
对于网络的最后一层,拼接不再合适。相反,通常在应用最终激活函数之前对各头的输出求平均值。
使用多头注意力有助于模型学习更丰富的特征,因为每个头可以专注于邻域结构和特征空间的不同方面。
图注意力网络具有以下优点:
主要的权衡在于计算成本。与 GCN 或均值聚合的 GraphSAGE 中简单的聚合相比,为每条边计算注意力系数会增加开销,尤其是在非常稠密的图中。然而,性能的提升通常证明了这种额外成本是值得的。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造