GNN理论

图神网络:它主要用于图、节点、边的特征向量表示。 将这些特征表示用于分类任务、预测、识别等。下图为图神经网络的计算流程。

#前沿:跟着李沐老师学习一篇讲解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进行注意力机制的权重分配)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值