论文信息

论文标题:Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks
论文作者:Wei-Lin Chiang, Xuanqing Liu, Si Si, Yang Li, Samy Bengio, Cho-Jui Hsieh
论文来源:2019, KDD
论文地址:download 
论文代码:download

1 Introduction

  现有 GCN 训练方法存在的问题:

    • Memory requirement
    • Time per epoch
    • Convergence speed

几种 GCN 类型:

  • GCN:Full-batch gradient descent
    • 需要计算整个所有节点的梯度,也需要存储所有 Embedding ,所以导致 O(NFL) 内存需求;
    • 在每个 epoch 只更新一次参数,所以 SGD 的收敛速度缓慢;
    • memory: bad
    • time per epoch: good
    • convergence: bad
  • Mini-batch SGD

    • 每次更新只基于一个 mini-batch 的梯度,它可以减少内存需求,并在每个 epoch 执行多次更新,从而加快收敛速度;
    • 但是,由于邻居扩展问题,mini-batch SGD 在计算 L 层单个节点的损失时引入了大量的计算开销。它要求节点的邻居节点在 L1 层的 embeddings,这又要求邻居节点在 L2 层的 embeddings,和在下游层的递归 embeddings。这将导致时间复杂度随 GCN 深度呈指数增长;
    • 尽管 GraphSAGE 提出了通过在层的反向传播过程中,使用固定大小的邻居样本;FastGCN 提出了重要性抽样,但这些方法的开销仍然很大,并且在 GCN 深层会变得更糟;
    • memory: good  
    • time per epoch: bad  
    • convergence: good  
  • VR-GCN
    • 采用 variance 减少技术来减小邻域采样节点的大小;
    • 尽管成功地减小了采样大小,但它需要将所有节点的所有中间的 embeddings 存储在内存中,从而导致 O(NFL) 内存需求;
    • 如果图形中的节点数量增加到数百万个,那么对于 VR-GCN 的内存需求可能太高,无法适应 GPU ;
    • memory: bad ;
    • time per epoch: good ;
    • convergence: good;

2 Method

2.1 Vanilla Cluster-GCN

  对于图  G  ,把它的节点划分为  c  个群:  V=[V1,,Vc]  ,其中  Vt  包含在第  t  个群中的节点。根据这些群可以得到  c  个子图:

    G¯=[G1,,Gc]=[V1,E1,,Vc,Ec]

  其中 Et 只包含 Vt 中的节点之间的边。

  同样,邻接矩阵会被划分为 c2 个子矩阵 (只需重新排列一下节点的位置) :

    A=A¯+Δ=[A11A1cAc1Acc]

  其中,

    A¯=[A1100Acc],Δ=[0A1cAc10]

  Att 表示子图 Gt 的邻接矩阵, Ast 表示节点 Vs 和节点 Vt 之间的边构成的邻接矩阵。特征和标签数据也可以根据群的划分进行相应的划分: [X1,,Xc][Y1,,Yc]

  用 A¯ 表示矩阵 A 的标准化后的结果,那么整个 GCN 的卷积过程可以形式化表示为:

    Z(L)=A¯σ(A¯σ(σ(A¯XW(0))W(1)))W(L1)

  即:

    Z(L)=[A¯11σ(A¯11σ(σ(A¯11X1W(0))W(1)))W(L1)A¯ccσ(A¯ccσ(σ(A¯ccXcW(0))W(1)))W(L1)]

  对应的损失函数如下:

    LA¯=t|Vt|NLA¯tt and LA¯tt=1|Vt|iVtloss(yi,zi(L))

  在每一步中,对一个  Vt 进行采样,然后根据块损失函数的梯度进行 SGD 更新,这只需要当前 batch 上的子图 Att, Xt, Yt 和模型 {W(l)}lL 。实现只需要矩阵乘积的正向和反向传播,这比以前基于 SGD 的训练方法中使用的邻域搜索过程更容易实现。

  利用图的聚类算法对图进行划分,像 Metis[8] 和 Graclus[4] 这样的,目的是在图中的顶点上构造分区,使簇内的边比簇间的边接更多,从而更好地捕获图的聚类和社区结构。

  划分簇的意义在于:

  1. 对于每个 batch 而言,Embedding utilization 相当于簇内的连接。每个节点及其相邻节点通常位于同一簇内,因此经过几次后跳跃后,邻接节点大概率还是在簇内;
  2. 由于使用 A¯ 代替 A ,误差与簇间的的连接 Δ 成正比,所以需要使得簇间的连接数量尽可能少。

  在 Figure 1 中,我们用全图G说明邻域展开,用聚类划分 G¯ 说明图。我们可以看到,Cluster-GCN 可以避免大量的邻域搜索,并关注每个集群内的邻居。

  

  在 Table 2 中,我们展示了两种不同的节点划分策略:随机划分 聚类方法划分。我们使用随机划分和 METIS 将图分成10个部分。然后使用一个划分分区作为批处理来执行SGD更新。我们可以看到,在相同数量的 epoch 下,使用聚类划分可以获得更高的精度。这表明使用图聚类是很重要的,分区不应该随机形成。

   

  时间和空间复杂度计算如 Table 1 所示:

  

