图神经网络基本原理:从图表示到消息传递
用节点、边与全局属性统一描述图数据,再从 message、aggregation、update 三步推导 GNN,并比较 GCN、GraphSAGE、GAT 及常见失效模式。

传统神经网络擅长处理规则网格:图像的像素排成矩阵,语音和文本排成序列。但分子、社交网络、交易关系和推荐系统天然由“实体—关系”构成,邻居数量不固定,也没有唯一的节点顺序。
图神经网络(Graph Neural Network,GNN)要解决的核心问题,是在保留这种关系结构的同时,学习节点、边或整个图的表示。
图由什么组成
一个图可以写成 :
- 是节点集合,例如用户、商品、原子;
- 是边集合,例如关注、点击、化学键;
- 节点和边都可以带特征;
- 图还可以包含全局属性,例如分子的温度或一场比赛的上下文。

边可以有向、无向,也可以带类型和权重。图怎么建模不是预处理细节,而是模型假设的一部分:把“同一订单中的商品”连边和把“同一用户点击的商品”连边,会给网络完全不同的归纳偏置。
图也能表示规则数据,但不一定值得
图像可以把像素当节点、相邻像素当边;文本也可以把 token 当节点并按顺序连边。

但卷积和 Transformer 已经高效利用了这些规则结构。GNN 真正有优势的场景通常是不规则关系,例如分子中的原子与化学键:

三类典型预测任务
| 粒度 | 预测对象 | 例子 |
|---|---|---|
| 节点级 | 每个节点的标签或数值 | 用户分类、论文主题、节点风险 |
| 边级 | 两个节点间是否有边或边的属性 | 链路预测、推荐、关系类型 |
| 图级 | 整个图的标签或数值 | 分子性质、程序图分类、场景理解 |
图级任务需要把不同数量的节点汇聚成固定维度表示;边级任务往往根据两个端点的表示打分;节点级任务则需要融合自身与邻域的信息。

表示图的两个要求
工程上通常分别存储:
- 节点、边和全局特征张量;
- 用 edge list 或稀疏邻接结构记录连接关系。
稠密邻接矩阵需要 空间,对大多数稀疏现实图很浪费。Edge list 只记录存在的边,存储接近 ,也便于批量执行 gather、scatter 和稀疏聚合。
更根本的要求是置换等变性。同一张图给节点换个编号,节点级输出应当按同样方式重新排列;图级输出则应完全不变。模型不能把“节点刚好排在第 3 行”当作语义。
消息传递:GNN 的共同骨架
多数 GNN 可以写成 Message Passing Neural Network。第 层对节点 做三件事。
1. Message
对每条入边 计算消息:
m_{u\to v}^{(l)}= \phi^{(l)}\left(h_u^{(l)},h_v^{(l)},e_{uv} ight)、 是两端节点表示, 是边特征。 可以是线性层、MLP 或带注意力的函数。
2. Aggregation
把所有邻居消息聚合:
sum、mean、max 和 attention-weighted sum 都很常见。聚合函数必须对邻居顺序不敏感,否则节点重编号会改变结果。
3. Update
用聚合结果更新节点:

一层之后,每个节点获得一跳邻居的信息;两层覆盖两跳邻域。层数决定理论感受野,但不代表层数越深就一定掌握了全图信息。
一个最小例子
假设四个用户构成社交图,每个节点只有“活跃度”和“消费额”两个特征。要判断用户 1 是否有流失风险,可以:
- 分别用 MLP 把用户 1 的每个邻居编码成消息;
- 对消息求均值,得到邻域表示;
- 把用户 1 自身表示与邻域表示拼接;
- 经过更新 MLP 和分类头输出流失概率。
如果邻居数量从 2 变成 20,模型结构无需改变;如果交换邻居输入顺序,均值也不变。这正是图模型相对固定长度特征拼接的优势。
GCN、GraphSAGE 与 GAT 的差别
它们不是简单的“新模型取代旧模型”,而是对消息和聚合做了不同选择。
GCN
经典 GCN 使用带自环的对称归一化邻接矩阵:
归一化防止高阶节点的数值尺度支配聚合,适合全图或较规则的稀疏矩阵运算。
GraphSAGE
GraphSAGE 显式采样固定数量的邻居并学习聚合函数,更适合大图 mini-batch 和归纳式场景:训练时没见过的新节点,只要有特征和邻域也能生成表示。
GAT
GAT 为不同邻居学习注意力权重,让聚合不再把所有邻居同等对待。代价是边上的注意力计算与内存开销更高,而且权重可视化不应直接当作因果解释。
转导式与归纳式要分开
- 转导式(transductive):训练和测试通常位于同一张图,只是部分标签被隐藏;节点 ID 或结构位置可能参与学习。
- 归纳式(inductive):模型要泛化到新节点甚至新图,必须依赖可迁移的特征和局部规则。
在论文数据集上表现好的全图方法,不一定能直接服务持续新增用户的线上系统。是否需要动态图更新、邻居采样和跨图泛化,应在选模型前明确。
深层 GNN 的两种不同困难
Over-smoothing
多次邻域平均后,相邻节点表示越来越相似,最后难以区分。残差连接、归一化、跳连和限制传播深度可以缓解这一问题。
Over-squashing
随着跳数增加,指数增长的远程信息被压进固定维度向量,长距离依赖难以通过狭窄的图结构瓶颈。这不是“节点都变得相同”,而是信息容量与拓扑路径不足。图重连、更合理的全局通道和层次化表示是不同方向的解决方案。
此外还要警惕邻居采样偏差、异配图(相连节点不相似)、动态图时序泄露和大度数节点带来的训练热点。
总结
GNN 的本质不是“把邻接矩阵丢进神经网络”,而是构造一个满足图对称性的可学习信息传播系统:边决定信息从哪里来,聚合决定如何压缩邻域,更新决定新旧表示如何融合。
一旦把 message、aggregation、update 三步分开,GCN、GraphSAGE、GAT 以及更复杂的图网络就不再是彼此孤立的模型名,而是同一个设计空间里的不同选择。