4. GraphSAGE 核心原理:采样邻居节点、聚合函数与节点嵌入生成
GraphSAGE(Graph SAmple and aggreGatE)是面向大规模图数据的归纳式(Inductive)表示学习框架。与 Transductive 方法(如 GCN)不同,GraphSAGE 不依赖全图拉普拉斯矩阵,而是通过 采样邻居 + 聚合函数 生成目标节点的嵌入,天然适配实时推理场景。
4.1 采样邻居节点:固定大小、局部感知
GraphSAGE 的核心思想是:每个节点的最终嵌入由其局部邻域结构决定。为避免全图遍历,算法对每个节点的邻居进行 固定大小采样。
采样策略要点:
- 固定采样数 K:对每个节点,从其一阶邻居中随机采样 K 个节点(若邻居数不足 K,则重复采样;若超过 K,则随机抽取)。
- 多层采样:第 1 层采样一阶邻居,第 2 层采样一阶邻居的邻居(二阶),以此类推。层数 L 决定了感受野半径。
- 计算复杂度可控:每层采样数固定,总计算量 O(L × K),不随图规模增长而爆炸。
实时推理启示: 在欺诈评分接口中,每次请求只需对目标节点(如当前交易用户)进行局部采样,无需加载全图邻接矩阵,响应时间可控制在毫秒级。
4.2 聚合函数:Mean / LSTM / Pooling
采样完成后,GraphSAGE 使用聚合函数将邻居信息融合到目标节点。不同聚合函数适用于不同图结构特征:
| 聚合函数 | 计算方式 | 适用场景 | 实时推理性能 |
|---|---|---|---|
| Mean Aggregator | 对邻居节点特征逐元素取均值 | 同质图、邻居特征分布均匀 | 最快(O(d)) |
| LSTM Aggregator | 将邻居序列输入 LSTM,取最后隐状态 | 序列化邻居、时序图 | 较慢(需排序+RNN) |
| Pooling Aggregator | 对每个邻居做 MLP + 逐元素 max/mean pooling | 异质图、邻居特征差异大 | 中等(O(d × K)) |
工程选型建议: 在实时欺诈评分接口中,优先选择 Mean Aggregator 或 Pooling Aggregator。LSTM 聚合器因序列依赖和 RNN 计算开销,通常只在交易时序特征明显的场景下使用。
4.3 节点嵌入生成:前向传播过程
GraphSAGE 的前向传播是一个 逐层聚合-更新 的迭代过程。以 2 层 GraphSAGE 为例:
- 初始化:每个节点 v 的初始特征 hv(0) = xv(原始特征向量)。
- 第 1 层(k=1):对每个节点 v,聚合其一阶邻居特征 → hN(v)(1),再与自身特征拼接 → hv(1)。
- 第 2 层(k=2):对每个节点 v,聚合其一阶邻居的 第 1 层输出 → hN(v)(2),再更新 → hv(2)。
- 输出:hv(2) 即为节点 v 的最终嵌入向量 zv。
# GraphSAGE 前向传播伪代码(2层)
def forward(graph, features, weights, K=3):
h = {v: features[v] for v in graph.nodes} # h^(0)
for layer in [1, 2]:
h_next = {}
for v in graph.nodes:
# 1. 采样邻居
neighbors = sample_neighbors(graph, v, K)
# 2. 聚合邻居特征
h_neigh = aggregate(h, neighbors, weights[layer]['agg'])
# 3. 拼接 + 非线性变换
h_combined = concat(h[v], h_neigh)
h_next[v] = relu(weights[layer]['fc'] @ h_combined + bias[layer])
h = h_next
return h # 最终嵌入 z_v = h[v]
4.4 无监督学习与有监督学习
GraphSAGE 支持两种训练范式,分别适用于不同的欺诈检测场景:
| 训练方式 | 损失函数 | 标签需求 | 典型欺诈场景 |
|---|---|---|---|
| 无监督学习 | 负采样 + 图结构损失(邻近节点嵌入相似,远距离节点嵌入相异) | 无需标签 | 异常检测、冷启动用户、无标注历史数据 |
| 有监督学习 | 交叉熵损失(分类)或 MSE(回归) | 需要节点级标签 | 已知欺诈样本、黑名单标注、规则辅助标注 |
无监督损失函数公式:
JG(zu) = -log(σ(zuᵀ zv)) - Q · 𝔼vn~Pn(v) log(σ(-zuᵀ zvn))
其中 v 是 u 的邻居(正样本),vn 是负采样节点,Q 为负样本数量。
JG(zu) = -log(σ(zuᵀ zv)) - Q · 𝔼vn~Pn(v) log(σ(-zuᵀ zvn))
其中 v 是 u 的邻居(正样本),vn 是负采样节点,Q 为负样本数量。
4.5 本章小结
- 采样邻居:固定大小 K 的局部采样,使计算复杂度与图规模解耦,是实时推理的基础。
- 聚合函数:Mean 适合同质图且性能最优;Pooling 适合异质图;LSTM 适合时序场景。
- 嵌入生成:逐层聚合-更新,最终输出节点低维稠密向量 zv。
- 学习范式:无监督学习适用于冷启动和异常检测;有监督学习适用于标注充分的欺诈分类。