m

miller

V1

2022/08/14阅读:10主题:自定义主题1

SubGraph Learning for Diagnosis - CS224W | Lecture 18

Subgraph Learning CS224W | Lecture 18

今天分享CS224W的续集: GNN在生物学中的第二个示例。

本文同时也是 文章 Subgraph Neural Networks, NeurIPS 2020 的分享

如何基于表型诊断疾病?

医生问诊的第一步望闻问切,旨在收集病人的信息来帮助诊断。那么病人表现出来的可观测的症状我们在这里称之为表型 (Phenotype), 而表现同时收到病人的基因型 (Genotype) 和环境的影响。  

医学研究者们把各种描述病情的表型收集起来制定标准统一的术语来归纳它们, 在问诊的时候讲这些信息收集在病历里。 利用电子病历 (想想EHR), 我们可以将统一的术语转化为规范可建模的数据。

如果我们将疾病看作是相关表现的集合, 那么我们是不是就可以通过病人表现出来的症状帮助诊断?换句话说, 给定一个病人所有的表现, 我们要建立模型来预测他/她所患疾病。

如何将诊断转化为图神经网络的预测任务?

首先我们将表型(症状)构建为图。有一个包含所有表型的统一称谓的词库, 我们将其转化为图 , 那么图

  • 节点为表型,连接为表型之间的关系;
  • 病人则变为它所拥有的表型的集合, 即图 的子图

还记得我们把疾病看作是表型的集合吗, 和这里上述病人的转化是一样的。所以我们就顺势将诊断问题转化为: 对于表型子图 (input) ,我们预测和这个集合最接近的疾病标签 (label)

基于子图的诊断预测
基于子图的诊断预测

疾病是相关表型的集合 → 将表型数据构建为图,那么病人就变为图 的子图 → 将诊断转化为图机器学习的子图分类问题 → 最后对表型子图预测获得疾病。

为什么要用图神经网络呢?

因为想要模型学习到子图的表示 (Embedding) 。在表示的向量空间中含有子图 在全图 中的拓扑结构能够被最大限度 (likelihood) 地保留下来。换句话说, 两个相似的子图 它们两在向量空间中的也是相邻的👯‍♀️。

通过图神经网络学习子图的表示。
互不相连的邻域构成了子图内的子体 components。左图的红色子图有三个子图, 黄色子图有两个子体, 绿色子图也有两个子体
通过图神经网络学习子图的表示。 互不相连的邻域构成了子图内的子体 components。左图的红色子图有三个子图, 黄色子图有两个子体, 绿色子图也有两个子体

子图神经网络的一些难点

  • 对的大小和结构不一致的子图做预测

    • 子图节点数和连接数都能相差很远
    • 有些子图的节点可以非常散布在全局图中, 如何表示这些不是 k-hop 的子图呢?
  • 多样的关连规律(connectivity pattern),既有子图内部的,也有和外部的连接

    • 如果将这些信息一起传输到GNN中呢?
  • 子图既可以只是局域的,仅仅收缩在全局图中的一小个区域;

  • 子图又可以是散布的, 分布在全图的多个区域。

描述子图拓扑结构的特征

上面提到了子图的拓扑结构以及它所导致的建模难点。下面我们介绍SubGNN是如何建立特征来描述这些规律的。

SubGNN 通过三个channel 分别掌握子图的三个特征:位置 P, 领域 N 和 结构 S。这三个 channel 的定义都在👆, 我也不一一介绍了。

而这其中的每个特征又分为子图内 (Internal) 和边缘 (Border) 有着不同的定义。边缘呢,就是指子图内任一节点的k-hop neighor 的所有点(举个奇怪的例子🌰, 就是你实验室的任一成员的k个关系最好的朋友们)。

子图内含有子体 (components),我们之前说了子图可以是散布的, 如果一个子图分布在图的两个区域, 一个区域内的节点会互相连接但是和另一个区域的节点没有直接连接, 那么我们就说这是两个子体。 比如说图3 的子图表示学习中左边网络的红色子图有三个子体, 黄色子图有两个子体, 绿色子图也有两个子体。

子图 Message Passing Network

🤨 如何把一头大象装进冰箱?  分三步:1️⃣ 打开冰箱;2️⃣ 把大象塞进去; 3️⃣关上冰箱。

😯 如何用MPN 做消息传播?  也是三步: 1️⃣ MSG 构建消息; 2️⃣ AGG 汇聚消息; 3️⃣ UPDATE 更新消息

一般的Message Passing 一般都是对节点进行, 通过把各个节点的 node vector 在全局图 中传播, 获得其他节点的信息并且凝聚为该节点的新 vector。但是对子图,我们又要如何进行 Message Passing呢, 信息又如何在子图和图中其他区域进行传播❓

