Graph Convolutional Networks with EigenPooling

发布时间 2023-05-05 11:27:03作者: 馒头and花卷

Ma Y., Wang S., Aggarwal C. C. and Tang J. Graph convolutional networks with eigenpooling. KDD, 2019.

本文提出了一种新的框架, 在前向的过程中, 可以逐步将相似的 nodes 和他们的特征聚合在一起.

符号说明

  • \(\mathcal{G} = \{\mathcal{E, V}\}\), 图;
  • \(|\mathcal{V}| = N\);
  • \(\mathbf{A} \in \mathbb{R}^{N \times N}\), 邻接矩阵;
  • \(\mathbf{X} \in \mathbb{R}^{N \times d}\), node feature matrix

Graph Coarsening

  • 下面的过程可以是整个流程中的任一一层.

  • 首先通过类似谱聚类的聚类方法将所有的 nodes 分成不重合的 \(K\) connected 的 subgraphs \(\{\mathcal{G}^{(k)}\}_{k=1}^K\). 并令 \(\Gamma^{(k)}\) 表示 \(\mathcal{G}^{(k)}\) 中的结点, 其数量为 \(N_k\).

  • 定义采样算子 \(\mathbf{C}^{(k)} \in \{0, 1\}^{N \times N_k}\):

    \[\mathbf{C}^{(k)}[i, j] = 1 \quad \text{ if and only if } \Gamma^{(k)}(j) = v_i. \]

    通俗地来看, \(\mathbf{C}^{(k)}\) 的任一一行刻画了 \(v_i\)\(\Gamma^{(k)}\) 中的位置 (全为 0 则表示不属于该子图), 显然有:

    \[(\mathbf{C}^{(k)})^T \mathbf{C}^{(k)} = \mathbf{I}. \]

  • 于是, 对于任意的(完整图上的)图信号 \(\mathbf{x} \in \mathbb{R}^{N \times 1}\), 我们可以通过

    \[\mathbf{x}^{(k)} = (\mathbf{C}^{(k)})^T \mathbf{x}, \]

    下采样来得到子图 \(\mathcal{G}^{(k)}\) 上的信号.

  • 有了子图上的信号, 我们也可以通过上采样

    \[\bar{\mathbf{x}} = \mathbf{C}^{(k)} \mathbf{x}^{(k)}, \]

    ‘恢复’出信号 (显然, 只有对应子图的部分非零).

  • 类似地, 我们可以得到子图的邻接矩阵:

    \[\mathbf{A}^{(k)} = (\mathbf{C}^{(k)})^T \mathbf{A}\mathbf{C}^{(k)}. \]

  • 而 intra-subgraph 邻接矩阵为

    \[\mathbf{A}_{int} = \sum_{k=1}^K \mathbf{C}^{(k)} \mathbf{A}^{(k)} (\mathbf{C}^{(k)})^T, \]

    可以看到, 实际上就是对每个子邻接矩阵进行上采样然后加和. 显然 \(\mathbf{A}_{int}\) 的非零元素为不包含那些子图子图间的交互.

  • 于是

    \[\mathbf{A}_{ext} = \mathbf{A} - \mathbf{A}_{int} \]

    的非零元素即为子图-子图间的交互.

  • 为了进一步将其变为 \(K \times K\) 大小以便后续的使用, 定义 \(\mathbf{S} \in \mathbb{R}^{N \times K}\) 为:

    \[\mathbf{S}[i, j] = 1 \quad \text{ if and only if } v_i \in \Gamma^{(j)}. \]

  • 将每个子图看成一个 supernode, 则它们的零阶矩阵为:

    \[\mathbf{A}_{coar} = \mathbf{S}^T \mathbf{A}_{ext} \mathbf{S}. \]

    实际上:

    \[[\mathbf{A}_{coar}]_{ij} = \sum_{u \in \Gamma^{(i)}} \sum_{v \in \Gamma^{(j)}} [\mathbf{A}_{ext}]_{uv}. \]

EigenPooling

  • 现在, 我们只需要得到 supernode 的节点表示就完成了整体的传播过程, 一种可行的方案是:

    \[\text{Pool}((\mathbf{C}^{(k)})^T \mathbf{X}), \]

    其中 \(\text{Pool}\) 可以是 sum, mean, max 等等. 但是作者认为, 这种 pooling 方式没有抓住图的结构信息, 所以提出了 EigenPooling.

  • 假设 \(\mathbf{L}^{(k)}\) 为子图 \(\mathcal{G}^{(k)}\) 的拉普拉斯矩阵,

    \[\mathbf{u}_1, \ldots, \mathbf{u}_{N_k}^{(k)} \]

    为拉普拉斯矩阵的特征向量组.

  • 进一步地, 我们将其上采样得到:

    \[\bar{\mathbf{u}}_l^{(k)} = \mathbf{C}^{(k)} \mathbf{u}_l^{(k)}, l=1\ldots N_k. \]

  • 综合所有的子图的信息, 我们可以得到

    \[\Theta_l = [\bar{\mathbf{u}}_l^{(l)}, \ldots, \bar{\mathbf{u}}_l^{(K)}] \in \mathbb{R}^{N \times K}, \quad l=1,2, \ldots, H. \]

    这里 \(H\) 是认为给定的一个值, 需要注意的是, 对于那些 \(N_k < H\) 的子图, 我们取其超出部分的特征向量为 \(\bm{0}\).

  • 对于每个 \(\Theta_l\) 我们可以得到 pooling 的结果:

    \[\mathbf{X}_l = \Theta_l^T \mathbf{X}, \]

    总共有

    \[\mathbf{X}_{coar} = \mathbf{X}_{pooled} = [\mathbf{X}_1, \ldots, \mathbf{X}_H]. \]

  • 对于这部分的理论分析这里就不讲了.

代码

official