大语言模型 (LLM) 的发展格局目前正受到两股相互冲突力量的定义: 对大规模参数的追求与有限计算资源的制约。我们希望模型无所不知,但我们并不总是有足够的硬件来训练它们。

这导致了参数高效微调 (PEFT) 技术的爆发。像 LoRA (低秩自适应) 这样的方法已经成为学生和从业者家喻户晓的名字,使我们能够在消费级硬件上适配 Llama-3 或 Mistral 等巨大的稠密模型。

但 LLM 的架构正在发生转变。我们正在从“稠密”模型——即每个参数都用于处理每个 Token——转向混合专家 (MoE) 架构,例如 Mixtral 或 DeepSeek-V2。在 MoE 模型中,任何给定时刻只有一小部分网络是处于激活状态的。

问题就在这里: 大多数现有的 PEFT 方法将稀疏的 MoE 模型视为稠密模型来处理。 它们均匀地应用更新或在所有地方添加适配器层,忽略了模型的独特结构。

在这篇文章中,我们将深入探讨 DeepSeek AI 和西北大学的一篇论文,题为 *“Let the Expert Stick to His Last” (让专家各司其职) *。研究人员提出了专家专用微调 (ESFT) , 这是一种尊重 MoE 稀疏特性的方法。通过识别并仅微调与特定任务相关的专家,ESFT 以全量微调的一小部分计算和存储成本,达到了与之相当的性能。

第一部分: 背景

要理解为什么 ESFT 是一项如此巧妙的创新,我们需要首先建立关于混合专家模型如何工作以及为什么标准微调对其效率低下的认知。

MoE 范式

在标准的 Transformer (稠密模型) 中,输入 Token 通过前馈网络 (FFN) 层,该层中的每个神经元都参与计算。

混合专家 (MoE) 模型中,这个单一的 FFN 层被一组多个较小的 FFN 所取代,这些 FFN 被称为“专家”。对于每个 Token,一个“路由器” (或门控) 决定哪些专家应该处理该工作负载。

第 \(l\) 层中第 \(t\) 个 Token 的输出隐藏状态 \(\mathbf{h}_t^l\) 计算如下:

方程 1: MoE 层中的输出隐藏状态计算。

这里,\(N\) 是专家的总数,\(g_{i,t}\) 是分配给 Token \(t\) 的专家 \(i\) 的门控值 (或权重) 。神奇之处在于门控函数。大多数门控值为零,这意味着大多数专家被忽略。路由器仅根据亲和度分数选择 Top-K 个专家。

门控决策逻辑如下所示:

方程 2: 决定哪些专家被激活的门控函数。

亲和度分数 \(s_{i,t}\) 通常源自应用于 Token 输入与专家质心 (代表专家的可学习向量) 点积的 Softmax 函数:

方程 3: Token 对专家亲和度分数的计算。

DeepSeek-V2 的独特之处: 细粒度专家

该论文利用了 DeepSeek-V2 架构,该架构引入了“细粒度”方法。DeepSeek-V2 不是像 Mixtral 8x7B 那样拥有 8 个巨大的专家,而是将 FFN 分割成许多更小的专家 (例如 162 个专家) 。

此外,它使用共享专家隔离 。 一些专家被指定为“共享的”,对每个 Token 始终处于激活状态,以捕获通用知识,而“非共享”专家则动态路由。

这种先进架构中的输出如下所示:

方程 5: DeepSeek-V2 架构中包含共享和非共享专家的输出计算。

在这个设置中,\(K_s\) 代表始终激活的共享专家,而路由器从非共享池中选择剩余的专家。

现有 PEFT 的问题

当我们对 MoE 模型使用像 LoRA 这样的方法时,我们通常会向所有线性层添加低秩矩阵,或者至少是所有专家。这有点浪费。如果下游任务 (比如解决数学问题) 只使用了 10% 的专家,我们为什么要更新其他 90% 的参数 (或学习适配器) 呢?

全参数微调 (FFT) 更糟糕。它更新模型中的每个权重。在 MoE 中,这意味着更新那些对目标任务几乎不活跃的专家,这可能会覆盖它们处理其他任务所需的专业知识 (这种现象被称为灾难性遗忘) 。

