大型语言模型 (LLM) 的世界正被一个单一且无情的趋势所主导: 规模化。每一代模型的体量都在变大,上下文窗口在变长,能力也变得更加惊人。然而,这种增长伴随着高昂的代价。在特定的下游任务 (如医疗诊断或法律摘要) 上微调这些庞大的模型,所需的计算资源让大多数研究人员和学生望尘莫及。

为了解决这个问题,社区转向了参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT) 。 像 LoRA (低秩自适应) 这样的方法成为了黄金标准,它允许我们只调整模型权重的一小部分,而保持其余部分冻结。但在我们目前处理 PEFT 的方式中,存在一种隐性的低效。大多数流行的方法都将重点放在 Transformer 架构的 Attention (注意力) 块上。

但是,模型的其余部分呢?

在这篇文章中,我们将深入探讨 SparseGrad , 这是一篇新颖的研究论文,它将焦点转移到了经常被忽视的 MLP (多层感知机) 块上。我们将探索如何将梯度变换到一个新的“稀疏”空间,从而使我们能够高效地微调这些密集层,并超越像 LoRA 这样的当前最先进方法。

房间里的大象: MLP 模块

在理解解决方案之前,我们必须先了解当前 PEFT 方法存在的问题。Transformer 模型本质上是层的堆叠,主要由注意力机制和前馈网络 (MLP) 组成。

像 LoRA 这样的流行技术通常将低秩矩阵应用于注意力权重。虽然有效,但这忽略了模型解剖结构中的很大一部分。正如 SparseGrad 的作者指出的那样,MLP 块实际上包含了现代 Transformer 总参数量的大约一半——有时甚至更多。

表 1: 基于 Transformer 的模型中不同层的参数数量。

如上方的 表 1 所示,对于像 LLaMa-2 这样的模型,MLP 块占总参数计数的 64% 。 如果忽略这些模块或难以高效地微调它们,我们就白白浪费了模型的大量能力。

挑战一直在于 MLP 是“密集”的。与可以通过低秩分解很好地近似的注意力头不同,MLP 层通常需要更新大量参数才能有效地改变模型的行为,这会导致内存使用量激增。SparseGrad 的研究人员提出了一条不同的路线: 通过变换实现选择性 (Selectivity via Transformation)

核心直觉: 改变视角

想象一下你正在仰望星空。从你站立的位置看,星星 (数据点) 似乎随机散布在各处。如果你想把重要的星星“涂”亮,你得涂满整个天空。

但是,如果你能倾斜你的头 (或者旋转宇宙) ,使得所有重要的星星都排列成一条细线呢?突然之间,你只需要涂那一小条线,而可以忽略其余的黑色空间。

这就是 SparseGrad背后的直觉。

研究人员假设,虽然梯度 (告诉模型如何更新权重的信号) 在标准坐标系中看起来密集且混乱,但在特定的基 (basis) (数学空间的特定旋转) 下,这些梯度会变得稀疏 。 在这个新空间中,只有大约 1% 的元素是显著的,其余的都接近于零。

SparseGrad 方法

SparseGrad 方法分三个不同阶段运行: 预备阶段 (寻找旋转角度) 、层替换 (应用旋转) 和稀疏乘稠密乘法 (优化计算) 。

1. 预备阶段: 寻找基

为了找到使梯度变得稀疏的“角度”,该方法从一个校准步骤开始。

  1. 冻结整个模型。
  2. 解冻 MLP 块中的线性层。
  3. 在一小部分数据上运行几步标准的反向传播。

这会生成一组权重梯度矩阵。然后,研究人员将这些矩阵堆叠成一个巨大的 3D 张量,并应用一种称为 高阶奇异值分解 (Higher Order SVD, HOSVD) 的技术。

HOSVD 允许他们分解这个张量以找到两个变换矩阵,\(U\) 和 \(V\)。这些矩阵充当我们的“旋转器”。它们定义了从标准参数空间到新的稀疏参数空间的转换。

这有效吗?从视觉上看,差异是惊人的。

图 2: 第 5 个 BERT MLP 上的梯度。变换后的梯度 (右) 比原始梯度 (左) 更稀疏。

图 2 中,左侧的热力图显示了原始空间中的梯度——活动散布在各处。右侧的热力图显示了乘以 \(U\) 和 \(V^T\) 后的梯度。注意活动现在是如何集中的,留下了大片“绿色” (接近零的值) 区域。这种稀疏性正是我们要利用的。

2. SparseGradLinear 层

一旦找到了变换矩阵 \(U\) 和 \(V\),研究人员就用自定义的 SparseGradLinear 层替换 MLP 块中的标准线性层。

在标准线性层中,输出 \(Y\) 计算为 \(Y = XW^T\)。 在 SparseGrad 层中,权重存储在变换后的空间中。我们将新权重称为 \(\tilde{W}\)。

数学关系是 \(\tilde{W}^T = UW^TV^T\)。

为了在训练期间使其工作而不破坏网络,该层实际上变成了三个操作的“三明治”:

  1. 变换输入 (固定操作) 。
  2. 应用可训练的稀疏权重 (核心操作) 。
  3. 将输出变换回原始空间 (固定操作) 。

图 1: 原始线性层与 SparseGradLinear 层中的信号传播。

图 1 说明了这个流程。在 SparseGradLinear 层 (底行) 中,输入通过 \(U^T\),然后通过可训练权重 \(\tilde{W}^T\),最后通过 \(V\)。至关重要的是,在反向传播期间, 计算 \(U\) 和 \(V\) 的梯度。它们是冻结的。我们只更新 \(\tilde{W}\),而且因为我们处于“稀疏”空间,我们需要更新的只是 \(\tilde{W}\) 中前 ~1% 有影响力的值。

