本文作者来自于University of Cambridge,本文是一篇workshop,并且其内容也十分简单。本文提出了一种以clique(团)作为单元池的新型图池操作。由于这种方法是纯拓扑的,而不是特性的,它更容易解释,而且完全非参数化。该操作在图卷积网络(GCN)和GraphSAGE架构中实现,并通过标准图分类基准测试。此外,我们还探索了池化与规则图(像素图)的兼容性,演示了在使用我们的机制替换标准卷积神经网络(CNNs)中的2*2池化时具有竞争性的性能。
Model
话不多说,上图。
clique pool
之所以说本文是完全基于拓扑的,是因为相比于需要学习Assignment Matrix的DiffPool,此方法的池化完全是依赖于最大团的。最大团被视为一个天然的cluster,并作为池化之后的超图,因此在池化的过程中只需要找出最大团即可,并且不需要任何学习参数。
团是一个图的子图,其中任意两个节点之间都存在着边相连。
假如一个节点属于多个团,那么则需要将节点归类到所属的最大团中(节点最多的团,比如图中灰色clique6),而若有两个相等的最大团,则节点同属于两个团(比如图中蓝色clique2和紫色clique3)。同时,粗化之后的团被视为super node,并根据共享结点为super node添加关系。
而对于特征粗化,则使用使用层中所有节点的平均值和最大值的连接;经过多次卷积与池化之后,MLP的全部输入是每一层表示的串联。
本文的池化也可以近似代替CNN中的池化,cnn通常取池内的最大值,直到最后一层。
在实际的最大团求解中,采用了Bron-Kerbosch algorithm,这部分的详细内容可以参考:https://www.jianshu.com/p/437bd6936dad。
寻找极大团的简单思想是:
- 生成原图的所有子图。如果结点A-B之间存在边,那么由A-B构成的就是一个很基础的团。因为假设的大前提是图处处连通,所以一定可以生成这种基础的形式。:
- 之后判断子图们是不是团。
- 删除不是极大团的团。
对于Bron-Kerbosch algorithm,主要构造了三个集合去实现上述步骤。
- R集合记录的是当前极大团中已经加入的点。
- P集合记录的是可能还能加入的点(也就是与R集合中所有点都有边存在的点,这样加入后,才会构成团)
- X集合记录的是已经加入过某个极大团的点(作用是判重,因为会从每个结点开始,枚举所有的团,如果不对已经加入某个极大团的点,进行标记,可能会有重复的极大团出现)
其伪代码如下:
Bron-Kerbosch Algorithm(Version 1)
R={} //已确定的极大团顶点的集合
P={v} //未处理顶点集,初始状态是所有结点
X={} //已搜过的并且属于某个极大团的顶点集合BronKerbosch(R, P, X):if P and X are both empty:report R as a maximal cliquefor each vertex v in P:BronKerbosch1(R ? {v}, P ? N(v), X ? N(v))P := P \ {v}X := X ? {v}
在应用的过程中,本文还提到了两个定理:
- Lemma 1:在给定一个连通的有限图,在经过多次clique-Pooling之后的图最终会变成一个点。
- Lemma 2:对一个chain应用
次clique-pool可以将节点数目减少
。这个也是显然的,因为chain的最大团只包含两个节点,具体的过程看图就一目了然:
APPLICATION TO IMAGES
clique pool可以代替CNN中的池化。如图,对于2×2的网格,只需要两两节点之间添加边就好了,对于3×3的也是如此。所以在实际中,就可以对网格状的图应用GCN与池化了。
EXPERIMENTAL SETUP & RESULTS
啊这部分setting我就不翻译了,直接列原文了:
具体的结果如表1所示:
平心而论,这个算法只能说就那样,和那些具有学习参数的算法比起来差了不止一星半点。并且寻找最大团的过程也是一个具有高时间复杂度的过程,我感觉对于大型图来说速度应该不快。然后在与VGG比起来,clique pool也差不多:
小总结
这篇论文真的是以巧取胜,但是我觉得对其创新之处的强调并不是很足。首先没有很直接地比较参数的数量与计算时间,因为学习参数数量为0是一个很亮的地方(就连gPool都要学n个参数呢)。其次,由于最大团的池化使得池化具有很强的可解释性,但是可能因为是work shop就并没有详细地探讨这一部分。