第二部分: 直觉——专家真的会专业化吗?

这篇论文的核心假设很简单: 在 MoE 模型中,不同的专家专注于不同的任务。

如果这是真的,我们就不需要重新训练整个大脑来教模型一项新技能;我们应该只将新信息发送给相关的专家。

研究人员进行了探测实验来验证这一点。他们将不同类型的数据 (数学、代码、法律、翻译等) 输入模型,并跟踪哪些专家被激活。

观察 1: 集中性

首先,他们查看了特定任务的路由分布。他们发现,对于任何给定任务,路由器的“注意力”是高度集中的。

图 2: 特定任务的顶级专家分布显示出高度集中性。

图 2 所示,一小部分专家捕获了绝大多数的门控值 (Y 轴) 。曲线急剧下降。这意味着对于像数学 (紫色线) 这样的任务,只有少数专家在挑大梁。

观察 2: 独特性

其次,他们检查了不同的任务是否使用不同的专家。他们可视化了跨任务的活跃专家重叠情况。

图 3: 显示不同任务间活跃专家重叠情况的热力图。

图 3 完美地展示了这一点。对角线 (自身对自身) 的值很高,意味着一个任务始终使用其自己的一组专家。然而,非对角线的值接近于零。“代码”使用的专家与“翻译”使用的专家几乎没有重叠。

这证实了“专家专业化”假设: 模型已经隐式地将自身组织成了专业化的模块。

第三部分: 方法——专家专用微调 (ESFT)

基于上述观察,作者提出了 ESFT。其工作流程简单而强大。

第一步: 数据采样

我们从下游任务的训练数据中抽取一小部分子集 (例如,如果我们为编码进行微调,则抽取几百行 Python 代码) 。作者发现,一个非常小的样本 (32 个长度为 4096 的序列) 在统计上足以确定专家的相关性。

第二步: 计算专家相关性

我们需要一个指标来对专家进行排名: “专家 X 对这个任务有多重要?”论文提出了两种评分方法。

方法 A: 平均门控分数 (ESFT-Gate) 这衡量了路由器激活的强度。如果路由器始终为某位专家分配高权重,它就会得到高分。

方程 9: 平均门控分数公式。

方法 B: Token 选中率 (ESFT-Token) 这简单地计算专家被选中的频率 (它是否在前 K 名中?) ,而不考虑门控幅度。

方程 10: Token 选中率公式。

第三步: 选择和微调

一旦每个专家在每一层都有一个分数,我们就选择排名靠前的专家,直到它们的累积分数超过阈值 \(p\) (一个超参数,例如覆盖前 20% 的重要性) 。

方程 11: 选择阈值条件。

最后,在训练期间:

  1. 解冻选定的专家。
  2. 冻结所有其他专家。
  3. 冻结共享专家 (通常情况下) 。
  4. 冻结其他模块 (注意力、路由器等) 。

然后我们使用标准的反向传播进行微调,但梯度只更新“专家级”的专家。

视觉对比

让我们看看 ESFT 在结构上与全参数微调 (FFT) 和 LoRA 有何不同。

图 1: FFT、LoRA 和 ESFT 架构之间的比较。

  • FFT (左) : 所有东西都是绿色的 (可训练) 。这计算量大且有遗忘风险。
  • LoRA (中) : 我们冻结蓝色块,但添加绿色旁路 (低秩矩阵) 。这节省了内存,但修改了所有数据的路径。
  • ESFT (右) : 我们查看 MoE 块内部。我们看到只有特定的专家 (例如专家 2 和专家 5) 是绿色的。路由器和其他专家保持冻结 (蓝色) 。这是“手术”而不是“补充”。

第四部分: 实验结果

这种精准手术真的有效吗?研究人员在 DeepSeek-V2-Lite (160 亿参数,约 20 亿激活) 上测试了 ESFT,涵盖两类任务:

  1. 增强: 改进现有技能 (数学、代码) 。
  2. 适配: 教授新的、狭窄的技能 (意图识别、法律判决、翻译) 。

性能 vs 基线

结果令人印象深刻。ESFT 始终优于 LoRA,并与全量微调相抗衡 (或击败) 。

表 1: 跨方法和任务的主要性能比较。

