看了李沐老师在B站讲的零基础多图详解图神经网络(视频),博客地址,这里稍微总结一下。图神经网络部分有点复杂,建议感兴趣的同学看一下视频或者博客
1.什么是图
图是表示一些实体之间的一些关系,实体为顶点,关系为边,图上面可以有三种问题:1.图的分类,如分出包括两个环的图。2.顶点分类,如在一张关系图中,分出与A有关系的人和与B有关系我的人。3.边属性,如一个人在看另一个人,则边属性为看。图上包括四种属性:顶点和边的属性,全局信息及连接性,连接性可以用邻接矩阵表示,但是会存在一些问题:1.图可能会非常大。即使可以用稀疏矩阵进行存储,但是高效计算稀疏矩阵是一件比较难的事情。2.邻接矩阵和矩阵的转置乃至不同节点顺序的邻接矩阵表达的信息是一样的,所以神经网络对于这些矩阵的输出应保证一致。
2.图神经网络
GNN是一个对图上所有四种属性进行的一个可以优化的变换,这种变换是可以保持住图的对称信息的,这里用的是信息传递的框架,GNN输入是一个图,输出也是一个图,它会对属性,也就是顶点,边,全局属性向量进行变换,但是不会改变图的连接性,如果缺少某一类属性的向量,可以通过汇聚操作,得到缺少的向量,例如缺少顶点的向量信息,可以将与顶点连接的所有边的向量和全局向量加起来,则可以得到该顶点的向量,如果缺少边的向量,则可以把该边连接的顶点向量加起来,还可以加上全局向量,得到该边的向量。
从而最简单的GNN模型就是将图输入一系列的GNN层,每个层包括三个MLP,对应三种不同的属性,输出一个图,根据要预测的属性加入合适的输出层,如果缺失信息则加入合适的汇聚层,但是这种模型缺少连接信息,所以可以通过信息传递进行改进。
信息传递是基于汇聚操作进行,在之前的模型中,直接将信息向量输入MLP进行更新,在信息传递中,汇聚操作是将要更新的顶点向量与相连的顶点向量加起来得到一个汇聚的向量,再输入MLP进行更新,如果顶点代表像素,与相邻像素相连的话,则该过程与卷积有些类似,不过权重是相同的,总结来说,信息传递包括一个聚合步和一个更新步。
由上可知,顶点向量相加可以得到边向量,边向量相加可以得到顶点向量,从而可以通过两种加法的结合实现顶点信息与边信息的共享,从而实现信息传递,从而GNN模型可以改进成,先进行信息传递,在输入MLP,这里可以是从边传到顶点,再从顶点传回边,再输入MLP,也可以是从顶点传到边,再从边传回顶点,再输入MLP,这两种方式没有优劣之分,但是会产生不一样的结果,所以作者提出可以两种方法同时使用。
全局信息:如果只看邻居节点,则当消息从一个点传递到一个很远的点,需要走很长的步才行,因此加入一个叫master node或者叫context vector的点U,这个点是一个虚拟的点,这个点与所有的点和所有的边相连,所以在更新的时候可以加入这个向量,起到走捷径的效果。
3.评价
图是一个非常强大的工具,但是也存在问题:1.优化较难,因为它是一个稀疏的架构。2.图神经网络对超参数非常敏感