Chebyshev多项式与图滤波器
1. 引言
在谱图神经网络的实践中,直接计算拉普拉斯矩阵的特征分解代价高昂(),且滤波器难以迁移到不同图上。Chebyshev多项式近似提供了一种高效、局域化的解决方案,使得谱域卷积可以在不显式计算特征分解的情况下完成。1
2. Chebyshev多项式基础
2.1 定义
Chebyshev多项式有第一类和第二类两种定义:
第一类Chebyshev多项式 :
递推关系:
第二类Chebyshev多项式 :
递推关系:
2.2 重要性质
性质2.1(正交性):
性质2.2(极性):
且在 外, 以 次多项式增长。
性质2.3(最佳一致逼近):
在所有 次多项式中, 是最佳逼近 的多项式(在 上)。
2.3 归一化Chebyshev多项式
为适应拉普拉斯特征值范围 ,定义归一化多项式:
注意:,这会导致边界处的Runge现象。
3. 多项式近似的理论基础
3.1 函数逼近论
设目标滤波器函数 定义在 上。我们希望用 阶多项式 逼近 。
一致逼近误差:
其中 与函数的解析性有关——函数越光滑, 越大,收敛越快。
3.2 谱收敛性
对于解析滤波器(如指数滤波器 ),Chebyshev近似具有指数级收敛速度:
其中 是函数在包含 的椭圆域上的最大值。
3.3 Runge现象
当目标函数在 区间有极点时,等距节点的多项式插值会出现Runge现象——在区间边界出现剧烈震荡。
问题:Chebyshev近似的边界行为可能导致:
- 滤波器系数 绝对值过大(非法系数)
- 训练时过拟合
- 泛化性能下降
4. ChebNet:理论与实现
4.1 核心思想
ChebNet1 的核心思想是:用截断的Chebyshev多项式级数近似谱域滤波器。
设 的特征值范围为 ,滤波器 在谱域定义为:
其中 。
4.2 递归计算
Chebyshev多项式的递归特性使得计算可以高效进行:
T_0(x) = 1
T_1(x) = x
T_k(x) = 2x T_{k-1}(x) - T_{k-2}(x)
在图上,这对应于:
def chebyshev_polynomials(L, K, lambda_max):
"""
计算归一化拉普拉斯上的Chebyshev多项式基
参数:
L: 归一化拉普拉斯矩阵 (n x n)
K: 多项式阶数
lambda_max: 最大特征值
返回:
T_k: K个(n x n)的张量,每层一个多项式基
"""
# 归一化
L_norm = 2 * L / lambda_max - torch.eye(L.size(0))
T = [torch.eye(L.size(0)), L_norm] # T_0, T_1
for k in range(2, K):
T_k = 2 * L_norm @ T[-1] - T[-2]
T.append(T_k)
return torch.stack(T) # (K, n, n)4.3 ChebNet卷积层
class ChebConv(nn.Module):
def __init__(self, in_channels, out_channels, K, lambda_max):
super().__init__()
self.K = K
self.lambda_max = lambda_max
self.weight = nn.Parameter(torch.randn(K, in_channels, out_channels))
self.bias = nn.Parameter(torch.zeros(out_channels))
def forward(self, x, L):
"""
x: (batch, n, in_channels)
L: (n, n)
"""
# 计算Chebyshev基
T = chebyshev_polynomials(L, self.K, self.lambda_max) # (K, n, n)
# 多项式卷积:x * T_k -> (batch, n, in_channels) @ (n, n) -> (batch, n, n)
# 对于每个k:H_k = T_k @ x @ W_k
outputs = []
for k in range(self.K):
H_k = torch.einsum('bni,ij->bnj', x, T[k]) # (batch, n, in_channels)
H_k = torch.einsum('bni,io->bno', H_k, self.weight[k]) # (batch, n, out_channels)
outputs.append(H_k)
# 求和
out = torch.stack(outputs).sum(dim=0)
return out + self.bias4.4 K-局部化特性
ChebNet的一个关键性质是 -局部化:滤波器 的输出仅依赖于 跳内的节点。
定理:设 表示图上 阶Chebyshev多项式,则:
即 将节点 的信号仅传播到距离不超过 的节点。
推论: 阶ChebNet层的感受野恰好是 跳邻域。
5. ChebNetII:改进与扩展
5.1 问题分析
ChebNet的原始设计存在以下问题:
| 问题 | 描述 | 影响 |
|---|---|---|
| 非法系数 | 学习到的 可能导致 | 滤波器在 处行为异常 |
| Runge现象 | 高阶多项式在边界振荡 | 训练不稳定 |
| 基准比较 | 在实际数据集上性能不如GCN | 理论优势未能转化为实践优势 |
5.2 ChebNetII核心改进
文献2提出了ChebNetII,通过以下改进解决上述问题:
改进1:Chebyshev插值而非近似
将滤波器表示为 个插值节点的线性组合:
其中 是基于Chebyshev节点 的Lagrange基函数:
改进2:消除Runge现象
Chebyshev节点分布在 上:
这种非均匀采样策略有效抑制了边界振荡。
改进3:正则化约束
添加额外的约束确保滤波器在 处有合理的值:
通过拉格朗日乘子或投影实现。
5.3 ChebNetII实现
class ChebNetII(nn.Module):
def __init__(self, in_channels, out_channels, K, lambda_max):
super().__init__()
self.K = K
self.lambda_max = lambda_max
# Chebyshev节点
self.nodes = self._chebyshev_nodes(lambda_max)
# Lagrange基函数的系数(预计算)
self.L_coeffs = self._precompute_lagrange_coeffs()
# 可学习权重
self.weight = nn.Parameter(torch.randn(K, in_channels, out_channels))
self.bias = nn.Parameter(torch.zeros(out_channels))
def _chebyshev_nodes(self, lambda_max):
"""生成Chebyshev节点"""
i = torch.arange(1, self.K + 1)
nodes = lambda_max / 2 * (1 + torch.cos((2 * i - 1) * torch.pi / (2 * self.K)))
return nodes
def _lagrange_basis(self, lambda_val, k):
"""
计算第k个Lagrange基函数在lambda_val处的值
L_k(lambda) = prod_{j!=k} (lambda - lambda_j) / (lambda_k - lambda_j)
"""
result = torch.ones_like(lambda_val)
for j in range(self.K):
if j != k:
result *= (lambda_val - self.nodes[j]) / (self.nodes[k] - self.nodes[j])
return result
def forward(self, x, L):
batch_size, n, _ = x.shape
# 评估谱域的Lagrange基
# 特征值lambda_i对应谱域位置
# 对于每个节点,使用幂迭代近似
# 简化的实现:使用多项式基
T = self._chebyshev_polynomials_sparse(L)
# 卷积
out = torch.zeros(batch_size, n, self.out_channels)
for k in range(self.K):
H_k = x @ T[k] @ self.weight[k]
out += H_k
return out + self.bias5.4 与其他多项式基的比较
文献2系统比较了不同多项式基的性能:
| 多项式基 | ChebNet | ChebNetII | GPR-GNN | BernNet |
|---|---|---|---|---|
| 理论基础 | 最佳一致逼近 | Chebyshev插值 | PageRank谱 | Bernstein多项式 |
| 数值稳定性 | 中等 | 高 | 高 | 高 |
| 表达能力 | 受限 | 完全 | 完全 | 完全 |
| 实际性能 | 较弱 | 最优 | 优 | 优 |
关键发现:虽然经典逼近理论认为Chebyshev基是最优的,但在图神经网络的有限多项式阶数下,插值方法(ChebNetII)反而表现更好。
6. 其他多项式基
6.1 Monomial基
Monomial基 最为简单,但存在两个问题:
- 条件数爆炸:高阶Monomial的条件数随 指数增长
- 数值不稳定:直接求逆 困难
6.2 Bernstein基
Bernstein多项式定义为:
优势:
- 总是正的:
- 归一化:
- 数值稳定
BernNet3 基于Bernstein基设计谱滤波器:
6.3 Jacobi基
更一般地,Jacobi多项式 提供了自由度 调节基函数的性质:
- :Legendre多项式
- :Chebyshev第一类
- :Chebyshev第二类
7. 自适应谱滤波器
7.1 可学习的谱响应
最近的工作允许网络直接从数据中学习谱滤波器,无需预设多项式形式。
GPR-GNN4 使用参数化的PageRank谱:
7.2 频率注意力
Specformer5 引入注意力机制学习频率响应:
class SpectralAttention(nn.Module):
def __init__(self, num_freqs, hidden_dim):
super().__init__()
self.freq_proj = nn.Linear(num_freqs, hidden_dim)
self.attention = nn.MultiheadAttention(hidden_dim, num_heads=4)
def forward(self, eigvals, x):
# eigvals: (n,) 特征值
# x: (n, d) 节点特征
# 特征值投影作为注意力查询
freq_query = self.freq_proj(eigvals) # (n, hidden_dim)
# 谱域注意力
out, _ = self.attention(freq_query.unsqueeze(0), x.unsqueeze(0), x.unsqueeze(0))
return out.squeeze(0)8. 大规模图上的应用
8.1 随机SVD加速
对于大规模图,可以利用随机SVD近似特征分解:
from scipy.sparse.linalg import svds
def lanczos_filter(L, k, p=10):
"""
使用Lanczos方法近似计算k阶Chebyshev多项式
参数:
L: 稀疏拉普拉斯矩阵
k: 多项式阶数
p: 额外迭代次数(提高精度)
"""
# 随机投影
m = min(k + p, L.shape[0] - 1)
Q, _ = scipy.linalg.qr(np.random.randn(L.shape[0], m))
# Lanczos迭代
T = q.T @ L @ q # tridiagonal T
eigenvalues, eigenvectors = np.linalg.eigh(T)
return eigenvalues[:k], eigenvectors[:, :k]8.2 分块对角化
对于异构图或分块图,可以分别处理各连通分量,然后合并结果。
9. 小结
| 方法 | 多项式基 | 收敛速度 | 数值稳定性 | 表达能力 |
|---|---|---|---|---|
| ChebNet | Chebyshev | 指数 | 中等 | 受限(非法系数) |
| ChebNetII | Chebyshev插值 | 指数 | 高 | 完全 |
| GPR-GNN | PageRank | 代数 | 高 | 完全 |
| BernNet | Bernstein | 代数 | 高 | 完全 |
Chebyshev多项式为谱图卷积提供了理论基础,但实际应用中需要注意数值稳定性和表达能力的问题。ChebNetII等改进方法通过插值和正则化策略有效解决了这些问题。
参考文献
Footnotes
-
Defferrard, M., Bresson, X., & Vandergheynst, P. (2016). “Convolutional Neural Networks on Graphs with Chebyshev Approximation.” NeurIPS 2016. ↩ ↩2
-
He, M., Wei, Z., Wen, J., & Shang, C. (2022). “Convolutional Neural Networks on Graphs with Chebyshev Approximation, Revisited.” NeurIPS 2022. arXiv:2202.03580 ↩ ↩2
-
Biagetti, G., et al. (2021). “BernNet: Learning Arbitrary Graph Spectral Filters via Bernstein Approximation.” NeurIPS 2021. ↩
-
Chien, E., et al. (2020). “Adaptive Universal Generalized PageRank Graph Neural Network.” ICLR 2021. ↩
-
Liu, N., et al. (2025). “Specformer: Spectral Graph Neural Networks with Attention.” ICLR 2025. ↩