文章目录
CS224W: Machine Learning with Graphs
公式输入请参考: 在线Latex公式
这节是嘉宾课,貌似每年请的嘉宾不一样,讲的主题也不一样,这里是GNN和生物、医学上的应用。不是这个研究方向,大概记录一下idea。
背景介绍
因为Biology is Interconnected,具体的讲就是药物对人体的影响不是针对某个单一的分子结构,而是对某些生物网络,因此整个过程可以看做是图的计算。
在一篇11年的重磅期刊文章给出的假设是:
影响同一疾病的蛋白质之间相互作用是增加趋势。
其推论是:
相互作用的蛋白质的突变常常导致类似的疾病。
问题与挑战
- 网络涉及到从分子到整个种群的异质相互作用。
§ 挑战是如何在计算上操作这些数据并使其适合于ML。 - 网络包含来自不同来源的数据,包括实验读数、策划的注释、元数据。
§ 没有单一的数据类型可以捕捉到理解疾病等现象的所有必要因素。 - 由于固有的自然变化和测量平台的限制,网络是有噪音的。
§ 缺失的数据、重复的测量和矛盾的观察会困扰着分析。
药物及药物组合的安全性
很高比例的老年人需要服用5种以上的药物,这些复合药物造成的副作用非常多。
挑战
1.组合种类多:根据现有的药物种类,2种药物的可能组合大于13万,3种药物则大于20亿
2.药效的非线性:两种药物混合带来的效果往往不是单个药品的效果进行叠加
3.吃某几个组合药品组合的样本量往往较小
解决方案:Polypharmacy Knowledge Graph
这个就是典型的Encoder+Decoder的结构,当然,这个是异质(包括边也是多类型)网络。
Encoder求每个节点的表征。
这里的每一层embedding的公式大概如下:
Decoder用embedding预测两个节点是否有边。
如下图吃两个节点
C
,
S
C,S
C,S表征,得到边的预测概率:
Polypharmacy Dataset
可以看到第一个图中有三角形和圆形,代表不同类型的节点,这里三角形是药物,圆形是节点,因此边的大类型分为:
其中药物与药物的关系又细分:
当然不止则两个,整个数据集大约1000个不同边类型。
构造的数据集:
边类型 | 数量 | 说明 |
---|---|---|
drug-drug edges | 4,651,131 | Patient data from adverse event system, tested for confounder【FDA批准的】 |
drug-protein edges | 18,596 | |
protein-protein edges | 719,402 | Physical, metabolic enzyme coupled, and signaling interactions物理、代谢酶偶联和信号传导的相互作用 |
药品和蛋白质节点特征分别来自药物的化学分子结构和蛋白质的成员结构。
例子
预测辛伐他汀和环丙沙星一起服用时,会不会破坏肌肉组织?
效果
副作用预测
这些预测研究是2012年做的,预测的结果还有部分在后面的研究中被证实。
这个研究的进一步研究是针对某些特定患者群的研究,上面的研究是有预测说哪些药物一起服用会有不良副作用,但是针对人群不一样结果也可能不一样,例如同样两种药物,30岁以下吃可能没有什么问题,60岁以上吃可能会有严重副作用。
患者预后及疾病分类
医生的诊断过程就相当于将观测到的病人的症状(表型,一个病对应多个表型)在医学上对应到相应的病
因此从机器学习角度上看诊断可以看做是分类任务。具体描述如下:
从表型(vocabulary of phenotypes)库中构建图
G
G
G,其中节点就是表型,边则是表型之间的关系,每个病人可看做一个表型的集合,相当于图
G
G
G中的一个子图
S
S
S.
任务:预测表型集合子图
S
S
S的标签
目标:学习子图的embedding,并在特征空间中最大限度保存子图拓扑结构信息,也就是说当
S
i
,
S
j
S_i,S_j
Si,Sj的拓扑结构相似时,他们的embedding越接近越好:
挑战
1.子图大小会相当不一样,这些子图不能使用固定的𝑘-hop领域表示;
2.从上面的input的图示例来看,子图包含非常丰富的连接,除了内部还有外部的(与其他子图),用GNN如何表示这些信息。
3.子图可能在图中的位置会集中或在分散分布:
解决方案:Subgraph Neural Networks
直接粘贴一下,大概就前面讲的东西的数学notation
这个模型提出了一个新的子图预测任务,与之前我们学习的Node prediction、Link prediction、Graph prediction:不一样。
Overview
1.层次化的消息传递
Propagate messages from anchor patches to subgraphs
Aggregate messages into a final subgraph embedding
2.从3个channel(position, neighborhood, structure)进行消息路由,从而捕获子图的拓扑结构
这两个模块分别说明如下:
Subgraph Message Passing
这里用到属性x(应该是下面三个通道),用来过滤(指定)从anchor patches传递过来的消息;anchor patches是从图
G
G
G中随机采样的子图辅助节点,其中
A
P
,
A
N
,
A
S
A_P,A_N,A_S
AP,AN,AS分别代表position, neighborhood, structure
上面的图中,如果我们要获取子图
S
1
S_1
S1的embedding,就是上面红色的点,可以看到它在整个图中有两个部分组成:
S
1
(
1
)
,
S
1
(
2
)
S_1^{(1)},S_1^{(2)}
S1(1),S1(2)
anchor patches可以帮助两个分散子图互通消息??
Property-aware Routing
上面提到,SubGNN为position, neighborhood, structure创建了3个通道。如下图所示每个通道
x
x
x都有三个关键元素:
1.Similarity function
γ
x
:
(
S
(
c
)
,
A
x
)
→
[
0
,
1
]
\gamma_x:(S^{(c)},A_x)\rightarrow[0,1]
γx:(S(c),Ax)→[0,1]
用来为anchor patches与子图的消息传递计算权重
2.Anchor patch采样函数
φ
x
:
(
G
,
S
(
c
)
)
→
A
x
\varphi_x:(G,S^{(c)})\rightarrow A_x
φx:(G,S(c))→Ax
用来从除子图外的其他位置随机采样Anchor patch
3.Anchor patchencoder
ψ
:
A
x
→
a
x
\psi:A_x\rightarrow a_x
ψ:Ax→ax
用于将采样到的patch提取为embedding
以上函数可以训练中学习或预训练。
Subgraph Datasets
这里的数据集是将基础+子图的模式,怎么+子图下面显示了两种方式
总之然后子图的标签有下面一些常见的基准来获取:
DENSITY tests if a method can capture the internal structure of subgraphs
CUT RATIO tests if a method can capture border structure
CORENESS tests if a method can capture border structure and position
COMPONENT tests if a method can capture internal and external position
实验结果不解读了,SOTA
对于真实数据集(看了一下,大意是针对人类疾病为base graph,影响人类疾病或代谢等因素做子图标签)预测结果也很棒
新药研发
传统的药品研发对于某些突发疾病是不适用的,例如20年至今的新冠疫情,没有时间给你做迭代开发,实验测试,门诊验证,有关部门批准上市。更现实的策略是依靠药物再利用。这就要求我们要在临床上被批准的药物中,找出对COVID-19患者有治疗作用的药物。
传统的药物研发:
这里当然要提一下万艾可,原来貌似是扩张血管的药物,刚开始研发的时候只针对心脏病研制的,后来发现。。。
挑战
做这个事情需要大量带标签的数据,但是实际上基本上很少
正在开发的新药、新的疾病、罕见疾病、难以诊断的病人,这些都很少有类似参考样本。
解决思路:Meta Learning到Few Shot Learning
Meta-learning model从公式看上去和普通的机器学习差不多,但是这里每个数据集看做是一个数据样本。
模型将对大量的学习任务进行训练,然后优化最佳性能的任务分布,包括潜在的未见过的任务。
每个任务与数据集
D
D
D关联,数据集中包含特征向量及标签,优化的模型参数为:
θ
∗
=
arg
min
θ
E
D
∼
p
(
D
)
[
L
θ
(
D
)
]
\theta^*=\arg\underset{\theta}{\min}\mathbb{E}_{\mathcal{D}\sim p(\mathcal{D})}[\mathcal{L}_\theta(\mathcal{D})]
θ∗=argθminED∼p(D)[Lθ(D)]
Few-Shot Learning是Meta-learning在监督学习领域的实例化。目标是当我们只有少量的标签时,仍然可以在一个新图或新标签集上进行预测。
K-shot N-class classification:N类中的每一类都有K个标记的例子。
推广到图上得到的就是:
G-Meta
下图中的Meta-learner需要通过观察同一图中的其他标签集来对一个未见过的标签集进行分类。
每个任务都是一批来自同一图中不同标签集的几个节点/边。
下面是关于节点分类的示例(Label set 3是之前没有出现过的):
原理
训练GNN对随机子图的局部结构进行学习。
学习出来的模型可以做few-shot link prediction。
原理比较直觉。GNN有两个法宝:
1.Label propagation: 相同标签的节点一般会在图中聚集
2.Structure similarity:相同标签的节点往往会有相似的网络邻域结构
在few-shot 学习任务中,标签比较稀疏,因此法宝1不好使,尤其是大图更加难以捕获Graph-level的embedding,因此subgraphs可以很好的获取结构信息。
G-Meta learns a metric to classify query subgraph using the closest point from the support set. [It compares query subgraph embedding to the support subgraph embedding]
G-Meta学习了一个指标,使用支持集中最接近的点对查询子图进行分类。[它将查询子图嵌入与支持子图嵌入进行比较] 。
这个玩意有严格的数学证明。
后面用新冠数据做了一些实验得到了一些结果,这里看不懂,不展开。