Transformer 谱分析视角

谱分析(Spectral Analysis)是理解 Transformer 行为的核心工具之一。通过分析注意力矩阵、Jacobian 矩阵和权重矩阵的谱性质,我们可以揭示 Transformer 内部的信号传播、优化动力学和表达力。本文系统整理 2024-2026 年的 Transformer 谱分析成果。


1. 为什么谱分析重要

1.1 谱 = 内部动力学

核心思想:矩阵的谱(特征值集合)揭示了变换的内在结构。

矩阵谱的含义
注意力矩阵 信息分配模式
Jacobian 信号传播特性
权重矩阵 表示的几何结构
Token embedding词向量的方向结构

1.2 谱分析揭示的现象

  1. Rank Collapse:长上下文中注意力矩阵退化为接近均匀
  2. Spectral Gap:谱中前几个特征值远大于其他
  3. NTK 谱:训练动力学的渐近行为
  4. Optimization Stability:梯度流的稳定性

2. 注意力矩阵的谱性质

2.1 基本谱定理

定理 2.1:注意力矩阵 (softmax 输出)具有以下谱性质:

  1. 特征值界限(行随机矩阵的 Perron-Frobenius 性质)
  2. 正实部:所有特征值的实部
  3. 和为

2.2 Perron-Frobenius 定理的应用

定理 2.2:对于行随机矩阵

对应的特征向量 (均匀分布)。

含义:注意力矩阵总是有一个”主特征方向”——均匀分布。

2.3 谱间隙(Spectral Gap)

定义 2.1(谱间隙):

含义

  • :矩阵接近秩 1,注意力高度集中
  • :矩阵接近一致,注意力均匀

2.4 实证谱分布

import torch
import numpy as np
import matplotlib.pyplot as plt
 
 
def analyze_attention_spectrum(attn_matrix):
    """分析注意力矩阵的谱"""
    A = attn_matrix.cpu().numpy()
    
    # 奇异值分解
    s = np.linalg.svd(A, compute_uv=False)
    
    # 归一化(让最大奇异值为1)
    s_normalized = s / s.max()
    
    return {
        'singular_values': s,
        'normalized': s_normalized,
        'effective_rank': (s ** 2).sum() / (s[0] ** 2),
        'spectral_gap': 1 - s[1] / s[0] if len(s) > 1 else 0,
        'top_5': s[:5].tolist(),
        'tail_ratio': (s[5:].sum() / s.sum()).item() if s.sum() > 0 else 0,
    }

2.5 训练过程中的谱演化

典型轨迹

训练初期:        训练中期:        训练后期:
谱近似均匀      谱开始集中       高度稀疏
λ_1 ≈ 1/n     λ_1 ≈ 0.5       λ_1 ≈ 0.9
λ_i ≈ 1/n     λ_2 ≈ 0.3       λ_2 ≈ 0.05
              λ_i 衰减         λ_i → 0 (i ≥ 3)

3. Rank Collapse 现象

3.1 核心论文

Nait Saada, Naderi, Tanner (2025). Mind the Gap: a Spectral Analysis of Rank Collapse and Signal Propagation in Attention Layers. PMLR 267.1

3.2 现象定义

Rank Collapse:在长上下文场景中,注意力矩阵的”有效秩”显著降低,所有 token 趋向混合。

形式化

即所有特征值趋向于

3.3 关键定理

定理 3.1(Nait Saada et al. 2025,简化):

设上下文长度 ,key/query 维度 ,则 softmax 注意力矩阵的特征值满足:

含义

  • 时,谱间隙急剧缩小
  • 注意力趋向均匀
  • 信号无法有效区分 token

3.4 Rank Collapse 的后果

对训练

  1. 梯度信号减弱
  2. Token 表示趋同
  3. 模型难以区分远距离依赖

对推理

  1. 长上下文性能下降
  2. 注意力无法聚焦相关 token

3.5 Rank Collapse 的解决方案

方案 1:注意力缩放

其中 抵消 Rank Collapse。

方案 2:温度调节

Chen et al. (2025) 证明了 是必要的。

方案 3:位置编码辅助

RoPE 等相对位置编码可缓解 Rank Collapse。

3.6 实证 Rank Collapse

def measure_rank_collapse(model, sequence_lengths):
    """测量不同长度下的 Rank Collapse"""
    results = []
    
    for n in sequence_lengths:
        # 构造随机输入
        x = torch.randn(1, n, model.d_model)
        
        # 获取注意力矩阵
        with torch.no_grad():
            attn_matrix = get_attention_matrix(model, x)  # [n, n]
        
        # 计算谱统计
        spectrum = analyze_attention_spectrum(attn_matrix)
        results.append({
            'n': n,
            'effective_rank': spectrum['effective_rank'],
            'spectral_gap': spectrum['spectral_gap'],
        })
    
    return results