2.2 Stochastic Multiple Partitions

  虽然普通的 Cluster-GCN 实现了良好的计算和内存复杂度,但仍然有两个潜在的问题:

    • 在图被分区后,Cluster 之间的连接将被删除。因此,性能可能会受到影响;
    • 图的聚类算法往往会将相似的节点聚集在一起。因此,集群的分布可能与原始数据集不同,从而导致在执行SGD更新时对全梯度的有偏估计;

  下图为 Reddit 数据集中标签分布不平衡的案例,通过每个簇的标签分布计算其熵值,与随机分割相比,可以清楚的看到聚类分区的簇的熵较小,这表明簇的标签分布偏向于某些特征的标签,所以这会增加不同 batch 的梯度更新的差异,并影响 SGD 的收敛性。

  

  为了解决上述问题,文中提出了一种 Stochastic Multiple Partitions,在簇接之间进行合并,并减少 batch 间的差异(variance) 。作者首先用一个较大 的 p 把图分割成 p  个划分分区  V1,,Vp  ,然后对于 SGD 的更新重新构建一个 batch B,而不是只考虑一个分区。随机地选择 q 个分区,定义为  t1,,tq, 并把它们的节点  Vt1Vt 包含到这个batch  B 中。此外,在选择的分区之间的连接

    Aiji,jt1,,tq

  被添加回去。通过这种方式,在簇之间的连接就会被重新合并。这种簇的组合使 batch 之间的差异(variance)更小。图3说明了每个epoch随机选中不同的簇组合成为一个batch。作者在Reddit数据集上进行了一个实验,证明了该方法的有效性。在图4中,可以观察到使用多个簇作为一个batch可以提高收敛性。最后的Cluster-GCN算法在算法1中给出。

  

  算法流程:

  

2.3 Deep GNN network

  考虑使用深层次 GNN 框架:

  在[9]中,它们采用了一种类似于残差连接[6]的技术,使模型能够将信息从前一层传输到下一层。具体来说,将第 l 层的隐藏表示添加到下一层中。

    X(l+1)=σ(AX(l)W(l))+X(l)

  虽然上式似乎是合理的,但无论相邻节点的数量如何,对所有节点使用相同的权重可能是不合适的。此外,当使用更多的层时,数值可能会呈指数增长,这可能会导致数值不稳定。

  因此,作者提出了上式的修改版本,以更好地维护邻居信息和数值范围。文中也首先向原始 A 添加一个单位矩阵(identity),然后执行标准化(normalization):

    A~=(D+I)1(A+I) 

  然后考虑

    X(l+1)=σ((A~+λdiag(A~))X(l)W(l))

  采用的“对角增强”技术的实验结果,我们表明这种新的归一化策略可以帮助构建深度GCN和实现SOTA性能。

3 Experiment

数据集

    

3.1 Training Performance for median size datasets

Training Time vs Accuracy

  首先,在训练速度方面,作者将所提出的方法与其他方法进行了比较。在图6中,x轴显示了以秒为单位的训练时间,y轴显示了验证集的准确性(F1分数)。作者用2、3、4层GCN绘制了三个数据集的训练时间与准确度的关系图。由于GraphSAGE比VRGCN比文中的方法慢,GraphSAGE的曲线只出现在PPI和Reddit数据集中。可以看到,对于不同层数的GCNs,文中的方法对于PPI和Reddit数据集都是最快的。

  

  对于Amazon数据,由于节点的特征不可用,所以使用一个单位矩阵作为特征矩阵 X。在此设置下,参数矩阵 W0 的形状为 334863x128。因此,计算主要是由稀疏矩阵运算带来的,如AW0 。对于三层的情况,文中的方法仍然比VRGCN快,但是对于两层和四层的情况就慢了。原因可能是不同框架的稀疏矩阵运算速度不同。VRGCN是在TensorFlow中实现的,而Cluster-GCN是在PyTorch中实现的,它的稀疏张量支持仍然处于非常早期的阶段。在 Table 6 中,展示了TensorFlow和PyTorch对Amazon数据进行前馈/反向传播操作的时间,并使用一个简单的两层网络对这两个框架进行基准测试。可以清楚地看到TensorFlow比PyTorch快。当隐藏单元的数量增加时,这种差异更为显著。这也许可以解释为什么Cluster-GCN在Amazon dataset中有更长的训练时间。

  

