数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
十八、ClusterGCN [2019]
图卷积网络
graph convolutional network: GCN
在解决许多graph-based
的应用程序中变得越来越流行,包括半监督节点分类、链接预测、推荐系统。给定一个图,GCN
使用图卷积操作逐层获得node embedding
:在每一层,节点的embedding
是通过收集其邻居的embedding
来获得的,然后是一层或几层的线性变换和非线性激活。然后将最后一层的embedding
用于一些终端任务。由于
GCN
中的图卷积运算需要利用图中节点之间的交互来传播embedding
,因此GCN
的训练非常困难。和其它神经网络不同,GCN
的损失函数中每个节点对应的损失不是相互独立的,而是依赖于大量其它节点,尤其是当GCN
的深度很深时。相比之下,其它神经网络的损失函数中,每个样本的损失是相互独立的。由于节点的依赖性,GCN
的训练非常缓慢并且需要大量的内存,因为反向传播阶段需要将图中所有的embeding
存储到GPU
内存中。为了说明研究可扩展的
GCN
训练算法的必要性,我们从以下三个因素来讨论现有算法的优缺点:内存需求、epoch
训练速度(每个epoch
的训练时间)、epoch
收敛速度(每个epoch
损失函数下降的值)。这三个因素对于评估训练算法至关重要。注意:内存需求直接限制了算法的可扩展性,epoch
训练速度和epoch
收敛速度一起决定了整个训练时间。令
$ n $ 为图的节点数量、 $ d $ 为embedding
维度、 $ L $ 为GCN
的深度。full-batch
梯度下降:GCN
原始论文使用full-batch
梯度下降来训练。为计算整个训练集损失的梯度,它需要存储所有中间embedding
(intermediate embedding
),从而导致 $ O(ndL) $ 的内存需求,因此难以扩展到大型图。另外,尽管每个
epoch
训练时间高效(单个epoch
训练时间很短),但是单个epoch
的收敛速度很慢,因为每个epoch
仅更新一次参数。整体而言,
full-batch
梯度下降内存需求差、epoch
训练速度快、epoch
收敛速度慢。mini-batch
随机梯度下降:GraphSAGE
使用了基于mini-batch
的随机梯度下降来训练。由于每次迭代仅基于mini-batch
梯度,因此它可以减少内存需求,并在每个epoch
进行多次更新从而加快epoch
收敛速度。但是,由于邻域扩展问题,
mini-batch
随机梯度下降会引入大量的计算开销:为计算第 $ L $ 层上单个节点的损失,它需要其邻域节点在第 $ L-1 $ 层的embedding
,而这又需要邻域节点的邻域节点在第 $ L-2 $ 层的embedding
,并向底层不断递归。这导致计算的时间复杂度和GCN
的深度 $ L $ 呈指数关系。GraphSAGE
提出使用固定数量的邻域样本,而FastGCN
提出了重要性采样。但是这些方法的开销仍然很大,并且当GCN
层数更深时情况更糟。整体而言,
mini-batch
随机梯度下降内存需求好、epoch
训练速度慢、epoch
收敛速度快。VR-GCN
:VR-GCN
提出方差缩减variance reduction
技术来减少邻域采样规模。尽管这种方法成功地降低了邻域采样的数量(在Cluster-GCN
的实验中,VR-GCN
对每个节点仅采样2
个邻居的效果很好),但是它仍然需要将所有节点的中间embedding
存储在内存中,从而导致 $ O(ndL) $ 的内存需求。如果图的节点规模达到数百万,则VR-GCN
的内存需求可能太高导致无法放入到GPU
中。整体而言,
VR-GCN
内存需求差、epoch
训练速度快、epoch
收敛速度快。
论文
《Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks》
提出了一种新的GCN
训练算法,该算法利用图聚类结构graph clustering structure
来加速GCN
的训练。作者发现:
mini-batch
算法的效率可以通过embedding
利用率embedding utilization
的概念来刻画。embedding
利用率和单个batch
内的边的数量成正比。这一发现促使作者利用图聚类算法来设计batch
,目标是构造分区partition
使得同一个分区内的边的数量比跨区之间的边的数量更多。基于图聚类
graph clustering
的思想,作者提出了Cluster-GCN
:一种基于图聚类算法(如METIS
)来设计batch
的算法。进一步地,作者提出一个随机多聚类框架stochastic multi-clustering framework
来改善Cluster-GCN
的收敛性。核心思想是:尽可能地将内存和计算控制在
batch
内。这要求仔细安排batch
内节点。但是,这么做破坏了
mini-batch
的随机性要求,因为mini-batch
要求随机选取 $ b $ 个节点( $ b $ 为batch-size
),而Cluster-GCN
中的采样方法不再随机。这使得mini-batch
梯度不再是full-batch
梯度的无偏估计。作者的解决办法是:随机将多个簇合并为一个大簇,然后将这个大簇作为
mini-batch
,使得batch
内的节点分布尽可能和full-batch
一致。Cluster-GCN
带来了巨大的内存优势和计算优势:- 在内存需求方面,
Cluster-GCN
仅需要将当前batch
中的节点embedding
存储在内存中,内存复杂度为 $ O(bdL) $ ,其中 $ b $ 为batch-size
。这比VR-GCN
、full-batch
梯度下降、以及其它mini-batch
随机梯度下降等方法要小得多。 - 在计算复杂度方面,
Cluster-GCN
在每个epoch
都具有相同的时间代价,并且比邻域搜索方法快得多。 - 在收敛速度方面,
Cluster-GCN
相比其它SGD-based
方法具有可比的竞争力。 - 最后,
Cluster-GCN
算法易于实现,因为它只需要计算矩阵乘法,而无需任何邻域采样策略。
整体而言,
Cluster-GCN
内存需求好、epoch
训练速度快、epoch
收敛速度快。通过对几个大型图数据集进行全面实验,证明了
Cluster-GCN
的效果:Cluster-GCN
在大型图数据集(尤其是深层GCN
)上实现了最佳的内存使用效率。例如在Amazon2M
数据集上的3
层GCN
模型中,Cluster-GCN
使用的内存比VR-GCN
少5
倍。对于浅层网络(例如
2
层),Cluster-GCN
达到了和VR-GCN
相似的训练速度;但是当网络更深(如4
层)时,Cluster-GCN
可以比VR-GCN
更快。这是因为Cluster-GCN
的复杂度和层数 $ L $ 呈线性关系,而VR-GCN
的复杂度是 $ L $ 的指数级。Cluster-GCN
能够训练具有很大embedding size
并且非常深的网络。尽管之前的一些工作表明:深层
GCN
无法提供更好的性能,但是作者发现通过适当的优化,深层GCN
可以帮助提高模型准确性。例如使用5
层GCN
,Cluster-GCN
在PPI
数据集上的accuracy
为99.36
,而之前的最佳效果为98.71
。
18.1 模型
给定图
$ G=(\mathcal V,\mathcal E,\mathbf A) $ ,其中: $ \mathcal V=\{v_1,\cdots,v_n\} $ 为节点集合, $ n $ 为节点数量。 $ \mathcal E=\{e_{i,j}\}_{i,j} $ 为边的集合, $ e_{i,j} $ 表示节点 $ v_i $ 和 $ v_j $ 之间的边。 $ \mathbf A\in \mathbb R^{n\times n} $ 为邻接矩阵,如果节点 $ v_i,v_j $ 存在边则 $ A_{i,j} = 1 $ 否则 $ A_{i,j} = 0 $ 。- 节点
$ v $ 关联一个 $ d_f $ 维的特征向量 $ \mathbf{\vec x}_v\in \mathbb R^{d_f} $ 。 所有节点的特征向量按行拼接为特征矩阵 $ \mathbf X\in \mathbb R^{n\times d_f} $ ,第 $ v $ 行就是节点 $ v $ 的特征向量 $ \mathbf{\vec x}_v $ 。 - 节点
$ v $ 关联一个label
$ y_v $ ,所有带label
的节点集合为 $ \mathcal V_Y $ ,即观测节点集合。
定义一个包含
$ L $ 层卷积层的GCN
,其中第 $ l+1 $ 层卷积层为:其中:
$ \mathbf H^{(l)}\in \mathbb R^{n\times d_l} $ 为第 $ l $ 层的representation
矩阵, $ d_l $ 为第 $ l $ 层representation
向量的维度。 $ \mathbf H^{(l)} $ 的第 $ v $ 行 $ \mathbf{\vec h}_v^{(l)} $ 表示节点 $ v $ 的第 $ l $ 层的representation
向量。为简化讨论,我们假设
$ d_f = d_1=\cdots=d_L = d $ 。 $ \mathbf H^{(0)} = \mathbf X $ 为输入的特征矩阵,第 $ v $ 行 $ \mathbf{\vec x}_v $ 表示节点 $ v $ 的特征向量。 $ \mathbf P\in \mathbb R^{n\times n} $ 为归一化的邻接矩阵:其中
$ \tilde{\mathbf A} $ 为添加了self-loop
的邻接矩阵。 $ \mathbf W^{(l)}\in \mathbb R^{d_l\times d_{l+1}} $ 为第 $ l+1 $ 层模型待学习的权重矩阵,它在所有节点上共享。 $ \sigma(\cdot) $ 为非线性激活函数,通常为ReLU
。
GCN
模型的损失函数为:其中:
$ f(\cdot,\cdot) $ 为单个节点的损失函数。 $ \mathbf{\vec z}_v^{(L)} $ 为 $ \mathbf Z^{(L)} $ 的第 $ v $ 行,表示节点 $ v $ 的final representation
。
我们首先讨论之前方法的一些不足,从而启发我们提出
Cluster-GCN
。原始
GCN
:原始GCN
中,作者通过full-batch
梯度下降来训练GCN
,其计算代价和内存需求都很高。- 在内存需求方面,通过反向传播来计算损失函数的梯度需要
$ O(ndL) $ 的空间来存储所有的embedding
矩阵 $ \left\{\mathbf Z^{(l)}\right\}_{l=1}^L $ 。 - 在收敛速度方面,由于模型每个
epoch
仅更新一次参数,因此模型需要训练很多个epoch
才能收敛。
- 在内存需求方面,通过反向传播来计算损失函数的梯度需要
GraphSAGE
:GraphSAGE
通过mini-batch SGD
来改善GCN
的训练速度和内存需求。SGD
不需要计算完整的梯度,而是仅在每轮更新中基于一个mini-batch
来计算梯度。记
mini-batch
节点集合为 $ \mathcal B\sub \mathcal V_Y $ ,令 $ b=|\mathcal B| $ ,则每轮SGD
迭代中,梯度的估计量为:尽管
mini-batch SGD
在收敛速度方面更快,但是它在GCN
训练过程中引入了另一种计算开销,这使得它与full batch
梯度下降相比,每个epoch
的训练速度慢得多。原因如下:考虑计算单个节点 $ v $ 的梯度 $ \nabla f\left(y_v, \mathbf{\vec z}_v^{(L)}\right) $ ,显然这需要节点 $ v $ 的embedding
$ \mathbf{\vec z}_v^{(L)} $ ;而 $ \mathbf{\vec z}_v^{(L)} $ 依赖于节点 $ v $ 的邻域节点在第 $ L-1 $ 层的representation
,而这又依赖于这些邻域节点的邻域节点在第 $ L-2 $ 层的representation
,... 。假设
GCN
具有 $ L $ 层并且每个节点的平均degree
为 $ D $ ,则为了计算节点 $ v $ 的梯度,我们需要从 $ O\left(D^L\right) $ 个其它节点中聚合特征。即:我们需要从节点 $ v $ 的hop-k
( $ k=1,2,\cdots,L $ )邻域中抽取信息,从而计算节点 $ v $ 的梯度。由于聚合过程中涉及到和 $ \mathbf W^{(l)} $ 的矩阵乘法,因此计算每层每个representation
向量需要 $ O(d^2) $ 的时间复杂度。因此计算单个节点梯度的平均时间复杂度为 $ O(D^Ld^2) $ 。如果一个
batch
中有很多节点,则时间复杂度就不是那么直接,因为不同节点具有重叠的top-k
邻域,那么依赖的节点数量可以小于最差的 $ O(bD^L) $ 。
为反应
mini-batch SGD
的计算效率,我们定义embedding
利用率embedding utilization
的概念,从而刻画计算效率。在算法过程中,如果节点
$ v $ 在第 $ l $ 层的embedding
计算之后,被第 $ l+1 $ 层的embedding
计算过程使用了 $ u $ 次,那么我们说 $ \mathbf{\vec z}_v^{(l)} $ 的embedding
利用率为 $ u $ 。- 对于具有随机采样的
mini-batch SGD
,由于图通常比较大且稀疏,因此 $ u $ 很小。假设 $ u $ 是一个很小的常数(即节点的hop-k
邻域之间几乎没有重叠),则mini-batch SGD
在每个batch
需要计算 $ O(bD^L) $ 个embedding
,这导致每个mini-batch
的训练时间为 $ O(bD^L d^2) $ 、每个epoch
的训练时间为 $ O(nD^Ld^2) $ 。 - 相反,对于
full-batch
梯度下降,每个embedding
将在更上一层中重复利用 $ D $ 次(平均degree
),因此具有最大的embedding
利用率。结果full-batch SGD
在每个epoch
需要计算 $ O(nL) $ 个embedding
,训练时间为 $ O(nLd^2) $ 。这意味着仅需要计算 $ O(L) $ 个embedding
就可以得到一个节点的梯度,相比之下mini-batch SGD
需要计算 $ O(D^L) $ 个embedding
。
如下图所示给出了传统的
GCN
中指数级邻域扩展(左图)。红色节点是扩展的起始节点,不同颜色代表不同的hop
。- 对于具有随机采样的
为了使得
mini-batch SGD
顺利工作,已有的一些算法试图限制邻域扩展的大小,但是这无法提升embedding
利用率。GraphSAGE
均匀采样一个固定大小的邻域,而不是完整的邻域集合。我们将这个固定大小记作 $ r $ ,这将导致每个节点梯度需要计算 $ O\left(r^L\right) $ 个embedding
,并且也使得梯度估计的准确性降低。FastGCN
提出了一种重要性采样策略来改善梯度估计。VR-GCN
提出了一种策略,通过存储所有 $ n $ 个节点在 $ L $ 层上所有embedding
的历史均值,从而应用于未采样邻居节点的embedding
计算。尽管存储所有
$ nL $ 个embedding
的内存需求很高,但我们发现该策略非常有效,并且在实践中即使对于非常小的 $ r $ ( $ r=2 $ )也可以产生很好的收敛。
18.1.1 Cluster-GCN
Cluster-GCN
技术受到以下问题的启发:在mini-batch SGD
更新过程中,能否设计mini-batch
以及对应的计算子图,使得最大程度地提高embedding
利用率?解决该问题的关键在于将embedding
利用率和聚类相结合。考虑我们计算
batch
$ \mathcal B $ 中每个节点从第1
层到第 $ L $ 层的embedding
。定义 $ \mathcal B $ 子图的邻接矩阵为 $ \mathbf A_{\mathcal B,\mathcal B} $ ,它刻画了 $ \mathcal B $ 内部的链接。可以看到embedding
利用率是这个batch
内链接的数量 $ ||\mathbf A_{\mathcal B,\mathcal B}||_0 $ ,其中 $ ||\cdot||_0 $ 为矩阵的非零元素的个数。因此,为了最大化
embedding
利用率,我们应该设计一个batch
$ \mathcal B $ 来最大化batch
内链接的数量,这使得我们可以将SGD
更新的效率和图聚类算法联系起来。现在我们正式地介绍
Cluster-GCN
。对于图 $ G $ ,我们将节点划分到 $ C $ 个分组: $ \mathcal V = [\mathcal V_1,\cdots,\mathcal V_C] $ ,其中 $ \mathcal V_c $ 由第 $ c $ 个分组的节点组成, $ 1\le c\le C $ 。根据这一划分我们得到 $ C $ 个子图subgraph
:其中
$ \mathcal E_c $ 由 $ \mathcal V_c $ 中节点的链接组成。经过节点的重新排列之后,图
$ G $ 的邻接矩阵 $ \mathbf A $ 被划分为 $ C^2 $ 个子矩阵:其中:
- 每个对角块
$ \mathbf A_{c,c}\in \mathbb R^{|\mathcal V_c|\times |\mathcal V_c|} $ ,是子图 $ G_c $ 中的邻接矩阵。 $ \bar{\mathbf A} $ 为图 $ \bar G $ 的邻接矩阵, $ \bar G $ 是 $ G $ 经过分组之后移除组间的链接得到的新的图。 $ \mathbf A_{s,t} $ 为分组 $ \mathcal V_s $ 和 $ \mathcal V_t $ 之间的链接。 $ \Delta $ 是由 $ \mathbf A $ 的所有非对角线的块组成的矩阵。
同样地,我们可以根据
$ [\mathcal V_1,\cdots,\mathcal V_C] $ 来划分节点特征为 $ [\mathbf X_1,\cdots,\mathbf X_C] $ ,以及划分节点label
为 $ [\mathbf Y_1,\cdots,\mathbf Y_C] $ 。其中 $ \mathbf X_c $ 和 $ \mathbf Y_c $ 由 $ \mathcal V_c $ 中节点的特征向量和label
组成。现在我们用块对角矩阵
$ \bar{\mathbf A} $ 来近似 $ \mathbf A $ ,即不考虑分组之间的链接。这种近似的好处是:目标函数可以划分为不同的cluster
(每个cluster
对应一个batch
)。令
$ \bar{\mathbf P} $ 为归一化的 $ \bar{\mathbf A} $ ,由于 $ \bar{\mathbf P} $ 的块对角形式,最终的embedding
矩阵变为:其中
$ \bar{\mathbf P}_{c,c} $ 为 $ \bar{\mathbf P} $ 的第 $ c $ 个对角块。因此损失函数可以分解为:
在每一步我们随机采样一个簇
$ \mathcal V_c $ ,然后根据 $ \mathcal L_{\bar{\mathbf P}_{c,c}} $ 的梯度来进行SGD
更新。在这个更新过程中,仅依赖于当前batch
的子图 $ \mathbf A_{c,c} $ 、子样本特征 $ \mathbf X_c $ 、子样本的label
$ \mathbf Y_c $ 以及模型 $ \left\{\mathbf W^{(l)}\right\}_{0=1}^L $ 。可以看到,
Cluster-GCN
仅需要进行矩阵乘法和前向/反向传播,而之前的SGD-based
方法中需要对邻域进行搜索,因此我们的方法更容易实现。- 每个对角块
Cluster-GCN
使用图聚类算法对图进行分组。图聚类算法(如Metis
和Graclus
)旨在对图的节点进行划分,使得簇内的链接比簇间的链接更多,从而更好地捕获图的聚类和社区结构。这正是我们需要的结果,因为:- 如前所述,
embedding
利用率等于每个batch
的batch
内链接数量。 - 由于我们用块对角矩阵
$ \bar{\mathbf A} $ 来近似替代邻接矩阵 $ \mathbf A $ ,其近似误差正比于簇间链接 $ \Delta $ 。所以我们需要找到一个划分,从而最大程度地减少簇间链接的数量。
- 如前所述,
下图给出了在完整图
$ G $ (左图)以及聚类图 $ \bar G $ (右图)上的邻域扩展。红色节点是扩展的起始节点,不同颜色代表不同的hop
。可以看到:
Cluster-GCN
可以避免繁重的邻域搜索,从而将精力集中在每个簇内的邻居上。我们比较了两种不同的节点划分策略:随即划分
random partition
、聚类划分clustering partition
。我们分别通过随即划分、
METIS
聚类划分将图划分为10
个分组,然后每个分组作为一个batch
来执行SGD
更新。数据集为三个GCN
公共数据集,评估指标为测试集F-1 score
。可以看到:在相同epoch
下,使用聚类划分可以获得更高的准确性。这表明使用图聚类很重要,并且不应该使用随机划分。算法复杂度:由于仅考虑
$ \mathcal V_c $ 的内部链接,因此不需要执行 $ \mathbf A_{c,c} $ 之外的邻域搜索。因此每个batch
的复杂度仅有矩阵乘法 $ \bar{\mathbf P}_{c,c} \mathbf H_c^{(l)} \mathbf W^{(l)} $ ,以及某些逐元素的运算来决定。因此每个batch
的时间复杂度为 $ O(||\mathbf A_{c,c}||_0 d + b d^2) $ , $ ||\mathbf A_{c,c}||_0 $ 为 $ \mathcal V_c $ 内部链接的数量。因此每个epoch
的时间复杂度为 $ O(||\mathbf A||_0 d + nd^2) $ , $ ||\mathbf A||_0 $ 为 $ G $ 的边的数量。平均而言,每个
batch
只需要计算 $ O(bL) $ 个embedding
,它是线性的而不是 $ L $ 的指数。因此每个batch
的空间复杂度为 $ O(bLd) $ ,它具有比所有之前算法更高的内存效率。另外,我们的算法仅需要将子图加载到
GPU
内存中,无需加载整个图(虽然整个图的存储通常不是瓶颈)。我们在下表中总结了时间复杂度和空间复杂度。显然,所有
SGD-based
算法在层数方面都是指数复杂度。对于VR-GCN
,即使 $ r $ 很小,它也可以导致巨大的空间复杂度,即,可能超出GPU
的内存容量。接下来我们介绍我们的
Cluster-GCN
算法,它兼顾了full-batch
梯度下降下每个epoch
的时间复杂度、以及在普通SGD
梯度下降下的空间复杂度。其中:
$ L $ 为层数, $ m=||\mathbf A||_0 $ 为邻接矩阵中的非零数量(也是边的数量), $ d $ 为embedding
维度(为方便起见,所有层的embedding
以及输入特征的维度都是 $ d $ ), $ n $ 为节点数量, $ D $ 为平均的node degree
, $ b $ 为mibi-batch size
, $ r $ 为邻域采样大小。注意:
由于采用了方差缩减技术,
VR-GCN
的 $ r $ 可以远小于GraphSAGE
和FastGCN
。对于空间复杂度,
$ Ld^2 $ 是用于存储模型参数 $ \left\{\mathbf W^{(l)}\right\}_{l=1}^L $ ,其它项是用于存储embedding
。为简单起见,我们忽略了存储
Graph
以及子图的需求,因为它们通常都是固定的,且通常不是主要瓶颈。Cluster-GCN
具有最好的计算复杂度和最好的空间复杂度。从实验部分得知,
Cluster-GCN
的最大优势是内存需求更小从而可以扩展到更大的图。训练速度和训练准确率方面,Cluster-GCN
和VR-GCN
各有优势(在不同的层数方面)。
18.1.2 随机多重聚类 SMC
尽管前述的
Cluster-GCN
实现了良好的计算复杂度和空间复杂度,但是仍然有两个潜在的问题:- 对图进行划分之后,某些链接被删除了(即
$ \Delta $ 的部分),因此模型的性能可能受到影响。 - 图聚类算法倾向于将相似的节点聚合在一起,因此每个
batch
的节点分布和原始数据集不一致,从而导致在SGD
更新时,batch
的梯度是完整梯度的一个有偏的估计。
我们以
Reddit
数据集为例,考察随机划分来选择mini-batch
、通过Metis
聚类算法选择mini-batch
的数据分布的差异,划分数量为300
个分区。数据分布以batch
内节点标签分布的熵来衡量。我们给出不同batch
的标签熵label entropy
的分布直方图如下所示,可以看到:- 大多数聚类
batch
具有较低的标签熵,这表明聚类的batch
倾向于某些特定的label
,从而与整体的数据分布不一致。这可能会影响SGD
算法的收敛性。 - 随机
batch
具有较高的标签熵,这表明随机batch
的数据分布和整体数据分布更为一致。
- 对图进行划分之后,某些链接被删除了(即
为解决这些问题,我们提出了一个随机多重聚类框架
stochastic multiple clustering: SMC
,该框架通过随机合并多个簇,从而减少batch
之间的数据分布差异。我们首先将节点划分到
$ C $ 个分组: $ \mathcal V = [\mathcal V_1,\cdots,\mathcal V_C] $ ,其中 $ C $ 较大。然后每次构建一个batch
$ \mathcal B $ 时,我们并不是考虑一个簇,而是随机选择 $ q $ 个簇,记作 $ c_1,\cdots,c_q $ ,因此这个batch
$ \mathcal B =\{\mathcal V_{c_1},\cdots, \mathcal V_{c_q}\} $ 。此外,部分簇间链接也被考虑在内,这些簇间链接为: $ \{\mathbf A_{i,j}\mid i,j\in c_1,\cdots,c_q\} $ 。通过这种方式,所有簇间链接将被重新合并到模型中,并且簇的随机组合可以使得
batch
之间的数据分布的差异更小。这种随机多重聚类框架如下图所示,每个
batch
包含2
个簇,相同的batch
的簇具有相同的颜色。不同的epoch
中选择不同的簇组合。这种方法只能缓解问题,但是无法解决问题。因为即使是随机组合多个簇,新的
batch
内节点分布与整体分布仍然是有差异的。我们在
Reddit
数据集上进行实验,对比了SMC
和普通Cluster-GCN
的效果。在Cluster-GCN
中我们选择划分为300
个分区,在SMC
中我们选择划分为1500
个分区并随机选择5
个簇来构成一个batch
。实验结果如下图所示,其中
x
轴为epoch
,y
轴为F1-score
。可以看到随机多重聚类可以显著改善Cluster-GCN
的收敛性。Cluster-GCN
算法:输入:
- 图
$ G(\mathcal V,\mathcal E, \mathbf A) $ - 输入特征矩阵
$ \mathbf X $ - 节点标签矩阵
$ \mathbf Y $ (每行代表一个节点标签的one-hot
或者multi-hot
向量) - 最大迭代 步
max-iter
- 划分簇的数量
$ C $ - 每个
batch
的簇的数量 $ q $
- 图
输出:模型的参数
$ \left\{\mathbf W^{(l)}\right\}_{l=1}^L $ 以及节点的embedding
矩阵 $ \mathbf H^{(L)} $算法步骤:
通过
METIS
聚类算法划分 $ \mathcal V $ 到 $ C $ 个簇: $ \mathcal V_1,\cdots,\mathcal V_C $ 。迭代:
$ \text{iter} = 1,2,\cdots,\text{max-iter} $ ,迭代过程:- 随机无放回选择
$ q $ 个簇 $ \{\mathcal V_{c_1},\cdots,\mathcal V_{c_q}\} $ 。 - 以节点集合
$ \bar{\mathcal V} = \mathcal V_{c_1}\cup\cdots\cup\mathcal V_{c_q} $ 构建子图 $ \bar G $ ,以及子图的邻接矩阵 $ \mathbf A_{\bar{\mathcal V}, \bar{\mathcal V}} $ 。 - 根据子图的损失函数来计算梯度
$ \mathbf{\vec g} = \nabla \mathcal L_{\mathbf A_{\bar{\mathcal V}, \bar{\mathcal V}}} $ 。 - 基于
Adam
优化算法使用梯度 $ \mathbf{\vec g} $ 来更新参数。
- 随机无放回选择
输出模型的参数
$ \left\{\mathbf W^{(l)}\right\}_{l=1}^L $ 以及节点的embedding
矩阵 $ \mathbf H^{(L)} $ 。
METIS
是Karypis Lab
开发的一个功能强大的图切分软件包,支持多种切分方式。优势:METIS
具有高质量的划分结果,据称比常规的谱聚类要准确10% ~ 50%
。METIS
执行效率非常高,比常见的划分算法块1~2
个数量级。百万规模节点的图通常几秒钟之内就可以切分为256
个簇。METIS
具有很低的空间复杂度和时间复杂度,从而降低了存储负载和计算量。
18.1.3 深层 GCN
GCN
原始论文表明:对GCN
使用更深的层没有任何效果。但是,实验中的这些数据集太小,可能没有说服力。例如,实验中只有数百个节点的图,太深的GCN
可能会导致严重过拟合。另外,我们观察到更深的
GCN
模型的优化变得更困难,因为更深的模型可能会阻碍前几层的消息传递。在原始GCN
中,他们采用类似于残差连接的技术,使得模型能够将信息从前一层传递到后一层。具体而言,第 $ l+1 $ 层的卷积层为:这里我们提出另一种简单的技术来改善深层
GCN
的训练。在原始GCN
中,每个节点都聚合了来自前一层邻域的representation
。但是在深层GCN
的背景下,该策略可能不太合适,因为它没有考虑深度。凭直觉,附近的邻居应该比远处的节点贡献更大。因此我们提出了一种更好的解决该问题的技术:放大邻接矩阵
$ \mathbf A $ 的对角线部分,这样我们每个GCN
层的聚合把更大的权重放到前一层的representation
上。即:这种方式看起来似乎合理,但是这对所有节点都使用相同的权重,无论其邻居数量是多少,这现得有些不合适。此外,当使用更深的层时,某些数值可能出现指数型增长,可能会导致数值不稳定。因此我们提出修改版,从而更好地维护邻域信息和数值范围。
我们首先将一个单位矩阵添加到原始的
$ \mathbf A $ 中并进行归一化: $ \tilde{\mathbf P} $ 就是带自环的归一化矩阵。然后对消息进行传播:
其中
$ \lambda $ 为超参数, $ \text{diag}(\tilde{\mathbf P}) $ 为 $ \tilde{\mathbf P} $ 对角线组成的对角矩阵。实验表明这种对角线增强
diagonal enhancement
技术可以帮助构建更深的GCN
并达到state-of-the-art
性能。这就是人工构造的
attention
:对self
施加相对更大的重要性(这意味着对邻居施加更小的重要性)。可以通过GAT
来自适应地学习self
和邻居的重要性。根据论文的实验,当层数很深时,模型效果退化并且训练时间大幅上涨,因此没有任何意义。所以这一小节的内容没有价值。
18.2 实验
我们在两种任务上评估了
Cluster-GCN
的效果:在四个公共数据集上的multi-label
分类任务和multi-class
分类任务。这些数据集的统计信息如下表所示。注意:
Reddit
数据集是迄今为止我们所看到的最大的GCN
公共数据集。- 而
Amazon2M
数据集是我们自己收集的,比Reddit
数据集更大。
这些数据集的
training/validation/test
拆分如下表所示:baseline
方法:我们比较了以下state-of-the-art
的GCN
训练算法以及Cluster-GCN
方法:VRGCN
:保留图中所有节点的历史embedding
均值,并仅采样少数几个邻居来加快训练速度。我们采用原始论文中的建议,将采用邻居数量设为2
。GraphSAGE
:对每个节点采样固定数量的邻居。我们使用原始论文中默认的邻居数量 :双层GCN
第一层、第二层采样数量分别为 $ D^{(1)} = 25, D^{(2)} = 10 $ 。
由于原始
GCN
很难扩展到大图,因此我们不比较原始GCN
。根据VRGCN
论文所述,VRGCN
比FastGCN
更快,因此我们也不比较FastGCN
。实验配置:我们使用
PyTorch
实现了Cluster-GCN
。对于其它baseline
,我们使用原始论文提供的代码。所有方法都采用
Adam
优化器,学习率为0.01
,dropout
比例为20%
,权重衰减weight decay
为零。所有方法都采用均值聚合,并且隐层维度都相同。
所有方法都使用相同的
GCN
结构。在比较过程种我们暂时不考虑
diagonal enhancement
之类的技术。对于
VRGCN
和GraphSAGE
,我们遵循原始论文种提供的配置,并将batch-size
设为512
。对于
Cluster-GCN
,下表给出了每个数据集的分区数量,以及每个batch
的簇的数量。所有实验均在
20
核的Intel Xeon CPU(2.20 GHz)
+192 GB
内存 +NVIDIA Tesla V100 GPU(16GB RAM)
上执行。
注意:在
Cluster-GCN
种,聚类算法被视为预处理步骤,并且未被计入训练时间。聚类只需要执行一次,并且聚类时间很短。此外,我们遵从
FastGCN
和VR-GCN
的工作,对GCN
的第一层执行 $ \mathbf A\mathbf X $ 的预计算pre-compute
,这使得我们节省了第一层昂贵的邻域搜索过程。为了用于
inductive setting
,其中测试节点在训练期间不可见,我们构建了两个邻接矩阵:一个邻接矩阵仅包含训练节点,另一个邻接矩阵包含所有节点。图划分仅作用在第一个邻接矩阵上。为了计算内存用量,对于
TensorFlow
我们使用tf.contrib.memory_stats.BytesInUse()
,对于PyTorch
我们使用torch.cuda.memory_allocated()
。
18.2.1 中等规模数据集
我们首先在训练速度和训练准确性方面评估
Cluster-GCN
。我们给出两层GCN
、三层GCN
、四层GCN
在三个中等规模数据集PPI、Reddit、Amazon
上的训练时间和预测准确性,如下图所示。其中x
轴为训练时间(单位秒),y
轴为验证集准确性(单位F1-Score
)。由于
GraphSAGE
比VRGCN、Cluster-GCN
更慢,因此GraphSAGE
的曲线仅出现在PPI、Reddit
数据集上。对于
Amazon
数据集,由于没有节点特征,因此我们用一个单位矩阵 $ \mathbf I $ 来作为特征矩阵 $ \mathbf X $ 。在此配置下,参数矩阵 $ \mathbf W^{(0)} $ 的维度为334863 x 128
。因此,计算主要由稀疏矩阵运算决定(如 $ \mathbf A \mathbf W^{(0)} $ ) 。结论:
- 在
PPI
和Reddit
数据集中,Cluster-GCN
的训练速度最快,同时预测准确性也最好。 - 在
Amazon
数据集中,Cluster-GCN
训练速度比VRGCN
更慢,预测准确性除了三层GCN
最高以外都差于VRGCN
。
- 在
Cluster-GCN
比VRGCN
更慢的原因可能是:不同框架的稀疏矩阵的运算速度不同。VRGCN
在Tensorflow
中实现,而Cluster-GCN
在PyTorch
中实现。PyTorch
中的稀疏张量支持目前处于早期阶段。下表中我们显示了
Tensorflow
和PyTorch
对于Amazon
数据集执行前向、反向操作的时间,并使用一个简单的、两层线性网络对这两个框架进行基准测试,括号中的数字表示隐层的维度。我们可以清楚地看到Tensorflow
比PyTorch
更快。当隐层维度更高时,差异会更大。这解释了为什么Cluster-GCN
在Amazon
数据集中训练时间比VRGCN
更长。对于
GCN
而言,除了训练速度以外,内存需求通常更重要,因为这将直接限制了算法的可扩展性。- 内存需求包括训练多个
epoch
所需的内存。为加快训练速度,VRGCN
需要在训练过程中保持历史embedding
,因此和Cluster-GCN
相比VRGCN
需要更多的内存。 - 由于指数级邻域扩展的问题,
GraphSAGE
也比Cluster-GCN
需要更多的内存。
下表中,我们给出了不同方法在不同数据集上训练两层
GCN
、三层GCN
、四层GCN
所需要的内存。括号中的数字表示隐层的维度。可以看到:- 当网络更深时,
Cluster-GCN
的内存使用并不会增加很多。因为每当新增一层,引入的额外变量是权重矩阵 $ \mathbf W^{(L)} $ ,相比较于子图以及节点特征,它需要的内存较少。 - 尽管
VRGCN
只需要保持每一层的历史embedding
均值,但是这些embedding
通常都是稠密向量。因此随着层的加深,它们很快统治了内存需求。 Cluster-GCN
比VRGCN
有更高的内存利用率。如在Reddit
数据集上训练隐层维度为512
的四层GCN
时,VRGCN
需要2064MB
内存,而Cluster-GCN
仅需要308MB
内存。
- 内存需求包括训练多个
18.2.2 大规模数据集
迄今为止评估
GCN
的最大的公共数据集是Reddit
数据集,其统计数据如前所述。Reddit
数据集大约包含200K
个节点,可以在几百秒之内训练GCN
。为测试
GCN
训练算法的可扩展性,我们基于Amazon co-purchasing
网络构建了一个更大的图,图中包含200
万节点、6100
万边。原始的co-purchase
数据来自于Amazon-3M
。图中每个节点都是一个商品,图中的连接表示是否同时购买了两个商品。每个节点特征都是从商品描述文本中抽取的
bag-of-word
,然后通过PCA
降维到100
维。此外,我们使用top-level
的类别作为节点的label
。下表给出了数据集中频次最高的类别:我们在这个大型数据集上比较了
Cluster-GCN
和VRGCN
的训练时间、内存使用、测试准确性(F1-Score
来衡量)。可以看到:
- 训练速度:对于两层
GCN
,VRGCN
训练速度更快;但是对于更深的GCN
,Cluster-GCN
训练速度更快。 - 内存使用:
VRGCN
比Cluster-GCN
需要多得多的内存,对于三层GCN
时VRGCN
所需内存是Cluster-GCN
的五倍。当训练四层GCN
时VRGCN
因为内存耗尽而无法训练。 - 测试准确性:
Cluster-GCN
在四层GCN
时可以达到该数据集上的最佳准确性。
- 训练速度:对于两层
18.2.3 深层 GCN
这里我们考虑更深层的
GCN
。我们首先给出Cluster-GCN
和VRGCN
在PPI
数据集上不同深度的训练时间的比较,其中每种方法都训练200
个epoch
。可以看到:
VRGCN
的训练时间因为其代价较高的邻域发现而呈现指数型增长,而Cluster-GCN
的训练时间仅线性增长。然后我们研究更深的
GCN
是否可以得到更好的准确性(衡量指标为验证集的F1-score
)。我们在PPI
数据集上进行实验并训练200
个epoch
,并选择dropout rate = 0.1
。其中:Cluster-GCN with (1)
表示:原始的Cluster-GCN
。Cluser-GCN with (10)
表示:考虑如下的Cluster-GCN
:Cluster-GCN with (10) + (9)
表示:考虑如下的Cluster-GCN
:Cluster-GCN with (10) + (11)
表示:考虑如下的Cluster-GCN
:其中
$ \text{diag}(\tilde{\mathbf P}) $ 为 $ \tilde{\mathbf P} $ 对角线组成的对角矩阵。
可以看到:
对于
2
层到5
层,所有方法的准确性都随着层深度的增加而提升,这表明更深的GCN
可能是有效的。当使用
7
层或8
层时,前三种方法无法在200
个epoch
内收敛,并会大大降低准确性。可能的原因是针对更深GCN
的优化变得更加困难。其中红色的数字表示收敛性很差。即使是第四种方法,它在层数很深时虽然收敛,但是模型效果下降、训练时间暴涨(根据前面的实验),因此没有任何意义。
此外,原始
Cluster-GCN
在五层时达到最好的效果,所以对角增强技术失去了价值。
为考察更深层
GCN
的详细收敛性,我们给出了采用对角增强技术(即 $ \mathbf Z^{(l+1)} = \left(\tilde{\mathbf P} + \lambda \text{diag}\left(\tilde{\mathbf P}\right)\right)\mathbf H^{(l)} \mathbf W^{(l)} $ ) 之后,八层的GCN
在不同epoch
上的验证准确性(F1-Score
)。可以看到:我们提出的对角增强技术可以显著改善模型的收敛性,并得到较好的准确性。
采用了对角增强技术的
Cluster-GCN
能够训练更深的GCN
从而达到更好的准确性(F1-Score
)。我们在下表中给出不同模型在不同数据集上的测试F1-Score
。可以看到:
- 在
PPI
数据集上,Cluter-GCN
通过训练一个具有2048
维的隐层的5
层GCN
来取得state-of-the-art
效果。 - 在
Reddit
数据集上,Cluster-GCN
通过训练一个具有128
维隐层的4
层GCN
取得state-of-the-art
效果。
这个优势并不是对角增强技术带来的,而是因为
Cluster-GCN
的内存需求更少从而允许训练更深的模型,而更深的模型通常效果更好。- 在
前面的实验都未考虑
ClusterGCN
的预处理时间(如,数据集加载,graph clustering
等等)。这里我们给出Cluster-GCN
在四个数据集上的预处理时间的细节。对于graph clustering
,我们使用Metis
。结果如下表所示。可以看到:graph clustering
算法仅占用预处理时间的很小比例。graph clustering
可以扩展到大型的数据集。
此外,
graph clustering
仅需要执行一次,并且之后被后续的训练过程重复使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论