Transformer 与线性代数:统一矩阵框架

引言

Transformer 自 2017 年问世以来,已成为深度学习的主导架构。然而,其数学本质长期未被系统化理解。本文从线性代数角度重新审视 Transformer,揭示其所有核心操作都可以归结为矩阵运算:QKV 投影是三个矩阵乘法、注意力矩阵是带 softmax 的秩一更新、多头注意力是块对角低秩分解、FFN 是两层矩阵乘法、而 LoRA、线性注意力、谱条件化等现代变体本质上都是矩阵分解与近似

2024-2026 年的研究进一步揭示:

  • 注意力矩阵存在谱隙(spectral gap),softmax 操作使 ,导致 width-wise rank collapse
  • LoRA 有效性的理论根源是训练梯度本身的低秩性
  • 线性注意力(Mamba2、Gated DeltaNet、RetNet)都可统一为矩阵状态递推
  • 谱条件化(Spectral Conditioning) 通过控制 Jacobian 条件数优化训练

本文将建立从基础矩阵运算到现代 Transformer 架构的统一框架1


一、Transformer 操作的矩阵分解

1.1 整体架构的矩阵流

一个标准 Transformer block 可以表示为以下矩阵运算序列:

其中 ,FFN 包含两个矩阵乘法(升维-激活-降维)。

import torch
import torch.nn as nn
import torch.nn.functional as F
import math
 
class TransformerBlock(nn.Module):
    """Transformer Block 的线性代数视角实现"""
    def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
        super().__init__()
        self.d_model = d_model
        self.n_heads = n_heads
        self.d_k = d_model // n_heads
        
        # QKV 投影:三个矩阵
        self.W_q = nn.Linear(d_model, d_model, bias=False)
        self.W_k = nn.Linear(d_model, d_model, bias=False)
        self.W_v = nn.Linear(d_model, d_model, bias=False)
        self.W_o = nn.Linear(d_model, d_model)
        
        # FFN:两个矩阵
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_ff),
            nn.GELU(),
            nn.Linear(d_ff, d_model)
        )
        
        self.ln1 = nn.LayerNorm(d_model)
        self.ln2 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)
    
    def forward(self, x, mask=None):
        # 1. QKV 投影(三个矩阵乘法)
        B, n, d = x.shape
        Q = self.W_q(x).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        K = self.W_k(x).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        V = self.W_v(x).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        
        # 2. 注意力矩阵(QR^T + softmax)
        scores = Q @ K.transpose(-2, -1) / math.sqrt(self.d_k)
        if mask is not_mask is not None:
            scores = scores.masked_fill(mask == 0, -1e9)
        A = F.softmax(scores, dim=-1)
        
        # 3. 注意力输出(AV)
        Y = A @ V
        Y = Y.transpose(1, 2).contiguous().view(B, n, d)
        
        # 4. 输出投影 + 残差
        x = x + self.dropout(self.W_o(Y))
        x = x + self.dropout(self.ffn(self.ln2(x)))
        return x

1.2 矩阵视角的关键观察

观察 1:注意力矩阵是行随机矩阵(Row-stochastic Matrix)。softmax 之后每一行非负且和为 1:

因此注意力矩阵是马尔可夫转移矩阵——这是后面”注意力作为图”与”扩散过程”联系的基础。

观察 2:多头注意力是块对角低秩分解。如果 个头,每头维度 ,则整个多头注意力等价于:

这是一个秩为 的块对角矩阵乘以输入。

观察 3:FFN 占总参数 2/3。在标准 Transformer 中:

FFN 存储了大部分事实知识(见 ROME 论文)。


二、注意力矩阵的谱性质

2.1 Perron-Frobenius 定理

由于注意力矩阵 是行随机矩阵,根据 Perron-Frobenius 定理

  • 最大特征值 (必然,因为每行和为 1)
  • 对应的左特征向量(全一向量)
  • 其余特征值满足

这意味着注意力矩阵是随机矩阵的近似,可以用 PageRank 类型的迭代理解。

2.2 谱隙与 Rank Collapse

Nait Saada et al. (ICML 2025) 用随机矩阵理论 (RMT) 证明了关键的 width-wise rank collapse 现象:2

