ICLR2022 《GLASS:GNN with Labeling Tricks for Subgraph Representation Learning》 Reading Notes
Paper Introduction SubGNN在学习子图representation时保留子图的三种属性:Position,Neighborhood,Structure,每种属性包含Internal 和Border两方面,并且要精心设计不同的anchor patch,所以过于复杂。通过分析SubGNN和普通GNN,作者发现子图表示的核心可能是区分子图内部和外部节点。基于此发现,本文提出了一种labeling trick, 即max-zero-one,来提升子图GNN的表达能力和可拓展性。 Subgraph representation task 如上图所示,目标子图$\mathbb{S}$被嵌入在整个图中,并且可能拥有多个连通分量,目标是学习子图的表示向量,使其可以预测子图的属性。NeurIPS2020文章SubGNN提出子图级message-passing来代替节点级的message passing,并且设计了三个message passing通道,每个通道分为内部和边界模块,分别捕获子图分量间的交互,以及子图与图的其他部分之间的交互。尽管取得了比普通GNN更好的效果,但是SubGNN需要繁琐的预计算,因为SubGNN通过不同采样规则的anchor patch来传递子图分量之间,以及子图分量与图其他部分之间的相关性,而三个通道共6个aspects需要不同的采样规则,以及各自的message passing,计算十分冗长(这里有解读)。另外 SubGNN对每个aspects需要使用不同的anchor patch随机采样策略,无法保证采样的anchor patch是最优的,因此效果的方差较大,使得鲁棒性堪忧。 通过对比SubGNN相较于普通GNN的优势,作者发现对于子图任务来说,区分子图内部节点和外部节点非常重要。基于这个发现,本文提出了一种labeling trick,即max-zero-one labeling trick,来标注每个节点是否在子图外或者子图内。 Labeling Trick [1]: 使用GNN生成multi-node representations (即,为一组节点,例如子图生成表示向量),该方法说明了为高阶结构生成有表达能力的representation,需要捕获结构内不同节点间的交互。在实现上,labeling trick通过一个专门设计的label来表示节点的结构特征,这个label与node feature 结合作为新的feature输入GNN中。 注: 本文只考虑诱导子图,即每个子图的每个连通分量保留原图中的所有边。 Plain GNN and SubGNN 如上图所示,$G$是一个regular graph, 所以在没有节点feature的情况下,每个节点的embedding相同,所以GNN无法区分子图$\mathcal{S}$和$\mathcal{S}^\prime$。如下图所示,Plain GNN 在message passing中子图$\mathcal{S}$内部节点1同时接收来自子图内和子图外的邻居信息,并不会加以区分。同样$\mathcal{S}^\prime$中节点3也同时接收子图内外节点,因此对于Plain GNN ,它无法区分节点1和3,因此无法区分两个子图。 而SubGNN引入了3个通道:position (P),neighborhood (N), 和structure (S) 每个通道分别学习Internal 和Border两方面,共6个属性融入子图表示学习中。对于子图$\mathcal{S}$,为了捕获某个通道$i$的属性,SubGNN首先随机采样$n_A$个anchor patches: $\mathbb{A}_{i}=\left\{\mathcal{A}_{i}^{(1)}, \ldots, \mathcal{A}_{i}^{\left(n_{A}\right)}\right\}$,然后学习$\mathcal{S}$中的每个连通分量在这个属性$i$下的表示向量,通过子图内部连通分量和anchor patches之间的消息传递,来捕获子图内部连通分量的相对位置/邻域/结构信息,以及子图连通分量相对于子图外部分的位置/邻域/结构信息。如图2右边所示。对于通道$i$,它的Internal和border两方面采样的anchor patches表示为$\mathbb{A}_{i}=\left\{\mathcal{A}_{i}^{(1)}, \ldots, \mathcal{A}_{i}^{\left(n_{A}\right)}\right\}$,对于子图$\mathcal{S}$的一个连通分量$\mathcal{S}^{(c)}$,要学习该连通分量的表示,可使用一下subgraph-level message passing layer: $$ \begin{aligned} &\boldsymbol{a}_{i, \mathcal{S}^{(c)}}=\sum_{\mathcal{A}_{i} \in \mathbb{A}_{i}} \gamma_{i}\left(\mathcal{S}^{(c)}, \mathcal{A}_{i}\right) \boldsymbol{g}_{\mathcal{A}_{i}}, \\ &\boldsymbol{h}_{i, \mathcal{S}^{(c)}}^{(k)}=\sigma\left(W_{i} \cdot\left[\boldsymbol{a}_{i, \mathcal{S}^{(c)}}, \boldsymbol{h}_{i, \mathcal{S}^{(c)}}^{(k-1)}\right]\right) \end{aligned} $$ 其中$\gamma_{i}\left(\mathcal{S}^{(c)}, \mathcal{A}_{i}\right)$是子图分量$\mathcal{S}^{(c)}$和一个anchor patch $\mathcal{A}_{i}$的相似度。即每个子图分量依照与anchor patch 的相似度聚合来自anchor的信息。由于相似度函数的存在,SubGNN实际上是使用与子图分量$\mathcal{S}^{(c)}$接近或结构相似的anchor patch对$\mathcal{S}^{(c)}$的representation做平滑,即$\mathcal{S}^{(c)}$聚合更多与它结构相似的anchor patches的信息。通过精心设计的anchor和subgraph-level message passing,6个属性可以被各自保留,然后在融合。 ...