图神经网络GNN

本文介绍了图神经网络的基础概念,展示了其在处理生活中的各种问题,如文本、图像、分子结构、社交网络和推荐系统中的应用。文章详细解释了节点、边和整体特征,以及GNN的工作原理和改进方法,包括递归神经网络和抽样策略。
摘要由CSDN通过智能技术生成

零基础理解图神经网络GNN

图的信息较大,并且没有固定的参考坐标(视觉里的网格可以参照上下左右,NLP的文本可以参照左右),所以在处理起来必须按照合适的结构来处理,这篇文章就用GNN,GCN网络来解决这一问题

注:本篇博客参考distill原文章和李牧老师的讲解,得出自己的一些理解,文章链接如下,废话不多说,现在就开始!

A Gentle Introduction to Graph Neural Networks (distill.pub)

一.生活中哪些问题可以用图神经网络解决

1.文字序列

我们可以通过将索引关联到每个字符、单词或标记,并将文本表示为这些索引的序列,从而将文本数字化。这将创建一个简单的有向图,其中每个字符或索引都是一个节点,并通过一条边连接到它后面的节点。
在这里插入图片描述

注意一般的文字序列都是有向的!所以构造出来的邻接矩阵或者稀疏矩阵都是根据有向图来构造的。

2.图像

没错,图像也可以用图来表示

我们通常认为图像是带有图像通道的矩形网格,将它们表示为三维向量(例如,244x244x3浮点数)。考虑图像的另一种方式是将图像视为具有规则结构的图形,其中每个像素代表一个节点,并通过边缘连接到相邻的像素。每个非边界像素正好有8个邻居,存储在每个节点上的信息是一个表示像素RGB值的三维向量。

可视化图的连通性的一种方法是通过它的邻接矩阵。我们对节点进行排序,在本例中,每个节点在一个简单的5x5的笑脸图像中有25个像素,并填充一个n_nodes×n_nodes矩阵

如果两个节点共用一条边。请注意,下面这三种表示都是同一数据块的不同视图:

在这里插入图片描述

从左至右依次是图像的像素点图,图像的邻接矩阵图,图像转化为图来表示。

3.分子结构

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

香料分子标示图
香料分子的图表示

在这里插入图片描述

​ 咖啡因分子的图表示

4.社交网络

社交网络是图形。社交网络是研究人们、机构和组织的集体行为模式的工具。我们可以通过将个体建模为节点,将他们的关系建模为边来构建一个表示人群的图。

在这里插入图片描述

​ 奥赛罗人物关系图

在这里插入图片描述
​ 跆拳道馆人物关系图

与文本不同,社交关系是一种无向关系。

5.推荐系统

现在推荐系统(如抖音,快手)等都使用图神经网络,在这里就只简要提一嘴吧

在这里插入图片描述

二.图神经网络的特征及相关任务

1.节点特征及相关任务

节点特征:

字面意思,我们关注的更多的是点本身蕴藏的信息,而对边和整体的考虑程度大幅度降低。那么点与点之间的位置关系,距离关系,以及每个点具体的含义将成为我们重点研究的东西。当然,抽取节点特征的方法有用特征向量中心化,中介中心性,接近中心性,聚类系数,图基元等

在这里插入图片描述

相关任务:

节点级任务关注于预测图中每个节点的身份或角色。

节点级预测问题的一个经典例子是扎克的空手道俱乐部。

该数据集是一个单一的社交网络图,由在政治分歧后宣誓效忠两个空手道俱乐部之一的个人组成。随着故事的发展,Hi先生(教练)和John H(管理员)之间的不和导致了空手道俱乐部的分裂。节点表示单个空手道练习者,边缘表示空手道之外这些成员之间的交互。预测问题是,在争执之后,一个给定的成员是忠于Hi先生还是忠于John H。在这种情况下,节点到讲师或管理员之间的距离与该标签高度相关。

在这里插入图片描述

可以看出来,在两位教练决裂前,俱乐部的每个成员其实就按照两平时与两位教练的接触程度来围绕两个教练形成了一个社交关系图,那么在决裂后,我们预测的问题就变成了一个二分类问题:即根据决裂前的社交关系图来确定每个成员究竟跟哪位教练。

