Machine Learning for Graphs
一、Application of Graph ML
图机器学习的任务可以分为四个类型:
- N o d e l e v e l Node\ level Node level(结点级别)
- E d g e l e v e l Edge\ level Edge level(边级别)
- C o m m u n i t y ( s u b g r a p h ) l e v e l Community(subgraph)\ level Community(subgraph) level(社区/子图级别)
- G r a p h l e v e l p r e d i c t i o n , G r a p h g e n e r a t i o n Graph\ level\ prediction,Graph\ generation Graph level prediction,Graph generation(图级别,图生成)
典型的图机器学习任务有:
-
N
o
d
e
c
l
a
s
s
i
f
i
c
a
t
i
o
n
Node\ classification
Node classification:(结点分类)
主要做的是预测结点的属性- 应用实例:对在线用户/项目进行分类
-
L
i
n
k
p
r
e
d
i
c
t
i
o
n
Link\ prediction
Link prediction:(链接预测)
主要做的是预测两个节点之间是否缺少链接- 应用实例: K n o w l e d g e g r a p h c o m p l e t i o n Knowledge\ graph\ completion Knowledge graph completion
-
G
r
a
p
h
c
l
a
s
s
i
f
i
c
a
t
i
o
n
Graph\ classification
Graph classification:(图分类)
主要做的是将不同的图及逆行分类- 应用实例:分子属性的预测
-
C
l
u
s
t
e
r
i
n
g
Clustering
Clustering:
主要做的是检测节点是否形成社区- 应用实例:社区搜索
-
O
t
h
e
r
t
a
s
k
s
Other\ tasks
Other tasks:
-
G
r
a
p
h
g
e
n
e
r
a
t
i
o
n
Graph\ generation
Graph generation(图生成):
- 应用实例:药物发现
-
G
r
a
p
h
e
v
o
l
u
t
i
o
n
Graph\ evolution
Graph evolution(图演变):
- 应用实例:物理模拟
-
G
r
a
p
h
g
e
n
e
r
a
t
i
o
n
Graph\ generation
Graph generation(图生成):
n o d e l l e v e l nodel\ level nodel level应用实例: P r o t e i n F o l d i n g Protein\ Folding Protein Folding
蛋白质有一些列氨基酸组成,氨基酸之间相互作用,在局部形成类似螺旋、薄片的形状,这些形状折叠起来称为更大尺度的三维蛋白质结构。
所以需要做的是:仅基于蛋白质的氨基酸序列,来预测蛋白质的三维结构。
这一直以来都是一个难以完成的任务;最近 A l p h a F o l d AlphaFold AlphaFold的提出,解决了 P r o t e i n F o l d i n g Protein\ Folding Protein Folding问题。
其关键思想是:构建 S p a t i a l g r a p h Spatial\ graph Spatial graph
- N o d e s Nodes Nodes:蛋白质序列中的氨基酸构成 S p a t i a l g r a p h Spatial\ graph Spatial graph的节点
- E d g e s Edges Edges:氨基酸之间的邻接关系构成 S p a t i a l g r a p h Spatial\ graph Spatial graph的边
通过对 S p a t i a l g r a p h Spatial\ graph Spatial graph的学习,搭建深度学习模型,预测节点(蛋白质氨基酸序列)在空间中的位置,从而预测蛋白质的三维结构。
e d g e l e v e l edge\ level edge level应用实例: D r u g S i d e E f f e c t s Drug\ Side\ Effects Drug Side Effects(药物副作用)
在现实生活中,许多病人会同时复用多种药物以治疗疾病,不同的药物之间相互复用可能会导致一些副作用。然而因为有很多的药物,所以很多药物组合的副作用还未知晓。
所以需要做的是:给定一对药物,预测其可能的不良副作用。
现有的研究已有通过 B i o m e d i c a l G r a p h L i n k P r e d i c t i o n Biomedical\ Graph\ Link\ Prediction Biomedical Graph Link Prediction对该问题进行了求解。
其思想是构建一张只包含两种类型的异构网络图:
- N o d e s Nodes Nodes:节点由药物 D r u g s Drugs Drugs和蛋白质( P r o t e i n s Proteins Proteins)组成
- E d g e s Edges Edges:若药物之间会相互作用、药物与蛋白质之间相互作用、蛋白质之间会相互作用,则在两节点之间连接一条边。
如下图:
对于某两个药物,如
S
i
m
v
a
s
t
a
t
i
n
Simvastatin
Simvastatin和
C
i
p
r
o
f
l
o
x
a
c
i
n
Ciprofloxacin
Ciprofloxacin,我们可以预测一起服用时,分解肌肉组织的可能性有多大。其实就是这两个药物之间存在
r
2
r_2
r2边的可能性;如下图:
S
u
b
g
r
a
p
g
−
l
e
v
e
l
Subgrapg-level
Subgrapg−level应用实例:
T
r
a
f
f
i
c
P
r
e
d
i
c
t
i
o
n
Traffic\ Prediction
Traffic Prediction(交通预测)
如地图软件上的到达目的地的路线长度、耗时的预测。
此问题可以将公路网络作为一张图:
- N o d e s Nodes Nodes:将路段作为节点
- E d g e s Edges Edges:若两路段之间是连通的,则添加一条边
之后就可以使用图神经网络预测到达时间。
G r a p h l e v e l Graph\ level Graph level应用实例: D r u g D i s c o v e r y Drug\ Discovery Drug Discovery(药物发现)
一些抗生素可以表示为一些小的分子,而分子可以表示成一张图:
- N o d e s Nodes Nodes:原子作为节点
- E d g e s Edges Edges:化学键作为边
接下来搭建一种图神经网络图分类模型,输入一组候选分子结构图,从候选分子中预测有希望是抗生素的分子。
即通过 G r a p h Graph Graph来判断该分子是否含有某种属性,如判断该分子结构图中是否有两个环。
G r a p h g e n e r a t i o n Graph\ generation Graph generation应用实例: G e n e r a t i n g n o v e l m o l e c u l e s Generating\ novel\ molecules Generating novel molecules(生成新分子)
如构建一个图生成模型,学习现有的分子模型,从而生成一个新的具有某种属性的新分子(如耐高温属性)
G
r
a
p
h
e
v
o
l
u
t
i
o
n
Graph\ evolution
Graph evolution应用实例:
P
h
y
s
i
c
a
l
s
i
m
u
l
a
t
i
o
n
Physical\ simulation
Physical simulation
通过构建一整物理模拟图:
- N o d e s Nodes Nodes: 粒子作为节点
- E d g e s Edges Edges: 粒子之间的相互作用做为边
接下来构建一个模型,根据例子当前的位置、邻域粒子的关系,来预测图将如何演变。
二、Choice of Graph Representation
图的组成部分:
-
节点(对象实体): n o d e , v e r t i c e s node,vertices node,vertices;
-
边(节点间的交互): l i n k s , e d g e s links,edges links,edges
-
图(节点和边构成整张图): n e t w o r k , g r a p h network,graph network,graph
通常使用 N N N表示节点, E E E表示边, G ( N , E ) G(N,E) G(N,E)表示整个图。
图是一个通用的表示语言:
- 将演员通过电影之间的合作关系构建一张图:
- 人际关系图,边代表不同的关系:
需要根据需求来构建合适的图:
- 如果想把同事们关联起来,可以构建一个职业关系图
- 如果想把相互引用的科学论文连接起来,可以构建引文图
构建一个合适的图,需要考虑:
- 什么将组成图的节点
- 什么将组成图的边
对给定领域/问题选择适当的网络表示,决定了我们成功使用网络的能力。
D i r e c t e d v s . U n d i r e c t e d G r a p h s Directed\ vs.\ Undirected\ Graphs Directed vs. Undirected Graphs:
U
n
d
i
r
e
c
t
e
d
G
r
a
p
h
s
Undirected\ Graphs
Undirected Graphs(无向图):
无向图中的边是没有没有方向的,即节点之间是相互联系的。如下图:
D
i
r
e
c
t
e
d
G
r
a
p
h
s
Directed\ Graphs
Directed Graphs(无向图):
有向图中的边是有方向的,即节点之间的交互通常是单项的。如下图:
N o d e D e g r e e s Node\ Degrees Node Degrees:
无向图节点的度:与节点相邻的边数
如下图
A
A
A节点的度
k
A
=
4
k_A=4
kA=4;
无向图平均度: k ˉ = 1 N ∑ i = 1 N k i = 2 E N \bar{k}=\frac{1}{N}\sum\limits_{i=1}^Nk_i=\frac{2E}{N} kˉ=N1i=1∑Nki=N2E
2 E N \frac{2E}{N} N2E:
2 × 2\times 2×边的数量 ÷ ÷ ÷顶点的数量
每条边都会为顶点贡献度数2,所以2E即所有顶点的度数之和
在有向图中,定义了入度和出度。
顶点的出度:以顶点为起点的边数。
- 如上图 C C C的出度: k C o u t = 1 k^{out}_{C}=1 kCout=1
顶点的入度:以顶点为终点的边数。
- 如上图 C C C的出度: k C i n = 2 k^{in}_{C}=2 kCin=2
节点的(总)度是进出度的和。
- 节点 C C C的度: k C = k C o u t + k C i n = 3 k_C=k^{out}_{C}+k^{in}_{C}=3 kC=kCout+kCin=3
有向图平均度: k i n ˉ = k o u t ˉ = E N \bar{k^{in}}=\bar{k^{out}}=\frac{E}{N} kinˉ=koutˉ=NE
每条边只会贡献一个入读和一个出度,所以总的出度=总的入度=E
B i p a r t i t e G r a p h Bipartite\ Graph Bipartite Graph:(二部图)
B
i
p
a
r
t
i
t
e
G
r
a
p
h
Bipartite\ Graph
Bipartite Graph中有两种类型的节点,即节点可以被分成两个不相交的集合
U
U
U和
V
V
V,
U
U
U和
V
V
V之间存在链接。如下图:
实例:
-
A
u
t
h
o
r
s
−
t
o
−
P
a
p
e
r
s
Authors-to-Papers
Authors−to−Papers:
根据 A u t h o r Author Author撰写论文的关系,将 A u t h o r Author Author与 P a p e r s Papers Papers链接。 -
A
c
t
o
r
s
−
t
o
−
M
o
v
i
e
s
Actors-to-Movies
Actors−to−Movies:
根据演员在电影中是否出现链接电影实体和演员实体 -
U
s
e
r
s
−
t
o
−
M
o
v
i
e
s
Users-to-Movies
Users−to−Movies:
根据用户对电影的评分,评分高则将用户实例和电影实例链接
F o l d e d / P r o j e c t e d B i p a r t i t e G r a p h Folded/Projected\ Bipartite\ Graph Folded/Projected Bipartite Graph:(投影图)
如下图,可以将中间的 B i p a r t i t e G r a p h Bipartite\ Graph Bipartite Graph投影成 P r o j e c t e d U Projected\ U Projected U和 P r o j e c t e d V Projected\ V Projected V。
P
r
o
j
e
c
t
e
d
U
Projected\ U
Projected U中节点
U
U
U的链接关系可以根据
B
i
p
a
r
t
i
t
e
G
r
a
p
h
Bipartite\ Graph
Bipartite Graph来确定,如
1
、
2
、
3
1、2、3
1、2、3节点之间都链接了相同的节点
A
A
A,则可以认为
1
、
2
、
3
1、2、3
1、2、3节点是连通的,所以在
P
r
o
j
e
c
t
e
d
U
Projected\ U
Projected U中链接
1
、
2
、
3
1、2、3
1、2、3节点。
个人想法:
就是将异构图 B i p a r t i t e G r a p h Bipartite\ Graph Bipartite Graph通过某个元路径将其转换为同构图。
该方式在存储稀疏图的时候会花费大量内存存储不存在的边。
图的表示方式:
A d j c e n c y M a t r i x Adjcency\ Matrix Adjcency Matrix:
- 无向图:
- A i j = A j i A_{ij}=A_{ji} Aij=Aji
- 若 i i i到 j j j有一条边, A i j = 1 A_{ij}=1 Aij=1;否则 A i j = 0 A_{ij}=0 Aij=0
- k i = ∑ j = 1 N A i j k_i=\sum \limits_{j=1}^{N}A_{ij} ki=j=1∑NAij
- 有向图:
- A i j = A j i A_{ij}=A_{ji} Aij=Aji不一定成立
- 若 i i i到 j j j有一条边, A i j = 1 A_{ij}=1 Aij=1;否则 A i j = 0 A_{ij}=0 Aij=0
- k i o u t = ∑ j = 1 N A i j k^{out}_i=\sum \limits _{j=1}^{N}A_{ij} kiout=j=1∑NAij
- k i i n = ∑ i = 1 N A i j k^{in}_i=\sum \limits _{i=1}^{N}A_{ij} kiin=i=1∑NAij
E d g e l i s t Edge\ list Edge list:
将图组织成一个关于边的列表;如下图
但是该方式不利于进行图的操作,如计算出度、入读都需要遍历整个列表,代价太大。
D d j a c e n y l i s t Ddjaceny\ list Ddjaceny list(邻接列表):
构建长度为
V
V
V的列表,第
i
i
i个列表存
i
i
i顶点的邻居节点;如下图:
该方法适用于存储稀疏矩阵,减少内存消耗。
为了丰富图的表示信息,可以为边、顶点和图添加属性;
对节点和边可添加的属性如下:
- W e i g h t Weight Weight:权重
- R n a k i n g Rnaking Rnaking:排名
- T y p e Type Type:类型
- S i g n Sign Sign:标记
- 与图结构相关的属性 与图结构相关的属性 与图结构相关的属性:如共同节点的数量
权重图与无权重图:
若在边上添加了 w e i g h t weight weight,则该图是一个权重图;否则是无权重图。
可以通过邻接矩阵来表示权重图与无权重图;如下图:
S e l f − e d g e s ( s e l f − l o o p s ) : Self-edges(self-loops): Self−edges(self−loops):
图中存在以相同顶点为终点和起点的边;如下图:
M u l t i g r a p h Multigraph Multigraph:
顶点之间可以存在多条边;如下图:
C o n n e c t e d ( u n d i r e c t e d ) g r a p h Connected (undirected)\ graph Connected(undirected) graph:(无向连通图)
任何两个顶点都可以用一条路径连接起来
一个不连接的图是由两个或多个连通分量组成的:
具有多个连通分量的图的邻接矩阵可以写成块对角线形式,这样非零元素就被限制在某个方形区域,其他元素都为零:
C o n n e c t e d ( d i r e c t e d ) g r a p h Connected (directed)\ graph Connected(directed) graph:(有向连通图)
- 有向强连通图:
任何两个顶点都可以用一条路径连接起来 - 有向弱连通图:
如果我们忽略边的方向是连通的
图中的 { A 、 B 、 C } \{A、B、C\} {A、B、C}构成的子图就是一个强连通图;而整张图是一个弱连通图。
S
t
r
o
n
g
l
y
c
o
n
n
e
c
t
e
d
c
o
m
p
o
n
e
n
t
s
(
S
C
C
s
,
强连通分量
)
Strongly\ connected\ components (SCCs,强连通分量)
Strongly connected components(SCCs,强连通分量):
有向图中可以构成强连通图的子图。如
{
A
、
B
、
C
}
\{A、B、C\}
{A、B、C}构成的子图就是一个强连通分量