想象你是一座城市的管理者。你手里有四套档案:城建局的蓝图记录着每个街区原本的设计图纸(基因组),交通局的调度单写着此刻发往各区域的工作指令(转录组),统计局的行业名册列出现役的企业与厂房(蛋白质组),能源公司的报表则显示各街区当下的用电、用水和垃圾量(代谢组)。单看任何一套档案,都只能得到城市的一个侧影。真正的城市智慧,是把这些档案叠在一起,画出居民之间真实的关系网:谁给谁下指令、谁和谁共用厂房、谁为谁供应能源。这张关系网,就是多组学网络;而让网络中的每个分子学会“参考邻居意见”更新自身状态的方法,就是图神经网络(GNN)。 这篇文章会用“城市情报系统”的比喻,带你从零看懂图神经网络如何构建多组学网络:先认识分子节点,再学习如何挖掘边关系,然后看消息如何在网络中传递,最后讨论多关系建模、生物可解释性和工程调优。读完你会明白,为什么精准医疗想要“看懂”疾病,不能只看单个基因,而要看整个分子城市如何协作。
对 AI 从业者而言,掌握多组学图神经网络的构建,意味着你能够在基因、蛋白、代谢物之间建立可计算的关系模型,为疾病分型、靶点发现提供可落地的技术抓手,这正是精准医疗时代的核心技能之一。
可视化演示
展示图神经网络在多组学网络中的消息传递过程和多关系网络结构,揭示基因与代谢物间的调控关系。
本节配有交互动效(进入视口后自动加载,约 3KB)。
GNN消息传递机制 基因节点:蓝色表示基因,通过边向邻居传递嵌入特征 代谢物:绿色节点表示代谢物,接收来自基因的调控信号 消息聚合:每个节点聚合邻居信息更新自身嵌入表示 h\'v = σ(W · AGG({hu : u∈N(v)})) 多轮消息传递后节点嵌入捕获多跳邻域信息。
组学数据地图
假设你是市长,四个部门各交来一张城市地图:城建局画的是街道原本该怎么建,这是基因组;交通局画的是此刻车辆和指令往哪里走,这是转录组;统计局画的是哪些企业正在运转、产能如何,这是蛋白质组;能源公司画的是各街区耗电、耗水和排废情况,这是代谢组。四张图单独看都有价值,但只有把它们对齐成一张“叠加地图”,你才能真正看懂一座城市的运行规律。多组学整合要做的,正是这件事。
从 AI 的角度看,叠加地图就是一张图。我们把每个分子当作一个节点,把分子之间的调控、结合、转化关系当作边,把每个分子在多个样本中的测量值当作节点的属性。于是,多组学数据就从几张表格变成了一张可以计算的结构化图谱:
这样定义之后,预测疾病就不再是“只看某一份档案”,而是看整个分子城市的结构。后续所有 GNN 操作,都是在学习这张叠加地图上的规律。
G 是一张城市关系图,V 是居民名单,E 是道路清单,X 是每位居民随身携带的档案袋。- 节点集合所有基因、蛋白、代谢物都是城市里的居民,构成图的节点。
- 边集合居民之间存在调控或互作关系,就形成一条可通行的道路。
- 初始属性矩阵把每个节点在不同组学样本中的测量值写成一行,拼成特征表。
分子节点定义
城市有了地图,还需要给每位居民办一张 ID 卡。对于基因节点,ID 卡上可以写它的 DNA 序列特征、在不同组织中的表达量、所属通路;对于蛋白质节点,可以写蛋白丰度、结构域、亚细胞定位;对于代谢物节点,则写浓度、所在代谢通路、上下游酶的信息。ID 卡上的字段,就是 GNN 里的“节点特征”。
但麻烦的是,不同组学数据的量纲完全不同:RNA 表达量可能是几十到几万的计数,蛋白丰度可能是仪器读取的强度值,代谢物浓度可能是微摩尔每升。如果不做处理直接拼接,就像把“厘米”和“千克”写在同一张表里比较大小,大数会把小数淹没。因此,在把特征喂给模型之前,通常要对每个分子的跨样本特征做标准化:
办好 ID 卡之后,每个分子的“初始发言”才不会因为测量单位不同而失真。这是后续所有消息传递能够公平进行的前提。
j 个分子在所有样本中的测量值,减去这批样本的均值,再除以标准差,让每个特征都拥有类似的尺度。- 计算均值对每个分子,先看它在所有样本中的平均水平。
- 计算标准差再看它在不同样本间波动的幅度。
- 标准化用“离均差除以波动幅度”得到新特征,避免量纲差异主导模型。
边关系挖掘
城市不能只有居民,还要有道路。道路来自哪里?一部分来自已知的生物学知识库,比如蛋白-蛋白互作数据库、转录因子调控数据库;另一部分来自数据本身,比如用共表达分析发现两个基因的表达在多个样本中总是同涨同跌。前者像城市规划师手动画好的主干道,后者像我们用交通流量数据反推出来的捷径。
最常用的“从数据反推道路”的方法是计算相关性。对于基因 i 和基因 j,我们观察它们在 n 个样本中的表达向量,计算皮尔逊相关系数:
实际工程中,我们不会把每条相关都修成路。通常只保留 |r| 大于某个阈值(比如 0.8)的边,或者每个节点只连接相关性最强的 Top-K 个邻居。这样得到的是稀疏而可信的城市道路网,而不是一张密不透风的蜘蛛网。
1,表示两个分子在样本间同向协同变化;接近 -1 表示反向变化;接近 0 表示没有明显线性关系。- 中心化先减去各自的均值,突出每个样本偏离平均水平的方向和幅度。
- 协同变化累计把两个分子的中心化结果相乘再求和。符号相同的样本贡献正值,符号相反的贡献负值。
- 归一化除以两个分子的波动幅度,把结果压缩到
-1到1之间,便于设定阈值。
消息传递机制
道路修好后,情报系统开始运转。GNN 的核心思想非常朴素:每个居民不能只凭自己的 ID 卡做判断,还要去问问邻居最近发生了什么。这个过程叫“消息传递”。第一轮,每个节点把邻居的信息收集起来,和自己的信息融合,更新一次状态;第二轮,它再把更新后的状态传给下一批邻居。经过几轮,信息就像城市里的流言一样扩散开来。
用数学语言描述一次消息传递,可以写成:
在多组学场景中,节点特征就是分子 ID 卡,邻居就是通过共表达或互作关系连接起来的分子。经过 2 到 3 层消息传递后,一个基因的表示就不再只代表它自己,而是代表“它和周围一圈功能相关分子”的小社区画像。这正是 GNN 比普通神经网络更擅长建模组学关系的原因。
l+1 层,节点 v 先把邻居 u 的状态和自身状态集中起来,做一次聚合,再乘以一个可学习矩阵并经过激活函数,得到新状态。- 收集邻居消息把节点
v的所有邻居状态拿出来,同时保留它自己的状态。 - 聚合操作用求和、取平均或注意力机制,把一堆消息压缩成一条“综合情报”。
- 线性变换与激活用可学习矩阵
W挑选重要信息,再通过激活函数增加非线性表达能力。
异质关系建模
普通城市里的道路都是同一种规则:靠右行驶。但分子城市不是这样:基因调控蛋白是一条规则,蛋白和蛋白结合又是一条规则,酶催化代谢物转化还是另一条规则。如果所有边都用同一个权重矩阵处理,就像把高速公路、步行街和铁路当成同一条路,信息一定会失真。因此我们需要“异质关系建模”。
一种经典做法是关系图卷积网络(RGCN)。它给每种关系类型 r 配一个独立的变换矩阵 W_r,在聚合邻居时按关系分别处理:
除了 RGCN,还有一种常见思路是设计“元路径”。比如“基因-蛋白-代谢物”这条路径,表示我们只沿着这条语义链传递消息。元路径像城市里的公交专线,指定了情报必须走哪条路线,避免无关关系互相干扰。
v 的邻居按关系类型先分组,每组使用不同的“相处规则”,最后把不同类型的信息加在一起,并保留节点自身信息。- 按关系切分邻居不是所有邻居都一视同仁,而是先看这条边属于哪类关系。
- 关系专属变换每种关系用自己的矩阵处理邻居信息,并除以该关系邻居数做归一化。
- 汇总所有关系把不同关系得到的情报相加,同时额外加上节点自身的“自环消息”。
生物可解释性
模型预测出一个病人属于高风险亚型,医生自然会问:凭什么?如果 GNN 是一套只会算分的黑箱,很难在临床落地。于是可解释性成为多组学 GNN 的重要环节。我们希望模型不仅能判断“这个分子社区和疾病有关”,还能指出“是哪一个邻居、哪一条边起了关键作用”。
注意力机制是常用的解释工具。它给每条边学习一个权重,告诉模型:这次消息传递,哪些邻居更值得听。以图注意力网络(GAT)的打分方式为例:
拿到注意力权重后,我们可以把得分最高的边画出来,得到“疾病相关分子模块”。这就像在巨大的城市交通图上,标出事故高发区周边的关键道路。再结合数据库注释和实验验证,这些模块就可能转化为新的生物标志物或药物靶点。
α 表示节点 u 在听取节点 v 消息时的“信任程度”,所有权重加起来等于 1。- 特征变换先把两个节点状态分别做线性变换,得到更具表达力的表示。
- 拼接打分把两个表示拼接起来,再用向量
a打分,得到未归一化的注意力分数。 - Softmax 归一化对节点
u的所有邻居做归一化,让分数变成可比较的权重。
工程训练优化
理论和模型结构都有了,真正落地时还要面对工程问题。多组学图往往有几万个节点、几十万条边,一次性装入显存不现实。常用方案是小批量采样:每次只取一部分节点,并连带采样它们的邻居,构建一个子图来算梯度。这就像市中心的交通调度,不需要等全城数据同步,只看局部街区也能做短期决策。
训练 GNN 做疾病分类时,最常见的损失函数是交叉熵损失:
工程调优还有三个关键点。第一,层数不是越多越好,通常 2 到 3 层就能覆盖大多数分子模块;层数过深会导致所有节点表征趋同,即“过平滑”,相当于城市里所有居民都说着同样的话,信息反而丢失。第二,数据划分不能随机打乱整个图,而应按子图或分子模块划分,否则训练时见过的邻居会泄露到测试集。第三,组学数据往往样本少、维度高,可以增加 Dropout、早停和边 dropout,增强泛化能力。做好这些,模型才能稳定复现,真正从实验室走向临床。
- 取小批量样本从图中采样一批节点,降低单次计算量。
- 真实标签编码如果节点
i属于类别c,则y_{ic}为 1,否则为 0。 - 交叉熵求和对每个样本、每个类别计算
y_{ic}\log\hat{y}_{ic}并加负号取平均。
AI 应用场景
疾病亚型精准分型
阶段:多组学图构建 + 图表示学习 + 下游分类
解决的问题:传统方法通常把基因表达、蛋白丰度、代谢物浓度分别建模,无法捕捉跨组学相互作用;GNN 可以把这些分子连成网络,让分类器同时看到结构信息。
具体案例:在乳腺癌多组学数据中,研究人员以基因、蛋白、代谢物为节点,以共表达和数据库互作为边,训练 GNN 模型把患者分为不同分子亚型,比单组学模型更稳定地识别出预后较差的亚型。
候选药物靶点发现
阶段:模型可解释性分析 + 关键子图提取
解决的问题:从成千上万个差异分子中找药物靶点像大海捞针;GNN 的注意力权重能够定位“与疾病最相关的分子模块及其关键邻居”,缩小筛选范围。
具体案例:在阿尔茨海默症多组学图谱中,模型预测疾病状态的同时,输出注意力分数最高的代谢物-蛋白子网络;团队再结合数据库检索,筛选出 3 个可进一步验证的候选靶点。
基因-代谢物关联网络挖掘
阶段:边预测 / 链路预测
解决的问题:已知互作数据库中基因与代谢物的直接关系很少,而 GNN 可以通过邻居传播预测“尚未标注但很可能存在”的边,帮助发现新调控关系。
具体案例:利用代谢组和转录组联合构建异构图,对缺失的“基因-代谢物”边做链路预测;预测结果中排名靠前的边,有 60% 被后续文献或实验初步证实。
Python 演示
import numpy as np def make_omics_graph(expr, corr_threshold=0.7): # expr 形状为 (n_samples, n_molecules) # 计算分子之间的皮尔逊相关矩阵 corr = np.corrcoef(expr.T) # 保留相关度大于阈值的边,构成稀疏邻接矩阵 adj = (np.abs(corr) >= corr_threshold).astype(float) np.fill_diagonal(adj, 0.0) # 按度归一化,使每个节点平均分配消息给邻居 deg = adj.sum(axis=1, keepdims=True) deg[deg == 0] = 1.0 norm = adj / deg return norm class SimpleMessagePassing: def __init__(self, feature_dim, hidden_dim, out_dim): self.w1 = np.random.randn(feature_dim, hidden_dim) * 0.1 self.w2 = np.random.randn(hidden_dim, out_dim) * 0.1 def predict(self, norm_adj, features, steps=2): h = features for _ in range(steps): # 消息传递:归一化邻接矩阵加权求和 + 线性变换 + 激活 h = np.tanh(norm_adj @ h @ self.w1) return h @ self.w2 def main(): rng = np.random.default_rng(42) n_samples = 60 n_genes = 30 # 模拟 60 个样本、30 个分子的表达矩阵 expr = rng.normal(size=(n_samples, n_genes)) # 人为制造一对共表达基因,让图中出现一条真实边 gene_a = expr[:, 0].reshape(-1, 1) expr[:, 15] = 0.8 * gene_a.ravel() + 0.2 * rng.normal(size=n_samples) # 构建图并执行两轮消息传递,得到分子嵌入 norm = make_omics_graph(expr, corr_threshold=0.7) features = expr.T model = SimpleMessagePassing(n_genes, 16, 8) embeddings = model.predict(norm, features) print("分子嵌入维度:", embeddings.shape) if __name__ == "__main__": main()
corr = np.corrcoef(expr.T)把每个分子在所有样本中的表达量当作坐标,计算两两之间的相关系数。adj = (np.abs(corr) >= corr_threshold).astype(float)只保留相关性超过阈值的分子对作为边,让图保持稀疏。deg[deg == 0] = 1.0防止孤立节点做除法时出现除零错误。norm = adj / deg按度归一化邻接矩阵,让每个节点给邻居发消息时权重平均。h = np.tanh(norm_adj @ h @ self.w1)最核心的消息传递步骤:邻居加权求和、线性变换、非线性激活。features = expr.T把表达矩阵转置成“行是分子、列是样本”的节点特征矩阵。embeddings = model.predict(norm, features)经过两轮消息传递后,得到可用于下游聚类或分类的分子向量。
常见误区
误区我以为多组学整合就是把基因、蛋白、代谢物的数据表横向拼起来,然后喂给普通神经网络就完了。
正解直接拼接会丢失“谁和谁有关系”的结构信息。GNN 的价值在于把分子之间的互作、调控、共表达建模成边,让模型显式利用关系。如果只用拼接矩阵,等于只看居民名单,不看城市道路,自然无法发现社区结构。
为何常见:因为普通表格数据习惯了“一行样本、一列特征”的输入方式,容易忽略分子间天然存在的网络结构。
误区我一开始把相关系数绝对值大于 0 的所有分子对都连成边,觉得信息越多模型越准。
正解边太密会让图变成稠密连通块,消息在邻居之间反复平均,节点表征迅速趋同,也就是过平滑。更合理的做法是设定阈值或 Top-K 筛选,保留最可信的边,让网络保持稀疏但富有信息。
为何常见:人们习惯认为“数据量越大越好”,但图的边并不是越多越好,边的质量和拓扑结构才是关键。
误区我觉得既然都是边,就不需要区分“基因调控蛋白”和“蛋白与蛋白互作”,统一用同一个矩阵训练更简单。
正解多组学图是异构图,不同关系类型有完全不同的生物学含义。RGCN、基于元路径的模型等方法的核心,就是为不同关系设计不同的参数或聚合路径。共用权重会让模型混淆不同类型的调控规则。
为何常见:普通 GNN 的教程大多基于同构图,容易让人默认所有边都是同质的。
误区我看到 GAT 给边打了高分,就认为这条边在真实细胞里一定存在很强的调控关系。
正解注意力权重是模型为完成预测任务而学到的“相关性贡献”,可能与真实调控相关,也可能只是在当前数据上有效。它只能作为筛选线索,后续需要用数据库、敲除实验或文献验证。
为何常见:注意力机制听起来像“模型自己告诉你为什么”,但解释性并不等于因果性。
误区我用 GNN 做样本分类时,把所有样本随机分成训练、验证、测试,测试准确率很高。
正解如果节点是基因、蛋白、代谢物,随机划分会让同一个分子社区同时出现在训练集和测试集中,造成信息泄漏。正确做法是按分子模块、图子图或患者批次划分,确保测试集近似于“未见过的城市新区”。
为何常见:常规机器学习默认样本独立同分布,而图数据中节点有依赖关系,容易忽视图级泄漏。
面试题
Q1. 在多组学网络构建中,“节点”通常代表什么?
- A.基因、蛋白质与代谢物← 正确答案
- B.患者年龄与体质量指数
- C.测序平台与试剂批次
- D.医生经验与诊疗科室
答案:A。多组学网络的节点是参与生物学过程的分子,如基因、转录本、蛋白质、代谢物。年龄、平台和医生信息属于样本元数据,不应作为分子网络中的节点。
Q2. GNN 的消息传递过程主要做什么?
- A.只保留节点初始特征向量
- B.聚合邻居信息并更新自身← 正确答案
- C.对全部节点特征取平均
- D.随机置换节点特征值
答案:B。消息传递的核心是每个节点收集邻居信息,聚合后与自身信息融合,再通过线性变换和激活函数更新。选项 C 忽略了节点自身信息和可学习变换,A 和 D 都不涉及邻居交互。
Q3. 两个分子的皮尔逊相关系数接近 1,通常说明什么?
- A.两分子表达同升同降协同变化← 正确答案
- B.两分子必然直接物理结合
- C.两分子在不同样本中毫无关联
- D.两分子位于同一条染色体
答案:A。皮尔逊相关系数度量线性协同变化。接近 1 表示正相关,但相关不等于物理结合,也不代表染色体位置关系。
Q4. RGCN 相比普通 GNN 的核心差异是什么?
- A.对不同关系类型使用不同权重← 正确答案
- B.把节点特征拼接得更长
- C.用循环网络编码分子序列
- D.用注意力替代全部邻居聚合
答案:A。RGCN 为每种关系类型学习独立的变换矩阵,再汇总所有关系的结果。它没有使用序列编码,也不只是加长特征。
Q5. GNN 的“过平滑”问题指的是什么?
- A.多层传播后节点表征逐渐趋同← 正确答案
- B.训练集准确率直接降为零
- C.学习率过大导致梯度爆炸
- D.邻居数量减少到无法聚合
答案:A。网络层数过深时,每个节点反复平均邻居信息,最终所有节点表征越来越相似,丧失区分度。梯度爆炸和邻居减少不是过平滑的核心描述。
Q6. 在异质多组学图中,“元路径”的作用是什么?
- A.限定异构图中的语义聚合路径← 正确答案
- B.把基因序列翻译成氨基酸序列
- C.消除不同组学间的批次效应
- D.替代传统差异表达统计检验
答案:A。元路径定义了一种可解释的语义关系链,比如“基因-蛋白-代谢物”,让模型只沿着指定路径聚合邻居,避免不同关系类型互相干扰。
Q7. GNN 输出的分子嵌入可以用于什么?
- A.疾病亚型分类与分子模块发现← 正确答案
- B.直接读取原始基因序列
- C.替代质谱仪的代谢物检测
- D.免去临床数据的伦理审查
答案:A。分子嵌入是低维向量,可输入分类器做亚型预测,也可以聚类发现功能模块。它不能替代测序或质谱检测,也不能绕过伦理审查。
Q8. 构建多组学网络时,常见的边类型包括哪些?
- A.基因共表达相关性← 正确答案
- B.蛋白-蛋白相互作用← 正确答案
- C.转录因子调控关系← 正确答案
- D.试剂批次号相同
答案:ABC。共表达、蛋白互作、转录因子调控都有明确生物学意义,可构成图的边。试剂批次相同属于实验元数据,不应作为分子间关系边。
Q9. 以下哪些策略可以缓解 GNN 的过平滑问题?
- A.限制 GNN 层数← 正确答案
- B.引入残差与跳跃连接← 正确答案
- C.增加消息传递轮数
- D.采用稀疏图与归一化← 正确答案
答案:ABD。减少层数、加入残差/跳跃连接、使用稀疏图和归一化,都能抑制节点表征过度趋同。增加消息传递轮数通常会加剧过平滑。
Q10. 在多组学 GNN 中,可用于生物可解释性的方法包括哪些?
- A.注意力权重回溯关键邻居← 正确答案
- B.梯度归因识别重要特征← 正确答案
- C.扰动边观察预测变化← 正确答案
- D.对全部特征取平均值
答案:ABC。注意力权重、梯度归因、边扰动都是常见的解释性手段,能帮助定位重要分子模块。对特征取平均只会丢失信息,不能解释模型决策。