2.边特征及相关任务

边特征:

与点特征同理,只不过我们把关注点主要放在了边上,而放松对其他信息的提取。在一些算法题目中,如迪杰斯特拉,弗洛伊德算法中,每条边(路径)都有相应的权重。没错,权重也是非常重要的一个边特征,除此之外,还有距离特征,局部领域重叠特征,全局领域重叠特征等

在这里插入图片描述

相关任务:

图中剩下的预测问题是边缘预测。

边缘级推理的一个例子是图像场景理解。除了识别图像中的对象之外,深度学习模型还可以用于预测它们之间的关系。我们可以将其描述为边缘级分类:给定代表图像中对象的节点,我们希望预测这些节点中的哪些节点共享一条边或该边的值是多少。如果我们希望发现实体之间的联系,我们可以认为图是完全连接的,并根据它们的预测值修剪边缘,得到一个稀疏图。

在这里插入图片描述

​ 左上为原始图a,右上为中间图b,下面的图为c图

在上面的(b)中,原始图像(a)被分割成五个实体:每个跆拳道者、裁判、观众和垫子。©显示了这些实体之间的关系。

在左边,我们有一个从之前的视觉场景构建的初始图形。右边是根据模型的输出修剪一些连接时,这个图可能的边缘标记。

在这里插入图片描述

3.图整体特征及相关任务

图整体特征:

图的整体特征就是例如判断这个图是不是环,是否为完全图等。具体的抽取图整体特征方法有:Graphlet图向量,Weisfeiler-Lehman 图向量。

图整体的相关任务:

在图级任务中,我们的目标是预测整个图的属性。例如,对于用图形表示的分子,我们可能想要预测分子的气味,或者它是否会与与疾病有关的受体结合。

在这里插入图片描述

上图就是基于输入的分子特征来判断是否有环,有几个环,这类似于使用MNIST和CIFAR的图像分类问题,我们希望将标签与整个图像关联起来。对于文本,一个类似的问题是情感分析,我们想要一次识别整个句子的情绪或情感。

4.基于子图的特征

我们不仅可以了解全局图,还可以抽取出一些局部特征图来作为我们研究的重点,例如我们想研究该分子的原子个数最多的环:

在这里插入图片描述

又或者在GPS系统中,导航系统只会研究当前以及四周的地段而不会分析全局:

在这里插入图片描述

5.最终得到的表示方法

在这里插入图片描述

我们得到的每个顶点的信息转化成一个1×6的向量(具体任务中表示长度一般不同,下同),每条边的信息转化为一个1×8的向量,而整体的信息转化为一个1×5的向量。

至此第二部分结束,那么如果你想更全面地了解一下以上特征,我给大家推荐一篇文章:

图神经网络-传统图特征提取方法 - 知乎 (zhihu.com)

三.如何高效存储和顺序无关存储图的信息

1.为什么需要上述两点的原因

在处理实际问题时,如果节点个数过于庞大,比如说战争与和平中出现的人物个数,那么这样构造出的邻接矩阵将会非常庞大,非常不适合作为嵌入数据导入模型中,那么稀疏矩阵呢?稀疏矩阵虽然可以高效存储数据,但是它又不方便计算,尤其是在GPU,TPU上计算。

更为重要的是,矩阵上的节点的表示顺序应该与模型的最终输出无关,而不是我只要改变节点的位置顺序,结果就不一样了。这里我放张图:

在这里插入图片描述

可以看到的是,仅仅四个节点,我们想让C,D相连,就有24种不同的排序方式。但是!我们要做到的是,把这24张矩阵放入同一个模型中,输出结果必须完全相同(因为本来这24张图的表示的信息就完全相同,就是C与D相连(在这里不考虑距离因素)),所以这就是第二个核心问题所在

2.如何解决

要想解决这一问题,其实只需要引入合适的数据结构,在这里以稀疏列表作为例子:

在这里插入图片描述