定理(谱隙定理):在 极限下,softmax 注意力矩阵 的前两个最大奇异值 满足

直观解释:

  • 的经验谱分布收敛到 Marchenko-Pastur 律附近
  • 表现为”outlier”,远大于其他奇异值
  • 因此 近似秩一
import torch
 
def analyze_attention_spectrum(Q, K):
    """分析注意力矩阵的谱性质"""
    d_k = Q.size(-1)
    # 计算 QK^T
    scores = Q @ K.transpose(-2, -1) / (d_k ** 0.5)
    A = F.softmax(scores, dim=-1)
    
    # 奇异值分解
    U, S, Vh = torch.linalg.svd(A, full_matrices=False)
    
    sigma_1 = S[:, :, 0]  # 最大奇异值
    sigma_2 = S[:, :, 1]  # 第二大奇异值
    spectral_gap = sigma_2 / (sigma_1 + 1e-8)
    
    # 有效秩
    S_norm = S / (S.sum(dim=-1, keepdim=True) + 1e-8)
    entropy = -(S_norm * torch.log(S_norm + 1e-8)).sum(dim=-1)
    effective_rank = torch.exp(entropy)
    
    return {
        'sigma_1': sigma_1,
        'sigma_2': sigma_2,
        'spectral_gap': spectral_gap,  # 应该接近 0
        'effective_rank': effective_rank,  # 真实"信息维度"
    }

2.3 缩放因子的必要性

为什么需要 这个缩放因子?考虑:

  • 假设 的元素是独立同分布
  • 个独立随机变量之和

如果不缩放,softmax 的输入方差会随 增长,导致:

  • 大值主导 softmax( one-hot)
  • 梯度消失(softmax 梯度在饱和区几乎为 0)

缩放后 ,稳定了 softmax 的输入。

Chen et al. (MIT 2025) 进一步提出多项式对数缩放3

其中 是经验最优。

2.4 注意力作为图扩散

由于 是行随机矩阵,Transformer 的前向传播可视为图上的扩散过程

等价于:

极限下,多层 Transformer 趋近于图上的连续扩散过程(与 Neural ODE 联系)。


三、低秩分解与近似

3.1 LoRA:低秩适配

LoRA(Hu et al. 2021)的核心思想是权重更新 是低秩的:

其中

Balzano et al. (2025) 证明了 LoRA 有效性的理论根源:4

定理:训练梯度 本身是近似低秩的,且其有效秩随训练步数衰减。

这从理论上解释了为什么 就能匹配全参数微调。

3.2 DoRA:方向-幅度分解

DoRA(Liu et al. ICML 2024 Oral)将权重分解为幅度 方向 5

直觉:

  • :控制整体幅度
  • :保持单位范数,专注于方向更新

实验结果:在相同参数量下,DoRA 比 LoRA 更接近 full fine-tuning。

3.3 线性注意力:Nyström 近似

标准注意力的复杂度是 线性注意力通过特征映射 实现

这是经典的 Nyström 近似:用一个低秩分解近似

代表工作:

  • Performer (Choromanski et al. 2021):用随机 Fourier 特征
  • Linear Transformer (Katharopoulos et al. 2020):用
  • RetNet (Sun et al. 2023):用
  • Mamba2 (Gu & Dao 2024):选择性 SSM
  • Gated DeltaNet (Yang et al. ICLR 2025):delta rule + gating

3.4 隐式注意力统一

Zimerman et al. (2024) 证明 Mamba2/RWKV/RetNet/Gated DeltaNet 都可以写成隐式线性注意力6

其中:

  • :特征映射
  • :门控因子

这是矩阵状态递推 的统一视角。

