(论文速读)CLUSTER-GCN:一种训练深度和大图卷积网络的有效算法

****论文题目:****Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks(CLUSTER-GCN:一种训练深度和大图卷积网络的有效算法)

会议:KDD 2019

****摘要:****图卷积网络(GCN)已经成功地应用于许多基于图的应用中,然而,训练大规模的GCN仍然是具有挑战性的。当前基于SGD的算法要么存在随着GCN层数呈指数级增长的高计算代价,要么存在保存整个图并将每个节点嵌入到内存中所需的大量空间。本文利用图的聚类结构,提出了一种新的适用于基于SGD的训练的GCN算法--ClusterGCN。CLUSTER-GCN的工作原理如下:在每一步,它都会对与图聚类算法识别的密集子图相关联的节点块进行采样,并将邻域搜索限制在该子图内。这种简单但有效的策略显著提高了内存和计算效率,同时能够实现与以前的算法相当的测试精度。为了测试算法的可扩展性,我们创建了一个新的Amazon2M数据,它有200万个节点和6100万条边,比之前最大的公开可用的数据集(Reddit)大了5倍以上。对于基于这些数据的3层GCN的训练,Cluster-GCN比以前最先进的VR-GCN更快(1523秒比1961秒),并且使用的内存要少得多(2.2 GB比11.2 GB)。此外,对于4层GCN的训练,我们的算法可以在36分钟左右完成,而现有的GCN训练算法由于内存不足的问题而无法训练。此外,Club-GCN允许我们在不需要太多时间和内存开销的情况下训练更深的GCN,这导致了预测精度的提高-使用5层Club-GCN,我们在PPI数据集上获得了最先进的测试F1分数99.36,而之前的最好结果是98.71分。

代码在https://github.com/google-research/google-research/tree/master/cluster_gcn上公开提供。


Cluster-GCN 详解:用图聚类让大规模 GCN 训练又快又省内存

图卷积网络(GCN)已经在半监督节点分类、链接预测、推荐系统等任务上大放异彩。但当图规模从几千节点扩展到百万级时,训练 GCN 立刻变成一场"内存和时间的噩梦"。KDD 2019 上的 Cluster-GCN 给出了一个非常优雅的解决方案:用图聚类的结构来构造 mini-batch

本文带你完整拆解这篇论文。

1. 为什么训练大规模 GCN 这么难?

GCN 的每一层做的事情可以写成:

问题就在于 A' 把邻居的嵌入耦合了进来------一个节点的损失依赖它 L-hop 内的所有邻居。GCN 越深,依赖爆炸得越厉害。

论文从 内存 / 每 epoch 时间 / 收敛速度 三个维度总结了已有算法:

算法 内存 每 epoch 时间 收敛
Full-batch GD (Kipf 2017) ❌ O(NFL) ❌ 每 epoch 只更新一次
Vanilla SGD / GraphSAGE ❌ O(d^L) 邻居爆炸
VR-GCN ❌ 要存全部历史嵌入

论文 Table 1:GCN 训练算法的时间与空间复杂度对比

一图胜千言,邻居扩展的可怕之处见下:

论文 Figure 1:传统 GCN 邻居扩展 vs Cluster-GCN 的簇内扩展。比较了传统的图卷积方法和本文提出的聚类法的邻域扩展差异。红色节点是邻域节点扩展的起始节点。传统的图卷积方法存在邻域指数扩张的问题,而我们的方法可以避免昂贵的邻域扩张。

左边是传统的邻居扩展------从一个红色起点出发,几层之后几乎整张图都被拉进来。右边则是 Cluster-GCN 的思路:把邻居搜索限制在一个稠密子图内。

2. 关键概念:嵌入利用率(Embedding Utilization)

作者提出了一个很关键的度量:如果第 l 层某节点的嵌入 z_i^(l) 被上一层重用 u 次,那么它的"嵌入利用率"就是 u。

  • 全批量 GD:每个嵌入被平均重用 d 次(d 是平均度),利用率最大。
  • 随机 mini-batch SGD:因为图稀疏,采出来的节点几乎没重叠,利用率接近 0。

