在大语言模型 (LLM) 的世界里,有监督微调 (SFT) 是将预训练基础模型适配到特定任务 (无论是数学推理、编程还是遵循指令) 的标准流程。普遍共识是,只要我们打乱训练数据并运行足够的 epoch,模型就能有效地学习。

但是,如果模型看到数据的顺序比我们要以为的重要得多呢?如果在训练最开始看到的样本,其学习效果始终比后来的样本“差”,从而在模型性能中造成了隐性的不平衡,会怎么样?

一篇题为 “Mitigating Training Imbalance in LLM Fine-Tuning via Selective Parameter Merging” 的近期论文揭示了这一现象。研究人员证明,数据排序会导致显著的训练不平衡。更重要的是,他们提出了一种新颖的解决方案: 不是训练一个模型,而是训练多个具有不同数据顺序的变体并将它们合并。然而,他们并没有简单地对权重进行平均。他们引入了一种称为 参数选择合并 (Parameter-Selection Merging) 的新技术,通过构建最佳参数的“马赛克”拼图,其表现优于传统的合并方法。

在这篇深度文章中,我们将探讨训练不平衡问题、参数选择合并背后的数学原理,以及验证这种新方法的实验结果。

隐形的问题: 训练不平衡

在训练神经网络时,我们通常假设数据样本在训练队列中的具体位置在经过几个随机梯度下降 (SGD) epoch 后变得无关紧要。我们会打乱数据集,分批处理,并假设模型会平均化学习信号。

然而,这篇论文的作者进行了一项初步调查,挑战了这一假设。他们追踪了第一轮 (epoch) 中训练样本的位置与其训练完成后最终损失值之间的关系。

结果如下图 1 所示,令人震惊。

图 1: 第一轮 epoch 中训练样本位置对这些样本最终模型损失 (训练 3 个 epoch 后) 的影响。面板 (a) 和 (b) 分别展示了 GSM8k 和 Alpaca 任务的结果。面板 (c) 和 (d) 展示了不同训练顺序的多次实验的对应结果。

让我们来分析一下图 1 告诉了我们什么:

  • 面板 (a) 和 (b): X 轴代表样本在第一轮 epoch 中的位置 (从开始到结束) 。Y 轴代表这些特定样本在训练结束后 (3 个 epoch) 的损失 (误差) 。这里有一个明显的下降趋势。出现在第一轮早期的样本,其最终损失始终高于出现在后期的样本。
  • 面板 (c) 和 (d): 这并非巧合。当使用不同的随机顺序重复实验时 (由不同颜色表示) ,这种模式依然存在。早期的样本始终具有更高的损失。

这种现象表明存在 训练不平衡 。 模型对它最先看到的数据存在偏见。如果您最关键的指令微调示例恰好落在前几个批次中,无论您随后运行多少个 epoch,您的模型在这些特定类型的查询上的表现可能会明显不佳。

解决方案: 合并多样化模型

如果数据顺序会产生偏差,我们该如何修复它?我们不能简单地把“所有东西都放在最后”。作者提出了一种基于 模型合并 (Model Merging) 的解决方案。

核心思想很简单:

  1. 将您的数据集打乱成 \(K\) 个不同的随机顺序。
  2. 微调 \(K\) 个独立的模型 (从同一个预训练基础模型开始) ,每个模型使用其中一个特定的数据顺序。
  3. 将这 \(K\) 个模型合并为一个最终模型。

通过使用不同的排列进行多次训练,在模型 A 中出现得“早” (因此学习效果差) 的样本,可能在模型 B 中出现得“晚” (因此学习效果好) 。通过合并它们,我们希望平滑这些位置偏差。

然而,我们合并这些模型的方式至关重要。

传统方法: 加权平均合并

合并模型的标准方法——常见于 Model Soups (模型汤) 或联邦学习等技术中——是 加权平均合并 (Weighted-Average Merging)

想象您有两个模型。要合并它们,您取模型 1 中某个特定参数的值,加上模型 2 中对应的参数值,然后除以二。您需要对神经网络中的每一个参数 (可能有数十亿个) 都这样做。

在数学上,如果我们有 \(K\) 个子模型,且 \(w_i\) 是分配给第 \(i\) 个模型的权重 (重要性) ,则任何维度 \(j\) 的合并参数计算如下:

