A Gentle Introduction to Graph Neural Networks

一、 什么样的数据最自然地表达为一个图形,以及一些常见的例子

图的基本知识

所谓图就是实体间的关系(A graph represents the relations (edges) between a collection of entities (nodes).)

图神经网络图模板 图神经网络入门_学习


图神经网络图模板 图神经网络入门_神经网络_02


顶点用黄色来表示,用向量来表示(6个值),高矮就是值的大小。

边用蓝色来表示,用向量来表示(8个值),高矮就是值的大小。

红色表示全局图信息。

如何把我们想要的信息表示成这些向量,以及向量是不是能能通过数据来学到,这是整个图神经网络关注的重点。

图一般分为有向图和无向图。左为无向图,右为有向图。

图神经网络图模板 图神经网络入门_学习_03

数据如何表示成图

图片:将图中的每个像素表示为一个点,如果像素之间有连接关系的话,那么对应的图中就有一条边。如下,左边为图,右边则是对应的邻接矩阵。每个非边界像素正好有8个邻居,每个节点上存储的信息是一个代表像素RGB值的三维向量。

图神经网络图模板 图神经网络入门_深度学习_04


文本:文本可以认为是一条序列,把每一个词表示为一个顶点,当前词和下一个词有一个有向边

图神经网络图模板 图神经网络入门_图神经网络图模板_05


分子图:分子是物质的组成部分,在三维空间中由原子和电子构成。所有的粒子都是相互作用的,但当一对原子彼此保持稳定的距离时,我们说它们共享共价键。不同的原子对和键有不同的距离(例如单键、双键)。将这个3D对象描述为一个图形是一个非常方便和常见的抽象,其中节点是原子,边是共价键。

图神经网络图模板 图神经网络入门_图神经网络图模板_06


社交网络图:社交网络是研究人们、机构和组织集体行为模式的工具。我们可以通过将个人建模为节点,将他们的关系建模为边,来构建一个表示人群的图。任何人物同时在一个场景栗出现的话,就会有一条边。

图神经网络图模板 图神经网络入门_学习_07


图神经网络图模板 图神经网络入门_神经网络_08


引用图:一篇文章引用另一篇文章,则会有一个有向的边一些生活中实际图表格参数

图神经网络图模板 图神经网络入门_图神经网络图模板_09


如第一张图(空手道俱乐部,karate club):只有一张图,34个节点(表示34个人),78边(表示78次比赛),平均每个点有4.5条边,最大有7条。

二、图的任务和使用时的特殊选择

图的一些任务

将数据表示为图之后,可执行的任务。可以分为三大类:图级,顶点级,边级。在图级任务中,我们预测整个图的单个属性。对于节点级任务,我们预测图中每个节点的一些属性。对于边级任务,我们希望预测图中边的属性或存在。

图级:对于一个以图形表示的分子,我们可能想要预测该分子的气味,或者它是否会与与疾病相关的受体结合。对图进行分类,图中是否有两个环。

图神经网络图模板 图神经网络入门_神经网络_10

节点级任务与预测图中每个节点的身份或角色有关。判断节点属于John A还是Mr. Hi。

图神经网络图模板 图神经网络入门_深度学习_11


边级任务:学习节点之间的属性是什么,节点直接的关系。

图神经网络图模板 图神经网络入门_子图_12

机器学习中使用图的一些挑战

第一步是考虑如何表示与神经网络兼容的图形。图中有四种信息:节点属性,边的属性,全局的一些信息和连接线(每条边到底连接的是哪两个点)。前三个可以用向量很好的表示。而连接线可以使用邻接矩阵来表示,两个点之间有连接值为1,否则为0。但是存在一些问题,这个矩阵可能会很大,虽然可以用稀疏矩阵来表示,但是把稀疏矩阵用在GPU上比较难。另一个问题是,有许多邻接矩阵可以编码相同的连接性,并且不能保证这些不同的矩阵在深层神经网络中产生相同的结果(也就是说,它们不是置换不变的),虽然视觉上不一样,但都表示的是同一个东西。

图神经网络图模板 图神经网络入门_学习_13


为了解决这个问题,可以采用如下的方法。

如下图,该图中有8个节点,七条边。每个点的属性是一个标量(也可以是向量),每边和全局信息也是如此。除此之外还维护了一个邻接列表,其长度和边数是一样的,第i项表示第i条边连接的两个节点。

图神经网络图模板 图神经网络入门_图神经网络图模板_14


该结构把边和所有属性储存下来,所以在存储上是高效的。而且对于顺序是没有关系的,可以把边或则节点任意打乱,把邻接列表做对应的改变即可。

三、 构建一个现代GNN,遍历模型的每个部分,从该领域的历史建模创新开始

什么是GNN