4. 信号传播的谱分析

4.1 残差网络的 Jacobian

关键矩阵:每层的 Jacobian

对残差连接:

4.2 谱传播方程

整个网络的 Jacobian

其中

4.3 谱稳定性条件

定理 4.1:对于深度网络,信号稳定传播当且仅当:

残差连接的作用 时稳定。

4.4 Transformer 的特殊性

注意力层的 Jacobian

计算:通过链式法则展开。

关键观察:残差连接使 Transformer 自然有稳定的谱(即使没有 LayerNorm)。

4.5 Pre-norm 的谱稳定性

Pre-norm + 残差

特点

  • LN 的 Jacobian 有界
  • 的 Jacobian 局部有界
  • 整体稳定

5. NTK 视角的谱分析

5.1 NTK 基础

定义:神经网络在无穷宽度极限下的 NTK:

5.2 Transformer 的 NTK 谱

核心结果(Yang & Hu 2021 等):

Transformer 的 NTK 在无穷宽度下是确定性的,谱与训练无关

谱结构

  • 主要由注意力矩阵决定
  • 与位置编码相关
  • 受层数影响小

5.3 NTK 的特征值分布

典型分布

  • 多个接近零的特征值(高维冗余)
  • 少量主导特征值(与任务相关)
  • 中间过渡区域

5.4 NTK 与训练动力学

关键推论

  • NTK 模式 → 训练等价于核回归
  • 谱主导特征值决定学习速度
  • 谱尾部决定泛化能力

6. 权重矩阵的谱分析

6.1 权重谱的初始化分布

标准初始化(如 Kaiming Uniform):

权重矩阵 的奇异值 Marcenko-Pastur 分布

性质

  • 谱密度有显式公式
  • 谱支撑在

6.2 训练后的谱

典型演化

初始化:        训练早期:        训练后期:
均匀谱         出现少量主导值    主导值增强
               整体谱变窄       其他值衰减

6.3 谱归一化(GAN 应用)

谱归一化:约束权重矩阵的最大奇异值:

效果:限制 Lipschitz 常数,提高训练稳定性。

6.4 谱剪枝

基于谱的剪枝

def spectral_pruning(weight_matrix, target_sparsity):
    """基于谱的权重剪枝"""
    U, s, V = torch.svd(weight_matrix)
    
    # 保留前 k 个奇异值
    k = int(len(s) * (1 - target_sparsity))
    s_pruned = torch.zeros_like(s)
    s_pruned[:k] = s[:k]
    
    # 重建
    return U @ torch.diag(s_pruned) @ V.T

7. Attention Scaling 的谱分析

7.1 核心论文

Chen, Lin, Polyanskiy, Rigollet (2025). Critical Attention Scaling in Long-Context Transformers. MIT.2

7.2 现象

在长上下文训练中,需要缩放注意力分数才能避免 Rank Collapse。

7.3 关键定理

定理 7.1(Chen et al. 2025,简化):

设序列长度 ,当 时,softmax 注意力矩阵的特征值满足:

(所有特征值趋向均匀)

对策:必须用多项式对数缩放

其中 是某个正常数。

7.4 实证

实验发现

  • 不缩放 → 长上下文性能崩溃
  • 太小 → 不够
  • 太大 → 注意力过度集中

经验最优

7.5 实践应用

def length_aware_attention(Q, K, V, base_scale=1.0, poly_alpha=1.7):
    """长度感知的注意力缩放"""
    n = Q.shape[-2]
    scaling = base_scale * (torch.log(torch.tensor(n)).item() ** poly_alpha)
    
    scores = Q @ K.transpose(-2, -1) / (Q.shape[-1] ** 0.5) * scaling
    attn = torch.softmax(scores, dim=-1)
    return attn @ V

8. 多头注意力的谱分析

8.1 多头作为块对角

多头注意力可视为块对角矩阵

其中 是第 个头的注意力矩阵。

8.2 多头的谱

整个多头注意力的 Jacobian

:所有头的特征值合并。

8.3 头之间的谱差异

