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-1 两层固定大小邻居采样(K=3) v n₁ n₂ n₃ n₁₁ n₁₂ n₁₃ n₂₁ n₂₂ n₂₃ n₃₁ n₃₂ n₃₃ 目标节点 一阶邻居(K=3) 二阶邻居(K=3)

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 为例:

  1. 初始化:每个节点 v 的初始特征 hv(0) = xv(原始特征向量)。
  2. 第 1 层(k=1):对每个节点 v,聚合其一阶邻居特征 → hN(v)(1),再与自身特征拼接 → hv(1)。
  3. 第 2 层(k=2):对每个节点 v,聚合其一阶邻居的 第 1 层输出 → hN(v)(2),再更新 → hv(2)。
  4. 输出: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 为负样本数量。
图 4-2 无监督学习 vs 有监督学习流程对比 无监督学习 输入:图结构 + 节点特征 GraphSAGE 编码器 负采样 + 图结构损失 输出:节点嵌入(无标签) 有监督学习 输入:图结构 + 节点特征 + 标签 GraphSAGE 编码器 交叉熵损失 / MSE 输出:欺诈概率 / 评分

4.5 本章小结

  • 采样邻居:固定大小 K 的局部采样,使计算复杂度与图规模解耦,是实时推理的基础。
  • 聚合函数:Mean 适合同质图且性能最优;Pooling 适合异质图;LSTM 适合时序场景。
  • 嵌入生成:逐层聚合-更新,最终输出节点低维稠密向量 zv。
  • 学习范式:无监督学习适用于冷启动和异常检测;有监督学习适用于标注充分的欺诈分类。