正如你看到的,所有的数据都放在了列表里,并且只保存了有用的信息,这个例子中,节点共有8个,0代表权重是0(对应浅色),1代表权重为1(对应深色);边也是同理,比如说第一个2代表着第一个顶点与第二个顶点的连线的权重;第三个列表就是哪些点之间对应连接了,其实上面的边列表就是根据这个列表得到的;最后用0表示了全局的信息。当然每一个数字可以换成向量来表示,得到一个稀疏的向量列表。

四.什么是GNN以及深入理解

概括来说:将一张图式的数据输入到GNN中,在导入GNN的过程中,节点,边对应的向量可能会被改变,但是节点和边对应的连接关系不会被改变。最终会得到一个同样是图的输出数据,输出的图和输入的图相比,顶点,边,以及全局信息会发生一些变化。(但是顶点之间的连接情况仍然不会改变)

1.最简单的GNN结构

最简单GNN的每一层就是三个MLP,每个MLP分别对节点向量,边向量,全局向量来处理,在处理过程中,属性级别的信息(如具体的向量值)会发生改变,但是结构信息不会发生改变。但是,我没几乎没有可能一次性获得图的所有数据,比如我们只有节点信息而没有边信息和全局信息,又或者只有边信息没有节点信息和全局信息,这时候我们需要通过pooling(汇聚)在这里插入图片描述
来解决(是不是很熟悉呢CNN的标准配方)。以下三种方法均为汇聚操作,汇聚的原理是信息传递的特殊情况。

1.1缺少节点信息

如下图所示,当我们缺少节点信息的时候,我们可以将与它相邻的边嵌入向量和全局向量抽出来并相加,就得到了这个点的向量,然后进入点的输出层得到点信息的输出,注意这时候所有点是共享一个全连接层的。

在这里插入图片描述

1.2缺少边信息

如下图,当我们缺少边信息的时候,我们需要根据与它连接的节点的向量相加得到边向量,然后进入边的输出层得到边信息的输出。注意这时候所有边是共享一个全连接层的。
在这里插入图片描述

1.4缺少全局信息

当我们缺少全局信息时,其实可以根据你自己的需要取边向量和点向量相加得到全局向量,最后再经过全局向量的输出层得到全局的输出,因为全局只有一个,所以不存在共享的问题,就是它独有的全连接层。

在这里插入图片描述

把上面的内容总结起来就得到了最简单GNN的所有步骤:

在这里插入图片描述

给你一个图数据,首先进入一系列的GNN层,得到属性已经变化的向量,如果缺失某些信息就加入汇聚层,再把得到的向量放入分类层,得到最后的输出。(以上面教练决裂为例子,那么我就是要把节点信息放入GNN层,最后经过二分类来预测这个学员会跟随哪个教练)

但是但是!上述GNN有一个致命的局限性,那就是——在进入MLP之前以及在MLP过程处理过程中,我们并没有考虑不同属性之间的关系,我们甚至没有把相邻的节点做考虑(相同属性之间),如点与边的关系,我们只是把节点,边,全局的枯燥的向量放入到MLP中各自训练,所以得到的结果会有很大的局限性。

2.改进后的GNN

我们可以尝试把一个节点与它相邻的节点的向量做一个汇聚操作得到一个转换后的新的该节点向量,这个过程原理也是信息传递。

具体来说就是:

1.对于图中的每个节点,收集所有相邻节点嵌入(或消息)

2.通过聚合函数(如sum)聚合所有消息。

3.所有汇集的消息都通过一个更新函数传递,通常是一个学习的神经网络。

这些步骤是利用图的连接性的关键。我们将在GNN层中构建更精细的消息传递变体,从而产生具有更强表现力和更强大功能的GNN模型。改进后如下:

在这里插入图片描述

我们在得到向量和后,通过的f函数就是MLP,会把向量和转化为新向量,而这个新向量就包含了相邻的节点信息。

这跟图像上的卷积很像,但是卷积的窗口是固定的,也就是在计算权重的每个窗口下的像素点的贡献程度是固定的,像素点的数量也是固定的。但是在消息传递中,相邻的节点可能有多个,并且贡献的权重也不是固定的,但是得到的结果仍然是多通道的,不是卷积,但和卷积非常像。另外,卷积层的堆砌可以让最后的像素点的视野非常大,可以看到很久之前的像素点,而GNN中的MLP通过堆砌,也将邻居节点以及邻居的邻居诸如此类考虑进来。