def head_spectral_diversity(attn_matrices):
    """计算不同头的谱多样性"""
    spectra = []
    
    for head_idx in range(attn_matrices.shape[0]):
        s = torch.linalg.svdvals(attn_matrices[head_idx])
        spectra.append(s)
    
    # 计算谱之间的差异
    spectra_tensor = torch.stack(spectra)
    pairwise_diff = torch.cdist(spectra_tensor, spectra_tensor)
    
    return {
        'mean_diversity': pairwise_diff.mean().item(),
        'most_similar_heads': pairwise_diff.min(dim=0),
        'most_different_heads': pairwise_diff.max(dim=0),
    }

8.4 头的冗余性

观察:在训练后期,许多头表现出类似的谱

含义

  • 多头并不完全独立
  • 部分头可以”剪枝”
  • 但核心头承担主要功能

9. Transformer 优化动力学的谱

9.1 梯度流的谱

优化方程

Hessian 谱

控制优化动力学。

9.2 Sharp vs Flat Minima

Sharp Minimum:Hessian 最大特征值大 → 泛化差

Flat Minimum:Hessian 最大特征值小 → 泛化好

Transformer 的特点

  • 倾向于 sharp minima(容量大)
  • 但训练后期会”漂移”到 flat regions

9.3 SAM(Sharpness-Aware Minimization)

核心思想:显式寻找 flat minima。

谱效果:降低 Hessian 最大特征值。


10. 谱分析的应用

10.1 模型诊断

健康的 Transformer

  • 注意力矩阵谱衰减适度(不是急剧)
  • Jacobian 谱接近 1
  • 权重谱分布平滑

问题模型

  • 谱突然截断 → 信息瓶颈
  • Jacobian 谱远大于 1 → 训练不稳定
  • 权重谱集中 → 训练失败

10.2 架构设计

基于谱的设计原则

def spectral_design_check(architecture):
    """基于谱的架构检查"""
    issues = []
    
    # 1. 避免深度过大(谱爆炸)
    if architecture.num_layers > 200:
        issues.append("深度过大可能导致谱爆炸")
    
    # 2. 维度对齐(谱密度)
    if architecture.d_model % architecture.num_heads != 0:
        issues.append("d_model 应能被 num_heads 整除")
    
    # 3. 注意力头维度(谱效率)
    d_k = architecture.d_model // architecture.num_heads
    if d_k < 32:
        issues.append("d_k 过小可能限制注意力表达")
    elif d_k > 256:
        issues.append("d_k 过大可能导致优化困难")
    
    return issues if issues else ["架构谱性质良好"]

10.3 量化感知训练

谱保持量化

def spectral_preserving_quantize(weight, bits=8):
    """保留主要谱分量的量化"""
    U, s, V = torch.svd(weight)
    
    # 仅量化重要分量
    k = int(0.8 * len(s))  # 保留前 80%
    s_important = s[:k]
    
    # 量化
    s_quantized = quantize(s_important, bits)
    
    # 重建
    s_full = torch.zeros_like(s)
    s_full[:k] = s_quantized
    
    return U @ torch.diag(s_full) @ V.T

11. 谱与表达力

11.1 表达力的谱度量

关键度量:模型在不同输入上的 Jacobian 谱的分布。

满秩 Jacobian:模型对输入敏感(可能过拟合)

低秩 Jacobian:模型”忽略”某些方向(可能欠拟合)

11.2 谱与记忆容量

关键关系:模型的记忆容量与 Hessian 谱相关。

直觉:更多特征值 → 更大存储空间 → 更强记忆

11.3 谱与泛化

关键洞察

  • Sharp minima(小特征值)→ 泛化好
  • Flat minima(大特征值)→ 泛化差

Transformer 的现象

  • 训练初期:sharp
  • 训练后期:逐渐 flat
  • 与过拟合相关

12. 计算工具

12.1 谱分析工具箱

class TransformerSpectralAnalyzer:
    """Transformer 谱分析工具箱"""
    
    def __init__(self, model):
        self.model = model
    
    def analyze_all_layers(self, x):
        """分析所有层的谱"""
        results = {}
        
        # 注册 hook 捕获注意力
        attention_outputs = []
        handles = []
        
        def hook(module, input, output):
            if isinstance(output, tuple) and len(output) > 1:
                attention_outputs.append(output[1].detach())
        
        for module in self.model.modules():
            if isinstance(module, torch.nn.MultiheadAttention):
                handles.append(module.register_forward_hook(hook))
        
        with torch.no_grad():
            self.model(x)
        
        for handle in handles:
            handle.remove()
        
        # 分析每层
        for i, attn in enumerate(attention_outputs):
            results[f'layer_{i}'] = {
                'effective_rank': self._effective_rank(attn[0, 0]),
                'spectral_gap': self._spectral_gap(attn[0, 0]),
                'max_eigenvalue': self._max_eigenvalue(attn[0, 0]),
            }
        
        return results
    
    def _effective_rank(self, matrix, threshold=0.99):
        s = torch.linalg.svdvals(matrix)
        s_norm = s / s.sum()
        cumsum = torch.cumsum(s_norm, dim=0)
        return (cumsum < threshold).sum().item() + 1
    
    def _spectral_gap(self, matrix):
        s = torch.linalg.svdvals(matrix)
        return (s[0] - s[1]).item() if len(s) > 1 else s[0].item()
    
    def _max_eigenvalue(self, matrix):
        return torch.linalg.eigvals(matrix).abs().max().item()

