图神经网络基础概念归纳总结

好,咱们正式进入 GNN 的世界。
说实话,很多人一听到“图神经网络”就觉得头大,感觉又是矩阵又是拓扑的。其实你把它拆开看,没有那么复杂。

我个人习惯把 GNN 理解成一种“能搞定不规则数据”的神经网络。咱们平时搞图像、文本,都是规规矩矩的网格或者序列。但生物学数据不一样,比如单细胞、蛋白质互作网络、基因调控网络,这些东西天然就是一团乱麻——节点和节点之间有各种关系,没法用方方正正的矩阵去描述。

所以,图神经网络就是专门为这类“非欧几里得结构”数据设计的。嗯,咱们这次用 GNN 做批次质控,本质上也是在看“样本”这个节点跟“批次”这个节点之间怎么互动的。

图的基本构成:节点、边、邻接矩阵

你想想看,一张图里最核心的就三样东西:

  • 节点(Node/Vertex):代表一个实体。比如一个细胞、一个样本、一个基因。
  • 边(Edge):代表两个节点之间的关系。比如“样本A属于批次B”、“基因C调控基因D”。边可以有方向,也可以没有。
  • 邻接矩阵(Adjacency Matrix):说白了就是一个方阵,告诉你谁跟谁连着。行和列都对应节点,如果i和j之间有边,A[i][j]就是1,否则是0。

我早期搞单细胞数据时犯过一个低级错误——忘了区分有向边和无向边。后来发现批次图其实都是无向的(样本属于批次、批次包含样本),但基因调控网络就必须用有向图。这俩搞混了,GNN 学出来的东西就完全不对路。

避坑指南:
我曾经帮一个团队排查模型梯度爆炸的问题,查了半天发现他们邻接矩阵没做归一化。GNN 里如果图里度数特别大的节点连着很多节点,信息传递时会直接让特征数值翻倍,导致训练崩溃。所以,记得给你的邻接矩阵做归一化处理。

节点特征与边特征

光有图的结构还不够——你得告诉 GNN 每个节点“长什么样”,这就是节点特征。在批次质控场景中:

  • 节点特征:每个样本的表达谱、质控指标(比如文库复杂度、线粒体比例、双胞率)、批次属性。这些通常是一个固定维度的向量。
  • 边特征:描述两个节点之间关系的属性。比如样本与批次之间的“归属关系强度”、批次之间的“批次效应程度”。有些 GNN 架构(比如 EGNN、GatedGCN)可以直接处理边特征,有些则不行。

我个人的做法:
在做批次相关项目时,我会把批次 ID 做 one-hot 编码拼到节点特征里。这样 GNN 在消息传递时,自然而然地就能区分“这个样本来自哪个批次”。说白了,特征工程在图里照样重要。

消息传递与聚合:GNN 的核心机制

GNN 的底层逻辑,说白了就三步:

  1. 消息生成:每个节点把自己的特征加上边的信息,生成一条“消息”。
  2. 消息传递:节点把消息发给它的邻居。
  3. 消息聚合:每个节点收齐邻居发来的消息,用某种聚合函数(求和、平均、注意力加权)把它们合并,然后更新自己的特征。

这个过程通常要重复若干层。每多一层,节点就能看到更远范围的邻居。比如一个 3 层 GCN,节点最终能感知到 3 跳以内的所有信息。

为什么会这样?
因为第一层聚合直接邻居的信息,第二层聚合时,第一层更新后的节点已经包含了直接邻居的信息,第二层再聚合,就间接拿到了邻居的邻居。层数越深,感受野越大。

注意:
我见过有人一上来就堆 10 层 GNN,结果模型不仅跑不动,还过平滑了——所有节点的表征都变得几乎一样。对于批次质控这种小规模图(几十到几百个节点),2 到 3 层绝对够了。层数不是越多越好。

图级、节点级与边级任务

GNN 能做三类任务,分清它们很重要:

任务类型 输出 批次质控中的例子
节点级 每个节点一个预测 判断每个样本是否属于异常批次
边级 每条边一个预测 判断两个批次之间的批次效应大小
图级 整张图一个预测 判断整个合并数据集是否需要重新批次校正

咱们这个课程主要是做节点级任务——预测每个样本的批次异常程度。但后续的实操中,你可能需要同时考虑边级和图级特征来做更复杂的质控。

为什么 GNN 能用来做批次质控?

你想想看,传统方法怎么检查批次效应?无非是画个 PCA 看看颜色分布,或者跑个 Harmony、ComBat 校正完再检查。但这些方法要么是事后分析,要么是线性假设太强。

GNN 的思路不一样:它直接把“样本-批次”关系编成一张图。每个样本是一个节点,每个批次也是一个节点(超节点),样本与它所属的批次之间连一条边。

当 GNN 在这张图上跑消息传递时,同一个批次的样本会互相“交流”,不同批次的样本通过批次节点间接沟通。如果模型发现某个批次节点的特征与其他批次有明显差异,这个信息就会通过消息传递扩散到该批次的所有样本节点,最终模型就能精确判断哪些样本受到了批次效应的影响。

说白了,GNN 用图结构把“批次归属关系”这个离散信息,变成了神经网络可训练的连续空间,这才是它好使的根本原因。

核心逻辑总结:
- 图 = 节点 + 边 + 邻接矩阵
- 节点特征 = 样本表达谱 + 质控指标
- GNN 核心 = 消息生成 → 消息传递 → 消息聚合
- 任务类型 = 节点级(主要)、边级、图级
- GNN 优势 = 把离散的批次关系图转化为可训练的特征空间

GNN 基础概念知识图谱 图结构定义 节点 / 边 / 邻接矩阵 特征表示 节点特征 / 边特征 消息传递机制 生成 / 传递 / 聚合 输入数据构建 样本表达谱 + 批次归属矩阵 模型训练与预测 节点分类 / 批次异常预测 批次质控输出 样本级异常得分 / 批次效应量化 核心优势 离散关系→ 连续特征空间 消息传递自然融合 批间差异信息

看到这张图你就明白了——
左半部分是我们构建的批次图结构,中间是加入了样本特征和模型,右半部分就是最终的质控输出。整个流程不是线性的,消息传递会反复在节点之间流通,直到模型收敛。