1. 研究背景与动机

1.1 深层GCN的困境

图卷积网络(GCN)在节点分类、链接预测等任务上取得了显著成功,但将GCN堆叠得更深面临严峻挑战1

  • 性能退化:随着层数增加,测试准确率急剧下降
  • 过平滑问题:所有节点表示趋于相同
  • 梯度问题:深层网络训练困难

传统观点认为这些问题源于图拉普拉斯算子的重复应用,但ECML-PKDD 2025的最新研究提出了不同的见解2

1.2 传统解释的局限性

主流理论将GCN的深层性能退化归因于:

  1. 过平滑理论
  2. 特征多样性丧失:平滑操作逐步消除节点特征的差异
  3. 梯度消失/爆炸:深层网络的优化困难

然而,这些解释无法完全说明以下现象:

  • 为什么某些数据集在深层仍能保持性能?
  • 为什么相同深度在不同任务上表现差异巨大?

1.3 新视角:训练动态视角

ECML-PKDD 2025论文《Towards Deeper GCNs: Alleviating Over-Smoothing via Iterative Training and Fine-Tuning》提出了一种训练动态视角2

核心观点:深层GCN的性能问题不是源于架构本身,而是源于不充分的训练动态

2. 核心洞察

2.1 问题的本质

论文指出,现有的过平滑分析存在静态视角的局限

视角类型分析方法局限性
静态分析固定点迭代忽视训练过程
特征值分析谱特性假设平稳训练
频率响应滤波器设计忽略非线性

新观点:在训练过程中,GCN的表示经历了一个动态演化过程,而这一过程在浅层网络中可能被”截断”。

2.2 迭代训练的核心思想

设GCN的第 层表示为:

传统训练:一次性优化所有层的参数

迭代训练:分阶段逐步训练和微调每一层

┌─────────────────────────────────────────────────────────────────────────┐
│                      迭代训练框架                                      │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  阶段 1: 训练浅层 (1层 → 2层)                                          │
│  ┌─────────────┐                                                       │
│  │  H^(1) → H^(2) │  ← 充分训练直到收敛                                │
│  └─────────────┘                                                       │
│       │                                                                │
│       ▼                                                                │
│  阶段 2: 添加第3层并进行微调                                            │
│  ┌─────────────┐     ┌─────────────┐                                   │
│  │  H^(1) → H^(2) │ → │  H^(3)      │  ← 冻结浅层,微调深层           │
│  └─────────────┘     └─────────────┘                                   │
│       │                                                                │
│       ▼                                                                │
│  阶段 3: 添加第4层...                                                   │
│       ...                                                               │
│       │                                                                │
│       ▼                                                                │
│  最终: 深层GCN (所有层协同优化)                                         │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

2.3 细粒度微调机制

论文提出的**细粒度微调(Fine-Grained Fine-Tuning)**策略:

层级微调因子

可学习的

3. 理论分析

3.1 训练动态建模

考虑简化的线性GCN(无激活函数):

,则:

定理1(表示演化):第 层的表示可以分解为:

推论:深层GCN的性能取决于可学习成分的贡献,而不仅仅是平滑程度。

3.2 迭代训练的收敛性

定理2(迭代训练收敛):在迭代训练框架下,设 为第 阶段的训练损失,则:

其中 是收缩因子, 是每阶段的最小损失。

证明思路:每一阶段的训练优化了当前层的参数,同时通过微调保持了浅层的知识,形成收缩映射。

3.3 与残差连接的区别

特性残差连接迭代训练
跳跃方式固定跳过逐层渐进
参数更新全部同时阶段式
知识保持隐式显式控制
训练稳定性中等
深层效果有限显著提升

4. 方法详解

4.1 算法框架

def iterative_deep_gcn_training(model, dataloader, num_layers, T_train, T_finetune):
    """
    迭代深层GCN训练算法
    
    Args:
        model: 初始浅层GCN
        dataloader: 数据加载器
        num_layers: 目标层数
        T_train: 每阶段训练轮数
        T_finetune: 每阶段微调轮数
    """
    current_layers = 1  # 从1层开始
    
    while current_layers < num_layers:
        # 阶段1: 训练新层
        print(f"阶段 {current_layers}: 训练第 {current_layers+1} 层")
        model.add_layer()  # 添加新层
        
        # 冻结浅层,专注训练新层
        freeze_layers(model, range(current_layers))
        
        for epoch in range(T_train):
            loss = train_epoch(model, dataloader)
            if loss < convergence_threshold:
                break
        
        # 阶段2: 细粒度微调
        print(f"阶段 {current_layers}: 细粒度微调")
        unfreeze_layers(model)  # 解冻所有层
        
        # 学习层级微调因子
        for epoch in range(T_finetune):
            loss, alpha = train_with_alpha(model, dataloader)
            adjust_learning_rate(model, alpha)
        
        current_layers += 1
    
    # 最终全局微调
    finetune_all(model, dataloader, T_final)
    return model

4.2 层级微调因子学习