GNN是对图的所有属性(节点、边、全局上下文)的优化变换,它保持图的对称性(置换不变性,节点另外排序后图是不会变的)。可以使用信息传递网络(message passing neural network)来构建GNN,其输入输出都是图,这意味着这些模型类型接受图形作为输入,将信息加载到其节点,边和全局上下文,并逐步转换这些嵌入,而不改变输入图的连接性。

最简单的GNN

该GNN在图形的每个组件(节点向量,边向量,全局向量)上使用单独的多层感知器(MLP)(或您最喜欢的可微模型);我们称之为GNN层。对于每个节点向量,我们应用MLP并返回一个学习的节点向量。我们对每一条边做同样的事情,学习每一条边的嵌入,也对全局上下文向量做同样的事情,学习整个图的单个嵌入。

每一个MLP输出的向量大小和输入是一样的。U—全局,V—节点,E—边,这三个MLP组成了一个GNN层。输入时,对于节点向量,边向量,全局向量,找到他们对应的MLP,然后放进去得到输出作为对应的更新。输出也是个图,结构一样,但是属性被更新过。而且MLP对每个向量独自作用,不会考虑连接信息,所以不管对节点如何排序都不会改变结果。与神经网络模块或层一样,我们可以将这些GNN层堆叠在一起。

图神经网络图模板 图神经网络入门_图神经网络图模板_15


我们已经构建了一个简单的GNN,但是我们如何在上面描述的任何任务中进行预测呢?

例如对一个节点做预测(如二分类),因为每个节点已经有一个向量来表示了,可以直接在后面加一个输出维度为2的全连接层,在softmax得到输出。不管有多少个节点,都共享一个全连接层。

图神经网络图模板 图神经网络入门_神经网络_16


但是图形中的信息可能存储在边中,但节点中没有信息,但仍然需要对节点进行预测。我们可以使用pooling来实现。

预测点的向量 = 所有连接边向量之和+全局向量,这里假设节点,边,全局向量维度是一样的,不一样需要做投影。不同的点由于连接关系不同,最后得到的向量也不同。

图神经网络图模板 图神经网络入门_学习_17


因此,如果我们只有边缘级别的功能,也能试图预测二进制节点信息。

图神经网络图模板 图神经网络入门_图神经网络图模板_18


节点预测边,边的两边节点加起来得到边的向量。

图神经网络图模板 图神经网络入门_子图_19


节点预测全局,所有节点加起来,得到一个全局向量,进入输出层。

图神经网络图模板 图神经网络入门_深度学习_20


最简单的GNN完整模型如下图。请注意,在这个最简单的GNN公式中,我们根本没有在GNN层中使用图的连通性。每个节点、每个边以及全局上下文都是独立处理的。我们只在汇集信息进行预测时使用连接性。

图神经网络图模板 图神经网络入门_神经网络_21

使用信息传递在GNN层中加入连接信息

图神经网络图模板 图神经网络入门_子图_22


对某一节点向量进行更新,把它的向量和其邻接节点的向量加起来(这里直接相加,并没有权重分配),把汇聚的向量输入MLP得到该点向量的更新。

这个方法和图片中的卷积有相似之处,本质上,消息传递和卷积是聚合和处理元素的邻居信息以更新元素值的操作。在图形中,元素是一个节点,在图像中,元素是一个像素。然而,图形中相邻节点的数量可以是可变的,这与图像中每个像素都有一定数量的相邻元素不同。当很多层堆积起来时,最后一层的节点其实汇聚了很多节点的信息的,所以完成了整个图的比较长距离的信息传递。

图神经网络图模板 图神经网络入门_子图_23


我们可以使用消息传递在GNN层内的节点和边缘之间共享信息。

如下图,把节点的信息传递给边,再把边的信息传递给节点。首先先把两个节点的向量加到他们的边的向量上,维度不同则投影。再把该节点连接的所有边的向量加到节点向量上,维度不同则投影。先把节点的信息给边做更新,再把更新过的边的信息给节点做更新,也可以反过来,得到不同的结果。

图神经网络图模板 图神经网络入门_神经网络_24


图神经网络图模板 图神经网络入门_学习_25


当然,也可以交替更新,同时节点汇聚到边,边汇聚到节点。

图神经网络图模板 图神经网络入门_子图_26


目前任然有一个问题,在图中彼此相距较远的节点可能永远无法有效地将信息传递给彼此,即使我们应用了多次消息传递。因此加入了一个master node 或者说 context vector,这是一个虚拟的点,可以连接所有的节点和边(一个抽象的概念,与边相连表示其有边的信息),原文中用U来表示,V是节点,E是边。在边和节点汇聚信息时会同时加入全局U,最后会把所有的E,V汇聚来更新U。

图神经网络图模板 图神经网络入门_深度学习_27


