Graph Neural Network——图神经网络( 二 )


2.1 最简单的GNN
一个最简单的GNN如上图所示:对于图、顶点、边这三类属性分类构造一个多层感知机(MLP),然后将对应的向量输入进去后得到一个新的向量来表示新的信息 。而这并不会改变原来连接性的信息,因此图的结构仍然是保持不变的 。那么我们如何将这些信息转换成我们想要的输出呢
假设现在是对顶点的信息进行预测,就是之前空手道的二分类任务,那么我们可以在最后一层输出的图后,接上一个全连接层,然后再接上一个层即可,例如我们要进行二分类任务,那我们的全连接层的输出维度设为2即可,n分类就设为n 。需要注意的是不管有多少个顶点,它们是共享一个全连接层的,共享其中的参数 。那么也就是所有的顶点共享一个全连接层,所有的边共享一个全连接层,全局自己就拥有一个全连接层 。
那么再来看稍微复杂一点的情况,例如某个顶点我们没有其向量该怎么办呢,可以采用技术,即将与该顶点相连的边的向量和全局的向量进行相加,就得到了代表这个顶点的向量,那么我们就可以拿这个向量去做预测等任务了,示意图如下:
其中红色的箭头代表四条边的向量,蓝色箭头的向量代表全局的向量,那么相加就可以得到该顶点的向量了,可表示成下面的示意图:

Graph Neural Network——图神经网络

文章插图
那么如果有顶点的向量而没有边的向量也是同理,只需要将该边所连接的两个顶点的向量和全局的向量进行相加即可,即:
而如果是拥有顶点的向量而没有全局的向量,那么可以将全部顶点的向量加起来作为全局的向量,即:
所以不管缺乏哪一类的属性都可以通过来补齐 。
因此完整的最简单的GNN如下图:
但这部分的问题是在GNN 中并没有考虑到图的结构信息,这相当于对信息的浪费,结构可能不太理想 。那么要用到下面的技术 。
2.2 在图表的各部分之间传递信息
这部分的思想其实很容易理解,例如在对顶点进行更新时并不是直接进入MLP之中,而是将该顶点的向量和与之相连的所有顶点的向量求和,再进入MLP之中得到该顶点的更新向量,即:
这种情况呢就是只在顶点之间进行信息传递,即:
我们还可以实现更复杂的信息传递,例如把顶点的信息传递给边,把边的信息传递给顶点,即下图:
其中 ρ V n ? E n \rho _{V_n-E_n} ρVn??En??代表将顶点的信息传递到边,即将边相连的两个顶点的向量加到边的向量之上,而 ρ E n ? V n \rho _{E_n-V_n} ρEn??Vn??就是将边的信息传递到顶底,即将顶点有关系的边的向量都加到顶点的向量之上 。完成之后再进入各自的MLP进行更新 。这里需要注意的是这两个顺序交换是不一样的,即下面两种处理方式是不一样的:
但目前也没有特别明显的证明哪一种更好 。另外一个办法就是两边同时更新,两种方式同时实施,即:
其实从之前我们就没有深入讲解说为什么需要一个全局的向量 。这是因为如果你的图很大,有很多的节点但是连接又不够紧密的话,那么消息从一个顶点传递到远处的顶点可能需要很久的时间或者说很多次的传递过程,那么便虚拟化一个顶点,可以称为 node,该点呢与所有的顶点都相连,同时与所有的边都相连,作为消息传递的重要部分 。那么对于全局向量加入了信息传递的过程就可以表示为下图,其中更新边的信息的时候是顶点和全局都传递信息,更新顶点的信息的时候是边和全局都传递信息,而同样,更新全局信息的时候也边和顶点都传递信息 。
前述的操作不仅仅可以求和,还可以做平均、取最大值这类操作 。