那么既然节点与节点之间可以传递信息,我们之前说在经过MLP后可把考虑不同属性(节点与边)进行信息传递,这个过程我们完全可以在MLP之前就实现:

在这里插入图片描述

如上图,我们完全可以现将节点信息转化为边信息(如果二者向量维度不同,需要额外乘上一个投影矩阵),再加上原有的(如果有)边信息得到新的边向量,新边向量后在乘上另一个投影矩阵再加上原有的节点向量转化为新的节点向量,最后二者其实都得到了更新。

那么完全也可以先更新节点向量,再更新边向量(下图作为对比)。那么这两种到底谁更好不得而知,但我们完全可以两者综合起来

在这里插入图片描述

综合之后的结果:

在这里插入图片描述

这样交替实现,同时汇聚,有原信息就加上原信息。注意我们可以通过投影矩阵来嵌入维度,也可以通过concat合并操作让整个过程没那么复杂

那说了这么久,一直在说节点和边信息,也该聊聊我们的全局信息了!

如果说图很大,或者连接不够紧密,那聚合就需要走很远很远的路。假设a和b是很远的毫不相干的节点,那么通过k层MLP后,信息也仅仅是传递了k步,所以我们需要一种能有效计算这种问题的计算方式。

这里介绍了一种解决方案:master node(全局节点) or context vector(上下文向量),这两种是一个虚拟的、抽象的点,与所有的节点和边相连。

在这里插入图片描述

那么在计算汇聚层的时候,我们就需要把U的信息加进来,因为默认U是与所有的节点和边是相连的。

最终,我们得到了改进后的GNN:即把我们感兴趣的向量都可以加进来

在这里插入图片描述

这些向量我们可以投影相加,也可以直接concat,具体问题具体来分析。

五.博客中的相关实验

这部分很有意思,作者煞费苦心地把整个参数和训练后的系统通过二维形式嵌入到了javascrip之中,有情趣的朋友可以去看一下,地址就是我放在最上面的链接。里面的点有边缘颜色和实心颜色,边缘颜色是真实值,实心颜色是预测值。并且整个模型以accuracy作为参考指标,该指标越大表示模型效果越好。

总结一下:

GNN对于超参数还是比较敏感的,可以调的参数也比较多

1.层数

2.嵌入层向量的长度

3.汇聚操作选择

4.信息传递的方式

六.GNN在反向传播中的不同方法

1.递归神经网络

递归网络是从叶子节点开始向上计算,直到计算到supersource

在这里插入图片描述

这是GNN的反向传播计算公式。我们知道在RNN,LSTM的反向传播过程中,后面的节点需要用到之前的信息,所以RNN和LSTM就是经典的递归网络,在GNN中也可以类似表示,只不过GNN是可以有环的,所以更加普适。

在这里插入图片描述

GNN基于递归网络的图解

2.基于抽样的方法。

因为GNN的节点/边之间用到的是同一个权重矩阵,所以在反向传播的时候其实也没必要把所有的forward信息记录下来,只需要随机地采样,记录一部分节点以及该节点所在子图的forward信息。这样可以大大减少计算量。常见的基于抽样的方法有:

  • 随机节点采样

  • 随机游走采样

  • 三步走,同时记录出邻居节点形成子图

  • k近邻采样法

    但是由于邻居数量的不同以及其他因素,将不同的结点汇聚成为新向量的方法将成为一个挑战性命题。

七.结论

图是一种功能强大且丰富的结构化数据类型,它具有与图像和文本截然不同的优势和挑战。在本文中,我们概述了研究人员在构建基于神经网络的图处理模型方面所取得的一些里程碑。我们已经介绍了在使用这些架构时必须做出的一些重要设计选择,希望GNN的背景可以直观地了解这些设计选择的经验结果是什么。近年来GNN的成功为广泛的新问题创造了一个很好的机会,我们很高兴看到这个领域将带来什么。

谢谢大家!下一期将会全面讲解GCN。码字不易,有帮助就点赞收藏吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光诺言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值