()\n\\theta _ { \\mathrm { m e r g e d } , j } = \\sum _ { i = 1 } ^ { K } w _ { i } \\theta _ { \\mathrm { i , j } } , \\forall j \\in { 1 , \\dots , d }\n[

虽然这种方法在降低方差方面效果尚可,但它创建的是一个“混合”模型。它将参数值拉向均值。作者认为这可能不是最佳方案。如果模型 A 为某个特定特征找到了完美的参数值,而模型 B 没有很好地学习该特征,将它们平均化只会稀释模型 A 的成功。

创新点: 参数选择合并

研究人员引入了 参数选择合并 (Parameter-Selection Merging) 。 这种方法不是平均参数,而是充当选择器的角色。对于模型中的每一个参数维度,它查看 \(K\) 个微调子模型的可用值池,并挑选一个

这是一个随机过程。合并后的参数被设置为第 \(i\) 个子模型值的概率为 \(p_i\):

]\n\\theta _ { \\mathrm { m e r g e d } , j } = \\theta _ { i , j } \\mathrm { w i t h } p _ { i } , \\forall j \\in { 1 , \\dots , d }\n[

由于所有子模型都在相同的数据上训练 (只是顺序不同) ,假设它们的平均表现相同。因此,概率通常设为均匀分布 (\(p_i = 1/K\)) 。

为什么这种方法更好? 把加权平均想象成混合颜料;如果你混合红色和蓝色,你会得到紫色。如果红色是正确答案,那你现在就错了。参数选择就像马赛克拼图;你保留独特的红色瓷砖或蓝色瓷砖。通过选择离散的参数,该方法保留了特定模型在该参数中编码的特定“知识”,而不是将其模糊化。

图 2 提供了两种工作流程的直观比较。

图 2: 加权平均法与所提出的参数选择法的图解比较。加权平均合并计算每个参数维度上所有子模型参数的加权和,而参数选择合并则从单个子模型中选择参数。在重采样模块中,等于基础模型参数的参数会被替换为来自其他模型的参数。

如图所示,加权平均法创建了一种混合体 (由渐变色表示) 。参数选择法创建了一个组合矩阵,其中每个单元格都清晰地来自某个源模型 (蓝色、粉色或青色) 。

增强方法: 重采样策略

作者发现了随机选择过程中的一个潜在弱点。如果选择器选中的参数来自一个在该特定特征上实际上没有学到任何东西的模型,该怎么办?

在微调中,我们经常查看 任务向量 (Task Vector) (\(\tau\))。任务向量是微调后的权重 (\(\theta_{SFT}\)) 与原始预训练权重 (\(\theta_{pre}\)) 之间的差值: () \tau = \theta_{SFT} - \theta_{pre} ] 如果 \(\tau_{i,j} = 0\),这意味着微调过程根本没有改变该模型的该参数。如果我们的随机选择选中了这个“未改变”的参数,我们就错失了使用另一个确实学到了东西 (即 \(\tau \neq 0\)) 的模型的参数的机会。

为了解决这个问题,作者引入了 重采样策略

如果选中的参数其任务向量为 0 (意味着没有发生变化) ,算法会丢弃它并从子模型池中重新采样。这个过程可以重复 \(n\) 次,直到找到一个“已改变”的参数或次数用尽。

这种递归选择的公式如下:

