DiffPool 笔记 自用

DiffPool 可微池化的层次图表示学习

转载:
版权声明:本文为CSDN博主「不务正业的土豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yyl424525/article/details/103307795

Hierarchical Graph Representation Learning with Differentiable Pooling 图分类 NeurIPS 2018

  • 论文链接:Arxiv: https://arxiv.org/abs/1806.08804
  • github链接:https://github.com/RexYing/diffpool ·Pyg pooling层实现:
    https://pytorch-geometric.readthedocs.io/en/latest/modules/nn.html#torch_geometric.nn.dense.diff_pool.dense_diff_pool
  • 介绍视频:https://v.youku.com/v_show/id_XNDEwNTYwNDUyMA==.html?spm=a2hzp.8244740.0.0

相关概念

  • hard assignment:每个数据点都归到一个类别(i.e. cluster)。
  • soft assignment:把数据点归到不同的类,分到每个类有不同的概率。
  • assignment:文中涉及的assignment就是把节点分类、归类的意思。
  • assignment matrix:表示第l层的每一个节点到第l+1层的每一个节点(或cluster)的概率。
  • hierarchical:分层的,层次化的,就是指类似CNN中的分层提取特征,把相同的点聚在一起,用一个点表示。传统的方式是先使用GN求出图中所有节点的embedding,然后使用全局地使用一层网络进行pooling操作,而文中使用了多层pooling。
  • collapse nodes into soft clusters :压缩节点数量,把一个cluster节点用一个节点来表示。
  • downsampling,pooling:池化、下采样,前一层把多个点归到一个cluster,在下一层用一个点表示cluster,达到节点数目降低的效果,整个过程和CNN类似。
  • coarsened graph:粗化或粗糙化了的图,因为按照pooling过程,每一层的一个点代表了前一层的一个cluster的点,所以在逐层传播过程中,图在“粗糙化”。
  • graph readout、graph coarsening 、graph pooling都是类似的意思
  • end-to-end fashion:端到端的方式,DIFFPOOL不依赖于其他的聚类算法,类似于一个黑盒子,使用时不用关心中间过程,只需考虑输入输出。
  • differentiable:Differentiable模型是可微的,可以采用SGD通过端到端的方式进行训练。

背景

使用简单的求和操作或神经网络(Gated graph sequence neural networks,ICLR 2016;Neural message passing for quantum chemistry,ICML 2017;Convolutional networks on graphs for learning molecular fingerprints,NIPS 2015等)。

该算法通过通过上一层的节点嵌入将本层节点映射为一组堆叠,然后生成的堆叠作为下一组的节点嵌入,一次类推。
当前GNN有一个极大的限制就是其处理过程是平面化的即信息的传递更多是在边上进行,而不是以层级方式推断和聚合信息。但是对于图分类认为来说,层级结构的确实确实是一个比较严重的问题,因为该类任务主要是用于预测出整个图相关的标签。如果对该类任务用传统的GNN方式进行处理,它会对图中所有的节点嵌入进行全局池化,这种全局池化的方式忽略了图中存在的层次结构,不利于生成有效的GNN模型。
diff pool不希望先得到所有结点的embedding,然后再一次性得到图的表示,这种方式比较低效,而是希望通过一个逐渐压缩信息的过程就可以得到图的表示。
DIFFPOOL是一个可微的图pooling模块,它可以以层次化和端到端方式适应各种图神经网络架构。DIFFPOOL允许使用更深层次的GNN模型,这些模型可以学习图的分层表示。
1. 每一层,运行一个GNN模型获得节点的embeddings,再用这些embeddings将相似的节点进行聚类得到下一层的粗化输入,然后在这些粗化的图上运行另一个GNN层。整个过程重复L LL层,然后使用最后的输出表示进行图分类任务。2. 如图所示,层次化的GNN加入了pooling层,能够捕捉图的层次信息,扩大了感受野。但是,这里的Pooled network训练十分困难,需要两个Loss保证网络能够收敛,Pooled network的1,2,3层各不相同,需要分别训练。导致整个网络参数量巨大。