表 1 中,查看“Average” (平均) 列。

  • LoRA: 44.9
  • FFT: 51.0
  • ESFT-Gate: 50.2

尽管只微调了一小部分参数,ESFT 却达到了与微调整个模型相当的性能。在像“Intent” (意图) 识别这样的专门任务中,ESFT-Gate (78.6) 实际上与 FFT (78.8) 持平,并完胜 LoRA (67.8)。

“通用能力”红利

微调的最大风险之一是,通过针对任务 A 进行优化,模型在任务 B 上变得愚蠢。这正是 ESFT 大放异彩的地方。由于它保留了大多数专家 (那些与当前任务无关的专家) 不动,模型能更好地保持其通用能力。

论文显示,在通用基准测试 (MMLU、TriviaQA) 上,ESFT 的退化程度明显低于 FFT。

效率

PEFT 的主要目标是效率。ESFT 在这方面也表现出色。

图 5: 计算效率比较: 训练时间和存储。

图 5 可视化了成本:

  • 绿线 (存储) : FFT 需要巨大的存储空间 (右上角的点) 。ESFT (中间的点) 需要的存储空间少得多,徘徊在 LoRA 附近 (左下角) 。
  • 蓝柱 (时间) : ESFT 的训练速度比 FFT 快,因为需要计算和同步的梯度更少。

作者指出,与全量微调相比,ESFT 减少了高达 90% 的存储空间和 30% 的训练时间。

专家选择可视化

看到 ESFT 实际上选择了多少专家是很有趣的。它是微调了一半的模型?还是仅仅 1%?

图 4: 每个任务每层训练的专家数量热力图。

图 4 显示了不同任务 (Y 轴) 每层训练的专家数量 (X 轴) 。该模型每层有 64 个非共享专家。

  • 注意这些数字: 2, 4, 9, 12… 很少超过 15。
  • 这意味着 ESFT 通常只训练 5% 到 20% 的专家。
  • 有趣的是,像翻译 (最下面一行) 这样的专门任务需要的专家非常少 (深蓝色单元格) ,而像代码这样更广泛的任务则激活了更广泛的范围。

第五部分: 为什么它有效?粒度的重要性

研究人员深入挖掘以了解为什么 ESFT 对 DeepSeek-V2 如此有效。他们认为细粒度的专家是关键。

如果专家是“粗粒度”的 (大而少) ,每个专家就像一个通才,处理许多不同的主题。如果你冻结一个粗粒度专家,你可能会阻断必要的路径。如果你微调它,你可能会覆盖太多的知识。

但对于“细粒度”专家 (小而多) ,每个专家都可以高度专业化 (例如,一个专家只负责“Python 代码中的标点符号”) 。

为了证明这一点,他们通过将细粒度专家分组并强制它们作为一个单元被选中,来模拟粗粒度专家。

图 7: 随着专家变得更加粗粒度,性能下降。

图 7 显示了结果。X 轴代表“组大小” (使专家实际上变大/变粗) 。

  • 蓝/绿线 (性能) : 随着组大小的增加 (专家变得更粗) ,ESFT 的性能显著下降。
  • 橙线 (参数数量) : 同时,你必须微调的参数数量也在增加。

这带来了一个至关重要的见解: 像 ESFT 这样的稀疏特定微调策略是未来,但它们依赖于模型架构向更细粒度的方向演进。

结论

论文 “Let the Expert Stick to His Last” 为 LLM 定制的未来提供了一个令人信服的论述。它让我们摆脱了“训练一切”的暴力方法和“在所有东西上贴低秩适配器”的通用方法。

相反,它将 MoE 模型视为一组专业工具的集合。

  1. 为工作识别正确的工具 (使用 Gate 或 Token 分数) 。
  2. 仅磨砺那些工具 (微调选定的专家) 。
  3. 保持其余部分不变以保留通用能力。

对于学生和研究人员来说,关键要点很明确: 随着模型变得更加稀疏和模块化 (以应对规模化) ,我们的训练技术必须变得更加精准。ESFT 是一个极好的例子,说明了理解底层架构——特别是专家的专业化——如何带来既高效又高效能的方法。


这篇文章总结了 DeepSeek AI 的 Wang 等人的研究。所有图表和公式均源自原始论文。