class GatedDeltaNet(nn.Module):
    """Gated DeltaNet 简化实现"""
    def __init__(self, d_model, d_state=64):
        super().__init__()
        self.d_model = d_model
        self.d_state = d_state
        
        self.W_q = nn.Linear(d_model, d_state, bias=False)
        self.W_k = nn.Linear(d_model, d_state, bias=False)
        self.W_v = nn.Linear(d_model, d_model, bias=False)
        self.W_beta = nn.Linear(d_model, 1)  # delta rule beta
        self.W_alpha = nn.Linear(d_model, 1)  # gate
        
    def forward(self, x):
        B, n, d = x.shape
        Q = self.W_q(x)
        K = self.W_k(x)
        V = self.W_v(x)
        beta = torch.sigmoid(self.W_beta(x))  # (B, n, 1)
        alpha = torch.sigmoid(self.W_alpha(x))  # (B, n, 1)
        
        # 矩阵状态递推
        S = torch.zeros(B, d, self.d_state, device=x.device)
        outputs = []
        for t in range(n):
            # Delta rule: S = S - beta * (S @ k) k^T + beta * v k^T
            S_k = torch.bmm(S, K[:, t:t+1, :].transpose(1, 2))  # (B, d, 1)
            S = S - beta[:, t, :].unsqueeze(-1) * S_k @ K[:, t:t+1, :]
            S = S + beta[:, t, :].unsqueeze(-1) * V[:, t:t+1, :].transpose(1, 2) @ K[:, t:t+1, :]
            # Gate
            S = alpha[:, t, :].view(B, 1, 1) * S
            
            # 输出
            y_t = torch.bmm(S, Q[:, t:t+1, :].transpose(1, 2))  # (B, d, 1)
            outputs.append(y_t.squeeze(-1))
        
        return torch.stack(outputs, dim=1)

四、矩阵范数与优化

4.1 谱范数约束

Lipschitz 约束对 Transformer 训练稳定性至关重要。一个矩阵 的谱范数 等于其最大奇异值

Saratchandran & Lucey (NeurIPS 2025) 提出 Spectral Conditioning7

关键洞察:Transformer block 的 Jacobian 条件数 ,而非参数范数,主导优化效率。

Spectral Conditioning 修改 QKV 投影的谱,使 最小化:

class SpectralConditionedAttention(nn.Module):
    """谱条件化注意力"""
    def __init__(self, d_model, n_heads, max_sigma=1.0, min_sigma=0.01):
        super().__init__()
        self.d_k = d_model // n_heads
        self.n_heads = n_heads
        self.max_sigma = max_sigma
        self.min_sigma = min_sigma
        
        # QKV 投影
        self.W_qkv = nn.Linear(d_model, 3 * d_model, bias=False)
        self.W_o = nn.Linear(d_model, d_model)
    
    def spectral_condition(self, W):
        """将奇异值夹紧到 [min_sigma, max_sigma]"""
        U, S, Vh = torch.linalg.svd(W, full_matrices=False)
        S_clamped = S.clamp(min=self.min_sigma, max=self.max_sigma)
        return U @ torch.diag_embed(S_clamped) @ Vh
    
    def forward(self, x):
        # 谱条件化
        W_qkv = self.spectral_condition(self.W_qkv.weight)
        qkv = F.linear(x, W_qkv)
        # ... 标准注意力 ...

4.2 Frobenius 范数与权重衰减

权重衰减(Weight Decay)本质上是最小化 Frobenius 范数:

其中 是所有奇异值的平方和。

4.3 核范数与稀疏化

核范数(Nuclear Norm) 是秩函数的凸近似,常用于:

  • 权重矩阵稀疏化(迫使许多奇异值为 0)
  • 模型压缩
  • LoRA 的理论基础

五、矩阵微积分在 Transformer 中

5.1 Jacobian 与梯度流

Transformer 的前向传播 。根据链式法则:

每个 Jacobian 矩阵。残差连接的 Jacobian 接近单位矩阵:

这保证了梯度不会指数级消失(与 LSTM 的细胞状态类似)。

5.2 NTK 视角

NTK (Neural Tangent Kernel) 视角将 Transformer 视为在 NTK 特征空间中做核回归:

NTK 矩阵:

在 NTK 视角下,Transformer 的训练动力学是线性的,可以用闭式解分析。

5.3 Pre-norm 的谱优势

Pre-norm Transformer()相比 Post-norm 有以下谱优势:

  • 残差路径上 Jacobian 严格为
  • 各层更新是加性的,可以解耦
  • 训练更稳定,允许更大学习率

