图神经网络基础:图的基本概念、节点与边、邻接矩阵、图的性质

在深入 GraphSAGE 模型之前,必须牢固掌握图这一核心数据结构。图(Graph)是一种用于描述对象及其之间关系的数学结构,是图神经网络(GNN)所有操作的基石。本节将系统梳理图的基本构成要素、数学表示方法以及关键性质。

1. 图的基本构成:节点与边

一个图由两个核心集合定义:节点(Vertex/Node) 和 边(Edge)。节点代表实体对象,边代表实体之间的关联。

  • 节点(Node):图中的基本单元,通常用符号 v ∈ V 表示。在社交网络中,节点可以是用户;在分子结构中,节点是原子。
  • 边(Edge):连接两个节点的关系线,用 e ∈ E 表示。边可以是有向的(箭头指向)或无向的(双向对称)。
  • 图(Graph):记作 G = (V, E),其中 V 是节点集合,E 是边集合。
💡 关键区分: 在 GraphSAGE 中,每个节点都关联一个特征向量(如用户画像、交易金额),而边则定义了消息传递的路径。没有边,节点之间就无法进行信息聚合。

2. 图的数学表示:邻接矩阵

为了将图结构输入到神经网络中,我们需要一种标准化的数学表示——邻接矩阵(Adjacency Matrix)。对于一个包含 N 个节点的图,邻接矩阵 A 是一个 N × N 的方阵。

矩阵元素 无向图 有向图
A[i][j] = 1 节点 i 与节点 j 之间存在一条边(对称矩阵) 存在一条从节点 i 指向节点 j 的边
A[i][j] = 0 节点 i 与节点 j 之间无边 不存在从 i 到 j 的边
对角线 通常为 0(无自环) 通常为 0

以下是一个 4 节点无向图的邻接矩阵示例:

# 图结构:节点 0-1, 0-2, 1-2, 2-3 相连
# 邻接矩阵 A (4x4)
A = [
    [0, 1, 1, 0],  # 节点0连接1和2
    [1, 0, 1, 0],  # 节点1连接0和2
    [1, 1, 0, 1],  # 节点2连接0、1和3
    [0, 0, 1, 0]   # 节点3仅连接2
]
📐 度矩阵与拉普拉斯矩阵: 在 GNN 中,邻接矩阵常与度矩阵 D(对角矩阵,D[i][i] 为节点 i 的度数)结合使用。归一化拉普拉斯矩阵 L = I - D^{-1/2} A D^{-1/2} 是图卷积操作的理论基础。
图结构与邻接矩阵对应关系 图结构 (无向图) 0 1 2 3 邻接矩阵 A 0 1 2 3 0 1 2 3 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 绿色数字 (1) 表示节点之间存在边;红色数字 (0) 表示无边。无向图的邻接矩阵沿对角线对称。

3. 图的关键性质

理解图的以下性质,对于设计 GNN 模型和诊断模型漂移至关重要:

性质 定义 在 GraphSAGE 中的意义
度数 (Degree) 与节点直接相连的边的数量 影响邻居采样数量;度数高的节点(Hub)聚合信息更丰富
连通性 (Connectivity) 图中任意两点是否存在路径相连 连通分量变化可能指示图结构漂移
路径 (Path) 从一个节点到另一个节点经过的边序列 GraphSAGE 的 K 跳邻居聚合基于路径长度
聚类系数 (Clustering Coefficient) 衡量节点邻居之间相互连接的程度 高聚类系数区域可能形成社区,影响消息传递模式
图直径 (Diameter) 图中所有最短路径的最大长度 决定模型需要多少层才能捕获全局信息

4. 图的类型与选择

在实际业务场景中,图的结构类型直接影响建模策略。以下是常见图类型及其在漂移检测中的应用:

  • 同构图 (Homogeneous Graph):所有节点和边属于同一类型。例如,社交网络中的“用户-用户”好友关系。
  • 异构图 (Heterogeneous Graph):包含多种类型的节点和边。例如,电商图中包含“用户”、“商品”、“店铺”三类节点和“购买”、“收藏”、“属于”三类边。
  • 动态图 (Dynamic Graph):节点和边随时间变化。在模型看板漂移检测中,动态图是最常见的场景——新用户注册、交易关系建立/断开都会改变图结构。
⚠️ 漂移检测陷阱: 当图从同质结构演变为异质结构(例如新增了“设备”节点类型),或者图的度数分布发生显著偏移时,基于旧图结构训练的 GraphSAGE 模型可能会产生特征分布漂移,导致预测性能下降。这是模型看板需要重点监控的信号。
同构图与异构图对比 同构图 (单一节点类型) 用户A 用户B 用户C 用户D 好友 好友 好友 好友 异构图 (多种节点类型) 用户 商品 店铺 设备 购买 属于 登录 上架 管理 异构图包含多种节点(用户、商品、店铺、设备)和多种边关系,更贴近真实业务场景,也是模型漂移检测的常见对象。

5. 图在 GraphSAGE 中的角色

在 GraphSAGE 模型中,图结构决定了消息传递的路径和范围。模型通过聚合邻居节点的特征来更新目标节点的表示。以下代码展示了如何利用邻接矩阵获取节点的邻居信息:

import numpy as np

# 假设邻接矩阵 A 和节点特征矩阵 X
A = np.array([
    [0, 1, 1, 0],
    [1, 0, 1, 0],
    [1, 1, 0, 1],
    [0, 0, 1, 0]
])

# 获取节点 0 的邻居索引(无向图)
neighbors_0 = np.where(A[0] == 1)[0]
print(f"节点 0 的邻居: {neighbors_0}")  # 输出: [1 2]

# 模拟 1 跳邻居特征聚合(平均聚合)
X = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
neighbor_features = X[neighbors_0]  # 取邻居节点特征
aggregated = np.mean(neighbor_features, axis=0)
print(f"节点 0 的聚合邻居特征: {aggregated}")  # 输出: [4. 5.]
📊 实践要点: 在模型看板漂移检测中,需要定期监控图的统计性质(如平均度数、连通分量数量、异构图边类型分布)。当这些指标发生显著变化时,往往预示着图结构漂移,此时应触发模型重训练或特征工程调整。