介绍一下基本的知识,GNN的输入是一张图,图中有节点集合,参数包括V、E、W、X等。GNN早期典型的两类任务是节点分类和图分类,在节点分类任务中,GNN的目的是训练得出网络当中节点的表达,然后根据节点的表达进行下游的任务;在图分类任务中,GNN的目的是要训练得到图的表达,有了图表达之后再对图做分类。在这两个典型的任务中,目前80%、90%的工作都倾向于节点分类,只有少数是图分类。关于GNN的标准框架,目前用得比较多的是Aggregate+Combine,此框架比较灵活,图分类任务和节点分类任务都适用,其策略方式是通过迭代,用邻居的表示迭代更新自己的表示。策略一共分两步,第一步是聚合邻居信息;第二步是把邻居信息和自己上一轮的信息进行耦合。下面举几个这种框架的例子,第一个是2017年提出的GraphSAGE,其操作是把邻居的表达进行变换之后,取里面最大的一个赋给自己,然后再把学到的表达和自己上一轮的表达做整合,随后得到新的表达。值得一提的是,GraphSAGE用了Max-pooling的方式,此方式限制了他的表达能力,是导致表达能力丧失关键的一步。GCN的表达方式直接,将邻居进行特征变换,然后按照矩阵规划进行传递,它的特点是把AGGREGATE和COMBINE两个操作进行了整合。值得注意的是,GCN采用了Mean-pooling的方式,此方式也限制了它的表达能力。另外,GCN的改进版是GAT,其采用的方式是weighted mean pooling。3
图神经网络的表达能力如何
前面是关于图神经网络基本介绍,现在回到今天的主题:图神经网络的表达能力。我们先讨论2019年发表在ICLR上的《How powerful are graph neural networks》。首先明确什么是表达能力,所谓表达能力一般有两个方面,第一个方面是表示的空间大小,例如,一个N位的二进制能表达N的二次方个数。这种表达能力旨在表示多少不同的东西,不同的结果。第二个方面是关于近似能力。例如设计一个神经网络能够近似什么样的函数。值得一提的是,在1989年的时候就有了证明:神经网络的层次只要足够深,就可以逼近任意连续函数。这个“万能近似定理”也解释了为什么深度学习从来不担心表达能力的原因。但是GNN提出之后,深度学习表达能力的话题又被提起,2017年有研究员发现深度学习的表达能力和深度神经网络的层次是指数关系,假如网络有D层,那么表达能力与“某个数”的D次方成正比,大家感兴趣可以看相关的论文。GNN引进之后,对于表达能力有什么样的启示呢?如上述左图所示,如果不看结构,节点的标号标1还是标2是区分不开。如果想区分这个不同的“标号1”,需要观察标号的邻居,可以通过邻居信息进行区分。GCN可以把邻居信息进行聚合,提升区分节点的能力。如上图左下所示,在一层GCN操作完成之后,已经可以区分一些标号,但左下图四个“标3”的点还是区分不出来。所以,一层GCN区分能力并不够,那能否通过加深层次解决表达能力呢?两层GNN之后,如上图所示,变成了八个点,并可以完全区分开。所以,如果用两层GCN对上述节点进行分类,无论Label标记成何种方式,GCN的表达能力都能满足分类要求。上面是两层GCN完全可以区分的例子。回到刚才的问题,把GNN加深就一定能把表达能力做上去吗?也就是说,我们能不能通过深度实现无穷大的表达能力?2019年那篇ICLR文章回答:不可以!上面是节点的角度,下面从图的角度进行讨论,也即如果把不同的图做成一个表示,GNN表示图的方面表达能力如何。这里有两个关键因素,一个是节点的特征,一个是图的结构,节点的特征刚才已经讲过了,如果把节点做深度神经网络,已经可以帮我们解决掉表达能力问题。所以,另外一个表达能力的限制就来自于图的结构。下面看两个简单的例子,左上角的图都是24个碳原子,有两个有机化学的分子式:左边的结构是两层,一层12个碳,24个碳分成平行的两层,都和自己的邻居相连。右边图是24个碳结构变成一个正球体,每个面都由五个碳构成。这两个结构,人一眼就能看出它俩的不同,但是GCN无法区分,即使把层次加深到无穷多层也区分不了它俩。即使简化成左下角两个更加简单的图,GCN也区分不出来。所以,这给出的启示是:通过提升GCN的深度来提升图的表达能力,是无法做到的。那么它的表达能力受限在哪儿?既然是图的结构相关,那我们就想到可以采用WL-test,对两个图是否同构进行测试。WL test 的主要是通过聚合节点邻居的 label,然后通过 hash 函数得到节点新的 label,不断重复知道每个节点的 label 稳定不变。稳定后,统计两张图的label的分布,如果分布相同,则一般认为两张图时同构的。所以,WL test递归聚合邻居的方式和GNN类似,都是一个递归地来更新自己的特征,只不过更新的方式,WL test做了一个单射函数,但是GNN用的聚合函数,无论是Max、Mean还是Sum,大部分情况下都不是单射的。也就是说GNN非单射的聚合方式,把原本不一样的东西聚合后变得一样了,这让GNN丧失了表达能力。更直白一些,WL Test是一个单射函数,GNN不是单射函数,于是WL Test为GNN的表达能力提供了一个理论上的上界。(注:这里GNN说的是通过邻居聚合,如果别的聚合方式,性能可能超过WL test的)为什么当前流行的GNN,例如GCN、GraphSAGE为什么不是单射呢?原因有两个,一个是每层做特征变换做得不够;另一个是,这些图神经网络用的聚合函数天然具有单射属性。所以,在论文《How Powerful are Graph Neural Networks》中,作者提出来了新的图模型GIN(Graph Isomorphism Network),其中I表示图同构,关键思想是构建了一个单射函数。有了单射函数,GIN也达到了和W L test类似的表达能力,达到了图神经网络表达能力的上界。后来作者对GIN模型的表达能力进行了验证,具体是用数据的拟合能力进行测评,验证思想是:如果表达能力足够强,那么数据集上的每个数据都能精确拟合。验证结果确实符合作者的预期,通过构造一个单设的聚合函数,能够实现和WL Test一样的表达能力。那么,泛化能力如何呢?也即在Test Loss 表现如何呢?这里有一个直观上的事实是,如果Training Loss做得不好,那么Test Loss表现也不会好,毕竟Train是Test的基准,另外,如果训练集上表现非常好,而在测试集上表现非常差,那么就出现过拟合现象,没有泛化能力了。提出GIN的作者也在论文中证实了,GIN在表达能力上很强,但是在其他任务上,泛化能力还不如表达能力差的模型,如上图GIN在几个数据集上的表现。所以,这给图神经网络带来的启示是:高的表达能力,并不总意味着对下游任务友好,但是低表达能力总是不好的。综上,我们还是希望构造出一个强表达能力的图神经网络,这是当前学界研究员的共识。总结一下ICLR 2019那篇论文的工作:首先GNN在理论上有一个表达能力的上界,这个上界是WL Test;为什么是WL Test?因为它的聚合函数是单射;同时这篇论文又提出了GIN这一有着单射聚合函数的图神经网络,并对其表达能力进行了验证。4