()\n\\theta _ { \\mathrm { m e r g e d } , j } ^ { ( n ) } = \\left{ { \\theta _ { i , j } } \\atop { \\theta _ { \\mathrm { m e r g e d } , j } ^ { ( n - 1 ) } } \\right. \\left. { \\mathrm { i f } } \\ \\tau _ { i , j } \\neq 0 { \\mathrm { o r } } \\ n = 0 , \\right.\n()

这确保了最终的合并模型密集地填充了实际适应了任务的参数,最大化了子模型集成带来的信息增益。

实验结果

理论听起来很扎实,但它能转化为更好的性能吗?研究人员使用 Llama-2-7b 作为基础模型,在几个主流 LLM 基准上对此进行了测试。他们考察了指令遵循 (Alpaca) 、数学推理 (GSM8K, MATH) 和编程 (HumanEval) 。

1. 优于单一 SFT 和加权平均

表 1 总结了主要结果。

表 1: 基于 Llama-2-7b 的加权平均和参数选择合并的性能比较。“weighted-avg” 表示加权平均,“param-selection” 表示参数选择合并方法。

表 1 的关键要点:

  • 合并优于单一 SFT: 简单地合并多个模型 (即使是加权平均) 也优于单一微调模型。例如,使用加权平均,GSM8K 的准确率从 41.29% 提升到了 44.35%。
  • 选择优于平均: 所提出的 param-selection (参数选择) 方法在几乎所有指标上都优于加权平均。
  • 重采样是关键: 当加入重采样策略 (标记为 + resample) 时,性能达到顶峰。在 GSM8K 上,准确率达到 45.26% , 比单一 SFT 基准的 41.29% 有了巨大的提升。

2. 模型大小重要吗?

人们可能会想,这种效应是否仅限于 70 亿参数的模型。作者将实验扩展到了不同大小的模型,范围从 BERT-base (0.11b) 到 TinyLlama (1.1b) 和 Llama-2 (7b)。

表 2: 不同大小的预训练模型中,单一 SFT 模型与合并模型的性能比较。

表 2 显示了一个有趣的趋势。虽然该方法对所有尺寸都有效,但 平均增量 (Average Delta) (提升幅度) 随着模型尺寸的增加而增加。

  • BERT-base 平均提升了 +0.75 分。
  • Llama-2-7b 平均提升了 +2.11 分。

这表明参数选择合并特别具有可扩展性,并且对于我们今天使用的大规模语言模型特别有益。

3. 分析“原因”: 损失可视化

为了验证合并过程确实解决了最初的“训练不平衡”问题 (即早期样本损失高) ,作者绘制了合并模型的损失与样本位置的关系图。

图 3: 不同模型的训练损失比较,以锚点模型的第一轮 epoch 样本位置为 X 轴。绿线代表锚点模型的最终训练损失;蓝色 \\(\\mathbf { \\epsilon } ^ { \\star } \\mathbf { x } ^ { \\star }\\) 标记表示使用不同数据顺序训练的 SFT 模型的损失;红点显示合并模型的损失。

在图 3 中,绿线代表“锚点模型” (单一 SFT 运行) 。它显示了前面讨论的高方差和位置偏差。 红点代表合并模型。请注意,红点始终低于绿线的峰值,并且不显示与数据位置的相关性。合并过程成功地平滑了位置劣势。

此外,这种改进不仅仅体现在训练集上。图 4 显示了训练步骤中的验证损失 (在未见过的数据上的表现) 。

图 4: 单一 SFT 模型与合并模型在不同训练步骤下的验证损失比较。

在整个训练过程中,合并模型 (红线) 始终保持比单一模型 (蓝线) 更低的损失。这证明了该方法提高了泛化能力,而不仅仅是记忆能力。

4. 消融研究: 是位置还是批次组合?

怀疑论者可能会争辩: “当你打乱数据时,你不仅改变了位置 (早期 vs 晚期) ,你也改变了哪些样本在同一个批次 (batch) 中一起出现。” 也许改进来自于更好的批次多样性?

作者预见到了这一点。他们进行了一项消融研究,固定了批次内的样本组合,但改变了这些批次输入模型的顺序。

表 4: 标准合并模型与具有固定批次内组合的模型的性能比较。

如表 4 所示,“固定批次内组合”模型的性能与标准重采样模型几乎相同。这证实了 数据的位置 (顺序) 确实是导致训练不平衡的主要因素,而纠正它正是性能提升的来源。

实现细节

对于那些有兴趣复现这些结果的人,论文提供了详细的超参数。对于主要的 LLM 实验 (Llama-2) ,他们使用了标准的学习率和批次大小,如下所示。

表 6: 在 LLM 任务上训练 Llama-2-7b 的超参数。

对于较小的传统模型 (BERT, TinyLlama) ,设置进行了相应的调整:

表 5: 在传统任务上训练模型的超参数。

结论与未来启示

这项研究强调了训练深度学习模型中一个至关重要但经常被忽视的方面: 数据顺序很重要。 “训练不平衡”现象表明,在微调过程中较早看到的样本处于劣势,导致最终模型并未达到最优。

所提出的解决方案, 参数选择合并 , 为标准的加权平均提供了一个引人注目的替代方案。通过将模型参数视为选择池而不是数学平均值,并通过智能重采样来避免未改变的参数,我们可以构建一个结合了多次训练运行中最佳学习特征的“超级模型”。

关键要点:

  1. 不要相信单一随机种子: 单次训练运行会受到其数据顺序的偏差影响。
  2. 选择,而不是平均: 当合并在相同数据上训练的相同架构时,随机选择比平均能更好地保留独特信息。
  3. 重采样增加价值: 在选择参数之前检查它是否实际发生了变化 (任务向量 \(\neq\) 0) 是一个简单的启发式方法,可以显著提升性能。

随着 LLM 规模持续增长和数据获取成本的上升,像这样能在不需要新数据集的情况下从现有数据和模型中榨取更多性能的技术,将成为 AI 工程师工具箱中日益重要的工具。