图神经网络

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

目录

什么样的数据表示为图的

数据表示为图

图片表示成图

 文本表示成图

其他实例

图形结构化可以完成什么任务?

图级任务

节点级任务

边级任务

在机器学习中使用图形的挑战

将图的表示与神经网络兼容

邻接矩阵

异构图

邻接矩阵

图神经网络

最简单的GNN

MLP多层感知机

对某个点向量做预测

汇聚技术

对未知向量的顶点做预测

 对未知向量的边做预测

 对未知的全局向量做预测

整合为一个GNN做预测任务的整个模型

信息传递

​编辑 信息传递与卷积

边和点的表示方法

 全局的表示方法

实验部分

相关技术

各种其他类型的图(多图、超图、超节点、分层图)

GNN 中的采样图和批处理

 采样方法

batch(批处理)

 归纳偏置(Inductive Bias)

比较不同的汇聚操作

 GCN 作为子图函数近似器

边缘和图形对偶

图形卷积作为矩阵乘法,矩阵乘法作为游走在图上

图注意力网络

图的可解释性

生成模型


什么样的数据表示为图的

图:实体(节点)集合之间的关系(边缘)。

数据表示为图

顶点(或节点)属性:例如,节点标识、邻居数量

边(或链接)属性和方向:例如,边缘标识、边缘权重

全局(或主节点)属性:例如,节点数、最长路径

图片表示成图

        图片以数组的方式存储在计算机中表示为244x244x3

        将图像视为具有规则结构的图形的另一种方法是,其中每个像素代表一个节点,并通过边缘连接到相邻像素。每个非边框像素正好有 8 个相邻节点,存储在每个节点上的信息是一个表示像素的 RGB 值的三维向量。

        采用邻接矩阵来表示图像,对节点进行排序,在本例中,每个节点在一个简单的 5x5 笑脸图像中为 25 个像素,并填充n×n如果两个节点共享一条边,则带有一个条目。请注意,以下三种表示形式中的每一种都是同一条数据的不同视图

 文本表示成图

         通过将索引与每个字符、单词或标记相关联,并将文本表示为这些索引的序列来数字化文本。这将创建一个简单的有向图,其中每个字符或索引都是一个节点,并通过边缘连接到其后面的节点。(采用邻接矩阵表示如下图)

         在实践中,这通常不是文本和图像的编码方式:这些图形表示是多余的,因为所有图像和所有文本都将具有非常规则的结构。例如,图像在其邻接矩阵中具有条带结构,因为所有节点(像素)都连接在网格中。文本的邻接矩阵只是一条对角线,因为每个单词只连接到前一个单词,以及下一个单词。

其他实例

分子结构表示为图(每个原子表示一个顶点,原子之间的键表示图的边)

社交网络图(在同一场景同时出现的两个角色,连线)

文章引用图(有向图)

图形结构化可以完成什么任务?

        图上的预测任务有三种常规类型:图级别、节点级别和边缘级别。

        在图形级任务中,我们预测整个图形的单个属性。对于节点级任务,我们为图形中的每个节点预测一些属性。对于边缘级任务,我们希望预测图形中边缘的属性或存在。

图级任务

        在图形级任务中,我们的目标是预测整个图形的属性。例如,对于表示为图形的分子,我们可能想要预测分子的气味,或者它是否会与疾病有关的受体结合,或者MNIST和CIFAR的图像分类问题,我们希望将标签与整个图像相关联,对于文本,类似的问题是情感分析,我们希望一次识别整个句子的情绪或情感

节点级任务

        节点级任务涉及预测图形中每个节点的标识或角色。

        一个单一的社交网络图,Hi先生(教练)和John H(管理员)之间的争吵在空手道俱乐部造成了分裂。节点代表个人空手道练习者,边缘代表空手道之外这些成员之间的互动。预测问题是对争吵后某个成员是否忠于Hi先生或John H进行分类。在这种情况下,节点与教师或管理员之间的距离与此标签高度相关。

         按照图像类比,节点级预测问题类似于图像分割,我们试图标记图像中每个像素的角色。对于文本,类似的任务是预测句子中每个单词的词性(例如名词,动词,副词等)。

边级任务

        边级任务常用于对场景的理解,除了识别图像中的物体本身,深度学习模型还用来预测他们之间的关系。

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