如何让 mini-batch 的利用率变高?答案是:让一个 batch 内的节点之间边尽可能多,也就是让 ‖A_{B,B}‖₀ 最大化。这恰好就是一个图聚类问题。

3. Vanilla Cluster-GCN

把图 G 用 METIS 划分成 c 个子图 {G₁, ..., G_c},邻接矩阵重排后:

其中 Ā 是块对角部分(簇内边),Δ 是簇间边。作者直接用 Ā 近似 A,于是 GCN 的前向传播天然沿着块对角分解开:

每个 batch 就是一个 cluster:只加载 Aₜₜ、Xₜ、Yₜ,做纯粹的稠密矩阵乘法,不用邻居采样。

  • 时间复杂度:O(‖A‖₀F + NF²) ------ 对 L 线性
  • 内存复杂度:O(bLF + LF²) ------ 只存当前 batch 的嵌入

那随机划分行不行?作者做了实验:

论文 Table 2:随机划分 vs METIS 聚类划分在 Cora / Pubmed / PPI 上的对比。图的随机分区与集群分区(在小批量SGD上训练)。集群分区会带来更好的性能(就测试F1分数而言),因为它删除了较少的分区间链接。这三个数据集都是GCN公共数据集。我们将在实验部分解释PPI数据。CORA有2,708个节点和13,264条边,Pubmed有19,717个节点和108,365条边。

结论:PPI 上从 68.1 → 92.9,聚类划分几乎是碾压式胜利。保留簇内边太重要了

4. Vanilla Cluster-GCN 的两个坑与"随机多聚类"改进

Vanilla 版本有两个问题:

  1. 簇间边 Δ 被完全丢掉,损失了信息;
  2. 聚类倾向于把相似节点聚在一起,导致每个 cluster 的标签分布偏斜,batch 间方差大,SGD 估计有偏。

作者在 Reddit 上算了每个 cluster 的标签熵:

论文 Figure 2:随机划分 vs 聚类划分下 batch 内标签熵的直方图。基于标签分布的熵值直方图。在这里,我们在每个批中使用随机分区而不是集群分区。大多数聚类划分的批次具有较低的标签熵,这表明每个批次内的标签分布是倾斜的。相比之下,随机划分将导致批处理中的标签熵更大,尽管它的效率较低。在本例中,我们使用300个聚类对Reddit数据集进行划分。

大部分聚类 batch 的熵都非常低------标签严重偏斜。

解决方案:Stochastic Multiple Partitions

  • 先划分成 p 个 cluster(p 取得偏大);
  • 每个 batch 随机抽 q 个 cluster 合并;
  • 把这 q 个 cluster 之间的簇间边加回来

论文 Figure 3:随机多聚类方案示意。提出了一种随机多分区方案。在每个时期,我们随机抽样集群(本例中使用Q=2)和它们的集群间链接以形成新的批次。相同的色块在同一批次中。

这一招同时解决两个问题:簇间边被找回,多 cluster 的组合稀释了标签偏斜。

论文 Figure 4:Reddit 上单 cluster vs 多 cluster 组合的收敛对比

多 cluster 组合明显更稳、收敛更好。

完整算法见论文 Algorithm 1。

5. 训练更深的 GCN:对角增强技巧

之前的工作普遍认为"GCN 加深没用甚至变差",但作者认为那是因为数据集太小 + 优化困难。他们提出一个新的归一化:

再加一个"对角增强"项:

直觉是:近邻的贡献应比远邻更大,同时避免深层的数值不稳定。

效果非常戏剧化:

论文 Table 11:不同对角增强策略在 PPI 上 2--8 层的表现对比。使用不同对角增强技术的比较。对于所有方法,我们给出了在200个历元内达到的最佳验证精度。本实验采用PPI,丢失率为0.1。其他设置与第4.1节中的相同。标有红色的数字表示收敛较差。

不加增强的方案在 7、8 层直接崩到 43 左右无法收敛,而 λ=1 的对角增强版本能稳稳跑到 8 层还保持 96.2。

论文 Figure 5:8 层 GCN 的收敛曲线对比

6. 实验结果