为了确保 PyTorch 在这些变换中正确处理梯度,作者推导了特定的自动求导 (Autograd) 规则:

表 2: 普通线性层和 SparseGradLinear 在 Torch Autograd 中的变量对应关系。

3. 稀疏乘稠密 (Sparse-by-Dense) 优化

仅仅拥有数学上的稀疏性是不够的;计算机需要知道如何跳过零以节省时间和内存。

研究人员分析了新空间中梯度的结构,发现了一种“跨步 (strided) ”结构。如下面的 图 3 所示,整行通常都包含零。

图 3: 梯度的跨步结构 (左) 和非零元素百分比 (右) 。

右侧的直方图证实,在绝大多数训练过程中,非零元素的百分比保持极低 (通常低于 1%) 。

为了利用这一点,他们实施了一种 稀疏乘稠密 (Sparse-by-Dense) 的矩阵乘法策略。他们不执行完整的矩阵乘法 (那样会浪费时间去乘零) ,而是只选择包含非零元素的行和列的索引。

更新矩阵 \(C\) 的计算执行如下:

方程 1: 稀疏乘法逻辑

得到的值随后被映射回坐标格式 (COO) 以供优化器使用:

方程 2: COO 映射

这个技巧至关重要。没有它,SparseGrad 只是一个理论上的数学改进。有了它,SparseGrad 变成了一种实用的、高速的训练方法。

性能与效率

那么,SparseGrad 与 LoRA 等 PEFT 巨头以及像 MeProp 这样的其他选择性方法相比如何呢?

速度与内存

LoRA最大的卖点之一是它显著降低了内存使用量。SparseGrad 旨在针对更密集的 MLP 层的同时,在这方面进行竞争。

表 3: 在 GLUE 基准测试上平均的训练速度和内存需求。

表 3 展示了 GLUE 基准测试的细分数据。

  • 常规微调 (Regular FT) : 使用最多的内存 (1345 MB) 且速度较慢。
  • LoRA: 内存效率最高 (944 MB) 且速度最快。
  • SparseGrad (SD - Sparse by Dense) : 稳居中间。它的内存使用量比常规微调少约 12% , 并且比 SparseGrad 的常规实现快得多。

虽然 LoRA 仍然保持着绝对最小内存使用量的桂冠 (节省了 ~30%) ,但 SparseGrad 与全量微调相比实现了可观的 ~20% 节省。考虑到我们接下来讨论的性能提升,这使其成为硬件受限环境下的一个可行选择。

NLU 任务 (GLUE) 上的准确率

如果模型变笨了,效率就毫无用处。研究人员使用 BERT 和 RoBERTa 模型在 GLUE 基准测试 (一套自然语言理解任务) 上测试了 SparseGrad。

表 5: BERT 和 RoBERTa base 模型在 GLUE 基准测试上的平均得分。

表 5 突出了一个关键发现: SparseGrad 优于 LoRA。

  • 在 BERT 上,SparseGrad 取得了 82.6 的平均分,相比之下 LoRA 为 81.6。它甚至略微击败了全量微调 (82.5) ,这表明稀疏性约束起到了有益的正则化作用 (防止过拟合) 。
  • 在 RoBERTa-base 上,SparseGrad (83.6) 再次击败 LoRA (83.1)。

这一趋势在更大的模型中继续存在。

表 4: RoBERTa large 的对比结果。

表 4 中,使用 RoBERTa-large 模型,SparseGrad 在 STSB 任务上达到了 92.4 的平均分,击败了 LoRA 的 92.1。总体而言,SparseGrad 证明了以智能方式更新 MLP 层比通过低秩近似更新注意力层能产生更好的表示。

生成任务: LLaMa-2

为了证明这不仅仅适用于旧的仅编码器 (encoder-only) 模型,作者将 SparseGrad 应用于 LLaMa-2 (7B 参数) , 使用 OpenAssistant 数据集进行问答任务。

表 6: LLaMa-2 在 OpenAssistant-1 数据集上的对比结果。

表 6 显示了由 GPT-4 评估的结果 (使用 MT-Bench 协议) 。

  • SparseGrad 得分: 5.132
  • LoRA 得分: 5.025
  • 常规微调得分: 4.407

令人惊讶的是,两种 PEFT 方法都击败了全量微调 (可能是由于全量模型在有限数据上的过拟合) ,但 SparseGrad 占据了榜首

博客文章在附录中包含了一个有趣的定性示例。当被要求为一位内向的朋友写一封劝说邮件时,LoRA 模型写了一封通用的邮件。然而,SparseGrad 模型特别承认了朋友对公开演讲的焦虑 (“如你所知,公开演讲可能是一种令人伤脑筋的经历……”) ,展示了更高水平的细微差别和指令遵循能力。

结论: 工具箱中的新工具

SparseGrad 的引入给我们上了关于深度学习重要的一课: 有时我们用来观察数据的标准坐标系并不是最高效的。

通过对庞大的 MLP 块的梯度进行数学旋转,SparseGrad 揭示了这些密集层在信息内容上实际上是相当稀疏的。我们不需要更新每一个参数来获得最先进的性能;我们只需要找到正确的参数。

关键要点:

  1. MLP 很重要: 在微调中忽略 MLP 块会损失性能。
  2. 基变换: 通过 SVD 变换梯度可产生高度稀疏性 (~99% 为零) 。
  3. 效率与性能: SparseGrad 在内存上比 LoRA 稍重,但在 NLU 和生成任务上都能持续提供更好的模型性能。

对于那些在最终准确率至关重要的情况下寻求微调模型的学生和研究人员来说,SparseGrad 提供了一个令人信服的 LoRA 替代方案。它提醒我们,在大模型时代,从不同的角度 (字面意思,不同的向量基) 看待问题可以让不可能变得可控。