一个直接的办法是, 把图 的其他节点也都转化为子图! 这样全局图就由节点水平整体转化为了子图水平。Marinka 它们将这个转为的过程描述为锚点采样的过程 , 代表了channel, 也就是 P, S, N 。

由此, 我们可以把原本用于结点的 MSG 在子图水平上使用👇。 式中 是衡量子体 和锚点 的相似度的函数。 则是锚点的一个 learned embedding, 通过锚点的encoder 得到,对于每个channel, 的定义略有不同。

之后便是水到渠成,  AGGUPDATE 也在构建好的消息 上进行操作。

AGG 汇集消息的过程就是把所有锚点到子体的消息💬 都合在一起构建 UPDATE 更新消息的过程就是把汇聚好的消息 和上一层的隐变量 并列, 再通过一个普通的神经网络, 是可学习的网络参数 然后 是该层的激活函数。

message passing at subgraph level for each channel separatelysource : Figure 2 A of *Subgraph Neural Networks, NeurIPS 2020*
message passing at subgraph level for each channel separately
source : Figure 2 A of *Subgraph Neural Networks, NeurIPS 2020*

注意到上述的每个步骤都是针对下标 , 就是说每个channel 单独进行。 从锚点开始到最后更新消息,每个channel 的representation 单独编码,比如途中到四个灰色锚点, 其中一个是S channel 的, 一个是N channel的, 还有两个是P channel的。 channel之间的锚点并不共享, 然后锚点和子体之间传输信息就有了

SubGNN 的模型构架。 三个Channel分别提取子图的信息,最后组合在一起构成representation source: Figure 2 B of *Subgraph Neural Networks, NeurIPS 2020*
SubGNN 的模型构架。 三个Channel分别提取子图的信息,最后组合在一起构成representation
source: Figure 2 B of *Subgraph Neural Networks, NeurIPS 2020*

每个channel 的消息更新到最后一层得到 , 就传出encoder 并且和其他的channel的合并所以上图中 的就含有三种颜色。而下标 其实代表的是子图中的子体1而已,把所有子体合并起来才得到最终的子图的embedding 。 由此信息一层一层往上融合,从channel到子体再到子图,整个subgraph message passing是多层次的。

最后我们回顾子图预测的问题, 给定子图的集合 , 我们的利用SubGNN的message passing 构架 来提取 维的子图表示 。 然后我们再基于 构建SubGNN的子图分类器 来预测子图的类别, 。整个过程就MPN的地方最为困难, 当得到representation之后, 我们就能用常用的方法构建分类器,并且以end-to-end的方式训练 了。

SubGNN 的表现

  source : Table 3 of Subgraph Neural Networks, NeurIPS 2020

SubGNN在这几个任务中的基本都能超越Baseline 不少, 除了最后一个任务。我们最早提到的诊断任务对应着上表中的 HPO-NEUROHPO-METABPPI - BP也是个有趣的任务, PPI就是我们熟悉的蛋白-蛋白互作网络, 然后 BP 就是 GO enrichment analysis 中的Biological process , 所以base graph 就是ppi网络, 然后GO里gene set 就能作为子图 , 最后预测子图所属的 Biological process 为 EM-USER 好像是根据用户的健身历史来推测用户画像的任务,apple health 和 keep 感觉很适用。

🤔我的一些想法

  • Diagnosis Task 有必要用子图来建模吗,如果把 phenotype 当作一个个token, 把病人当作document 应该也可以吧?

    • 那么在这种情况下我们就可以设计一些embedding 来利用phenotype-phenotype的网络。
    • 疾病的标签最后可以当作document 的topic 来预测?
  • 锚点的采样过程没有说清楚, 我看关于sampler 的描述迷迷糊糊的, 讲的全都是如何sample node,那我姑且认为它把这些sample好的节点就组成了子图?

    • 那么encoder 的描述也不是很清楚。对于只有一个节点的subGrpah, 把node embedding 直接返回作为锚点的embedding当然没有问题。
    • 但是如果 包含多个节点, 那embedding到底是如何得到的这个没有说的很清楚。
  • 最后performance 的部分, 如果我们仔细看看Baseline的表现。就发现有些任务在node level表现比较好, 有些在Graph level 表现得好,而综合了这两者特点的SubGraph却并不能保证能表现地更好。 比如说HPO-NEUROHPO-METAB

    • 因此每种任务并不能简单地总结为更适合哪个graph level。在这种情况下,模型的构架也起到了非常关键的作用。
    • 这么看来, 的提出也是有其必要性的。

分类:

人工智能

标签:

深度学习

作者介绍

m
miller
V1