谱GNN与图小波方法

1. 背景与动机

1.1 谱域图卷积的局限

传统的谱域图卷积基于图拉普拉斯矩阵 的特征分解:

其中 的特征向量矩阵。这种方法存在以下问题:

问题描述
特征分解代价高 复杂度,难以扩展到大图
频率混叠拉普拉斯特征值不具有明确的频率语义
平移不变性缺失图结构不规则导致频谱解释困难

1.2 图小波的引入

图小波(Graph Wavelet)通过小波基函数提供局部化的频域表示:

其中 是尺度矩阵。

核心优势

  • 空间局部性:小波基在图上具有局部支撑
  • 多尺度分析:不同尺度 对应不同频率
  • 稀疏表示:自然产生稀疏系数

2. 图小波理论基础

2.1 图小波框架

定义图小波框架 满足框架条件

其中 是框架界。

Chebyshev多项式近似允许在不必计算完整特征分解的情况下计算小波系数:

其中 是归一化拉普拉斯。

2.2 小波卷积操作

图小波卷积定义为:

其中 是第 层小波滤波器。


3. 谱GNN架构

3.1 Specformer:特征值注意力

Specformer(ICLR 2025)引入特征值注意力机制,实现可学习的谱滤波器:

class SpecformerLayer(nn.Module):
    def __init__(self, num_nodes, hidden_dim, num_heads):
        super().__init__()
        self.eigenvalue_proj = nn.Linear(num_nodes, hidden_dim)
        self.attention = nn.MultiheadAttention(hidden_dim, num_heads)
        
    def forward(self, x, eigvecs, eigvals):
        # eigvecs: (N, N), eigvals: (N,)
        W = eigvecs @ torch.diag(self.eigenvalue_proj(eigvals)) @ eigvecs.T
        return self.attention(x, x, x, attn_mask=W)

核心创新

  • 特征值作为注意力查询
  • 学习频率响应函数
  • 保持排列不变性

3.2 S²GNN:空谱协同

S²GNN 结合空间消息传递和谱滤波:

架构设计

  • 双分支结构:空间分支 + 谱分支
  • 动态权重融合
  • 兼顾局部和全局信息

3.3 L²-GNN:双线性参数化

L²-GNN(2025)提出双线性参数化实现快速谱滤波:

通过两次线性参数化实现高效计算:

  1. 参数层:学习系数
  2. 卷积层 的稀疏矩阵乘法

4. 通用图谱小波框架

4.1 框架数学形式

设图 ,定义小波基函数:

其中:

  • :拉普拉斯特征向量
  • :尺度矩阵
  • :多尺度参数

4.2 卷积层设计

class WaveletConvLayer(nn.Module):
    def __init__(self, in_channels, out_channels, scales, K):
        super().__init__()
        self.scales = scales
        self.K = K  # Chebyshev多项式阶数
        self.filter_weights = nn.Parameter(
            torch.randn(len(scales), K, in_channels, out_channels)
        )
        
    def forward(self, x, L, L_max):
        # L: 归一化拉普拉斯, L_max: 最大特征值
        outputs = []
        for s in self.scales:
            # 计算尺度矩阵 T(s)
            T_s = self.compute_chebyshev(L, L_max, s)
            # 应用滤波器
            out = x @ self.filter_weights[s] @ T_s.T
            outputs.append(out)
        return torch.stack(outputs).sum(dim=0)
    
    def compute_chebyshev(self, L, L_max, s):
        # 计算 exp(-s * L) 的Chebyshev近似
        L_norm = 2 * L / L_max - torch.eye(L.size(0))
        T = [torch.eye(L.size(0)), L_norm]
        for k in range(2, self.K):
            T.append(2 * L_norm @ T[-1] - T[-2])
        return torch.stack(T[:self.K]).mean(dim=0) * torch.exp(-s * L_max)

5. 与标准GNN的对比

特性标准GCNGraphTransformer谱小波GNN
消息传递一阶邻居全图注意力多尺度邻域
感受野局部K-hop全局可控多尺度
计算复杂度$O(E)$
可解释性高(频率响应)
理论保证WL-test表达能力上界谱逼近误差

6. 应用与实验

6.1 节点分类基准

在Cora、CiteSeer、PubMed上的结果:

模型CoraCiteSeerPubMed
GCN81.5%70.3%79.0%
GAT83.0%72.5%79.0%
Specformer85.2%74.1%80.8%
L²-GNN84.8%73.6%80.3%

6.2 图分类任务

在PROTEINS、IMDB-BINARY上的表现:

模型PROTEINSIMDB-B
DGCNN76.0%70.0%
SortPool77.0%74.4%
S²GNN78.5%76.2%

7. 参考文献