在机器学习中使用图形的挑战

将图的表示与神经网络兼容

        图形最多有四种类型的信息,我们可能希望使用它们进行预测:节点信息、边的信息、图的信息和连通性。前三个相对简单,使用向量就可以很好地解决。但是表示图的连通性要复杂的多。

邻接矩阵

        最显然的选择就是邻接矩阵,因为它容易张量化,但是当节点数量达到百万级别,边的数量高度可变,会导致非常稀疏的邻接矩阵,效率非常低。

异构图

        对于同一个图的邻接矩阵,只是交换行或者列的顶点位置,其邻接矩阵就发生了变化,但是必须得保证计算结果是不变的,因为是对同一个图的计算。

邻接矩阵

        邻接矩阵可以优化邻接表的存储,

                Adjacency List:连通性

         从存储空间来看,邻接表只需要使用O(n_{edges})的空间,而邻接表需要使用O(n_{nodes}^2)的存储空间

图神经网络

        图的描述采用排列不变的矩阵格式,我们将使用图神经网络 (GNN) 来解决图预测任务。GNN 是对图形的所有属性(节点、边、全局上下文)的可优化转换,它保留了图形对称性(排列不变性)。GNN改变了图的属性,没有改变图的结构。

最简单的GNN

        在这个框架中,我们学习图的前三个属性的新嵌入,还没有使用连通性

        GNN使用一个单独的MLP(多层感知机)作为神经网络,我们称之为GNN层。对于每个结点向量,可以使用MLP得到一个学习过的结点向量。对于每条边做同样的操作,学习每条边的嵌入,对全局向量,学习整个图的嵌入。

        分别对边向量、点向量、全局向量应用一个MLP(多层感知机),得到输出,作为对他们的更新,他们的属性改变了,但是结构没有改变。而且MLP是对每个向量独自作用的,不会改变图的连接信息,所以即使进行了排序等操作,都不会改变图整体的结构,只是对单个属性进行更新。

        也可以将边或者顶点层堆叠起来,构成一个很深的神经网络。

        由于 GNN 只是改变图的属性信息,不会更新输入图的连通性,所以我们可以用与输入图相同的邻接表和相同数量的特征向量来描述 GNN 的输出图。 但是, 输出图通过GNN 更新了每个节点的、边的信息和图的信息。

MLP多层感知机

        也叫人工神经网络,除了输入输出层,它的中间有多个隐藏层,(至少有一层隐藏层)最简单的MLP如下图所示:

         GNN在图形的每个组件上(全局,边,顶点)使用单独的多层感知机(MLP),下图的三个感知机就组成了GNN的层,输入是一个层,输出也是一个层,简单来说就是,将输入图的点向量、边向量、全局向量分别放进MLP中然后得到他们的输出,作为他们对应的更新。这样,图的属性发生了变化,但是图的结构并没有发生变化。

        下图所示的GNN层有三个MLP,其中每个顶点共享一个MLP,每个边共享一个MLP,全局使用一个MLP。

         上述已经构造了一个简单的GNN,前文中,对边的信息应用有预测角色是属于哪一方的,这种问题可以通过二分类法解决。

对某个点向量做预测

       如果该点向量已知, 最后一层是一个图,对图中的每个顶点,进入全连接层Cv,然后得到输出,所有顶点共享一个全连接层。这样对顶点信息做一个分类。

        如果该点的向量值是未知的,只知道与该点相连的边的信息,那么可以用Pooling技术(汇聚技术)进行预测,从边收集信息,将边的向量汇聚到顶点上,对顶点进行预测。

汇聚技术

对未知向量的顶点做预测

        将与该点相连的所有边向量和全局向量相加得到的向量作为该点的向量,前提是边和点以及全局向量的维度是一样的才能相加,如果维度不一样,那么需要对其进行投影操作,再将其相加得到顶点的向量。

        下图是对未知顶点向量的顶点做预测,显然,与之前的已知顶点向量进行预测相比,只是多了汇聚的部分,即得到顶点向量的部分。之后该顶点向量进入全连接层进行对该顶点的预测是和之前一样的,最终得到对所有顶点的预测结果。        

 对未知向量的边做预测

        对未知的边进行预测,可以将与该边相连的两个点的向量汇聚到边上,即将与该边相连的两个点向量相加在 加上全局向量作为该边的向量。进而对该边进行预测。

 对未知的全局向量做预测

        对未知的全局向量做预测,可以将所有的点向量加起来作为全局向量,然后进入全局向量的输出层得到输出。

 所以,无论缺失哪种属性,都可以通过汇聚操作,得到缺失向量,进行预测。

