4. GraphSAGE 模型架构:前向传播过程、损失函数、无监督与有监督训练

GraphSAGE(Graph SAmple and aggreGatE)的核心思想是通过采样和聚合操作,将图结构中的节点特征与拓扑信息融合为固定长度的嵌入向量。本节将深入剖析其前向传播机制、损失函数设计以及两种训练范式的差异。

4.1 前向传播过程:采样与聚合

GraphSAGE 的前向传播分为两个关键阶段:邻居采样和特征聚合。与全图卷积不同,GraphSAGE 在每个批次中只对目标节点的局部邻域进行固定大小的采样,从而支持归纳式学习(Inductive Learning)。

核心思想: 通过聚合局部邻域信息,将节点特征从输入空间映射到低维嵌入空间,使得结构相似的节点在嵌入空间中距离相近。

下图展示了 GraphSAGE 对单个目标节点进行两层聚合的前向传播流程:

GraphSAGE 两层聚合前向传播流程 GraphSAGE 两层聚合前向传播流程 输入层:目标节点 v 及其采样邻域 节点 v 邻居 u₁ 邻居 u₂ 邻居 u₃ 邻居 u₄ 第一层聚合:AGG₁(邻居特征) → h₁ 聚合函数 AGG₁ Mean / LSTM / Pooling h₁(v) 第二层聚合:AGG₂(h₁(邻居)) → h₂ 聚合函数 AGG₂ Mean / LSTM / Pooling 最终嵌入 z(v) 说明:每层聚合后需经过非线性激活函数(如 ReLU),并拼接(Concat)目标节点上一层的特征。

前向传播的数学表达如下:

# 伪代码:GraphSAGE 前向传播
def forward(node_v, depth_K, weights_W, aggregators):
    # 初始化第0层特征为原始输入特征
    h_v[0] = x_v
    
    for k in range(1, depth_K + 1):
        # 1. 聚合邻居在第 k-1 层的特征
        h_N(v)[k] = AGG_k({h_u[k-1] for u in N(v)})
        
        # 2. 拼接自身特征与聚合后的邻居特征
        h_v[k] = σ(W_k · CONCAT(h_v[k-1], h_N(v)[k]))
        
        # 3. 归一化(可选)
        h_v[k] = h_v[k] / ||h_v[k]||₂
    
    # 返回最终嵌入
    z_v = h_v[K]
    return z_v

4.2 聚合函数对比

GraphSAGE 支持三种聚合函数,每种函数对邻域信息的处理方式不同,适用于不同的图结构特征:

聚合函数 计算方式 特点 适用场景
Mean 聚合 对邻居特征逐元素取均值 计算简单、参数少、对噪声鲁棒 同质性图(邻居特征相似)
LSTM 聚合 将邻居特征序列输入 LSTM 表达能力更强,但需对邻居随机排序 序列化特征、异质性图
Pooling 聚合 对每个邻居特征做 MLP + 逐元素 max/mean 对称性强、可捕捉最显著特征 特征维度高、需要降噪的场景
实践建议: 在模型看板漂移检测场景中,推荐使用 Mean 聚合 作为默认选择。它计算效率高,且对特征分布的整体偏移(如均值漂移)更为敏感,适合作为漂移检测的基线模型。

4.3 损失函数设计

GraphSAGE 的损失函数根据训练范式分为无监督损失和有监督损失两大类。

4.3.1 无监督损失函数

无监督训练的核心思想是:让图中相邻的节点具有相似的嵌入,而随机采样的负样本节点嵌入则相互远离。损失函数基于负采样的对比学习框架:

J_G(z_u) = -log(σ(z_u^T z_v)) - Q · E_{v_n ~ P_n(v)} [log(σ(-z_u^T z_{v_n}))]

其中:

  • z_u、z_v:节点 u 和其正样本邻居 v 的嵌入向量
  • σ:sigmoid 激活函数
  • Q:负样本数量(超参数,通常取 5~20)
  • P_n(v):负采样分布(通常基于节点度分布)
  • z_{v_n}:负样本节点的嵌入
无监督优势: 无需标签即可学习节点嵌入,适用于标签稀疏或缺失的漂移检测场景。嵌入空间的变化可直接反映图结构的漂移。

4.3.2 有监督损失函数

当任务具有明确的标签(如节点分类、链接预测)时,使用有监督损失函数。根据任务类型选择不同的损失:

任务类型 损失函数 公式
节点分类(多分类) 交叉熵损失 L = -∑ y_i · log(ŷ_i)
节点分类(二分类) 二元交叉熵损失 L = -[y·log(ŷ) + (1-y)·log(1-ŷ)]
链接预测 BCE + 负采样 L = -log(σ(z_u^T z_v)) - log(σ(-z_u^T z_{v_n}))
回归任务 均方误差(MSE) L = (y - ŷ)²

4.4 无监督与有监督训练对比

两种训练范式在数据需求、目标、输出和应用场景上存在显著差异。下图从流程角度对比两种训练路径:

无监督 vs 有监督训练流程对比 无监督 vs 有监督训练流程对比 无监督训练 输入:图结构 + 节点特征 目标:保持邻域结构相似性 损失:负采样对比损失 输出:通用节点嵌入 应用:漂移检测、聚类、可视化 有监督训练 输入:图结构 + 节点特征 + 标签 目标:最小化预测与标签误差 损失:交叉熵 / MSE 输出:任务特定预测结果 应用:节点分类、链接预测 训练范式分界线

下表从多个维度对比两种训练范式的核心差异:

对比维度 无监督训练 有监督训练
标签需求 不需要标签 需要完整或部分标签
训练目标 保持图结构近邻性 最小化预测误差
损失函数 负采样对比损失 交叉熵 / MSE
嵌入通用性 高(可迁移到多种下游任务) 低(偏向特定任务)
漂移检测适用性 强(嵌入分布变化直接反映漂移) 中(需结合预测误差变化)
计算开销 中(需负采样) 低(直接计算损失)
典型应用 漂移检测、图聚类、可视化 节点分类、链接预测
注意: 在模型看板漂移检测场景中,推荐采用 两阶段策略:先使用无监督训练学习通用节点嵌入,再在嵌入空间上应用统计漂移检测方法(如 MMD、KS 检验)。有监督训练更适合作为下游分类器,用于判断漂移的具体类型。

4.5 训练流程总结

GraphSAGE 的完整训练流程可归纳为以下步骤:

  1. 数据准备: 构建图结构,提取节点特征,划分训练/验证/测试集。
  2. 邻居采样: 对每个目标节点,从不同跳数(hop)的邻域中采样固定数量的邻居。
  3. 前向传播: 逐层聚合邻居信息,生成节点嵌入。
  4. 损失计算: 根据训练范式选择无监督对比损失或有监督任务损失。
  5. 反向传播: 使用 SGD/Adam 优化器更新聚合函数参数和权重矩阵。
  6. 嵌入输出: 训练完成后,使用模型生成所有节点的嵌入向量,用于下游漂移检测任务。
关键要点: GraphSAGE 的归纳式学习能力使其能够处理动态图和新节点的漂移检测。在模型看板中,只需保存训练好的聚合函数参数,即可对新到达的节点实时生成嵌入,无需重新训练整个模型。