Towards Sparse Hierarchical Graph Classifiers
预备知识:
在 numpy中,矩阵的元素操作对矩阵维度的要求,通过一种叫做 broadcasting的机制实现。我们称两个矩阵相容(compatible),如果它们相互对应的维度(行对行,列对列)满足以下条件:
- 对应的维度均相等, 或 有一个维度的大小是1
- 矩阵的Hadamard 乘积是一个元素运算,就像向量一样。对应位置的值相乘产生新的矩阵。
- 在 numpy 中,只要矩阵和向量的维度满足 broadcasting的要求,你便可以对他们使用 Hadamard 乘积运算.
动机:
节点嵌入的学习对图节点分类与连接预测是非常有效的,然而现在的节点分类只停留在初级水平,也就是只是用简单的全局池化去聚集节点特征,或者是手动设计,固定的启发式的为图结构设计粗化层次。前面的一个比较大的提升是可微分粗化池化层(DIFFPOOL),其像一个CNNs的下采样,用自适应的方法对图的size进行reduce,但是之前的池化复杂度达到了平方阶,所以不能推广到大的图。所以现在我们结合图神经网络设计的几个最新进展,以证明在不牺牲稀疏性的情况下,具有竞争力的层次图分类结果是可能的。
模型
准备工作:
- 节点特征:
- 邻接矩阵:
如果我们的节点没有特征可用,则可以使用节点的度作为人造特征,比如可以用one-hot编码。这里邻接矩阵采用二值对称(即无向无权图)
类似CNN,我们这里用了readout层类比pooling层,它将学习的representation转换成了固定长度的向量表示(dualMPNN里边有用到),用于最后的预测(比如一个简单的MLP)。
卷积层
-
前一项是卷积,后面一项相当于是跳跃连接(skip-connect)
池化层
之前DIFFPOOL中是吧N个点变成[kN]个簇。现在我们是学graph U-Net的思想,将节点减去[kN]个,k属于0到1之间。为了可以决定哪些节点是要留下来的,我们采用节点得分,这个得分用网络自己学习出来,所以要是可微的操作,这里定义一个向量 ,与X相乘之后可以得到每个节点的得分,按照得分排名可以选择留下来的指标,大概流程是:
- ||.||为二范数
- top-k表示从给定向量中选出前k个指标
- 是哈达玛乘积,预备知识有
- 表示指标操作,从矩阵中选出指定的个,X的话是选出 i 列,A的话行列都取。
Redout layer
我们经经过图卷积之后的矩阵都不便用于预测等操作,都是将这个得到的representation变成一个fixed-size的representation,最简单的方式就是直接将所有节点的嵌入表示都加起来,最后取平均,就像变成一个节点一样。这里我们采用全局最大节点嵌入与全局平均拼接起来,之后再利用JK-net架构,最后把所有中间的特征矩阵加起来。
- 是图节点的数量,
- 是第 i 个节点的特征,
- || 表示拼接
最后将加起来,即
然后再放进MLP中进行预测,最后可以得到预测。
实验
文章的主要亮点只是占的内存少而已,其他还不如DIFFPOOL。