distill
distill是网页形式的期刊,其中有许多非常棒的可视化讲解,力求把晦涩难懂的研究工作讲得通俗易懂。
非常适合初学者学习。
其中有两篇发布于
Sept.2,2021
的有关图神经网络的博客,文章脉络清晰。
- A Gentle Introduction to Graph Neural Networks
- Understanding Convolutions on Graphs
以下将参考这两篇论文展开。
A Gentle Introduction to GNN
Motivation
我们身边到处都是图,一系列对象以及他们之间的关系可以自然地表示为图。
图神经网络近期在能力和表现力上有了长足进步,应用有:细菌发现、物理模拟、虚假新闻检测、交通预测、推荐系统。
为什么要用图神经网络?
相对于传统的神经网络,GNN可以胜任更复杂的数据模型。在之后的文章中我们可以看到,图的结构更多变,输入没有固定的大小。图片和语言都可以看作是一类特殊的图数据。
应用在传统数据格式上的神经网络无法直接处理普遍格式的图数据。
概念说明
什么是图?
图表示了一系列实体以及实体之间的关系。通常包含点集和边集。在GNN语境下,图通常包含三个要素。
- V:点集(点特征集)
- E:边集(边特征集)
- U:图整体(全局特征)
万物皆可图?
图是非常强大、普遍且灵活的数据结构,这里用两个例子来说明图的普遍型,加深对于图概念的认识。
- 图像:基本的对于图像的认识就是具有固定位置信息的像素点的集合。我们也可以将每个像素点看作是一个
node
,将相邻关系看作是edge
。由此就可以将图表示成图数据的形式。 - 文本:文本是
word
序列,同样可以将单独的word
用node
表示,将相邻word
的连接关系用directed edge
表示。
当然,用图结构来表示图像和文本是一种冗余的表示方式,它们都拥有
regular structures
正规结构,有各自更适合的相对精简的表示方式。
这里只是说明了图的强大表示能力。换句话说,图中元素个体之间的关系可以是随意组合的,而传统任务中元素个体之间的关系是单一不变的,可以理解图为更普遍的数据组织形式。
图表示实际应用的领域
有了上面对于图的认识,接下来我们就可以专注于一些其它类型的数据,这些数据结构更多变,每个结点的临边个数可能不同,能够胜任这些数据的表示的数据结构只有图。
- 分子图:分子可以理解为由原子和电子构成的
3D
结构。我们用node
表示原子,用edge
表示原子间的距离(化学键类型)。 - 用图表示的社交网络:用
node
表示人,用edge
表示关系。聚类或分组。 - 引用网络:论文引用网络。
- 其它例子:机器学习模型、编程语言、数学等式…等很多神奇但又自然的表示方式。
解决问题的类型
图上的问题粗略来分有三类:图-级别、边-级别、点级别。分别对应了图的三要素。
- 图-级别任务:目标是预测整个图的性质。
可以类比到图像识别或是文字情感分析,只需要给出整体是否具备某个属性的预测结构。 - 结点-级别任务:预测图中结点的身份或作用。
最经典的问题是Zach's karate club
。简单来说就是将图中的点分成两类。可以类比计算机视觉中的实例分割任务,需要对每一个像素属于的类别进行预测。 - 边-级别任务:预测边的属性或边的有无。
一个例子就是对于图像场景的理解,对于实例分割后的图像,用图的形式组织所有实例,并预测实例间的关系。从而能够理解图像。
机器学习中使用图面临的问题
在解决图相关问题以前,第一步是解决图和神经网络的兼容问题。
机器学习通常接收矩阵或网格阵列作为输入,需要想办法将图表示成这种格式。
图中蕴含四种我们可能用到的信息:结点、边、全局信息、连通性。
- 前三者具有相当直白的表示,可以很容易地用矩阵表示出来。
- 而连通性的表示就复杂一些。通常情况下使用的邻接矩阵在GNN中有一些缺点:
- 边少时矩阵过于稀疏,造成空间浪费。
- 同一个图可以对应多个邻接矩阵,邻接矩阵隐含了人为的结点排序,而不同的排序方式不能保证结果不变性。与结点无序要求相违背。
下一个部分提出了问题的解决方案。
Contribution
GNN前的准备
之前提到直接用邻接矩阵表示图的临界性信息会存在一些问题。为了方便解决图和神经网络的兼容性,构建可行的GNN,需要特殊处理邻接信息的表示。
采用邻接列表存储连通信息。解决了稀疏问题和顺序问题。
# Nodes
[0, 1, 1, 0, 0, 1, 1, 1]# Edges
[2, 1, 1, 1, 2, 2, 1]# Adjacency List
[[1, 0], [2, 0], [4, 3], [6, 2], [7, 3], [7, 4], [7, 5]]#列表存储特征信息,用序号对应关系绑定边和连通性。
#这里用标量表示特征信息,通常使用向量表示。
有了这些准备,就可以着手开始构建GNN了。
图神经网络
GNN是对于全图属性的优化转换,同时保持了图的对称性。
GNN的输入和输出时具有相同连通性的图,只是对于结点、边和全局信息的嵌入属性做了优化更新。使用“消息传递神经网络”框架构建GNN。会用到图网络结构图表。
最简单的GNN
最简单的GNN中,只需要得到
V E U
的i虚拟的嵌入表示,不考虑连通性信息。
GNN使用独立的多层感知机(MLP)对所有的图的组成部分进行应用。输入是一个图,用MLP更新(U,V,E)
后输出新图。
U n → f U n → U n + 1 U_n\rightarrow f_{U_n} \rightarrow U_{n+1} Un→fUn→Un+1
E n → f E n → E n + 1 E_n\rightarrow f_{E_n} \rightarrow E_{n+1} En→fEn→En+1
V n → f V n → V n + 1 V_n\rightarrow f_{V_n} \rightarrow V_{n+1} Vn→fVn→Vn+1
输入输出的信息规模完全相同,只是更新了嵌入信息的值。
注意这里(U, V, E)
都是单独计算的,并没有用到连通性信息。
能汇聚信息的GNN
GNN的特点就是Pooling Inofrmation,上一个GNN实际过于简单。
假设目前需要对结点类型进行预测,最简单的方式就是使用上一种方法中输出的结点嵌入信息再过一次线性层得到分类结果。但这种方法过于直接,效果和适用范围受限。例如,当确实结点信息时,必要通过边信息的汇聚来得到缺失的结点的嵌入信息。
汇聚过程包括两步:
- 将所有需要汇集的嵌入信息个体连接成一个矩阵。
- 将这些嵌入信息聚合,通常通过一个求和函数。
上述过程: ρ 指汇聚函数, C 指最终分类层 \rho指汇聚函数,C指最终分类层 ρ指汇聚函数,C指最终分类层
V n ρ E n → V n → C V n → 结点预测值 E n ↗ V_n \quad \rho_{E_n\rightarrow V_n} \rightarrow C_{V_n} \rightarrow 结点预测值 \\ E_n \nearrow \qquad \qquad \qquad \qquad \qquad VnρEn→Vn→CVn→结点预测值En↗
汇集函数 ρ \rho ρ可以跨类型实现信息汇聚的过程,上述方法是从边到结点的汇聚,通过各种
源--目标
组合可以实现不同的汇聚类型。
但目前仍没有使用到连通信息,接下来将说明连通信息如何引入。
Passing message between parts of the graph
可以通过GNN层内的汇聚实现更为复杂的预测。为了引入连通信息,可以让相邻结点之间或边之间进行信息传递,互相影响,通过连通信息实现汇聚。
信息传递工作包括三步:
- 获取所图中所有的邻居结点的嵌入信息。
- 通过合计函数(like sum)合计所有信息
- 所有汇聚的信息通过更新函数(usually a learned neaural network)向下传递。
U n → ρ V n → V n → f U n → U n + 1 U_n\rightarrow \rho_{V_n \rightarrow \ V_n}\rightarrow f_{U_n} \rightarrow U_{n+1} Un→ρVn→ Vn→fUn→Un+1
以上过程类似于卷积,都是通过邻居信息来更新结点(像素)信息。但在GNN中,邻居的个数是不固定的。
有了以上的方法,可以实现
(V, E, U)
之间或自身的信息汇聚过程,可以任意组合。达到补全缺失信息或提高预测能力的目标。
汇聚的顺序对最终效果是有影响的。
有关全局信息的解释
这里可以解释为什么要用到全局信息
U
。有些时候通过邻居的汇聚很难得到整个图的一些信息,可以先将所有结点的信息汇集到全局信息U
(也叫主结点、上下文向量),再将该信息汇聚到每一个结点,从而使结点获取到包含远端信息的全局信息。
最基础版GNN原理--大功告成
综上,所有的图属性都得到了学习的表示,我们可以在池化
pooling
过程中将我们感性趣的属性与其它信息相关联得到输出。
为了实现不同长度的嵌入信息之间的传递,可以利用线性层将所有信息映射到相同空间上。
(或使用特征调制层`feature-wise modulation layer, 可以被认为是一种特征调制注意力机制)
尽力日更ing…
Understanding Convolution on Graphs
Motivation
图相对于其它数据形式的优势
许多系统和相互作用的整体可以自然地用图来表示。