数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
三十五、DIFFPOLL [2018]
当前
GNN
架构的主要局限性在于它们本质上是平的flat
,因为它们仅仅跨图的边来传播信息,并且无法以层次hierarchical
的方式推断和聚合信息。这种缺乏层次结构的情况对于graph
分类任务尤其成为问题。当GNN
应用到图分类时,标准方法是为图中的所有节点生成embedding
,然后将所有这些节点embedding
执行全局池化。这种全局池化忽略了图中可能存在的任何层次结构,并阻碍了人们为graph-level
预测任务建立有效的GNN
模型。论文
《Hierarchical Graph Representation Learning with Differentiable Pooling》
提出了DIFFPOOL
,这是一种可微分的graph pooling
模块,可以通过层次的、端到端的方式适应各种GNN
架构,如下图所示。DIFFPOOL
允许开发更深的 、可以学习操作图的层次表示hierarchical representation
的GNN
模型。下图中,在每个层次的
layer
上运行一个GNN
模型来获取节点embedding
。然后,DIFFPOOL
使用这些学到的embedding
将节点聚类到一起,并在这个粗化的图上运行另一个GNN layer
。重复 $ L $ 次,并使用最终的输出representation
来对图进行分类。DIFFPOOL
类似于CNN
的空间池化。和标准的CNN
相比,GNN
面临的挑战是:- 首先,
graph
不包含自然的空间局部性概念,即不能简单的在graph
上对一个 $ n\times n $ 的patch
上的所有节点进行池化,因为图的复杂拓扑结构使得无法定义patch
。 - 其次,和图像数据不同,图数据集通常包含数量变化的节点和边的图,这使得定义图池化运算更具挑战性。
为解决上述挑战,我们需要一个模型,该模型学习如何将节点聚类在一起从而在底层图之上搭建一个层次的
multi-layer
结构。DIFFPOOL
方法在GNN
的每一层上学习可微的soft assignment
,并根据其学到的embedding
将节点映射到簇。在DIFFPOOL
框架中,我们通过以层次的方式堆叠GNN layer
,从而生成deep GNN
:第 $ l $ 层的输入节点对应于第 $ l-1 $ 层学到的簇。因此,DIFFPOOL
的每一层都将输入图越来越粗化,并且DIFFPOOL
能够在训练后生成任何输入图的hierarchical representation
。实验表明:
DIFFPOOL
可以和各种GNN
方法结合使用,从而使得平均准确率提高7%
,并且在五个benchmark
中的四个达到了state-of-the-art
性能。最后,论文证明
DIFFPOOL
可以学习和输入图中定义明确的社区相对应的、可解释的层次聚类。- 首先,
相关工作:
通用的图神经网络:近年来提出了各种各样的图神经网络模型。这些方法大多符合
《Neural message passing for quantum chemistry》
提出的 "neural message passing
"的框架。在消息传递框架中,GNN
被看作是一种消息传递算法,其中node representation
是使用可微聚合函数从其邻居节点的特征中反复计算出来的。《Representation learning on graphs: Methods and applications》
对该领域的最新进展进行了回顾,《Geometric deep learning:Going beyond euclidean data》
概述了图神经网络与谱图卷积spectral graph convolution
的联系。基于图神经网络的图分类:图神经网络已经被应用于各种任务,包括节点分类、链接预测、图分类、和化学信息学。在图分类的背景下应用
GNN
的一个主要挑战是如何从node embedding
到整个图的representation
。解决这个问题的常见方法包括:- 在网络最后一层简单地求和或平均所有的
node embedding
。 - 引入一个与图中所有节点相连的 "
virtual node
"。 - 使用一个能够操作集合的深度学习架构来聚合
node embedding
。
然而,所有这些方法都有一个局限性,即它们不学习
hierarchical representation
(即所有的node embedding
都在单个layer
中被全局地池化),因此无法捕捉到许多现实世界中图的自然结构。最近的一些方法也提出了将CNN
架构应用于所有node embedding
的拼接,但这需要指定(或学习)节点的典型排序(一般来说这非常困难,相当于解决图的同构性graph isomorphism
)。- 在网络最后一层简单地求和或平均所有的
35.1 模型
DIFFPOOL
的关键思想是:通过提供可微的模块来层次地池化图节点,从而构建深度的multi-layer GNN
模型。给定图
$ \mathcal G=(\mathbf X,\mathbf A) $ ,其中:每个节点
$ v_i $ 关联一个特征向量 $ \mathbf{\vec x}_i\in \mathbb R^{d } $ ,所有节点的特征向量组成特征矩阵 $ \mathbf X\in \mathbb R^{n\times d } $ 。 $ n $ 为节点数量, $ d $ 为特征相邻维度。为方便讨论,我们将所有维度(包括输入特征维度和
embedding
向量维度)都设为 $ d $ ,实际应用中可以采用不同的维度。 $ \mathbf A\in \mathbb R^{n\times n} $ 为邻接矩阵,其中 $ A_{i,j} $ 表示节点 $ v_i,v_j $ 之间的连接权重。当 $ A_{i,j}=0 $ 表示 $ v_i $ 和 $ v_j $ 之间不存在连接。这里我们假设图是无权重的,即
$ A_{i,j}\in \{0,1\} $ 。
注意:这里我们未考虑边特征。
给定一组带标签的图
$ \mathcal D=\left\{(\mathcal G_1,y_1),\cdots,(\mathcal G_N,y_N)\right\} $ ,其中 $ y_i\in \mathcal Y $ 为第 $ i $ 个图 $ \mathcal G_i\in \mathcal G $ 的标签。图分类任务的目标是学习graph
到label
的映射函数 $ f:\mathcal G\rightarrow \mathcal Y $ 。和标准的监督学习任务相比,这里的挑战是:我们需要一种从这些输入图中抽取有用的特征向量的方法。即,我们需要一个过程来将每个图转换为一个有限维的向量。
本文我们以
GNN
为基础,以端到端的方式学习图分类的有用representation
。具体而言,我们考虑采用以下的message-passing
架构的GNN
:其中:
$ \mathbf H^{(k)}\in \mathbb R^{n\times d} $ 为第 $ k $ 层的节点embedding
,其中 $ \mathbf H^{(0)}=\mathbf X $ 为输入特征矩阵。 $ \mathcal M(\cdot) $ 为消息传递函数,它依赖于邻接矩阵 $ \mathbf A $ 、第 $ k-1 $ 层的节点embedding
$ \mathbf H^{(k-1)} $ 、以及可训练的参数 $ \theta^{(k)} $ 。
我们提出的可微池化模块可以应用于任何
GNN
模型,并且对于如何实现 $ \mathcal M(\cdot) $ 的细节是不可知的。消息传递函数
$ \mathcal M(\cdot) $ 有多种可能的形式,例如GCN
中采用一个线性映射和一个ReLU
非线性激活函数来实现:其中:
$ \tilde{\mathbf A} = \mathbf A + \mathbf I $ 为带自环的邻接矩阵, $ \tilde{\mathbf D} $ 为对应的邻接矩阵,它是一个对角矩阵,满足 $ \tilde D_i=\sum_j \tilde A_{i,j} $ 。 $ \mathbf W^{(k)}\in \mathbb R^{d\times d} $ 为可训练的权重矩阵。
完整的
GNN
模块可能包含 $ K $ 层,最终输出的节点embedding
为 $ \mathbf Z=\mathbf H^{(K)}\in \mathbb R^{n\times d} $ ,其中 $ K $ 通常为2~6
层。为简化讨论,在后续内容中,我们将忽略
GNN
的内部结构,并使用 $ \mathbf Z=\text{GNN}(\mathbf A, \mathbf X) $ 来表示一个任意的GNN
模块,它根据邻接矩阵 $ \mathbf A $ 和输入特征矩阵 $ \mathbf X $ 进行了 $ K $ 轮消息传递。上述
GNN
的本质上是flat
的,因为它们仅在图的边之间传播信息。我们的目标是定义一种通用的、端到端的可微策略,该策略允许人们以层次化的方式堆叠多个GNN
模块。形式上,给定一个邻接矩阵
$ \mathbf A\in \mathbb R^{n\times n} $ 以及一个GNN
模块的输出 $ \mathbf Z=\text{GNN}(\mathbf A, \mathbf X) $ ,我们试图寻找一种策略,该策略输出包含 $ m\lt n $ 个节点的新的粗化图。粗化图具有加权邻接矩阵 $ \mathbf A^\prime\in \mathbb R^{m\times m} $ ,以及新的节点embedding
$ \mathbf Z^\prime \in \mathbb R^{m\times d} $ 。然后,而可以将这个新的粗化图用作另一个
GNN layer
的输入,并且可以将整个过程重复 $ K $ 次,从而生成具有 $ K $ 个GNN layer
的模型,该模型对输入图的一系列越来越粗的版本进行操作。因此,我们的目标是学习如何使用GNN
的输出将节点聚类在一起,以便我们可以将这个粗化图用作另一个GNN layer
的输入。和常规的图粗化任务相比,为
GNN
设计这样的池化层尤其具有挑战性的原因是:我们的目标不是简单地将一个图中的节点聚类,而是提供一个通用的方法对输入图的一组广泛的节点进行层次池化hierarchically pool
。即,我们需要模型来学习一种池化策略,该策略将在具有不同节点、边的图之间进行泛化,并且在推断过程中可以适配各种图结构。
35.1.1 DIFFPOOL 方法
DIFFPOOL
方法通过使用GNN
模型的输出来学习节点上的cluster assignment
矩阵来解决上述挑战。关键的直觉是:我们堆叠了 $ L $ 个GNN
模块,其中基于第 $ l-1 $ 层的GNN
生成的embedding
并以端到端的方式学习如何将节点分配给第 $ l $ 层的簇。因此,我们不仅使用
GNN
来抽取对graph
分类有用的节点embedding
,也使用GNN
来抽取对层次池化有用的节点embedding
。通过这种方式,DIFFPOOL
中的GNN
学会编码一种通用的池化策略。我们首先描述
DIFFPOOL
模块如何在给定assignment
矩阵的情况下在每一层上池化节点,接下来我们讨论如何使用GNN
架构生成assignment
矩阵。给定
assignment
矩阵的池化:我们将第 $ l $ 层学到的cluster assignment
矩阵定义为 $ \mathbf S^{(l)}\in \mathbb R^{n_l\times n_{l+1}} $ ,其中 $ \mathbf S^{(l)} $ 中的每一行表示第 $ l $ 层的节点或簇、每一列表示第 $ l+1 $ 层的簇。直观地讲, $ \mathbf S^{(l)} $ 将第 $ l $ 层的每个节点软分配soft assignment
给下一个粗化的、第 $ l+1 $ 层中的簇。假设
$ \mathbf S^{(l)} $ 已经计算好,即我们已经在模型的第 $ l $ 层计算好了assignment
矩阵。我们假设第 $ l $ 层的输入邻接矩阵为 $ \mathbf A^{(l)} $ 、第 $ l $ 层的输入节点embedding
矩阵为 $ \mathbf Z^{(l)} $ 。给定这些输入,DIFFPOOL
层将粗化coarsen
输入图,生成一个新的粗化的邻接矩阵 $ \mathbf A^{(l+1)} $ 、以及新的粗化的节点embedding
矩阵 $ \mathbf X^{(l+1)} $ 。即:其中:
DIFFPOOL
根据cluster assignment
矩阵 $ \mathbf S^{(l)} $ 来聚合节点embedding
$ \mathbf Z^{(l)} $ ,从而生成第 $ l+1 $ 层的 $ n_{l+1} $ 个簇的embedding
。物理意义:第
$ l+1 $ 层的每个簇的embedding
等于它包含的子节点的embedding
的加权和,权重为子节点属于这个簇的可能性(由assignment
矩阵给出)。DIFFPOOL
根据cluster assignment
矩阵 $ \mathbf S^{(l)} $ 和邻接矩阵 $ \mathbf A^{(l)} $ 来生成粗化的邻接矩阵,这个粗化的邻接矩阵表示cluser pair
对之间的连接强度。物理意义:第
$ l+1 $ 层的任意两个簇之间的距离等于各自包含的子节点之间距离的加权和,权重为子节点属于各自簇的可能性(由assignment
矩阵给出)。
这样,
DIFFPOOL
粗化了图:下一层邻接矩阵 $ \mathbf A^{(l+1)} $ 表示具有 $ n_{l+1} $ 个节点或簇点cluster node
的粗化图,其中每个簇点cluster node
对应于第 $ l $ 层中的一个簇中所有的节点。注意:
$ \mathbf A^{(l+1)} $ 是一个实数矩阵,它表示一个全连接的、带权的图。每一项 $ A^{(l+1)}_{i,j} $ 表示簇 $ i $ 和簇 $ j $ 之间的连接强度。类似地, $ \mathbf X^{(l+1)} $ 中的第 $ i $ 行对应于簇 $ i $ 的embedding
。粗化的邻接矩阵
$ \mathbf A^{(l+1)} $ 和簇embedding
$ \mathbf X^{(l+1)} $ 一起可以用于另一个GNN layer
的输入。我们接下来详述。学习
assignment
矩阵:现在我们描述DIFFPOOL
如何生成assignment
矩阵 $ \mathbf S^{(l)} $ 和embedding
矩阵 $ \mathbf Z^{(l)} $ 。我们使用两个独立的GNN
来生成这两个矩阵,这两个GNN
都作用到簇点cluster node
特征 $ \mathbf X^{(l)} $ 和粗化的邻接矩阵 $ \mathbf A^{(l)} $ 上。第
$ l $ 层的embedding GNN
是标准的GNN
模块:即,我们采用第
$ l $ 层簇点的邻接矩阵和特征矩阵,并用标准的GNN
来获取簇点的新的embedding
矩阵 $ \mathbf Z^{(l)} $ 。第
$ l $ 层的pooling GNN
使用簇点的邻接矩阵和特征矩阵来生成assignment
矩阵:其中
softmax
是逐行进行。 $ \text{GNN}_{l,\text{pool}} $ 的输出维度对应于第 $ l $ 层中预定义的最大簇数,并且是模型的超参数。
注意:
这两个
GNN
采用相同的输入数据,但是具有不同的参数化parameterization
并发挥不同的作用:embedding GNN
为第 $ l $ 层输入节点生成新的embedding
;pooling GNN
为第 $ l $ 层输入节点生成对应于 $ n_{l+1} $ 个簇的分配概率。当
$ l=0 $ 时, $ \mathbf A^{(0)} = \mathbf A $ 为原始图的邻接矩阵, $ \mathbf X^{(0)} = \mathbf X $ 为原始的输入特征矩阵。在倒数第二层
$ (L-1) $ 中,我们将assignment
矩阵 $ \mathbf S^{(L-1)} $ 设置为一个全为1
的向量,即:将最后一层 $ L $ 中所有节点都分配给单个簇,从而生成对应于整个图的final embedding
向量。然后可以将这个
final embedding
向量用于可微分类器(如softmax
层)的特征输入,并使用随机梯度下降来端到端地训练整个系统。
排列不变性
permutation invariance
:注意,为了对图分类有用,池化层应该是节点排列不变的。对于DIFFPOOL
,我们得到以下正面的结论,这表明:只要GNN
的组件component
是排列不变的,那么任何基于DIFFPOOL
的deep GNN
模型都是排列不变的。推论:令
$ \mathbf P\in \{0,1\}^{n\times n} $ 为任意的排列矩阵permutation matrix
,则只要满足 $ \text{GNN}(\mathbf A,\mathbf X) = \text{GNN}\left(\mathbf P\mathbf A\mathbf P^\top,\mathbf X\right) $ ,则有 $ \text{DIFFPOOL}(\mathbf A,\mathbf Z) = \text{DIFFPOOL}\left(\mathbf P\mathbf A\mathbf P^\top,\mathbf P\mathbf X\right) $ 。证明:假设
GNN
模块是排列不变的,则 $ \mathbf Z^{(l)}, \mathbf S^{(l)} $ 都是排列不变的。考虑到 $ \mathbf P $ 的正交性( $ \mathbf P^\top\mathbf P=\mathbf I $ ),应用到 $ \mathbf X^{(l+1)},\mathbf A^{(l+1)} $ 的计算公式,则得证。
35.1.2 辅助链接预测和熵正则化
在实践中,仅使用来自图分类任务的梯度信号来训练
pooling GNN
可能会很困难。直观地讲,我们有一个非凸优化问题,在训练初期很难将pooling GNN
推离局部极小值。为缓解该问题,我们使用辅助的链接预测目标
auxiliary link prediction objective
训练pooling GNN
,该目标编码了先验知识:应该将相邻的节点映射到相同的簇。具体而言,在每一层 $ l $ ,我们最小化目标:其中
$ ||\cdot||_F $ 为Frobenius
范数。 $ \mathbf S^{(l)}\mathbf S^{(l)^\top} $ 给出任意两个节点位于相同簇中的可能性,如果它等于邻接矩阵那么表明:pooling GNN
将相连的节点分配到相同的簇、将不相连的节点分配到不同的簇。注意:邻接矩阵
$ \mathbf A^{(l)} $ 是低层assignment
矩阵的函数,并且在训练期间会不断改变。pooling GNN
的另一个重要特点是:每个节点的输出cluster assignment
通常应该接近一个one-hot
向量,从而清楚地定义节点属于哪个cluster
。因此,我们通过最小化以下目标来对cluster assignment
的熵进行正则化:其中:
$ H(\cdot) $ 为熵函数; $ \mathbf{\vec s}_i $ 为assignment
矩阵 $ \mathbf S $ 的第 $ i $ 行。在训练期间,来自每一层的
$ \mathcal L_\text{LP},\mathcal L_{E} $ 都添加到分类损失中。实践中我们观察到:带有这些额外目标的训练花费更长的时间才能收敛,但是获得了更好的性能以及更可解释的cluster assignment
。
35.2 实验
我们针对多个
state-of-the-art
图分类方法评估了DIFFPOOL
的优势,目的是回答以下问题:Q1
:DIFFPOOL
对比其它GNN
中的池化方法(如sort pooling
或者Set2Set
方法)相比如何?Q2
:结合了DIFFPOOL
的GNN
对比图分类任务中的state-of-the-art
方法(包括GNN
方法和kernel-based
方法)相比如何?Q3
:DIFFPOOL
是否在输入的图上计算得到有意义且可解释的聚类?
数据集:蛋白质数据集,包括
ENZYMES, PROTEINS, D&D
;社交网络数据集REDDIT-MULTI-12K
;科学协作数据集COLLAB
。对这些数据集,我们执行
10-fold
交叉验证来评估模型性能,并报告10
个fold
的平均分类准确率。模型配置:在我们的实验中,用于
DIFFPOOL
的GNN
模型是建立在GraphSAGE
架构之上的,因为我们发现GraphSAGE
比标准的GCN
效果更好。我们使用
GraphSAGE
的mean
变体,并在我们的体系架构中每隔两个GraphSAGE layer
之后应用一个DIFFPOOL layer
。在每个DIFFPOOL
层之后、下一个DIFFPOOL
层(或者readout
层)之前,我们添加3
层图卷积层。这里感觉前后矛盾,就是是
3
层图卷积层还是2
层图卷积层?要看代码。数据集一共使用
2
个DIFFPOOL
层。对于小型数据集(如ENZYMES, COLLAB
),1
个DIFFPOOL
层就可以实现相似的性能。embedding
矩阵和assignment
矩阵分别由两个单独的GraphSAGE
模型计算。在
2
个DIFFPOOL
层的体系架构中,cluster
数量设置为DIFFPOOL
之前节点数量的25%
;在1
个DIFFPOOL
层的体系架构中,cluster
数量设置为DIFFPOOL
之前节点数量的10%
。在
GraphSAGE
的每一层之后都应用了batch normalization
。我们还发现,在每一层的节点
embedding
中添加 $ l_2 $ 正则化可以使得训练更加稳定。所有模型都训练最多
3000
个epoch
,并基于验证损失来执行早停策略。我们还评估了
DIFFPOOL
的两个简化版本:DIFFPOOL-DET
:是一个DIFFPOOL
的变体,其中使用确定性的图聚类算法来生成assignment
矩阵。DIFFPOOL-NOLP
:是一个DIFFPOOL
的变体,其中移除链接预测的辅助目标。
另外,我们还将在
Structure2Vec
架构上测试了DIFFPOOL
的类似变体,从而演示如何将DIFFPOOL
应用于其它GNN
模型。baseline
方法:这里我们考虑使用不同了池化的GNN
方法,以及state-of-the-art
的kernel-based
方法。GNN-based
方法:- 带全局均值池化的
GraphSAGE
。其它GNN
变体被忽略,因为根据经验,GraphSAGE
在任务中获得更高性能。 Structure2Vec:S2V
是一种state-of-the-art
的graph representation learning
方法,它将一个潜在变量模型latent variable model
和GNN
相结合,并使用全局均值池化。ECC
将边信息融合到GCN
模型中,并使用一个图粗化算法来执行池化。PATCHYSAN
对每个节点定义一个感受野,并使用规范化的节点顺序,从而对节点embedding
的序列应用卷积。SET2SET
使用Set2Set
方法来代替传统GNN
架构中的全局均值池化。这里我们使用GraphSAGE
作为base GNN model
。SORTPOOL
应用GNN
架构,然后执行单层soft pooling
层,然后对排序的节点embedding
执行一维卷积。
对于所有
GNN baseline
,我们尽可能使用原始作者报告的10-fold
交叉验证的结果。如果作者没有公开结果,则我们从原始作者获取代码运行模型,并根据原始作者的准则执行超参数搜索。对于
GraphSAGE
和SET2SET
,我们像DIFFPOOL
方法一样使用基本的实现和超参数择优。- 带全局均值池化的
kernel-based
算法:我们使用GRAPHLET、SHORTEST-PATH 、WEISFEILERLEHMAN kernel:WL、 WEISFEILER-LEHMAN OPTIMAL ASSIGNMENT KERNEL:WLOA
等方法。对于每个
kernel
,我们计算归一化的gram
矩阵。我们使用10-fold
交叉验证,并使用LISVM
计算分类准确率。超参数C
的搜索范围 $ \{10^{-3},10^{-2},\cdots,10^2,10^3\} $ 。WL
和WL-OA
的迭代范围从0
到5
。
下表给出了实验结果,这为
Q1
和Q2
给出了正面的回答。最右侧的Gain
列给出了相对于GraphSAGE
方法在所有数据集上的平均性能提升。可以看到:
DIFFPOOL
方法在GNN
的所有池化方法中获得了最好的性能,在GraphSAGE
体系结构上平均提升6.27%
,并且在5
个benchmark
上的4
个达到了state-of-the-art
。- 有趣的是,我们的简化模型变体
DIFFPOOLDET
在COLLAB
数据集上达到了state-of-the-art
性能。这是因为COLLAB
的很多协作图仅显示了单层社区结构,这些结构可以通过预先计算的图聚类算法很好地捕获。
有一个现象是:尽管性能有了显著提升,但是
DIFFPOOL
可能无法稳定训练。并且即使采用相同的超参数设置,不同运行之间的准确率也存在着差异。可以看到添加链接预测目标可以使得训练更加稳定,并减少不同运行之间准确率的标准差。除了
GraphSAGE
之外,DIFFPOOL
也可以应用于其它GNN
架构,从而捕获图数据中的层次结构。为此我们在Structure2Vec:S2V
上应用了DIFFPOOL
。我们使用三层的
S2V
架构:- 在第一个变体中,在
S2V
的第一层之后应用一个DIFFPOOL
层,并在DIFFPOOL
的输出的顶部堆叠另外两个S2V
层。 - 在第二个变体中,在
S2V
的第一层、第二层之后分别应用一个DIFFPOOL
层。
在这两个变体中,
S2V
模型用于计算embedding
矩阵,而GraphSAGE
模型用于计算assignment
矩阵。实验结果如下所示。可以看到:
DIFFPOOL
显著改善了ENZYMES
和D&D
数据集上S2V
的性能。在其它数据集上也观察到类似的趋势。结果表明:
DIFFPOOL
是一个可以提升不同GNN
架构的通用池化策略。- 在第一个变体中,在
尽管
DIFFPOOL
需要对asignment
矩阵进行额外的计算,但我们观察到DIFFPOOL
实际上并不会带来大量的额外运行时间。这是因为每个DIFFPOOL
层都通过粗化来减小了图的大小,从而加快了下一层中图的卷积操作。具体而言,我们发现带有
DIFFPOOL
的GraphSage
模型要比带有SET2SET
池化的GraphSage
模型快12
倍,并且仍能实现明显更高的准确率。为回答问题
Q3
, 我们通过可视化不同层中的cluster assignment
来调研DIFFPOOL
是否学习有意义的节点聚类。下图给出COLLAB
数据集中,第一层和第二层的节点分配的可视化,其中:- 节点颜色表示
cluster
成员关系。节点的cluster
成员关系是通过对cluster assignment
的概率取argmax
来确定的。 - 虚线表示簇关系。
- 下图是三个样本的聚类(每个样本代表一个
graph
),图(a)
给出两层的层次聚类,图(b),(c)
给出一层的层次聚类。 - 注意,尽管我们将簇的数量设置为前一层节点的
25%
,但是assignment GNN
可以自动学习适当数量的、且有意义的簇,从而分配给这些不同的图。(即大量的簇没有分配到任何节点)。
可以看到:
即使仅基于图分类目标,
DIFFPOOL
仍可以捕获层次的社区结构。我们还通过链接预测辅助目标观察到cluster assignment
质量的显著提升。稠密的子图结构
vs
稀疏的子图结构:我们观察到DIFFPOOL
学会了以非均匀方式将所有节点折叠collapse
为soft cluster
,并且倾向于将稠密的子图折叠为簇。- 由于
GNN
可以有效地对稠密的、clique-like
的子图执行消息传递(由于较小的直径),因此在这种稠密的子图中将节点池化在一起不太可能导致结构信息的丢失。这直观地解释了为什么折叠稠密子图是DIFFPOOL
的有效池化策略。 - 相反,稀疏子图可能包含许多有趣的结构,包括路径、循环、树状结构,并且由于稀疏性导致的大直径,
GNN
消息传递可能无法捕获这些结构。因此,通过分别池化稀疏子图的不同部分,DIFFPOOL
可以学习捕获稀疏子图中存在的有意义的结构。
- 由于
相似
representation
节点的分配:由于assignment network
基于输入节点及其邻域特征来计算soft cluster assignment
,因此具有相似的输入特征和邻域结构的节点将具有相似的cluster assignment
。实际上,可以构造一个人工
case
:其中两个节点尽管相距很远,但是它们具有相同的节点特征和邻域特征。这种情况下,pooling GNN
迫使它们分配到同一个cluster
中。这和其它体系结构中的池化概念完全不同。在某些情况下,我们确实观察到不相连的节点被池化到一起。另外,我们观察到辅助链接预测目标有助于阻止很远的节点池化到一起。并且,可以使用更复杂的
GNN
聚合函数(诸如高阶矩)来区分结构相似和特征相似的节点,总体的框架保持不变。预定义聚类数的敏感性:我们发现
assignment
根据网络深度和 $ C $ (最大的聚类簇数量)而变化。使用较大的 $ C $ ,则pooling GNN
可以对更复杂的层次结构进行建模,但是会导致更大的噪声和更低的训练效率。尽管
$ C $ 是一个预定义的参数,但是pooling GNN
通过端到端训练来学习使用适当数量的cluster
。具体而言,assignment
矩阵可能不会用到某些簇。对于未被使用的cluster
对应的矩阵列,它在所有节点上都具有较低的值。例如图2(c)
中,节点主要分配到3
个簇上。
- 节点颜色表示
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论