2. GraphSAGE 核心原理回顾:采样与聚合机制、归纳式学习、无监督与有监督损失函数
GraphSAGE(Graph SAmple and aggreGatE)是图神经网络从直推式(Transductive)走向归纳式(Inductive)学习的里程碑方法。其核心思想是:通过邻居采样固定计算子图,再通过聚合函数融合邻居信息,从而为未见节点生成嵌入。本节从采样、聚合、归纳学习范式、损失函数四个维度展开回顾。
2.1 邻居采样机制:固定规模、随机采样
全图邻居聚合在大规模图上计算量爆炸。GraphSAGE 提出固定规模采样:对每个节点,分别采样 K 阶邻居,每阶采样固定数量(如 S₁=25, S₂=10)。
- 采样阶数 K:通常 K=2,兼顾感受野与计算效率。
- 采样数量 Sₖ:若节点邻居数 < Sₖ,则重复采样(有放回);若 > Sₖ,则随机采样(无放回)。
- 计算子图:每个 Batch 只保留被采样到的节点及其边,形成有向计算图。
工程要点:采样过程必须在 CPU 或 GPU 异步流水线中完成,避免阻塞前向传播。推荐使用 DGL 的
dgl.dataloading.NeighborSampler 或 PyG 的 NeighborLoader。
避坑:采样数量过大(如 S₁>50)会导致计算子图指数膨胀,显存溢出;过小(如 S₁<5)则感受野不足,模型精度下降。建议从 (25,10) 开始调参。
2.2 聚合函数:三种经典设计
聚合函数将邻居节点的嵌入集合融合为固定维度的向量。GraphSAGE 提供了三种可微聚合器:
| 聚合器 | 公式(简化) | 特点 | 适用场景 |
|---|---|---|---|
| Mean 聚合 | hN(v) = mean({hu, ∀u∈N(v)}) | 对称、低方差、计算快 | 节点度数均匀、特征平滑 |
| LSTM 聚合 | hN(v) = LSTM(permute({hu})) | 非对称、表达能力更强 | 序列化邻居、需排序 |
| Pooling 聚合 | hN(v) = max({W·hu + b}) | 可学习、捕捉最显著信号 | 异构图、多类型邻居 |
聚合后,节点自身嵌入与邻居嵌入拼接,再经过全连接层和非线性激活:
h_v^{(k)} = σ( W^{(k)} · CONCAT( h_v^{(k-1)}, h_{N(v)}^{(k)} ) )
h_v^{(k)} = h_v^{(k)} / || h_v^{(k)} ||₂ # L2 归一化
2.3 归纳式学习:从静态图到动态泛化
传统 GCN 需要全图拉普拉斯矩阵,无法处理新节点。GraphSAGE 的归纳式学习核心在于:
- 参数共享:聚合函数参数 W⁽ᵏ⁾ 在所有节点间共享,不依赖节点 ID。
- 特征驱动:仅依赖节点特征和局部拓扑结构,新节点只需提供特征即可生成嵌入。
- 推理流程:训练时学习聚合参数 → 推理时对新节点执行相同采样+聚合流程。
注意:归纳式学习要求训练集和测试集的节点特征分布一致。若新节点特征分布偏移(如新增商品类目),需先做特征对齐或微调。
2.4 损失函数:无监督与有监督双模式
GraphSAGE 支持两种训练范式,根据标签可用性选择:
2.4.1 无监督损失函数
基于负采样的图对比学习,使相邻节点嵌入相似,远距离节点嵌入相异:
J_G(z_v) = -log( σ( z_v^T · z_u ) ) - Q · E_{u_n ~ P_n(u)} [ log( σ( -z_v^T · z_{u_n} ) ) ]
- z_v:节点 v 的嵌入
- u:与 v 固定步长内共现的邻居(正样本)
- uₙ:负采样节点,分布 Pₙ(u) 通常为节点度数的 3/4 次方
- Q:负样本数量,通常 Q=5~20
2.4.2 有监督损失函数
根据下游任务类型直接优化:
| 任务类型 | 损失函数 | 输出层 |
|---|---|---|
| 节点分类(多分类) | 交叉熵损失 CrossEntropy | Softmax |
| 节点分类(二分类) | BCEWithLogitsLoss | Sigmoid |
| 链接预测 | BCE + 负采样 | 点积 + Sigmoid |
| 回归任务 | MSE / MAE | 线性层 |
实践建议:在标签稀疏的场景下,先使用无监督损失预训练嵌入,再在下游任务上微调有监督层,通常能提升 3%~8% 的 AUC。
2.5 本章小结
GraphSAGE 通过固定规模邻居采样解决了大规模图的计算瓶颈,通过可微聚合函数实现了灵活的邻居信息融合,通过归纳式参数共享支持动态图推理,通过双模式损失函数适配不同标签条件。这些机制共同构成了 GraphSAGE 在生产环境中上线的基础。