对于一个节点预测时,我们可以用本身的向量,也可以考虑来自相邻节点、连接边和全局信息的信息做加法,或者直接合并。

四、 GNN游乐场和图的其他知识

GNN游乐场

游乐场展示了一个带有小分子图的图级预测任务,使用Leffingwell气味数据集,该数据集由具有相关气味感知(标签)的分子组成。大家可以在原文博客中体验游乐场。博客原文:https://distill.pub/2021/gnn-intro/

图神经网络图模板 图神经网络入门_深度学习_28


参数的调节,横轴为模型学习参数的大小,竖轴为AUC。

图神经网络图模板 图神经网络入门_学习_29


图神经网络图模板 图神经网络入门_图神经网络图模板_30


GNN对超参数比较敏感,可以调的东西有很多。如网络层数,每个属性的embedding有多大,汇聚使用什么操作,如何做信息的传递等等。

其他图

节点间可以有其他种类的边,图也可以分层等等。

图神经网络图模板 图神经网络入门_深度学习_31

图的采样

对图进行采样和batch。当图网络有很多层的时候,最后一层的节点,如果只看它的近邻,这个节点也会有很多的消息传递,能够看到一个很大的图,甚至是整个图的信息。在计算梯度时,我们要把整个forward里面的所有中间变量存下来。如果最后一层的节点要看整个图的话,那么意味着在对它算梯度的时候,就要把整个图的中间结果存下来,这样可能导致整个计算GPU无法承受。所以需要对图进行采样,每次采样一个小图出来,在小图上做信息汇聚,这样算梯度时,只需要这个小图的中间结果就可以了。

采样方法一:随机采样一些点,把最近的邻居找出来,构成一个子图,在这个子图上做计算。

采样方法二:随机走,随机找一个节点,从个结点出发。随机选择边走,规定步数。

采样方法三:结合方法一和二,比如随机走三步,再把节点的邻居节点加入子图。

采样方法四:找一个节点。取它的一近邻,二近邻,三近邻等。

图神经网络图模板 图神经网络入门_图神经网络图模板_32


由于每个节点的邻居个数不一样,怎样把这些节点和它的邻居通过合并成一个规则的张量,这是一个有挑战性的问题。

任何一个神经网络都有一个假设在里面,如CNN假设空间变化的不变性,RNN假设的时序的延续性,GNN的假设就是保留了图的对称性(不管怎样交换图的节点,GNN对它的作用不变),没有一个聚合操作比其他更好。

图神经网络图模板 图神经网络入门_子图_33


GCN图卷积神经网络,GCN如果有k层,每一层都看一个它的邻居的话,每一个最后一个节点看到的是一个子图,这个子图大小是k(最远的节点离该节点的距离是k,每过一层往前看一步,每个节点都是看以自己为中心的,往前走k步子图信息的汇聚),GCN可以认为是有n个这样的子图。

图神经网络图模板 图神经网络入门_深度学习_34

其他知识

可以把点和边做对偶,可以把边变成点,点变成边,其邻接关系不变。
在图上做卷积或者random walk等价于,把它的邻接矩阵拿出来做一个矩阵乘法。
Graph Attention Networks:在做汇聚时,之前时直接把节点,边,全局信息加起来的。由于需要权重对位置信息不敏感,可以使用注意力机制,权重取决于两个节点向量之间的关系,这样就可以给每个点一个权重。

总结

该总结内容来于B站李沐视频讲解,也就是本文的视频讲解链接。
学习图需要有一定的机器学习的背景。
图是一个非常强大的东西,但是它的强大也带来了很多问题:很难在图上做出优化,图一般比较稀疏,每一个结构是一个动态的结构,有效的在CPU、GPU、加速器上计算是一件比较难的事情;图神经网络对超参数比较敏感,整个网络结构长什么样子,怎么进行采样,以及整个优化,都很敏感。
图神经网络门槛比较高,这些年吸引了很多人对他的研究,但在工业界上的应用还需要时间的积累。
很多图是交互图(既是优点(非常漂亮)又是缺点(门槛太高,有时用一个公式可以清晰的将其表达出来))。
1.什么是图?图的属性应该用向量来进行表示。对于顶点、边、全局都用向量来表示它的属性。
2.现实生活中的现象怎么表示成图,怎么对顶点、边、全局进行预测?
3.机器学习的算法用到图上有什么挑战?
4.定义GNN:GNN就是对属性做变换,但不改变图的结构。
5.属性有缺失可以做聚合操作,把边的数据拿到结点上面,补足缺失的数据。
6.GNN:每一层里面通过汇聚操作,把信息传递过来,每个顶点看邻接顶点的信息;每个顶点看邻接边的信息或全局的信息。在每一层上如果能对信息进行充分的汇聚,那么GNN可以对图的结构进行一个发掘。
7.实验:做了很多实验,可以看到参数对实验结果的影响。