3. 图神经网络基础:从CNN到GNN,消息传递范式,节点嵌入的概念
在深入GraphSAGE之前,必须理解其底层核心:图神经网络(GNN)。GNN并非凭空出现,而是从卷积神经网络(CNN)在非欧几里得数据上的自然延伸。本节将梳理从CNN到GNN的演进逻辑,并重点讲解消息传递范式与节点嵌入这两个基石概念。
3.1 从CNN到GNN:为什么需要图神经网络?
CNN在图像、文本等欧几里得数据(规则网格结构)上取得了巨大成功。然而,现实世界中大量数据以图结构存在,如社交网络、交易网络、分子结构。这些数据具有以下特点,使得传统CNN难以直接应用:
| 特性 | 欧几里得数据(图像) | 非欧几里得数据(图) |
|---|---|---|
| 空间结构 | 规则网格,像素有固定邻居 | 不规则拓扑,节点邻居数量可变 |
| 节点顺序 | 固定顺序(行列索引) | 无天然顺序(置换不变性) |
| 局部性 | 固定大小的卷积核 | 邻居数量动态变化 |
| 平移不变性 | 卷积核可在图像上滑动 | 图中无“平移”概念 |
GNN的核心思想是:将CNN的“局部感受野”和“参数共享”思想,迁移到图结构上。在CNN中,一个卷积核聚合其周围像素的信息;在GNN中,一个节点聚合其邻居节点的信息。这种聚合操作被称为消息传递。
3.2 消息传递范式:GNN的通用框架
消息传递(Message Passing)是绝大多数GNN模型(包括GraphSAGE、GCN、GAT)的底层范式。它定义了节点如何与邻居交换信息并更新自身表示。一个完整的消息传递步骤包含三个子阶段:
- 消息生成(Message): 每个节点根据自身特征和邻居特征,生成要发送给邻居的消息。
- 消息聚合(Aggregate): 每个节点收集来自其所有邻居的消息,并使用一个聚合函数(如求和、均值、最大值)将它们合并成一个固定长度的向量。
- 节点更新(Update): 将聚合后的邻居消息与节点自身的当前表示结合,通过一个可学习的神经网络层(如全连接层+激活函数),生成节点的新表示。
下图展示了单层消息传递的完整流程:
3.3 节点嵌入:图数据的“特征向量”
节点嵌入(Node Embedding) 是将图中的每个节点映射到一个低维、稠密的向量空间的过程。这个向量(嵌入)能够捕捉节点的结构信息(它在图中的位置、邻居模式)和属性信息(节点自身的特征)。
节点嵌入与传统的特征工程有本质区别:
| 维度 | 传统特征工程 | 节点嵌入(GNN) |
|---|---|---|
| 生成方式 | 人工设计(如度数、聚类系数) | 端到端学习(神经网络自动学习) |
| 表达能力 | 有限,依赖专家知识 | 强,可捕捉高阶非线性关系 |
| 泛化能力 | 对新节点需重新计算 | 归纳式(Inductive),可泛化到未见节点 |
| 维度 | 通常较高且稀疏 | 低维且稠密(如64维、128维) |
下图展示了节点嵌入如何将图结构信息压缩到向量空间中:
3.4 消息传递与节点嵌入的关系
消息传递是生成节点嵌入的手段,节点嵌入是消息传递的最终产出。在GraphSAGE中,通过多层消息传递,每个节点最终得到一个融合了其K阶邻居信息的嵌入向量。这个嵌入向量可以直接用于下游任务:
- 节点分类: 判断一个账户是否为欺诈团伙成员。
- 链接预测: 预测两个账户之间是否存在隐藏的交易关系。
- 聚类: 将嵌入向量相似的节点聚为一类,发现潜在的团伙。
3.5 小结:从CNN到GNN的思维转变
理解从CNN到GNN的演进,关键在于把握以下三个思维转变:
| CNN思维 | GNN思维 |
|---|---|
| 固定网格上的滑动窗口 | 图拓扑上的邻居采样与聚合 |
| 像素的RGB值作为输入 | 节点的特征向量 + 邻接矩阵作为输入 |
| 卷积核参数在空间上共享 | 聚合函数参数在所有节点上共享 |
| 输出是特征图(Feature Map) | 输出是节点嵌入(Node Embedding) |
掌握了消息传递范式和节点嵌入的概念,就为理解GraphSAGE的采样策略和聚合函数设计打下了坚实的基础。下一章将正式进入GraphSAGE的核心算法。