1. GraphSAGE 模型概述
GraphSAGE(Graph SAmple and aggreGatE)是 Hamilton 等人于 2017 年提出的归纳式图神经网络框架。它通过采样邻居和聚合特征两个核心步骤,将图结构信息编码为节点表示,解决了传统图神经网络在大规模图和动态图场景下的泛化瓶颈。
1.1 核心思想:采样 + 聚合
GraphSAGE 不再为每个节点学习独立的嵌入向量,而是学习一个聚合函数(Aggregator),该函数能够从节点的局部邻居中归纳出表示。其前向传播过程分为三步:
- 邻居采样:对每个节点,固定采样 K 层邻居,每层采样固定数量的邻居节点(如 S1=25, S2=10),控制计算复杂度。
- 特征聚合:从最外层开始,逐层聚合邻居特征,更新当前节点表示。
- 表示输出:将最终层的节点表示用于下游任务(分类、回归等)。
关键公式(聚合层更新):
hv(k) = σ( W(k) · CONCAT( hv(k-1), AGGk( { hu(k-1), ∀u ∈ N(v) } ) ) )
hv(k) = σ( W(k) · CONCAT( hv(k-1), AGGk( { hu(k-1), ∀u ∈ N(v) } ) ) )
其中 AGG 可以是 Mean、LSTM、Pooling 等聚合器,N(v) 为采样后的邻居集合。
1.2 与 GCN 的核心区别
| 对比维度 | GCN(图卷积网络) | GraphSAGE |
|---|---|---|
| 学习范式 | 直推式(Transductive) | 归纳式(Inductive) |
| 邻居使用 | 全图所有邻居参与卷积 | 固定采样部分邻居 |
| 训练方式 | 需要全图拉普拉斯矩阵 | 基于 mini-batch 训练 |
| 泛化能力 | 无法泛化到未见节点 | 可泛化到新节点/新图 |
| 计算复杂度 | O(|V|·d²),随图规模平方增长 | O(|V|·S1·S2·d²),可控 |
| 适用场景 | 静态小图、全图已知 | 大规模图、动态图、跨图迁移 |
工程启示: GraphSAGE 的 mini-batch 训练方式天然适配分布式部署和 GPU 流水线,而 GCN 的全图计算在节点数超过百万时极易导致显存溢出(OOM)。这是 GraphSAGE 成为工业部署首选的核心原因之一。
1.3 归纳式学习的优势
归纳式学习(Inductive Learning)是 GraphSAGE 区别于早期图神经网络的关键特性。它使得模型能够:
- 处理动态图:新用户、新商品加入推荐系统时,无需重新训练整个模型,只需运行前向传播即可获得新节点表示。
- 跨图迁移:在一个图上训练好的聚合函数,可以直接应用于结构相似的其他图(如不同城市的交通网络)。
- 大规模分布式训练:每个 mini-batch 只涉及局部子图,天然支持数据并行和模型并行。
- 降低存储成本:不需要存储全图邻接矩阵和所有节点的嵌入向量,仅存储模型参数(通常 MB 级别)。
1.4 GraphSAGE 架构总览
下图展示了 GraphSAGE 从原始图输入到节点表示输出的完整流程,包含采样、聚合、前向传播三个核心阶段:
1.5 归纳式 vs 直推式:部署视角对比
从系统部署和运维的角度,归纳式学习带来的优势是决定性的:
| 部署维度 | 直推式(GCN) | 归纳式(GraphSAGE) |
|---|---|---|
| 模型更新频率 | 每次新增节点需全图重训 | 仅需增量前向传播 |
| 推理延迟 | 全图推理,延迟随图规模线性增长 | 子图推理,延迟仅与采样深度相关 |
| 内存占用 | 需加载全图邻接矩阵(O(|V|²)) | 仅加载 mini-batch 子图(O(S₁·S₂)) |
| 水平扩展 | 困难,全图依赖难以分片 | 天然支持,每个 batch 独立计算 |
| 冷启动 | 不支持新节点 | 支持,直接推理即可 |
部署避坑: 虽然 GraphSAGE 支持归纳式学习,但采样策略对推理延迟影响极大。如果采样层数过深(K > 3)或每层采样数过大(S > 50),邻居爆炸会导致推理延迟飙升。生产环境中建议 K=2, S₁=25, S₂=10 作为起点。