数据集见论文 Table 3。PPI、Reddit 是公开常用集,Amazon2M 是作者构造的新集------244.9 万节点,6185.9 万边,比 Reddit 大 5 倍以上。

6.1 训练速度与精度

论文 Figure 6:Cluster-GCN vs VRGCN vs GraphSAGE 在 PPI / Reddit / Amazon 上 2--4 层 GCN 的训练时间 vs F1 曲线

在 PPI 和 Reddit 上,Cluster-GCN 全面领先。Amazon 上因为没节点特征、计算被稀疏矩阵操作主导,2 层和 4 层略慢于 VRGCN------作者指出这是 PyTorch 稀疏张量支持不如 TensorFlow 成熟造成的(Table 6 里做了 benchmark)。

6.2 内存占用

论文 Table 5:不同方法在 PPI / Reddit / Amazon 上 2/3/4 层的内存对比

举一个直观的例子:Reddit 上 4 层 GCN、512 隐层单元,VRGCN 要 2064 MB ,Cluster-GCN 只要 308 MB------差了近 7 倍。原因是 VRGCN 要存所有层的历史嵌入,而 Cluster-GCN 只存当前 batch。

6.3 Amazon2M 上的对决

论文 Table 8:Amazon2M 上时间、内存、F1 三项对比

亮点:

  • 3 层:VRGCN 1961 秒 / 11218 MB,Cluster-GCN 1523 秒 / 2235 MB
  • 4 层:VRGCN 直接 OOM,Cluster-GCN 2289 秒 / 2241 MB,还拿到最高 F1 = 90.41。

6.4 深度 GCN 的时间增长

论文 Table 9:PPI 上 2--6 层的训练时间对比

VRGCN 从 2 层的 103.6s 一路飙到 6 层的 1956s(指数级),而 Cluster-GCN 从 52.9s 到 157.3s(线性)------完美印证了理论复杂度。

6.5 SOTA 结果

论文 Table 10:PPI 和 Reddit 上的 SOTA 对比

  • PPI:Cluster-GCN 5 层 + 2048 隐层单元 → F1 = 99.36,刷新此前 GaAN 的 98.71;
  • Reddit:Cluster-GCN 4 层 + 128 隐层单元 → F1 = 96.60,同样是最好成绩。

7. 总结

Cluster-GCN 的核心贡献可以浓缩成一句话:通过图聚类构造 mini-batch,最大化嵌入利用率,让 GCN 训练同时拥有全梯度下降的时间效率和 SGD 的内存效率。

三大记忆点:

  1. 概念:嵌入利用率 = 一个 batch 内的边数,聚类构造 batch 让它最大化;
  2. 算法:METIS 划分 + 随机多聚类组合(加回簇间边);
  3. 深度:对角增强归一化让 GCN 能真正跑到 7--8 层不崩。

在 Amazon2M 这个 200 万节点的图上,Cluster-GCN 只要不到 1 小时、2GB 显存就能训练 4 层 GCN 达到 F1 = 90.41。这在当时是 GCN 可扩展性的一次巨大突破,也为后续大规模图神经网络训练框架(如 PyG、DGL 中的 ClusterLoader)铺平了道路。

相关推荐
Omics Pro1 小时前
深度学习多组学互作:组内+组间
数据库·人工智能·深度学习·mysql·搜索引擎·自然语言处理
txg6662 小时前
机器人领域简报(2026年7月9日—16日)
人工智能·深度学习·机器人
小小测试开发2 小时前
Promptfoo 源码级解析:LLM 评估框架的核心设计与 CI/CD 集成实践
人工智能·ci/cd
凌虚2 小时前
AI 时代,程序员会消失吗?
人工智能·后端·程序员
阿里云大数据AI技术2 小时前
Hologres 4.2新特性 Liquid Table:让 Shard 数不再是建表时的一锤定音
人工智能
蓝瑟2 小时前
代码越写越乱? 从 Vibe Coding 到 Spec + Harness
人工智能·ai编程·代码规范
ACP广源盛139246256732 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
阿里云大数据AI技术3 小时前
Agent时代“Token炼金术”,阿里云 PAI 推出 TokenWorks:重塑企业专属的高保障SLO推理服务
人工智能·agent