堆叠GNNs和pooling层

在这里插入图片描述

Diff pool

具体原理详见 https://blog.csdn.net/yyl424525/article/details/103307795

定义了图G,邻接矩阵A,节点的特征矩阵F。目标是对图G进行分类,类别标签y。分类时的关键步骤就是提取有用的特征向量来表示图。
在这里插入图片描述

正则化

在这里插入图片描述

实验

根据许多最新的图分类方法评估DIFFPOOL,目的是回答以下问题:
Q1:DIFFPOOL和其他的pooling方法相比怎么样?(如sort pooling和SET2SET方法)
Q2:DIFFPOOL与GNNs的结合与图分类任务(包括GNNs和基于核的方法)的最新技术相比如何?
Q3:DIFFPOOL是否可以得到输入图上有意义,可解释的cluster?

数据集
图分类任务中常用的benchmark数据集
ENZYMES(酶)
PROTEINS
D&D
社交网络数据集REDDIT-MULTI-12K
科学协作数据集COLLAB

模型配置
在实验中,用于DIFFPOOL的GNN模型是建立在GraphSAGE架构之上的
使用GraphSAGE的“mean”聚合函数,并在每两个GraphSAGE层之后应用一个DIFFPOOL层
在数据集上总共使用了2个DIFFPOOL层
对于ENZYMES和COLLAB这样的小数据集,1个DIFFPOOL层可以达到类似的性能。每个DIFFPOOL层之后,在下一个DIFFPOOL层或readout层之前执行3层图卷积层。
分别用两种不同的稀疏的GraphSAGE模型计算embedding矩阵和assignment矩阵。
在2 个DIFFPOOL层的架构中,cluster数量设置为应用DIFFPOOL之前节点数量的25%,而在1个DIFFPOOL层的架构中,cluster数量设置为节点数的10%。
Batch normalization在GraphSAGE的每一层之后应用。
实验还发现,在每一层的节点embedding中添加一个来l2正则化可以使训练更加稳定。
所有的模型都经过了3000个epoch的训练,当验证损失开始减少时,会提前停止。
执行10-fold交叉验证来评估模型性能

两个简化版的DIFFPOOL:
DIFFPOOL-DET是一个使用确定性图聚类算法(Weighted graph cuts without eigenvectors a multilevel approach,2007)生成assignment matrix的DIFFPOOL模型。
DIFFPOOL-NOLP是DIFFPOOL的一个变体,没使用链接预测。

Baseline Methods
在图分类的性能比较中,考虑了基于GNN(结合了不同的pooling方法)的baselines以及最先进的基于kernel的方法。
基于GNN的方法
GraphSAGE with global mean-pooling
STRUCTURE2VEC (S2V)
ECC
PATCHYSAN
SET2SET
SORTPOOL
基于核的方法
GRAPHLET
SHORTEST-PATH
WEISFEILERLEHMAN kernel (WL)
WEISFEILER-LEHMAN OPTIMAL ASSIGNMENT KERNEL (WLOA)
————————————————
在这里插入图片描述
一个观察结果是,尽管性能有了显著的提高,但是DIFFPOOL在训练的过程中可能是不稳定的,而且在不同的运行中,即使使用相同的超参数设置,准确性也会有显著的变化。
增加链接预测使训练更加稳定,降低了不同训练中精度的标准差

分层的聚类结构
为了解决Q3问题,将DIFFPOOL通过可视化不同层中的cluster assignment。
图2:使用来自COLLAB数据集在DIFFPOOL中实现分层cluster分配的可视化图
图(a)显示了两层的分层cluster,其中第二层的节点对应于第一层的cluster
图(b和c)在不同的图中显示了另外两个例子中第一层的cluster
尽管实验中将cluster的数量设置为节点的25%,但GNN会自动学习为这些不同的图分配适当数量的有意义的cluster。
————————————————

聚类assignment分析
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值