Wu et al. (NeurIPS 2024) 证明了 Pre-norm 残差结构使 LayerNorm 后的 谱范数随深度指数衰减,加剧 rank collapse。8


六、特征值与图视角

6.1 邻接矩阵 = 动态全连接图

注意力矩阵 可以解释为动态构建的全连接图的邻接矩阵:

  • 节点:每个 token
  • 边权重: = token 对 token 的关注度
  • 这是自适应的图结构

6.2 与 GNN 的统一视角

GNN 的消息传递

Transformer 的注意力(节点 = token):

关键区别

  • GNN:图是静态的(输入决定)
  • Transformer:图是动态的(注意力自适应构建)

6.3 拉普拉斯视角

定义 token 之间的拉普拉斯矩阵:

则 Transformer 前向传播可以重写为扩散过程:

这是图上的扩散方程,与 Neural ODE 联系。


七、完整实现:从零构建简化 Transformer

import torch
import torch.nn as nn
import torch.nn.functional as F
import math
 
class LinearAlgebraicTransformer(nn.Module):
    """完整展示线性代数视角的简化 Transformer"""
    
    def __init__(self, vocab_size, d_model=256, n_heads=4, d_ff=1024, 
                 n_layers=4, max_seq_len=512, dropout=0.1):
        super().__init__()
        self.d_model = d_model
        self.n_heads = n_heads
        self.d_k = d_model // n_heads
        
        # 词嵌入
        self.token_emb = nn.Embedding(vocab_size, d_model)
        self.pos_emb = nn.Embedding(max_seq_len, d_model)
        
        # Transformer blocks
        self.blocks = nn.ModuleList([
            LABlock(d_model, n_heads, d_ff, dropout) for _ in range(n_layers)
        ])
        
        self.ln_f = nn.LayerNorm(d_model)
        self.head = nn.Linear(d_model, vocab_size, bias=False)
    
    def forward(self, ids):
        B, n = ids.shape
        pos = torch.arange(n, device=ids.device).unsqueeze(0)
        x = self.token_emb(ids) + self.pos_emb(pos)
        
        # 收集每一层的谱信息用于分析
        spectral_info = []
        for block in self.blocks:
            x, info = block(x, return_spectral=True)
            spectral_info.append(info)
        
        x = self.ln_f(x)
        logits = self.head(x)
        return logits, spectral_info
 
 
class LABlock(nn.Module):
    """Linear-Algebraic Transformer Block"""
    def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
        super().__init__()
        self.d_model = d_model
        self.n_heads = n_heads
        self.d_k = d_model // n_heads
        
        # QKV 投影(三个矩阵)
        self.W_q = nn.Linear(d_model, d_model, bias=False)
        self.W_k = nn.Linear(d_model, d_model, bias=False)
        self.W_v = nn.Linear(d_model, d_model, bias=False)
        self.W_o = nn.Linear(d_model, d_model)
        
        # FFN
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_ff, bias=False),
            nn.GELU(),
            nn.Linear(d_ff, d_model, bias=False)
        )
        
        # Pre-norm
        self.ln1 = nn.LayerNorm(d_model)
        self.ln2 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)
    
    def forward(self, x, return_spectral=False):
        B, n, d = x.shape
        
        # === Multi-Head Self-Attention ===
        x_norm = self.ln1(x)
        Q = self.W_q(x_norm).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        K = self.W_k(x_norm).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        V = self.W_v(x_norm).view(B, n, self.n_heads, self.d_k).transpose(1, 2)
        
        # 注意力矩阵
        scores = Q @ K.transpose(-2, -1) / math.sqrt(self.d_k)
        A = F.softmax(scores, dim=-1)
        
        # 谱信息
        info = None
        if return_spectral:
            with torch.no_grad():
                U, S, Vh = torch.linalg.svd(A, full_matrices=False)
                sigma_1 = S[:, :, 0].mean()
                sigma_2 = S[:, :, 1].mean()
                effective_rank = self._effective_rank(S)
                info = {
                    'sigma_1': sigma_1.item(),
                    'sigma_2': sigma_2.item(),
                    'spectral_gap': (sigma_2 / (sigma_1 + 1e-8)).item(),
                    'effective_rank': effective_rank,
                }
        
        # 注意力输出
        Y = A @ V
        Y = Y.transpose(1, 2).contiguous().view(B, n, d)
        Y = self.W_o(Y)
        
        # 残差
        x = x + self.dropout(Y)
        
        # === FFN ===
        x = x + self.dropout(self.ffn(self.ln2(x)))
        
        return x, info
    
    @staticmethod
    def _effective_rank(S):
        """有效秩(基于谱熵)"""
        S_norm = S / (S.sum(dim=-1, keepdim=True) + 1e-8)
        entropy = -(S_norm * torch.log(S_norm + 1e-8)).sum(dim=-1)
        return torch.exp(entropy).mean().item()
 
 
