基础空间GNNs,例如原始的GraphSAGE,通过聚合邻居信息,为从图结构中学习提供了有力的框架。但它们的效用有时会受限于所选聚合函数的类型。常见的聚合器,如均值、最大值或求和池化,各自存在固有的偏向。均值池化可能模糊掉来自特别有影响力的邻居的信息;最大值池化只关注最强的信号;而求和池化则可能受到节点度数的显著影响,从而可能导致不稳定或规模适应性问题。进阶空间GNNs通过引入更精密的聚合机制或结合多种策略来处理这些局限。GraphSAGE变体与改进GraphSAGE框架本身具备灵活性,支持多种聚合函数。研究与实践已对最初的均值、最大池化和LSTM聚合器进行了变体研究:基于注意力的聚合: 尽管图注意力网络(GAT)在前面已介绍,代表一种独特的架构,但在类似GraphSAGE的聚合步骤中引入注意力机制,是一种普遍的改进。这使得模型能够动态学习不同邻居的重要性,在聚合时对它们的贡献进行加权,而非像均值那样统一对待,或仅依据特征强度(如最大值)。聚合器的结合: 有些方法不选择单一聚合器,而是结合多个聚合器的输出(例如,拼接均值和最大池化的结果)。这使得模型可能同时捕获邻域分布的不同侧面。归一化技术: 在聚合之后但在非线性激活和更新步骤之前应用层归一化或批归一化等技术,可以改善训练稳定性和性能,尤其是在更深层模型或邻域大小多样化的图中。这些变体通常旨在提升聚合步骤的表达能力,使生成的节点嵌入更具信息量。然而,一种更具结构性的多聚合视角结合方法,促成了主成分邻域聚合的发展。主成分邻域聚合 (PNA)主成分邻域聚合 (PNA) 直接处理单一、简单聚合器的不足。其主要设想是,任何单一聚合器(均值、最大值、求和、标准差)都不足以获取节点邻域分布中包含的全部信息。PNA提出同时结合多个聚合器,并且,重要的一点是,明确地将度信息作为缩放因子引入。缘由思考其局限:均值/最大值聚合: 它们对邻居数量(度数)不敏感。2个邻居的均值或最大值可能与200个邻居的结果相同,从而丧失可能重要的结构信息。求和聚合: 尽管对度数敏感,但对于高度数节点,其值可能变得过大;对于低度数节点,则可能趋于消失,使训练变得困难。它也未能很好地捕获特征的分布(例如方差)。PNA旨在通过以下方式创建更全面的聚合函数:结合多个聚合器以捕获邻域的不同统计特性。使用基于度数的缩放器来调节聚合信息,使网络感知邻域大小。PNA机制在PNA层中,更新节点 $i$ 的表示 $h_i^{(k)}$ 至 $h_i^{(k+1)}$ 的聚合步骤涉及计算:$$ h_i^{(k+1)} = U \left( h_i^{(k)}, \bigoplus_{\text{agg} \in A, s \in S} s(d_i) \cdot \text{agg}({ m_{ji}^{(k)} \mid j \in \mathcal{N}(i) }) \right) $$此处:$h_i^{(k)}$ 是节点 $i$ 在第 $k$ 层的特征向量。$m_{ji}^{(k)}$ 是从邻居 $j$ 到节点 $i$ 在第 $k$ 层的消息,通常派生自 $h_j^{(k)}$(例如,$m_{ji}^{(k)} = \text{MLP}(h_j^{(k)})$)。$A$ 是一组聚合函数。常见选择包括:均值 ($\mu$):邻居消息的平均值。标准差 ($\sigma$):邻居消息的离散程度。最大值 ($\max$):按元素取最大值消息。最小值 ($\min$):按元素取最小值消息。$d_i = |\mathcal{N}(i)|$ 是节点 $i$ 的入度。$S$ 是一组基于度数 $d_i$ 应用的缩放函数。典型缩放器包括:恒等:$s(d_i) = 1$。对数缩放器(增强):$s(d_i) = \log(d_i + 1)$。增强高度数节点的信号。逆对数缩放器(衰减):$s(d_i) = 1 / \log(d_i + 1)$。相对于低度数节点,衰减高度数节点的信号。$\bigoplus$ 代表一个组合运算符,通常是拼接操作,用于连接所有聚合器-缩放器对的结果。$U$ 是一个更新函数,通常是一个MLP,它将节点的先前表示与聚合和缩放后的邻域信息结合起来。digraph PNA { rankdir=LR; node [shape=box, style=rounded, fontname="Helvetica", fontsize=10]; edge [fontsize=9, arrowsize=0.8]; subgraph cluster_aggregators { label = "聚合器 (A)"; labeljust=l; fontsize=11; bgcolor="#dee2e6"; agg_mean [label="均值 (μ)", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; agg_std [label="标准差 (σ)", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; agg_max [label="最大值", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; agg_min [label="最小值", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; agg_dots [label="...", shape=plaintext]; } subgraph cluster_scalers { label = "缩放器 S(d)"; labeljust=l; fontsize=11; bgcolor="#dee2e6"; scale_id [label="恒等", shape=diamond, style=filled, fillcolor="#b2f2bb"]; scale_log [label="对数(d+1)", shape=diamond, style=filled, fillcolor="#b2f2bb"]; scale_invlog [label="1/对数(d+1)", shape=diamond, style=filled, fillcolor="#b2f2bb"]; scale_dots [label="...", shape=plaintext]; } input [label="{ m_ji | j ∈ N(i) }", shape=folder, style=filled, fillcolor="#ffec99"]; combine [label="组合 ⊕\n(例如,拼接)", shape=invhouse, style=filled, fillcolor="#bac8ff"]; update [label="更新 U", shape=cds, style=filled, fillcolor="#fcc2d7"]; output [label="h_i^(k+1)", shape= Mdiamond, style=filled, fillcolor="#74c0fc"]; h_i_k [label="h_i^(k)", shape= Mdiamond, style=filled, fillcolor="#ffc9c9"]; input -> agg_mean; input -> agg_std; input -> agg_max; input -> agg_min; agg_mean -> combine [label=" x S(d)", style=dashed]; agg_std -> combine [label=" x S(d)", style=dashed]; agg_max -> combine [label=" x S(d)", style=dashed]; agg_min -> combine [label=" x S(d)", style=dashed]; scale_id -> combine [style=dotted, arrowhead=none, headport=w, tailport=e]; scale_log -> combine [style=dotted, arrowhead=none, headport=w, tailport=e]; scale_invlog -> combine [style=dotted, arrowhead=none, headport=w, tailport=e]; combine -> update; h_i_k -> update; update -> output; {rank=same; agg_mean; agg_std; agg_max; agg_min; agg_dots} {rank=same; scale_id; scale_log; scale_invlog; scale_dots} }主成分邻域聚合 (PNA) 的流程。来自邻居的输入消息 $m_{ji}$ 由多个聚合器(均值、标准差、最大值、最小值等)处理。每个聚合结果随后使用节点度数 $d_i$ 的不同函数(恒等、对数、逆对数等)进行缩放。这些缩放后的结果被组合(例如,拼接),然后与节点的先前表示 $h_i^{(k)}$ 一同传递给更新函数 $U$,以生成新的表示 $h_i^{(k+1)}$。优势与考量PNA在各种图机器学习基准测试中常展现出强大的性能,尤其是在那些需要对细微结构差异敏感,或涉及节点度数差异很大的图中。通过明确结合邻域特征分布的多个统计矩并按度数进行缩放,PNA层能够生成比简单空间方法更丰富、更具区分性的节点表示。实现PNA需要计算节点度数并应用多种聚合和缩放操作。PyTorch Geometric 等库提供了优化实现(例如,PNAConv)。每层由于多次聚合而增加的计算成本,是其增强表达能力所做的权衡。比较进阶空间方法GraphSAGE变体: 通常比PNA更容易实现,计算量也更小。GraphSAGE中基于注意力的聚合可以提供动态加权,但它不像PNA那样,以相同的结构化方式明确地包含度数缩放或多个固定聚合器。PNA: 提供了一种规范的方法来结合多个固定聚合器和度信息。它在复杂图结构上可能表现更优,但每层会带来更高的计算开销。其效用取决于所选聚合器和缩放器集合是否适合任务和数据。这些方法间的选择取决于具体问题、图数据的特性(特别是度分布)以及可用的计算资源。对于区分复杂局部结构重要的任务,PNA是一个有力的选项。对于计算成本是主要制约因素的超大型图,简单的GraphSAGE变体可能足够,甚至更可取,或者当它们与有效的采样策略(在第三章中讨论)结合使用时。