整合为一个GNN做预测任务的整个模型

        首先输入一个图,然后进入一系列的GNN层,每个GNN层中含有三个MLP(对应边、顶点和全局信息),逐一计算后得到一个保持了原理图结构但改变了图的属性的图。最后根据要对哪个属性做预测的话, 添加合适的输出层,如果缺失信息,呢么增加汇聚层,进而完成对所有信息的预测。

        上述通过GNN做预测的整个过程是存在一些缺陷的,比如在一系列GNN中(MLP),我们只是孤立地计算顶点信息,边的信息以及全局信息,并没有使用图的结构信息(哪些顶点连接哪些边)。(没有充分利用图的信息)

信息传递

         在已知所有顶点信息,边的信息以及全局信息时,我们不像之前那样直接将图的信息进行MLP操作,而是对顶点来说,我们将该顶点和与它相连的边的所有信息都加起来作为它的信息,然后进行MLP操作,得到对该点的更新,这样的话就利用了图结构的信息。

        即先进行聚合,在进行MLP更新点的信息。


 信息传递与卷积

        假设图结构是表示一张图片,每个顶点和它相邻的像素相连接,这个操作和在图片上做卷积差不多。

        但是卷积在和窗口里面,每个窗口的权重是要一样的,因为在卷积里面,每一个顶点和它邻居的顶点向量做一个加权和,权重来自于卷积中3*3窗口,每个窗口都有自己的权重。但是在信息传递中利用与点相连的边向量进行相加的操作,只是将向量进行相加,没有涉及到权重的作用。

        但是通道还是保留了,在卷积里面有多输入通道和多输出通道,在信息传递过程对应MLP的过程,相当于通道保留了。

        卷积每一层都是一个3*3的窗口,但是可以把很多层堆叠起来,最后一层的像素能够看到前面层的很多信息。同样在信息传递中,将很多层堆叠起来,最后一层的节点能够看到 它的邻居信息,以及邻居的邻居信息等等,这样就完成了图的比较长距离的信息传递的过程。

边和点的表示方法

消息传递的构架图:(相邻的顶点进行一次汇聚传递)

         同样,如果不知道某个顶点或者某个边的信息,可以在MLP操作之前,通过汇聚得到未知的边或者顶点的信息,即将目标顶点的向量和与它相连的边的向量加起来作为顶点的向量。将顶点的信息汇聚到边上也是同样的操作。

         上图是通过汇聚操作,先把顶点的信息传递给边(维度不同,做投影),再把更新过的边的信息汇聚给顶点。如果先将边的信息传递给顶点,再将顶点的信息汇聚到边上也可以,但是两种方式得到的结果不一样,而且目前也并没有说哪种方式更好一些。当然也可以同时将边的信息汇聚到顶点上,将顶点的信息汇聚到边上,在回来一次,那么两种信息都有了,向量可能有点宽

 

 全局的表示方法

        对于一种顶点非常多,边非常少的稀疏图,从一个顶点到另一个顶点可能要走很长的步,它的解决方案就是添加一个全局向量(虚拟的点),让该全局向量和所有的边所有的点都相连,这个全局向量就是U,当要把顶点的向量汇聚到边上或者将边向量汇聚到点上时,全局向量的信息也相当于被汇聚过去(相连的!),而更新U的时候,会将所有的点和边的信息都汇聚过来。 

实验部分

此处可以去看原论文具体调参(链接在开头)

        GNN对超参数比较敏感,能调的东西有很多,第一个是,有多少层GNN,第二个是每个属性的embedding(嵌入)有多大,第三个是汇聚用什么操作,第四个是怎么去做信息传递。

相关技术

各种其他类型的图(多图、超图、超节点、分层图)

这种图在不同顶点之间可以有不同的边(有向边或者无向边),

 图可能是分层的,有一些顶点,它本身可能也是一个子图。

不同的图结构在神经网络中做信息汇聚时会产生一定的影响