# === 训练循环示例 ===
def train_transformer(model, dataloader, n_epochs=3):
    optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.1)
    
    for epoch in range(n_epochs):
        for batch_idx, (ids, targets) in enumerate(dataloader):
            optimizer.zero_grad()
            logits, spectral_info = model(ids)
            loss = F.cross_entropy(logits.view(-1, logits.size(-1)), targets.view(-1))
            loss.backward()
            optimizer.step()
            
            if batch_idx % 100 == 0:
                avg_gap = sum(s['spectral_gap'] for s in spectral_info) / len(spectral_info)
                avg_rank = sum(s['effective_rank'] for s in spectral_info) / len(spectral_info)
                print(f"Epoch {epoch}, Batch {batch_idx}, "
                      f"Loss {loss.item():.4f}, "
                      f"Avg Spectral Gap {avg_gap:.4f}, "
                      f"Avg Eff Rank {avg_rank:.1f}")

八、关键洞察总结

8.1 三大数学结构

Transformer 的核心可以归结为三种数学结构

  1. 行随机矩阵(注意力矩阵):Perron-Frobenius 定理、谱分析
  2. 低秩分解(LoRA、QKV、FFN):矩阵分解的理论与实践
  3. 谱条件化(Spectral Conditioning):用奇异值控制优化

8.2 三大统一视角

  1. 图视角:注意力矩阵 = 动态全连接图的邻接矩阵
  2. 扩散视角:多层 Transformer = 图上的扩散过程
  3. 核视角:Transformer = 在 NTK 特征空间的核方法

8.3 三大现代进展

  1. 谱分析揭示 rank collapse(Nait Saada et al. 2025)
  2. LoRA 理论证明(Balzano et al. 2025)
  3. 谱条件化优化(Saratchandran & Lucey 2025)

九、与其他专题的连接

  • CNN 数学基础:卷积 = 局部注意力,平移等变性
  • ResNet 理论:残差连接 = 谱范数约束 + 动力系统视角
  • GNN 理论:注意力 = 动态图消息传递
  • 深度学习理论:NTK 视角下的训练动力学

参考资料

最后更新:2026-06-22

Footnotes

  1. Vaswani, A. et al. (2017). Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762

  2. Nait Saada, T. et al. (2024). Mind the Gap: a Spectral Analysis of Rank Collapse and Signal Propagation in Attention Layers. ICML 2025. arXiv:2410.07799

  3. Chen, Y. et al. (2025). Critical Attention Scaling. MIT LIDS Report 2025. PDF

  4. Balzano, L. et al. (2025). An Overview of Low-Rank Structures in the Training and Adaptation of Large Models. arXiv:2503.19859

  5. Liu, S.-Y. et al. (2024). DoRA: Weight-Decomposed Low-Rank Adaptation. ICML 2024 Oral. arXiv:2402.09353

  6. Zimerman, I. et al. (2024). Explaining Modern Gated-Linear RNNs via A Unified Implicit Attention Formulation. arXiv:2405.16504

  7. Saratchandran, H. & Lucey, S. (2025). Spectral Conditioning of Attention Improves Transformer Performance. NeurIPS 2025. arXiv:2603.07162

  8. Wu, X. et al. (2024). On the Role of Attention Masks and LayerNorm in Transformers. NeurIPS 2024. arXiv:2405.18781