DiffPool

Paper : Hierarchical Graph Representation Learning with Differentiable Pooling
Code :

摘要

对于Graph Classification 任务来说,GNN的最后一步需要关注图数据的全局信息,既包含图的结构信息,也包含各个节点的属性信息。如果采用一次性全局池化的方法聚合点上的特征表示,并没有将图的结构考虑进去,而且可能在节点重编号后聚合的结果会发生改变,也就是说聚合过程中依赖节点顺序。在CNN模型中,通常采用的做法是通过层次化池化机制来逐渐提取全局信息,作者仿照CNN提出了一种层次化图聚类的方式,支持添加到GNN模型中进行端到端的学习。
在这里插入图片描述
每层将该层的节点映射到若干个cluster中,作为下一层输入的节点。

定义

定义图 G G G 表示为 ( A , F ) (A,F) (A,F) ,其中 A ∈ { 0 , 1 } n × n A\in\{0,1\}^{n\times n} A{0,1}n×n 表示邻接矩阵, F ∈ R n × d F\in \mathbb R^{n\times d} FRn×d 表示节点的特征矩阵。图分类任务定义为学习一个映射 f : G → Y f : \mathcal G \rightarrow \mathcal Y f:GY,这需要首先学习图的整体特征表示,即 f ′ : G → R D f' : \mathcal G\rightarrow \mathbb R^{D} f:GRD

图神经网络的数学表示为

H ( k ) = M ( A , H ( k − 1 ) ; θ ( k ) ) H^{(k)} = M(A,H^{(k-1)};\theta^{(k)}) H(k)=M(A,H(k1);θ(k))

其中, H ( k ) ∈ R n × d H^{(k)}\in \mathbb R^{n\times d} H(k)Rn×d H ( 0 ) = F H^{(0)} = F H(0)=F,一种常见的GNN模型表示为

H ( k ) = ReLU ( D ~ − 1 2 A ~ D ~ − 1 2 H ( k − 1 ) W ( k − 1 ) ) H^{(k)} = \text{ReLU}(\widetilde D^{-\frac{1}{2}}\widetilde A\widetilde D^{-\frac{1}{2}}H^{(k-1)}W^{(k-1)}) H(k)=ReLU(D 21A D 21H(k1)W(k1))

其中, A ~ = A + I \widetilde A = A+I A =A+I D ~ = diag ( ∑ j A ~ i j ) \widetilde D = \text{diag}(\sum_j \widetilde A_{ij}) D =diag(jA ij),为简化起见,使用 Z = GNN ( A , X ) Z = \text{GNN}(A,X) Z=GNN(A,X) 表示上式,其中 Z , X ∈ R n × d Z,X \in \mathbb{R}^{n\times d} Z,XRn×d Z Z Z 表示该层输出的点特征矩阵, X X X 表示输入的点特征矩阵。对于池化层来说,可以表示为
( Z ′ , A ′ ) = Pool ( A , X ) (Z',A') = \text{Pool}(A,X) (Z,A)=Pool(A,X)
其中 A ′ ∈ R m × m A'\in \mathbb R^{m\times m} ARm×m Z ′ ∈ R m × d Z' \in \mathbb R^{m\times d} ZRm×d ,且 m < n m<n m<n

池化

假定 n l n_l nl 表示经过了 l − 1 l-1 l1 层池化之后的节点个数,那么第 l l l 层的簇分配矩阵 S ( l ) ∈ R n l × n l + 1 S^{(l)}\in \mathbb R^{n_l\times n_{l+1}} S(l)Rnl×nl+1 S ( l ) S^{(l)} S(l) 给出的是簇分配的概率形式,是一种软分配矩阵。如果已知簇分配矩阵,那么有

X ( l + 1 ) = ( S ( l ) ) T Z ( l ) ∈ R n l + 1 × d A ( l + 1 ) = ( S ( l ) ) T A ( l ) S ( l ) ∈ R n l + 1 × n l + 1 \\X^{(l+1)} = (S^{(l)})^\text T Z^{(l)} \in \mathbb R^{n_{l+1}\times d} \\A^{(l+1)} = (S^{(l)})^\text T A^{(l)} S^{(l)} \in \mathbb R^{n_{l+1}\times n_{l+1}} X(l+1)=(S(l))TZ(l)Rnl+1×dA(l+1)=(S(l))TA(l)S(l)Rnl+1×nl+1