12.2 谱可视化

def plot_spectrum(attn_matrix, title='Attention Spectrum'):
    """可视化注意力谱"""
    s = torch.linalg.svdvals(attn_matrix).cpu().numpy()
    
    fig, axes = plt.subplots(1, 2, figsize=(12, 4))
    
    # 线性尺度
    axes[0].plot(s, 'b-', linewidth=1)
    axes[0].set_xlabel('Index')
    axes[0].set_ylabel('Singular Value')
    axes[0].set_title(f'{title} (Linear)')
    axes[0].set_yscale('log')
    
    # 归一化累积
    cumsum = np.cumsum(s) / np.sum(s)
    axes[1].plot(cumsum, 'r-', linewidth=2)
    axes[1].axhline(y=0.99, color='k', linestyle='--', alpha=0.5)
    axes[1].set_xlabel('Index')
    axes[1].set_ylabel('Cumulative Variance Ratio')
    axes[1].set_title(f'{title} (Cumulative)')
    
    plt.tight_layout()
    return fig

13. 与其他理论的统一

13.1 谱 + 共识

统一视角

  • Attention Sink = 谱的极端化(
  • 共识传播 = 谱主导特征值驱动

13.2 谱 + NTK

NTK 的谱

  • NTK 矩阵的谱决定训练动力学
  • 与 Transformer 架构谱密切相关

13.3 谱 + 知识容量

关系

  • 注意力矩阵的稳定秩 ∝ 知识存储容量
  • 谱分析方法可估计记忆容量

14. 关键论文清单

谱分析基础

  1. Nait Saada et al. PMLR 267 (2025) — Mind the Gap
  2. Chen et al. (2025) — Critical Attention Scaling
  3. Boncoraglio et al. arXiv:2509.24914 (2025) — Spectral Properties of Single-Head Attention

应用

  1. Yang & Hu (2021) — Tensor Programs IV (NTK for Transformers)
  2. Bansal et al. (2022) — Spectral Analysis of Attention

优化

  1. Foret et al. (2021) — SAM (Sharpness-Aware Minimization)

15. 实践建议

15.1 监控 Transformer 训练

def training_monitor(model, dataloader, log_every=100):
    """训练监控器"""
    analyzer = TransformerSpectralAnalyzer(model)
    
    for step, batch in enumerate(dataloader):
        # 训练步骤
        loss = train_step(model, batch)
        
        if step % log_every == 0:
            # 分析谱
            spectra = analyzer.analyze_all_layers(batch['input'])
            
            # 检查异常
            for layer, info in spectra.items():
                if info['effective_rank'] < 5:
                    print(f"警告: {layer} 有效秩过低 ({info['effective_rank']})")
                if info['max_eigenvalue'] > 0.95:
                    print(f"警告: {layer} 主导特征值过高 ({info['max_eigenvalue']:.3f})")

15.2 架构搜索

基于谱的架构评估

def evaluate_architecture_spectral(config, sample_data):
    """评估架构的谱性质"""
    model = build_transformer(config)
    
    analyzer = TransformerSpectralAnalyzer(model)
    spectra = analyzer.analyze_all_layers(sample_data)
    
    score = 0
    for layer, info in spectra.items():
        # 健康指标:
        # - 有效秩 30-100(不过低/不过高)
        # - 谱间隙 0.3-0.7(适度集中)
        er = info['effective_rank']
        sg = info['spectral_gap']
        
        if 30 < er < 100 and 0.3 < sg < 0.7:
            score += 1
    
    return score / len(spectra)

16. 与相关专题的连接

16.1 Transformer 架构专题

16.2 数学基础

16.3 应用


最后更新:2026-06-21

Footnotes

  1. Nait Saada et al. (2025). Mind the Gap. PMLR 267:45561-45587.

  2. Chen et al. (2025). Critical Attention Scaling. MIT LIDS.