1. GNN基础回顾:图论基础、图神经网络核心思想、消息传递机制、常见GNN模型对比
各位同学,欢迎来到《图神经网络模型部署与调优实战》的第一章。
说实话,每次带新人入门GNN,我都要先问一句:「你搞清楚图论和消息传递的关系了吗?」很多人一上来就撸代码,结果模型训出来效果稀烂,回头一看,连邻接矩阵是啥都没搞明白。嗯,这章咱们就把地基打牢。
1.1 图论基础:别小看这些概念
图(Graph)说白了就是「节点」和「边」的集合。节点代表实体,边代表关系。你想想看,社交网络里用户是节点,关注关系是边;分子结构里原子是节点,化学键是边。
我个人习惯把图分为三类:
- 同构图:节点和边的类型都只有一种。比如论文引用网络,全是论文节点,全是引用边。
- 异构图:节点或边有多种类型。比如电商平台,有用户、商品、店铺三种节点,有购买、收藏、关注多种边。
- 属性图:节点和边都带有特征向量。比如每个用户有年龄、性别特征,每条边有时间戳特征。
我在项目中遇到过最坑的事:有人把异构图当同构图处理,结果模型完全学不到东西。所以第一步,先搞清楚你的数据长什么样。
核心概念速查表
| 概念 | 说明 | 我的经验 |
|---|---|---|
| 邻接矩阵 | N×N矩阵,表示节点间连接关系 | 稀疏矩阵存储,别用稠密格式,否则内存爆炸 |
| 度矩阵 | 对角矩阵,每个节点的邻居数 | 归一化时经常用到,注意孤立节点 |
| 拉普拉斯矩阵 | L = D - A,用于谱方法 | GCN的核心,但实际部署时很少直接算 |
| 路径与连通性 | 节点间可达性 | 图直径太长会影响消息传播效率 |
1.2 图神经网络核心思想:从「特征」到「结构」
传统深度学习处理的是欧氏空间数据——图像是规则的网格,文本是序列。但图是非欧氏空间,节点没有固定的顺序,邻居数量也不固定。
GNN的核心思想其实就一句话:让每个节点学会聚合邻居的信息来更新自己的表示。
为什么会这样?因为图数据里,节点的「上下文」就是它的邻居。一个人的社交圈子决定了他的兴趣偏好,一个原子的化学环境决定了它的性质。说白了,结构信息比特征本身更重要。
我记得第一次跑GNN时,把节点特征全设成1,结果模型照样能分类——因为图结构本身就包含了大量信息。这一点和CNN完全不同,你想想看,CNN输入全1像素能学到啥?啥也学不到。
1.3 消息传递机制:GNN的「灵魂」
几乎所有GNN模型都遵循一个范式——消息传递(Message Passing)。它分三步:
- 消息生成:每个节点根据自身特征,生成要发给邻居的消息。
- 消息聚合:每个节点收集所有邻居发来的消息,用某种方式合并。
- 状态更新:用聚合后的消息和自身旧状态,计算出新状态。
用公式表达就是:
m_v^(t) = AGGREGATE({ h_u^(t-1) : u ∈ N(v) })
h_v^(t) = UPDATE(h_v^(t-1), m_v^(t))
这里 h_v^(t) 是节点 v 在第 t 层的隐藏状态,N(v) 是 v 的邻居集合。
避坑指南:我曾经把AGGREGATE写成简单的求和,结果模型对节点度数非常敏感——度数大的节点特征值爆炸。后来改用均值或对称归一化,问题就解决了。所以聚合函数的选择,直接影响训练稳定性。
消息传递可以叠加多层。每多一层,节点就能看到更远的邻居。2层GNN能看到2跳邻居,3层能看到3跳。但别贪多——层数太深会导致过平滑,所有节点特征趋同,模型失效。我一般控制在2-4层。
1.4 常见GNN模型对比:GCN、GAT、GraphSAGE
这三个模型是GNN界的「三驾马车」。咱们一个一个说。
1.4.1 GCN(图卷积网络)
GCN是最早被广泛使用的GNN模型。它的核心思路是:用归一化的邻接矩阵做卷积。
更新公式:
H^(l+1) = σ( D̃^(-1/2) Ã D̃^(-1/2) H^(l) W^(l) )
其中 Ã = A + I(加自环),D̃ 是 Ã 的度矩阵。
说白了,GCN就是给每个节点做「加权平均」——自己和邻居的特征加权求和,然后过个激活函数。
优点:计算快,参数少,适合小图。
缺点:是直推式(transductive)的,不能泛化到新节点。而且所有邻居权重一样,不够灵活。
我在项目中用过GCN做分子性质预测,效果还行,但一旦图结构变了(比如新分子加入),就得重新训练。这就很烦。
1.4.2 GAT(图注意力网络)
GAT引入了注意力机制。每个节点给不同邻居分配不同的权重,权重由模型自动学习。
注意力系数计算:
α_ij = softmax( LeakyReLU( a^T [W h_i || W h_j] ) )
这里 || 表示拼接,a 是注意力向量。
优点:权重自适应,表达能力更强。而且可以处理不同大小的邻居集合。
缺点:计算量比GCN大,多头注意力更耗显存。
我建议:如果你的数据中邻居的重要性差异很大(比如社交网络里,有些朋友影响大,有些几乎没影响),用GAT准没错。
1.4.3 GraphSAGE
GraphSAGE解决了GCN的「直推式」问题。它不学习每个节点的独立嵌入,而是学习一个聚合函数。新节点来了,直接用聚合函数生成嵌入。
三种聚合方式:
- Mean:对邻居特征取均值
- LSTM:对邻居排序后输入LSTM(顺序无关)
- Pooling:对邻居特征做MLP+最大池化
优点:归纳式(inductive),能泛化到新节点。支持大规模图,可以采样邻居训练。
缺点:采样策略需要调参,采样太少信息不足,采样太多计算量大。
我记得在部署一个推荐系统时,用户和商品每天都在新增,用GCN根本不行。换成GraphSAGE后,新用户来了直接推理,爽得很。
1.5 模型对比总结
| 模型 | 核心机制 | 适用场景 | 我的选择建议 |
|---|---|---|---|
| GCN | 归一化邻接矩阵卷积 | 小图、静态图、快速原型 | 入门首选,但别用于生产 |
| GAT | 自适应注意力权重 | 异质性强的图、需要解释性 | 效果优先时用,注意显存 |
| GraphSAGE | 可学习的聚合函数 | 大规模图、动态图、在线推理 | 生产环境首选,灵活度高 |
重要提醒:别盲目追求复杂模型。我见过有人用GAT处理同质图,效果反而不如GCN。模型选择要看数据特性,不是越花哨越好。
1.6 本章知识体系总览
下面这张图,是我自己梳理的GNN基础知识框架。你把它存脑子里,后面学部署和调优时就不会迷路。
这张图把本章的核心内容串起来了。从左到右:图论基础 → 核心思想 → 消息传递 → 三大模型。你每次复习时,先看这张图,再想细节,效率会高很多。
好了,基础就讲到这里。记住:图论是骨架,消息传递是血液,模型选择是灵魂。后面几章我们会深入部署和调优,到时候这些基础会反复用到。