使用两个独立的GNN网络层,一个用来学习点的特征矩阵,一个用来学习簇分配矩阵

Z ( l ) = GNN embed ( l ) ( A ( l ) , X ( l ) ) S ( l ) = softmax ( GNN pool ( l ) ( A ( l ) , X ( l ) ) ) \\Z^{(l)} = \text{GNN}_\text {embed}^{(l)}(A^{(l)},X^{(l)}) \\S^{(l)} = \text{softmax}(\text{GNN}_\text {pool}^{(l)}(A^{(l)},X^{(l)})) Z(l)=GNNembed(l)(A(l),X(l))S(l)=softmax(GNNpool(l)(A(l),X(l)))

对于最后一层池化层,强制 n l + 1 = 1 n_{l+1} = 1 nl+1=1 S ( l ) S^{(l)} S(l) 为全1矩阵。

容易证明只要GNN具有排列不变性(Permutation invariance),那么DiffPool具有排列不变性。

辅助损失函数

对于第 l l l 层,定义损失函数

L LP ( l ) = ∣ ∣ A ( l ) , S ( l ) ( S ( l ) ) T ∣ ∣ F L_\text{LP}^{(l)} = ||A^{(l)},S^{(l)}(S^{(l)})^\text T||_F LLP(l)=A(l),S(l)(S(l))TF

矩阵A的Frobenius范数定义为矩阵A各项元素的绝对值平方的总和
∣ ∣ A ∣ ∣ F = ∑ i ∑ j ∣ a i , j ∣ 2 ||A||_F = \sqrt{\sum_i\sum_j|a_{i,j}|^2} AF=ijai,j2

另一个辅助损失函数是为了使簇分配函数尽量接近one-hot向量,即定义正则项

L E ( l ) = 1 n l ∑ i = 1 n l H ( S i ( l ) ) L_\text E^{(l)} = \frac{1}{n_l}\sum_{i=1}^{n_l} H(S_{i}^{(l)}) LE(l)=nl1i=1nlH(Si(l))

其中, S i ( l ) S_{i}^{(l)} Si(l) 表示矩阵 S ( l ) S^{(l)} S(l) 的第 i i i 行, H H H 表示熵函数

实验

作者在实验中观察到,尽管使用DiffPool性能显着提高,但可能无法稳定训练,并且即使使用相同的超参数设置,不同次运行之间的精度也存在显着差异。 可以看出,添加辅助损失函数可以使训练更加稳定,并减少不同次运行之间准确性的标准偏差。

作者在GraphSAGE和Structure2Vec两种算法上进行了实验,证明了DiffPool的通用性。

作者将不同层的聚类结果可视化显示出来,用来证明算法学到了有意义的聚类方式。
在这里插入图片描述
作者观察到DIFFPOOL学会了以非均匀的方式将节点折叠为簇,并且倾向于将密集连接的子图折叠为簇。由于GNN可以有效地对密集的,类似团的子图执行消息传递(直径较小),因此在这样一个密集的子图中将节点集中在一起不太可能导致结构信息的丢失。这直观地解释了为什么折叠密集子图是DIFFPOOL的有用合并策略。

由于分配网络基于输入节点及其邻居的特征来计算簇分配矩阵,因此具有相似输入特征和邻域结构的节点将具有相似的集群分配。 尽管某两个节点相距较远,但它们对于自己和所有邻居都具有完全相同的邻域结构和特征。 在这种情况下,DIFFPOOL网络将它们分配到同一群集中,这与其他体系结构中的池化概念不同。

DIFFPOOL对于超参数最大集群数量是敏感的,作者发现簇分配根据网络深度和最大集群数而变化较大。使用较大的最大集群数,合并的GNN可以对更复杂的层次结构进行建模,但是很大的参数会导致更大的噪声和更低的效率。 特别的,簇分配矩阵可能不会使用某些群集。 对应于未使用集群的列所有节点的值都较低。

总结

作者提出的DIFFPOOL给出了一种有效的层次化聚类的方法,并给出了两个未来的研究方向

  • 学习硬簇分配矩阵(one-hot)
  • 将DIFFPOOL应用到其他领域中

个人认为,作者在实验中观察到的三个现象都可以继续往下研究,尤其是第三点需要改进为一个对超参数不敏感的聚类方法。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值