class FineGrainedFinetune(nn.Module):
    """
    细粒度微调模块
    学习每个层的微调强度
    """
    def __init__(self, num_layers, hidden_dim):
        super().__init__()
        self.alpha_networks = nn.ModuleList([
            nn.Sequential(
                nn.Linear(hidden_dim, hidden_dim // 2),
                nn.ReLU(),
                nn.Linear(hidden_dim // 2, 1),
                nn.Sigmoid()
            ) for _ in range(num_layers)
        ])
        
    def forward(self, layer_outputs):
        """
        Args:
            layer_outputs: 每层的输出列表
        Returns:
            加权融合后的输出
        """
        fused_outputs = []
        for l, (alpha_net, h) in enumerate(zip(self.alpha_networks, layer_outputs)):
            alpha = alpha_net(h.mean(dim=0, keepdim=True).expand_as(h))
            fused = alpha * h + (1 - alpha) * h.detach()  # 保持梯度
            fused_outputs.append(fused)
        
        # 返回最后一层(或其他聚合方式)
        return fused_outputs[-1]

4.3 训练策略

学习率调度

其中 是当前层数。

正则化策略

  • 层间正交正则
  • 表示距离正则(鼓励保持局部信息)

5. 实验设置与结果

5.1 实验配置

数据集

数据集节点数边数类别数特征维度
Cora2,7085,42971,433
CiteSeer3,3274,73263,703
PubMed19,71744,3383500
ogbn-arxiv169,3431,166,24340128

训练配置

  • 初始层数:1
  • 目标层数:16/32
  • 每阶段训练轮数 :100
  • 每阶段微调轮数 :50

5.2 主要结果

节点分类准确率

模型CoraCiteSeerPubMedogbn-arxiv
GCN (2层)81.5%70.3%79.0%71.9%
GCN (8层)72.3%61.8%73.5%65.2%
GCN (16层)58.1%48.5%61.2%52.8%
JKNet (16层)78.5%68.2%75.8%68.4%
DenseGCN (16层)76.2%66.1%74.3%67.1%
DeepGCN (16层)82.8%71.9%80.1%73.2%
Ours (16层)84.2%73.1%81.5%74.8%

5.3 深度扩展分析

准确率 (%)                                      Ours
   │                                        ━━━━━━━━ DeepGCN
100├                                   ━━━━━
   │                              ━━━━
 85├                         ━━━━              JKNet
   │                    ━━━                       
 80├               ━━━━                               DenseGCN
   │          ━━━                                   ━━━━━
 75├     ━━━                                      
   │ ━━━                                              
 70├━━                                                   
   └─────────────────────────────────────────────────────►
     2   4   8   12   16   20   24   28   32
                         层数

关键观察

  • 迭代训练使GCN能够扩展到32层甚至更深
  • 性能随层数增加保持稳定,而非急剧下降
  • 细粒度微调因子对性能有显著贡献

5.4 消融实验

方法Cora (16层)提升
基线GCN58.1%-
+ 迭代训练79.3%+21.2%
+ 细粒度微调82.1%+24.0%
+ 层间正交正则83.5%+25.4%
+ 表示距离正则84.2%+26.1%

5.5 表示分析

平滑度度量

模型平滑度准确率
GCN (16层)0.0258.1%
DeepGCN (16层)0.3182.8%
Ours (16层)0.2884.2%

发现:迭代训练保持了适度的平滑度,既不会过度平滑丢失信息,也不会保持过多噪声。

6. 与其他方法的对比

6.1 与残差连接的对比

特性残差连接迭代训练
实现方式架构修改训练策略
效果延迟平滑根本解决
计算开销中等
可解释性
兼容性与其他方法正交与其他方法正交

6.2 与Mamba-GCN的对比

详见Mamba-Based GNN - 解决Over-smoothing的最新进展

特性Mamba-GCN迭代训练GCN
解决思路选择性机制训练动态优化
架构修改需要新架构通用框架
复杂度
适用场景新模型设计任意GCN变体

7. 实践指南

7.1 何时使用

适合场景

  1. 需要构建深层GCN(>8层)
  2. 现有GCN变体遇到性能瓶颈
  3. 图数据具有丰富的层次结构
  4. 计算资源充足

不太适合

  1. 资源受限的部署场景
  2. 需要快速原型验证
  3. 已有成熟深层模型

7.2 超参数建议

config = {
    # 训练配置
    'initial_layers': 1,
    'target_layers': 16,  # 根据任务调整
    
    # 阶段训练
    'T_train': 100,       # 每阶段训练轮数
    'T_finetune': 50,     # 每阶段微调轮数
    'convergence_threshold': 1e-4,
    
    # 学习率
    'initial_lr': 0.01,
    'finetune_lr_ratio': 0.1,  # 微调阶段学习率比例
    'final_lr_ratio': 0.01,    # 最终微调学习率比例
    
    # 正则化
    'orth_weight': 0.1,       # 正交正则权重
    'dist_weight': 0.05,      # 距离正则权重
    
    # 其他
    'early_stop_patience': 20,
    'eval_interval': 10
}

7.3 注意事项

  1. 阶段训练:确保每个阶段的收敛
  2. 微调轮数:过少可能无法充分融合,过多可能导致过拟合
  3. 学习率调度:适当的学习率衰减对稳定性很重要
  4. 正则化强度:需要根据数据集调整

8. 总结与展望

8.1 主要贡献

  1. 新视角:从训练动态视角而非静态分析理解深层GCN
  2. 简单有效:迭代训练+细粒度微调,无需复杂架构修改
  3. 理论支撑:提供了收敛性分析和性能保证
  4. 通用框架:可应用于任意GCN变体

8.2 局限性

  1. 训练时间:迭代训练需要多阶段,时间成本增加
  2. 超参数敏感:需要针对不同任务调整
  3. 与其他技术的结合:尚未充分探索

8.3 未来方向

  • 自适应阶段长度确定
  • 与其他训练技术(知识蒸馏等)的结合
  • 大规模图上的效率优化
  • 与图采样技术的结合

参考文献

相关资源

Footnotes

  1. Kipf & Welling (2017): “Semi-Supervised Classification with Graph Convolutional Networks”, ICLR

  2. Peng et al. (2025): “Towards Deeper GCNs: Alleviating Over-Smoothing via Iterative Training and Fine-Tuning”, ECML-PKDD 2025 2