图神网络:它主要用于图、节点、边的特征向量表示。 将这些特征表示用于分类任务、预测、识别等。下图为图神经网络的计算流程。
#前沿:跟着李沐老师学习一篇讲解GNN的博客:《A Gentle Introduction to Graph Neural Networks》【来源:A Gentle Introduction to Graph Neural Networks,若文中图不清晰可移步原文查看,交互友好】
*概述:GNN模型的每一层是基于图的结构连接而成【图1展示了GNN的整体概要,是一个可交互的图,清晰地展示了上一层的每一个节点是由下一层的哪些节点贡献(聚合)而成】
图1:GNN概述(可交互)
*对GNN的简短背景介绍:GNN提出是在十几年前,直到目前,能力有了极大地提升。但场景不算太多,可以继续探索,特别在是一些结构化数据上。
*后续介绍结构:1)图的简要介绍;2)数据如何表示成图;3)图的三大任务;4)ML至图上的挑战;5)GNN讲解;6)一个playground;7)相关话题的讨论。
1)图的简要介绍
1.1. 图的概念:可以表示一系列实体(顶点,node)之间的关系(边,edge)。【图2展示了一个图的三个属性,分别用V、E、U代表顶点、边、全局图】
图2: 图的相关属性展示(可交互)
1.2. 以上三个属性由什么表示:向量(Embedding)【见图3,例如V用6维向量表示,E用8维向量表示,G用5维向量表示,GNN要关注的重点——这些Embedding参数能否通过train set学习得到】
图3: 图上三个属性的Embedding表示
1.3. 图的分类:无向和有向
2)数据如何表示成图(举例)
2.1. 图片-->图:如何将图片的像素点转换为图的表示【图4左是图片像素,图4中是连接矩阵(蓝色代表行和列的两个顶点是有边/相连接的),图4右是抽象出来的图】
图4:图片-->图的表示
2.2. 文本-->图:如何将文本序列转换为图的表示【见图5,文本可以看出一个序列,因此可以看成一个有向边】
图5:文本序列转换为图表示
2.3. 其它信息-->图:如:分子信息-->图,社交网络-->图,文章引用关系-->图等【同理可得,节点和边赋予相关含义即可】【见表1:一些可表示成图的场景】
表1:一些可表示成图的场景
3)图的三大类任务【图level,顶点level,边level】
3.1. 图level任务举例:识别分子结构是否包含2个环,即给一个图,对图进行分类,【见图6】
图6:图level的任务
3.2. 顶点level任务举例:两个老师决裂,区分学生属于哪个老师的阵营,即一个节点上的二分类问题【见图7】
图7:顶点level的任务
3.3. 边level任务举例:拳击赛中预测场景中三个人的关系,即给定节点上的边(关系)预测问题【见图8】
图8:边level的任务
4)运用ML(主要指NN)至graph上的挑战
【定义:N个顶点,M条边,一个直接的思路是采用N*N的矩阵表示边】
4.1. 代表边的矩阵太大了:解决办法-->使用稀疏矩阵
4.2. 矩阵的不同的排序表示的是同一个信息:解决办法-->使用储存高效且对顺序无关的方式【如下图9,其中Adj列表长度与Edge向量一样,列表中的每个元素表示边的两个顶点,且满足顺序无关】【这确实提高了存储的效率,原来是N*N,现在是M*2】【注意:实际结合NN时采用[N, N-dim]的Tensor】
图9:信息在不同图上的表示方法
5)正式步入GNN模型
5.1. GNN概念:一个对图上的所有属性可以进行优化的transform,且能够保存图的对称信息,具有三个特点:
特点 | |
---|---|
1 | 输入与输出的形式均是图(顶点、边均定义好) |
2 | 它会对属性(顶点、边、全局信息)进行变换 |
3 | 整个过程,图的连接性(connectivity,即哪些顶点的信息被连接)是不变的 |
5.2. GNN的简单构建:基于MLP【如图10所示,每一个 �? 训练不用的向量,分别建立MLP模型(输入size=输出),三个MLP独立进行并形成一个GNN的层,因此将得到一个属性被更新但结构不变的new图】
图10:基于MLP的GNN简单构建示例
5.3. GNN最后一层的输出如何得到预测值,分为以下几种情况:
A. 情况一:例如对得到的顶点做简单的预测【见图11,比如两个老师决裂,区分学生属于哪个老师的阵营,即进行二分类,因此顶点后面要连接一个全连接层并进行分类】【注意:所有顶点共享一个MLP】
图11:简单节点分类
B. 情况二:只有边向量,但需要对顶点做分类预测,此时需要进行Pooling【见图12,可以将与点相连接的边的向量拿出来,然后使用Aggregate函数进行Pooling,然后接一个全连接层输出(示意图见图13)】
图12:需要Pooling的节点分类
图13:情况二的示意图
C. 情况三:只有顶点向量,但需要对边做分类预测,此时需要进行Pooling【示意图见图14,可以将边的两端的顶点向量拿出来,然后使用Aggregate函数进行Pooling,然后接一个全连接层输出】
图14:情况三的示意图
D. 情况四:只有顶点向量,但需要对全局(U)向量做预测,此时需要进行Pooling【示意图见图15,可以将图中所有顶点使用Aggregate函数进行Pooling,然后接一个全连接层输出】
图15:情况四的示意图
【整体来看:示意图如下图16所示】
图16:GNN模型解决分类问题的整体示意图
5.4. 以上图16的局限性:未在GNN blocks中考虑连接信息,因此没有合理地将图的信息更新到属性里面,最终导致输出的结果不能leverage图的信息。
5.5. 解决5.4的方法:信息传递(Passing messages)【见图17,将某个顶点的向量与之相邻顶点的向量进行aggregate处理,再送入MLP得到转换(更新)的向量】【注意:这和CNN的卷积相似,但不同之处在于CNN的filter是有weight的,但这里只是简单的aggregate】【注意:多层的叠加(每一层之间均进行消息传递)将使得最高层中的顶点将邻居以及邻居的邻居的信息汇聚起来,进而完成图的长距离的消息传递的过程】,消息传递分为以下三种情况:
图17:基于消息传递的GNN模型
A. 一近邻下的GNN模型(从顶点进行信息汇聚):【见图18,和图17表达的含义一致】
图18:从顶点进行信息汇聚(汇聚过程和CNN的卷积层类似)
B. 一近邻下的GNN模型(从边和顶点进行信息汇聚):先将顶点信息传递给边,再将边的信息传递给顶点【见图19,顶点到边的传递-->是指将边的两端顶点向量进行aggregate,边到顶点的传递-->是指将顶点周围的边的向量进行aggregate,然后再进到独立的MLP进行学习】【另外,见图20:可以反过来,先E后V进行汇聚;也可以交替两个顺序进行汇聚】
图19:边和顶点进行信息汇聚
图20:上:先E后V和汇聚过程和先V后E的汇聚过程,下:交替进行的汇聚过程
5.6. 全局信息(U):首先假设图很大且连接不够紧密时,消息的传递需要走很远的步,因此需要考虑全局信息。它的解决方案是加入一个master 点(或者context向量)来代替表征U,这个点与所有的V和E都相连(抽象的概念)。因此,在进行消息传递时,需要将U连到V和E,再进行MLP【见图21】
图21:加入全局信息U的GNN示意图
5.7. 整体总结:以上是一个基于消息传递的GNN模型【如图22,与attention机制相似:一个query(类似于顶点)汇聚与它相近的东西(已知图的信息)】
图22:基于消息传递的GNN的工作示意图
6)基于javascript的playground(比较酷炫可以玩一玩)的性能分析(以分子二分类为例):可调节参数-->层数、embedding大小、汇聚、信息传递(博客中实验表明影响最大)的方式,最好是具体情况具体考虑。
7)相关话题的讨论
7.1. 其它的图的类型,例如multigraphs、hypergraphs、hypernodes、hierarchical graphs:不同的图在信息汇聚时会产生不同的影响【见图23】
图23:多图(左)和层级图(右)的含义展示
7.2. 如何对图采样并进行batch
A. 为什么要进行图采样:由于在计算梯度时,需要把整个forward里面的所有中间变量保存下来,如果图的连通性很好,最后一个顶点可以表征整个图,意味着需要保存大量 中间结果进行计算,导致了无法承受的计算量。
B. 如何进行采样:从大图上面采样一些小图,在小图上进行信息汇聚,在计算梯度时,只需要记录小图上的中间结果就可以。采样方法分为以下几种:随机点sampling找邻居点构建子图、随机游走sampling构建子图、先随机游走再找邻居点构成子图、随机一个点求解K近邻构成子图(扩散sampling)【和NN里面的dropout很像】
7.3. inductive基础:图的对称性(交换顶点顺序,GNN作用不变)
7.4. GCN:解释为作为子图的函数近似【见图24】【图18也是一个GCN】
图24:GCN的解释
7.5. GAN(图注意力网络):前面提到的汇聚是权重的直接相加(aggregate的一种),与位置没有关系因此。因此可以采样attention机制的做法:权重取决与两个顶点之间的关系(顶点的向量可以相乘再softmax进行注意力机制的权重分配)