论文:https://arxiv.org/pdf/1904.13107.pdf
代码:https://github.com/alge24/eigenpooling
应用领域:图分类
数据集:
主要贡献:提出 EigenPooling。
预备知识:
可以参考:
这篇工作是 Hierarchical Graph Representation Learning with Differentiable Pooling (DiffPool)的改版。整个工作的思想与 DiffPool 一脉相承,都是希望通过层次化的方式提取整个图的特征,实现图分类。之所以没称其为改进,主要是因为与 DiffPool 相比,其在数据集上的评估结果没有明显的提升。不主要的是,若不是最近头发长,谱图论相关的复杂概念就是劝退的最好理由。顺便吐槽一句,虽然得感谢开源,但作者写的代码实在是太没有规范了。代码是在 DiffPool 的基础上改的,所以最好先了解一下 DiffPool。
图粗化是作用在整张图 G G G 切割后的子图 G ( k ) G^{(k)} G(k) 上的。子图与子图之间没有交集,也就是说 G ( k ) G^{(k)} G(k) 满足 G ( 1 ) ∪ G ( 2 ) ∪ ⋯ ∪ G ( k ) ∪ ⋯ ∪ G ( K ) = G G^{(1)} \cup G^{(2)} \cup \dots \cup G^{(k)} \cup \dots \cup G^{(K)} = G G(1)∪G(2)∪⋯∪G(k)∪⋯∪G(K)=G 且 G ( 1 ) ∩ G ( 2 ) ∩ ⋯ ∩ G ( k ) ∩ ⋯ ∩ G ( K ) = ∅ G^{(1)} \cap G^{(2)} \cap \dots \cap G^{(k)} \cap \dots \cap G^{(K)} = \emptyset G(1)∩G(2)∩⋯∩G(k)∩⋯∩G(K)=∅ 。文中选用谱聚类方法将大图切为一个个子图。
图粗化的结果是对于每一个子图,都希望能用一个节点来表示,这个节点也可以称为超节点(supernode)。经过粗化,可以希望得到粗化后的图的邻接矩阵。
记 A ∈ R N × N A \in \mathbb{R}^{N \times N} A∈RN×N 为包含 N N N 个节点的图 &G& 的邻接矩阵, X ∈ R N × d X \in \mathbb{R}^{N \times d} X∈RN×d 为图 G G G 的特征矩阵, d d d 表示节点的特征维度。需要注意的是,每个子图中的节点数量并不相同,记 N k N_{k} Nk 为子图 G ( k ) G^{(k)} G(k) 中的节点数量, Γ k \Gamma^{k} Γk 是子图 G ( k ) G^{(k)} G(k) 中的所有节点组成的列表,即 Γ k = [ v 1 , v 2 , … , v j , … , v N k ] \Gamma^{k} = [v_{1}, v_{2}, \dots, v_{j}, \dots, v_{N_{k}}] Γk=[v1,v2,…,vj,…,vNk] 且 v j ∈ G ( k ) v_{j} \in G^{(k)} vj∈G(k) 。定义表示图 G G G 与子图 G ( k ) G^{(k)} G(k) 关系的上采样矩阵 C ( k ) ∈ R N × N k C^{(k)} \in \mathbb{R}^{N \times N_{k}} C(k)∈RN×Nk :
C ( k ) [ i , j ] = 1 i f a n d o n l y i f Γ ( k ) ( j ) = v i C^{(k)}[i, j] = 1\ \mathrm{if\ and\ only\ if}\ \Gamma^{(k)}(j) = v_{i} C(k)[i,j]=1 if and only if Γ(k)(j)=vi
设图 G G G 的某维特征 x ∈ R N × 1 x \in \mathbb{R}^{N \times 1} x∈RN×1 ,在谱图论中, x x x 称为图 G G G 的某一维信号,那么图 G G G 中 属于子图 G ( k ) G^{(k)} G(k) 的信号为 x ( k ) = ( C ( k ) ) T x x^{(k)} = (C^{(k)})^{T}x x(k)=(C(k))Tx 。反之,可以将子图 G ( k ) G^{(k)} G(k) 中的某一维信号映射回图 G G G,即 x ˉ = C ( k ) x ( k ) \bar{x} = C^{(k)}x^{(k)} xˉ=C(k)x(k) 。在 x ˉ \bar{x} xˉ 中,不属于子图 G ( k ) G^{(k)} G(k) 的,值为 0。同理,可以作用在多维信号 X ∈ R N × d X \in \mathbb{R}^{N \times d} X∈RN×d 上。这样看似也得到了粗化图的特征矩阵,但是如果就这样结束了,岂不没有任何需要深度学习的地方了吗?
表示子图 G ( k ) G^{(k)} G(k) 中节点连接情况的邻接矩阵 A ( k ) ∈ R N k × N k A^{(k)} \in \mathbb{R}^{N_{k} \times N_{k}} A(k)∈RNk×Nk 可以由下式计算:
A ( k ) = ( C ( k ) ) T A C ( k ) A^{(k)} = (C^{(k)})^{T}AC^{(k)} A(k)=(C(k))TAC(k)
那么对于整张图 G G G 来说,不包含子图与子图之间的边的邻接矩阵 A i n t A_{int} Aint 可由下式计算:
A i n t = ∑ k K C ( k ) A ( k ) ( C ( k ) ) T A_{int} = \sum_{k}^{K}C^{(k)}A^{(k)}(C^{(k)})^{T} Aint=k∑KC(k)A(k)(C(k))T
那么只包含子图与子图之间的边的邻接矩阵 A e x t = A − A i n t A_{ext} = A - A_{int} Aext=A−Aint 。
定义分配矩阵 S ∈ R N × K S \in \mathbb{R}^{N \times K} S∈RN×K 满足:
S [ i , k ] = 1 i f a n d o n l y i f v i ∈ Γ ( k ) S[i, k] = 1\ \mathrm{if\ and\ only\ if}\ v_{i} \in \Gamma^{(k)} S[i,k]=1 if and only if vi∈Γ(k)
分配矩阵 S S S 表示图 G G G 中节点 v i v_{i} vi 与所有子图之间的关系。那么,粗化的图 G c o a r G_{coar} Gcoar 的邻接矩阵可以表示为 A c o a r = S T A e x t S A_{coar} = S^{T}A_{ext}S Acoar=STAextS ,即图 G G G 经过粗化后,子图变为超节点, A c o a r A_{coar} Acoar 为表示超节点之间边关系的邻接矩阵。
在这一步,希望得到粗话的图的特征矩阵 X c o a r X_{coar} Xcoar 。此处的下采样操作是基于谱图论的,特征向量就是指拉普拉斯矩阵 L L L 的特征向量。
记 U = [ u 1 , u 2 , … , u N ] ∈ R N × N U = [u_{1}, u_{2}, \dots, u_{N}] \in \mathbb{R}^{N \times N} U=[u1,u2,…,uN]∈RN×N 是由拉普拉斯矩阵 L L L 的特征向量组成的矩阵, x x x 为图的某一信号,则图的傅里叶变换可以表示为:
x ^ = U T x \hat{x} = U^{T}x x^=UTx
即 x ^ \hat{x} x^ 为 x x x 在频域中的表示。
记 L ( k ) L^{(k)} L(k) 为子图 G ( k ) G^{(k)} G(k) 的拉普拉斯矩阵,其特征向量为 u 1 ( k ) , … , u N k ( k ) u_{1}^{(k)}, \dots , u_{N_{k}}^{(k)} u1(k),…,uNk(k) ,经过上采样操作 C ( k ) C^{(k)} C(k) 可以将子图 G ( k ) G^{(k)} G(k) 的拉普拉斯矩阵 L ( k ) L^{(k)} L(k) 的特征向量 u l ( k ) u_{l}^{(k)} ul(k) 映射回整张图 G G G:
u ˉ l ( k ) = C ( k ) u l ( k ) , l = 1 … N k \bar{u}_{l}^{(k)} = C^{(k)}u_{l}^{(k)}, l = 1 \dots N_{k} uˉl(k)=C(k)ul(k),l=1…Nk
将所有子图的 u ˉ l \bar{u}_{l} uˉl 组成一个矩阵,记为 Θ l ∈ R N × K \Theta_{l} \in \mathbb{R}^{N \times K} Θl∈RN×K ,即 Θ l = [ u ˉ l ( 1 ) , … , u ˉ l ( K ) ] \Theta_{l} = [\bar{u}_{l}^{(1)}, \dots, \bar{u}_{l}^{(K)}] Θl=[uˉl(1),…,uˉl(K)] 。
记 X l ∈ R K × d X_{l} \in \mathbb{R}^{K \times d} Xl∈RK×d 表示图 G G G 的特征矩阵 X X X 经过 Θ l T \Theta_{l}^{T} ΘlT 下采样后的特征矩阵,其第 k 行为第 k 个子图 G ( k ) G^{(k)} G(k) 经下采样的信息。
前面提到过,每个子图中的节点数量不同,所以其拉普拉斯矩阵的特征向量的数量(等于节点数量)也不同。所以,当 N k < l N_{k} < l Nk<l 时,必然存在子图 G ( k ) G^{(k)} G(k) 没有 u l ( k ) u_{l}^{(k)} ul(k) 的情况,这种时候令 u l ( k ) = 0 u_{l}^{(k)} = 0 ul(k)=0 。记所有子图的节点数量的最大值为 N m a x N_{max} Nmax ,那么 l ≤ N m a x l \le N_{max} l≤Nmax 。
级联所有经过下采样的 X X X 得到最终下采样的结果 X p o o l e d ∈ R K × d ⋅ N m a x X_{pooled} \in \mathbb{R}^{K \times d \cdot N_{max}} Xpooled∈RK×d⋅Nmax 。为了简化操作,取 H ≪ N m a x H \ll N_{max} H≪Nmax ,则粗化后的图的特征矩阵为 X c o a r = [ X 0 , … , X H ] X_{coar} = [X_{0}, \dots, X_{H}] Xcoar=[X0,…,XH] 。
论文后续给出了关于上述操作的证明,包括 H H H 取值的证明。
结合两者的代码,此处对比两者的差异。
DiffPool 中也有分配矩阵 S ∈ R N × K S \in \mathbb{R}^{N \times K} S∈RN×K ,不同的是,DiffPool 中的分配矩阵是通过一个单独的图网络得到的,比如 S = A X W S = AXW S=AXW , 其中 A A A 为整张图的邻接矩阵, X X X 为整张图的特征矩阵, W W W 表示需要学习的权重参数,那么下采样后的图,即有超节点组成的图的邻接矩阵 A l + 1 = ( S l ) T A l S l A^{l + 1} = (S^{l})^{T}A^{l}S^{l} Al+1=(Sl)TAlSl。而 EigenPool 是通过某种明确的分割或聚类算法得到的,比如本篇论文中,从根本上来说,分配矩阵 S S S 是由谱聚类决定的。
DiffPool 的粗化的图的特征矩阵也是通过一个单独的图网络得到的,也就是说,一次 DiffPool 有两个单独的图网络,它们可以是 A X W AXW AXW ,也可以加上偏移量(bias),或者进行标准化操作,或者 softmax 。一个图网络得到分配矩阵 S = A X W S = AXW S=AXW,另一个图网络得到嵌入矩阵 Z = A X W Z = AXW Z=AXW,那么粗化图的特征矩阵为 X l + 1 = ( S l ) T Z l X^{l + 1} = (S^{l})^{T}Z^{l} Xl+1=(Sl)TZl 。而 EigenPool 则是通过图的傅里叶变换得到粗化图的特征矩阵,这个过程中需要计算 K 个拉普拉斯矩阵的特征向量。因为两者在数据集上的评估的结果相差不大,而作者也没有给出两者在时间上的对比,所以不能明确熟好熟劣,只是从理解上来说,DiffPool 更好理解。