PyTorch图神经网络(五)
1.WL测试
之前讲了用图神经网络对节点进行分类,这里则是对图进行分类,思路来自于WL测试。WL测试旨在构建图的规范形式,具体做法为:
1.一开始对每个节点赋予相同的颜色或者标签
2.每个节点拼接自己和邻居的标签(原文说的聚合可能会产生误解)
3.结果被输入到生成新颜色的哈希函数中
4.每个节点拼接自己和邻居的新颜色
5.重复步骤直到不会有节点改变颜色
如果两个图不共享相同的颜色,说明他们是不同构的;但是如果共享颜色,也不能说明他们就是同构的,只能说有同构的可能。
在聚合的过程中,文中说了使用求和聚合器的效果会比另外两种更好,因为如果想要使用其他聚合器,在初始赋值阶段就不能对每一个点赋同样的值了,表达能力也会更差,
2.GIN
图分类是基于图神经网络生成的节点嵌入来实现的,有以下三种方法:
1.全局平均池化:对每个节点的嵌入取平均
2.全局最大值池化:对每个节点维度选取最高值
3.全局求和池化:对每个节点嵌入求和
从上面可知,全局求和池化会比其他两种技术要更好。GIN的作者指出,要考虑所有结构信息,因此,书中的做法为连接每一层神经网络产生的节点嵌入的总和。具体的实现,得看书中给出的使用GIN对图进行分类的代码。
注意,PROTEINS数据集中,不仅仅包含了图的特征,每个节点也会有自己的特征。代码中GINConv里面的语句都是对节点的特征进行转换的。
代码中,使用GCN和GIN最大的区别就是,GCN是使用归一化和邻接矩阵来聚合信息的,而GIN是通过求和聚合+多层感知机来聚合特征。并且,GCN之选用了最后一层的节点的特征,GIN把每一层节点的特征都融合了。这样看似网络的学习能力更加丰富了,文字得到的结果也是GIN更好。实际自己运行的时候可能会出现两个网络的准确率相差不大的情况,可能GIN的网络复杂后也会导致更难学习。