GNN 中的采样图和批处理

        假设你的图有很多层,最后一层的顶点,就算每层只看到它的一近邻,但对于最后这个顶点,由于很多层的消息传递,所以随后顶点能够看到的是一个很大的图,如果这个图的连通性够,那么最后这个图能够看到整个图的信息。

        在计算梯度时,需要把整个forward的中间变量存下来,如果最后一个顶点能够看到整个图的话,那么对它计算梯度时,需要把整个图的中间结果都存下来,那么计算量可能是无法承受的,所以这时需要对图进行采样,即,对整个图每次采取一部分小图,在小图上面做信息汇聚。

 采样方法

        随机找一些点,将它的邻居找出来,计算时,只在这些找出来的点上做计算。

         做随机游走,即从某一个点开始,随机在里面找一条边,然后沿着这条边走到下一个顶点,这样随机走,规定最多随机走多少步,这样也会得到一个子图。

        结合上述两种方法,先随机走三步,再将走过的点的邻居全部找出来,形成一个子图。

         取一个点,把他的一近邻、二近邻、三近邻全部找出来(走K步),相当于做一个宽度遍历,形成一个新的子图。

         根据原图的需要选择合适的采样方法

batch(批处理)

        从性能上考虑,并不想对每个点进行逐步逐步更新,这样的话每一步计算量太少,不利于并行,希望能够将一些小样本做成一个小批量,这样对一个打的矩阵或者一个tensor做运算。

        这里的问题就是,每个顶点的邻居数目是不一样的,如何把这些顶点的邻居合并成一个规则的张量是个 有挑战的问题,

 Inductive Bias

        归纳偏置是指:根据人在现实问题中所观察到的共性规律,梳理出一些通用的准则(principles),并以这些规则来约束算法模型,使之倾向于得到更加符合现实的结果。

        需要作出假设,进一步推理,得出结论,比如,卷积神经网络假设的就是空间变换的不变性,循环神经网络假设的是时序的延续性,那么对于一个图升级网络的假设是保持了图的对称性(不管怎么交换顺序,GNN对图的作用都是保持不变的)

比较不同的汇聚操作

        eg:求和、求平均以及求MAX,但是没有一种特别理想的。具体要看那种更适合当前的情况。

显然对上面两个点的汇聚,求max并不能区分。

         这个的话只有求和能区分,当然这并不是说哪个好或者不好,因为同样也有求和无法区分的,所以只能根据具体的情况来选择使用。

 GCN 作为子图函数近似器

        GCN是图卷积神经网络,就是前面带了汇聚的神经网络。

        使用1度邻域查找来查看k层的GCN(和MPNN)的另一种方法是作为神经网络,它对大小为k的子图的学习嵌入进行操作。

        当聚焦于一个节点时,在 k 层之后,更新后的节点表示具有所有相邻节点的有限视点,直至 k-distance,本质上是子图表示。边制图表达也是如此。

        因此,GCN正在收集所有可能的k大小的子图,并从一个节点或边缘的有利位置学习矢量表示。可能的子图的数量可以组合增长,因此从头开始枚举这些子图与像GCN中那样动态构建它们可能是令人望而却步的。

边缘和图形对偶

        要获得G的对偶,我们可以将节点转换为边(并将边转换为节点)。图形及其对偶包含相同的信息,只是以不同的方式表示。

图形卷积作为矩阵乘法,矩阵乘法作为游走在图上

        在图上随机游走或者在图上做卷积等价于是对该图的邻接矩阵做乘法。

图注意力网络

        进行3*3卷积操作时,每个窗口都有一个权重,而且这个权重是和窗口位置相关的,是固定的,但是对于图来说,不需要有这个位置信息,因为每个顶点的邻居个数不变,而且邻居是可以随意打乱顺序的,即权重对位置是不敏感的。权重取决于两个顶点向量之间的关系。

        在使用attention之后,就给每个顶点一个权重,按照这些权重加起来就得到了图注意力网络。

图的可解释性

        在图上训练一个模型之后,怎么去看他到低学到了什么东西,比如说可以把子图信息抓取出来,查看它学到的东西。

生成模型

        使用生成模型,我们可以通过从学习的分布中采样或通过完成给定起点的图形来生成新图形。一个相关的应用是在新药的设计中,其中需要具有特定性质的新型分子图作为治疗疾病的候选者。

图是一个稀疏的架构,每个结构都是动态的

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值