图神经网络

时间:2024-10-22 21:08:46

定义:

对图上所有的属性,包括顶点、边、全局、上下文进行的一个可以优化的变换,该变换可以保存住图的对称信息(将顶点进行另外一个顺序的排序后,结果不变)

Message passing neural network:使用一个信息传递的神经网络,会对顶点、边、全局等属性进行变换,但不会改变图的连接性

输入:图

输出:图

构造最简单的GNN:

对于顶点向量、边向量、全局向量分别构造MLP,MLP的输入输出大小一致,三个MLP就组成了一个GNN的层,输入和输出都为一个图;对于顶点向量、边向量、全局向量找到对应的MLP并分别放进去,把输出作为更新

结果:

  • 进去出来的过程属性得到了更新,但图的结构未发生变换
  • 每个MLP对属性独自作用,它不会考虑到所有的连接信息,不管对整个顶点做任何排序也不会改变结果

最后一层输出如何得到预测值:

分类问题:

若为n类,做一个输出大小为n的全连接层,再加一个softmax得到多类输出

回归问题:

得到一个值

结果:

最后一个输出为一张图,对于每个顶点进入全连接层,然后得到输出,最后将各个顶点做分类;不管有多少个顶点,都只有一个全连接层,所有的顶点共享一个全连接层里的参数;在一个GNN中,不管图的尺寸有多大,所有的顶点共享一个MLP,边共享一个MLP,全局信息共享一个MLP

若顶点没有向量:

情况:

  • 经典图理论中,节点不带属性
  • 数据不足或不需要特征表示
  • 特定任务中不需要节点特征

引入Pooling(汇聚):

将与这个点相邻的边全部取出来,同样把全局向量拿出来,得到五个向量;将五个向量全部相加,得到代表这一个点的向量(假设维度相同,若维度不同需要投影),得到这个向量后,可以做最后全连接层的输出

有边向量,无顶点向量:

通过汇聚层,从边到顶点,每个顶点得到自己的向量,送入顶点共享的MLP,全连接层得到顶点输出

有顶点向量,无边向量:

把顶点向量汇聚到边上,假设一条边连接两个顶点,把两个顶点相加得到边向量,送入边向量的输出层,边共享的MLP,最后得到边输出

有顶点向量,无全局向量:

把所有顶点向量相加,得到全局向量,进入MLP得到输出

常见的聚合方法:

求和、平均、最大值

GNN:

  • 进入一系列GNN层,每个层里有三个MLP,表示对应的顶点、边、全局三种属性
  • 输出得到保持整个结构的图,但属性发生了变换
  • 根据对希望做预测的属性,添加合适的输出层;若缺失信息,添加合适的汇聚层
  • 完成预测

局限性:

对GNN block并没有使用图信息,对每个属性做变换时,是单独的属性进入MLP,并没有看出该点是与哪些边相连的或该边与哪个顶点相连,因此GNN blocks并没有将整个图的信息更新到属性中,导致最后的结果与整个图的信息有差异

提升技术:

信息传递:

类似于标准意义的卷积;把该点的向量与该点邻居的向量提取,相加后得到一个汇聚的向量;将汇聚向量送入MLP得到该点向量的更新;最后将邻居的邻居等信息传递过来,完成了整个图的比较长距离的一个信息传递过程

过程:

聚合步 -> 更新步

用“黑色圆圈”记号表示有一个顶点,顶点之间会通过距离为“1”的邻居,也就是为一近邻把信息进行传递

如何将顶点信息传递给边,再把边的信息传递给顶点:

  • 把每个边连接的两个顶点的信息把它加到边自己的向量里,假设维度不一样做投影变换,做更新

  • 把更新过后的每个顶点连接的边的信息也加到点自己的向量里,维度不一样需投影,再做更新

  • 再各自进入各自的MLP做更新

并没有发现汇聚的次序谁比谁更好,提出了交替法

Master node/context vector:

背景:

每次汇聚都要观察自己的邻居,但当图特别大而且连接没那么紧密时,导致一个消息传递到一个很远的点需要走很长步

定义:

该点是一个虚拟点,该点可以与所有顶点相连,所有的边相连,为U;U与所有V,所有E相连;若想要将顶点信息汇聚给边或将边信息汇聚给点时,也同时会将U汇聚;更新U时,会将所有的顶点信息和边信息取出

模型对超参数的影响:

每一个属性的向量长度:

顶点、边、全局的影响不大

不同层数对精度影响:

层数越低可学习参数越小;可以将层数调高,但耦合度较紧密,要把剩下参数调好

信息传递:

在顶点、边、全局都传递信息的效果最好;传递边的帮助最小

相关技术:

Multigraph:

顶点之间有多条边

分层图:

有一些顶点里含有子图

如何对图采样和做batch:

假设图的连通性足够,那么最后一个顶点可以看到整张图的全部信息;在对最后一个顶点算梯度时,将整张图之间的计算过程结果全部存起来,因此计算量较大无法承受,采取了采样的措施。

将图一次采用一个小图,在小图上做信息的汇聚,算梯度时只需要保存小图的过程

方法:

  • Random node sampling:
  • 随机采样一些点,将点的最近邻居筛选,在做计算时旨在子图上做计算,控制每次采样的点个数来避免图不要过大

  • Random walk sampling:
  • 随机游走,从某一个顶点开始,在里面随机找一条边,沿着这条边走到下一个节点,沿着该图随机走,规定最多随机走多少步,就会得到一个子图

  • Random walk with neighborhood:
  • 结合上述两种,先随机走三步,把这三步的每个点的邻居寻找出来

  • Diffusion sampling:
  • 取一个点,将其一近邻、二近邻、三近邻往前走k步把他做一个宽度遍历,得到一个字图

Inductive biases:

GNN假设:保持图的不变性和对称性;不管怎么交换图的顶点顺序,GNN对它的作用都是保持不变的