Memory usage comparison

  对于大规模的GCNs的训练,除了训练时间外,训练所需的内存使用往往更为重要,直接限制了可扩展性。内存的使用包括许多epochs训练GCN所需的内存。正如在第3节中讨论的,为了加速训练,VRGCN需要在训练期间保存历史embeddings,因此它需要比Cluster-GCN更多的内存来进行训练。由于指数邻域增长的问题,Graph-SAGE对内存的要求也高于Cluster-GCN。在表5中,比较了不同层的GCN与VRGCN的内存使用情况。当增加层数时,Cluster-GCN的内存使用量并没有增加很多,原因是增加一层时引入的额外变量是权矩阵 WL ,与子图和节点特征相比,权重矩阵WL 相对较小。而VRGCN需要保存每一层的历史embeddings,而embeddings通常是密集的,很快就会控制内存的使用。从表5可以看出,Cluster-GCN的内存效率比VRGCN高得多。例如,在Reddit数据上,要训练一个4层的隐藏维度为512的GCN,VRGCN需要2064MB内存,而Cluster-GCN只需要308MB内存。

  

3.2 Experimental results on Amazon2M

A new GCN dataset: Amazon2M

  到目前为止,用于测试GCN的最大公共数据是Reddit dataset,其统计数据如 Table 3所示,其中包含大约200K个节点。如 Figure 6 所示,对该数据的GCN训练可以在几百秒内完成。为了测试GCN训练算法的可扩展性,作者基于Amazon co-purchase network构建了一个更大的图,包含超过200万个节点和6100万条边[11,12]。原始的共同购买( co-purchase)数据来自Amazon-3M。在图中,每个节点都是一个产品,图中边的连接表示是否同时购买两个产品。每个节点特征都是通过从产品描述中的bag-of-word式的特征,然后进行主成分分析[7]生成的,将维数降为100。此外,我们使用top-level categories作为该产品/节点的标签(最常见的类别见 Table 7 。数据集的详细统计数据如 Table 3 所示。

  

  

  在 Table 8 中,作者比较了不同层次GCNs的VRGCN在训练时间、内存使用和测试准确度(F1分数)方面的差异。从表中可以看出

  • 训练两层GCN的VRGCN比Cluster-GCN快,但是却慢于增加一层网络但实现相似准确率的Cluster-GCN
  • 在内存使用方面,VRGCN比Cluster-GCN使用更多的内存(对于三层的情况5倍多)。当训练4层GCN的时候VRGCN将被耗尽,然而Cluster-GCN当增加层数的时候并不需要增加太多的内存,并且Cluster-GCN对于这个数据集训练 4 层的GCN将实现最高的准确率。

  

3.3 Training Deeper GCN

  在本节中,作者考虑了具有更多层的GCNs。首先在 Table 9中显示了Cluster-GCN和VRGCN的时间比较。PPI数据集用于基准测试,实验中对这两种方法运行了200个epoch。结果发现VRGCN的运行时间由于其代价很大的邻域查找而呈指数增长,而Cluster-GCN的运行时间只呈线性增长。

  

  接下来作者研究了使用更深层次的GCNs是否能获得更好的精度。在3.3节,文中讨论了修改邻接矩阵A的不同策略,以方便对深度GCNs的训练。文中将对角增强技术应用于深度GCNs,并对PPI数据集进行了实验研究。结果如 Table 11 所示。对于2-5层的情况,所有方法的精度都随着层数的增加而提高,这表明更深层的GCNs可能是有用的。然而,当使用7或8个GCN层时,前三种方法无法在200个epoch内收敛,导致精度显著下降。一个可能的原因是对更深层GCNs的优化变得更加困难。文中在 Figure 5 中显示了一个8层GCN的详尽的收敛。采用所提出的对角增强技术(11),可以显著提高收敛性,达到相似的精度。
  

  

State-of-the-art results by training deeper GCNs

  通过对Cluster-GCN的设计和提出的归一化方法,现在可以对GCNs进行更深入的训练,从而获得更高的精度(F1分)。文中将测试精度与表10中其他现有方法进行了比较。对于PPI数据集,Cluster-GCN可以通过训练一个包含2048个隐藏单元的5层GCN来达到最先进的效果。对于Reddit数据集,使用了一个包含128个隐藏单元的4层GCN。

  

4 Conclusion

  基于图划分的GCN框架。

 

修改历史

2021-04-18 创建文章
2022-06-14 二次修订

 

论文解读目录

posted @   别关注我了,私信我吧  阅读(852)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2020-04-18 DFS与DFS迷宫问题
Live2D
点击右上角即可分享
微信分享提示