《Graph Convolutional Networks with EigenPooling》论文阅读笔记

1,146 阅读2分钟

本文是Graph Convolution Networks with EigenPooling的阅读笔记,发表在KDD2019上。

Motivation

如何生成graph representation?一个常用的方式是global combine the node representations。但是这种方式忽略了丰富的结构信息,太flat。因此有人设计了Hierarchical pooling的架构,来试图保留graph sructure信息。

但本篇论文认为即使采用了层次化的架构,在每个pooling layer的过程中,local structure信息依然被很大程度上忽略了。因此本文基于graph Fourier Transform设计了一个新的pooling layer, 即EigenPooling layer,然后可以与GCN layer结合起来做graph classification。还做了一点理论分析。

Solution

整个解决方案分成两个部分:

  1. 一部分是graph coarsening,这又包括2个方面的东西
    1. 怎么将original graph中的vertexes进行聚合,形成supervertex,即形成coarse graph里的点
    2. 如何形成coarse graph里的edges,即如何将original graph里的edges转成新图里的edges。
  2. 第一点仅仅是对original graph的拓扑信息进行了处理,而还有feature信息没处理。也就是feature matrix要如何转为新图中的feature matrix,如何将N \times d维的X转成K行的新特征矩阵?

graph coarsening

第1点是采用的spectral clustering的方法形成了supervertexes,然后coarse graph里的edges是这样得到的:A_{coar} = S^{T}A_{ext}S

其中A_{ext}就是只包含coarse graph中的cross edges,即跨不同clusters的edges组成的邻接矩阵,不包含每个cluster内部的edges。

Eigenvector-Based Pooling

x^T L x = \frac{1}{2} \sum_{i,j}^N A[i,j](x[i]-x[j])^2, 可见二次型x^T L x度量了signal x的smoothness程度。

下面取L的特征向量u_l,将其看作一个signal,则其smoothness程度为:

u_l^T L u_l = u_l^T \lambda_l u_l=\lambda_l

可见,如果将L的每个特征向量看作一个信号,则其对应的特征值衡量了它的smoothness程度。

X_{l}=
\left[
\begin{matrix}
x_1在G_1上的部分在G_1的第l个特征向量上的投影 & x_2在G_1上的部分在G_1的第l个特征向量上的投影 & \cdots & x_d在G_1上的部分在G_1的第l个特征向量上的投影 \\
x_1在G_2上的部分在G_2的第l个特征向量上的投影 & x_2在G_2上的部分在G_2的第l个特征向量上的投影 & \cdots & x_d在G_2上的部分在G_2的第l个特征向量上的投影  \\
\vdots & \vdots & \ddots & \vdots \\
x_1在G_K上的部分在G_K的第l个特征向量上的投影 & x_2在G_K上的部分在G_K的第l个特征向量上的投影 & \cdots & x_d在G_K上的部分在G_K的第l个特征向量上的投影
\end{matrix}
\right] \tag{3}

X_l是对应着所有子图的第l个特征向量,

X_{pooled} = [X_0, X_1, \cdots, X_{N_{max}}]

然后可以只选取前几个特征向量,然后得到

X_{coar} = [X_0, \cdots, X_H] H在本文的实验中取了1,2,3.