GNN Pooling(四):Hierarchical Graph Representation Learning with Differentiable Pooling,NIPS2018


本文的作者们来自Stanford University,TU Dortmund University,University of Southern California。
当前GNN架构的一个主要限制是,它们本质上是扁平的,因为它们只在图的边上传播信息,不能以分层的方式推断和聚合信息。因此本文提出了DIFFPOOL,一个可微的图池模块,可以适应各种图神经网络结构的层次和并以端到端方式进行训练。在池化的下采样过程中,DiffPool定义了一个模型来学习如何将节点聚类在一起,并将聚合的所有结点视为一个新的结点,并定义了可学习的邻接矩阵学习新结点之间的关系。和 U-Nets的gPool不同,DiffPool中的结点和边都是原图中没有的(学到的),而gPool中的结点和边是真正根据原图下采样得到的。
废话不多说,直接介绍模型。

Proposed Method

先上图。DiffPool的思想从图中就能看出:聚类;每一个cluster都代表下一个layer的结点,直到只剩下一个结点。根据最终这个结点的特征进行分类。
在这里插入图片描述

Preliminaries

同样的,一个图被定义为G=(A,F),A是邻接矩阵F∈Rn×d是特征矩阵。本文的用一个通用的GNN框架来归纳消息传递:
在这里插入图片描述
其中,H(k) ∈Rn×d为节点的embedding,M是消息传递函数,θ是参数。H(0) = F。比如,Kipf的GCN就被描述为:
在这里插入图片描述
对于本文的池化操作,目的是得到一个A∈Rm×m且特征Z∈Rm×d的粗化图。然后这个粗化图可以被输入到另一个GNN中进行特征交换,直到重复K次GNN。

Differentiable Pooling via Learned Assignments

池化之后的图结构和特征通过学习参数矩阵获得。假定cluster assignment matrix(用于学习如何给图聚类,每一个新的cluster对应粗化图的一个结点)为:S(l)∈Rnl×nl+1,其每一行都表示一个结点。每一列则表示l+1(下一层)层的结点数nl+1,也就是说S是一个变换,对原图进行下采样得到粗画化图。将该层l的输入邻接矩阵表示为A(l),将该层的输入节点嵌入矩阵表示为Z(l),DIFFPOOL就是要根据A,Z,S这三个矩阵学习到下一层的结构与特征:
在这里插入图片描述
在这里插入图片描述
分别使用如下两个不同的GNN去生成上述公式中的参数:
在这里插入图片描述
在这里插入图片描述
两个GNN使用相同的输入数据,但具学习不同的参数,并扮演不同的角色:embed GNN在此层为输入节点生成新的嵌入(其实就是GNN聚合特征),而pool GNN生成输入节点到nl+1 cluster的变化矩阵S(l),再根据S(l)去执行DiffPool,对图进行粗化。

Auxiliary Link Prediction Objective and Entropy Regularization

在训练的早期很难使池化GNN远离虚假的局部极小值,为了缓解这个问题,使用了一个辅助链接预测的任务来训练。这个的依据是,相近的结点在池化之后应该被pool到一起。最小化下面的公式:
在这里插入图片描述
文中说||X||表示Frobenius norm,但是又和百度上说的矩阵范数的写法不太一样:在这里插入图片描述反正这个公式我是看不懂的,为此又得去看源码:https://github.com/chappers/graph-differential-pooling/blob/master/diff_pool.py 其中有一块是这么写的:

    link_loss = adj - torch.matmul(s, s.transpose(1, 2))
    link_loss = torch.norm(link_loss, p=2)
    link_loss = link_loss / adj.numel()

这个link_loss一瞅就是链接预测的额外loss了,adj是A,s是S,也就是A-SST。啊,也就是两者的差啊,差完之后求范数,然后最小化这两个不同的结构矩阵之间的差距,也就是要实际的图结构A和参数结构SST尽可能一致。
pool GNN的另一个重要特征是,每个节点的输出集群分配通常应该接近one-hot向量,这样每个集群或子图的成员关系就可以清楚地定义。因此按行最小化熵值:
在这里插入图片描述
其中,H就表示entropy function。Si是第i行。还是看源码这个式子到底啥意思:

ent_loss = (-s * torch.log(s + EPS)).sum(dim=-1).mean()

EPS是一个很小的数防止出现0。在训练过程中,将每一层的LLP和LE加入到分类损失中。在实践中,加入额外损失函数的训练花费了更长的时间来收敛,但却获得了更好的性能和更多可解释性。

Experiments

在本的实验中,用于DIFFPOOL的GNN模型是建立在GRAPHSAGE架构之上的,因为这种架构比文中介绍的标准GCN方法有更好的性能。GRAPHSAGE提供了几种不同的聚合方式,本文采用“mean”。在两个GraphSAGE层之后接一个DiffPool,一共使用了两个DiffPool,也就是(GraphSAGE×2+DiffPool×1)×2。对于一些比较小的数据集(ENZYMES and COLLAB),采用了一个DiffPool。嵌入矩阵Z和分配矩阵A分别由两个单独的GRAPHSAGE模型计算,在两次池化之后,图的大小分别变成总结点数的25%和10%。文中在每个GRAPHSAGE之后使用了Batch normalization,在每层都使用了l2 normalization。
此外,还是用了两个简化的模型作为对比。DIFFPOOL-DET,使用确定的图聚类算法进行聚类生成assignment matrices。DIFFPOOL-NOLP,不添加链接预测的损失值。

Baseline Methods

GRAPHSAGE with global mean-pooling。
STRUCTURE2VEC。
Edge-conditioned filters in CNN for graphs 【1】。
PATCHYSAN。
SET2SET
SORTPOOL
处理深度学习的方法,还对比了一些图核方法:GRAPHLET, the SHORTEST-PATH, WEISFEILERLEHMAN kernel (WL) , and WEISFEILER-LEHMAN OPTIMAL ASSIGNMENT KERNEL (WLOA)
对比的结果如Table 1:
在这里插入图片描述
简化的模型变体DIFFPOOLDET在COLLAB基准测试中实现了最先进的性能。这是因为在COLLAB中很多协作图只显示单层的社区结构,这可以通过预先计算的图聚类算法很好地捕捉到。并且相比于不添加链接预测损失函数的方法,准确率更好。
在最开始定义卷积的时候用M来表示任何卷积操作,为了探究DiffPool的有效性,又在Structure2Vec (S2V)上应用了DiffPool。第一种变体使用三层架构的S2V进行实验,如【2】中所述。此方法的架构是:一层S2V,一层DiffPool,两层S2V,一层DiffPool。第二种变体分别在第一层和第二层S2V之后应用DiffPool。在两个变体中,使用S2V模型计算嵌入矩阵,使用GRAPHSAGE模型计算分配矩阵。
在这里插入图片描述
分类准确率结果如表2所示。DIFFPOOL显著提高了S2V在酶和D&D数据集上的性能。在其他数据集上也可以观察到类似的性能趋势。结果表明,DIFFPOOL是一种通用的聚合策略,可以在不同的GNN架构中受益。
顺便一说,池化操作可以降低模型的运算时间。使用DIFFPOOL的GRAPHSAGE模型比使用SET2SET pooling的GRAPHSAGE模型快12倍。

Analysis of Cluster Assignment in DIFFPOOL

通过可视化来探究DiffPool的聚类划分。
在这里插入图片描述
图2显示了来自COLLAB数据集的图中第一层和第二层节点分配的可视化,其中节点颜色表示其集群成员关系。此外,DIFFPOOL学会以非均匀的方式将节点划分为soft clusters,并有将密集连接的子图归类成簇的趋势。

【1】M. Simonovsky and N. Komodakis. Dynamic edge-conditioned filters in convolutional neural networks on graphs. In IEEE Conference on Computer Vision and Pattern Recognition, pages 29–38, 2017.
【2】H. Dai, B. Dai, and L. Song. Discriminative embeddings of latent variable models for structured data. In International Conference on Machine Learning, pages 2702–2711, 2016.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值