现代指令调优的大型语言模型(LLM)在代码生成方面取得了显著进展。

然而,这些使用标准监督微调(SFT)进行微调的 LLM 有时会生成看起来合理但功能不正确的代码变体。

这个问题可能源于标准 SFT 的局限性,它在优化过程中平等地对待所有令牌,而未能强调错误敏感片段——正确实现和类似的不正确变体之间的特定代码差异

为了解决这个问题,我们提出了一种新颖的微调技术,称为 $\underline{F}ault-\underline{G}uided F\underline{i}ne-\underline{T}uning (FGit)(故障引导微调)$,它通过以下方式增强 LLM 的代码生成能力:
(1)提取正确和不正确但相似的实现之间的多粒度(行/令牌级别)差异,以识别错误敏感片段;
(2)通过动态损失加权在训练期间动态地优先考虑这些片段。

通过在三个广泛使用的基准测试中对七个 LLM 进行的大量实验,我们的方法在 pass@1 上实现了平均 6.9% 的相对改进,一些增强的 6.7B LLM 优于闭源模型,例如 GPT-3.5-Turbo。此外,我们的微调技术表现出强大的泛化能力,在不同的指令调优 LLM 中性能提升范围从 3.8% 到 19.1%,并且我们的消融研究证实了不同粒度的差异和超参数的贡献。


1. 指令调优 (Instruction Tuning)

  • 核心概念: 指令调优是一种训练大型语言模型 (LLM) 的方法,旨在使模型更好地遵循人类给出的指令。
    • 指令 (Instruction): 指的是用自然语言描述的任务或要求,例如 “写一段 Python 代码来计算斐波那契数列”、”将这段英文翻译成中文”、”总结这篇文章的要点” 等。
    • 调优 (Tuning): 指的是在预训练模型的基础上,使用特定数据集进行微调,以使其适应特定任务。
  • 工作方式:
    1. 构建指令数据集: 收集或生成包含大量指令和对应输出的数据集。这些指令应该覆盖各种不同的任务和领域。
    2. 微调 LLM: 使用指令数据集对预训练的 LLM 进行微调。在训练过程中,模型学习如何将指令映射到正确的输出。
  • 优势:
    • 更好的泛化能力: 指令调优可以提高 LLM 在未见过的任务上的泛化能力,使其能够更好地理解和执行各种不同的指令。
    • 更强的可控性: 指令调优可以使 LLM 更好地遵循人类的意图,从而提高模型的可控性和可靠性。
  • 在文中的含义: 论文研究的是经过指令调优的 LLM 在代码生成方面的表现。

简单比喻: 就像训练一个学生,不仅要让他学习书本上的知识(预训练),还要教他如何理解和完成老师布置的各种作业(指令调优)。


2. 标准监督微调 (Standard Supervised Fine-tuning, SFT)

  • 核心概念: 标准监督微调是一种常见的微调 LLM 的方法,它使用带有标签的数据集,通过监督学习的方式来调整模型的参数。
    • 监督学习 (Supervised Learning): 指的是使用带有输入和输出标签的数据集来训练模型。模型学习如何将输入映射到正确的输出。
    • 标准 (Standard): 指的是一种常用的、没有特殊优化的微调方法。
  • 工作方式:
    1. 构建数据集: 收集或生成包含输入和输出标签的数据集。例如,在代码生成任务中,输入可以是自然语言描述的任务,输出可以是对应的代码。
    2. 微调 LLM: 使用数据集对预训练的 LLM 进行微调。在训练过程中,模型根据数据集中的标签来调整参数,以最小化预测输出和真实输出之间的差异。
  • 局限性:
    • 平等对待所有令牌: 标准 SFT 在训练过程中平等地对待所有令牌,没有区分哪些令牌更重要或更敏感。这可能会导致模型难以学习到关键的特征。
  • 在文中的含义: 论文指出,使用标准 SFT 进行微调的 LLM 在代码生成时,有时会生成看起来合理但功能不正确的代码。

简单比喻: 就像教一个学生做题,只告诉他正确答案是什么,而不告诉他哪些步骤是关键的,哪些步骤容易出错。


3. 动态损失加权 (Dynamic Loss Weighting)

  • 核心概念: 动态损失加权是一种在训练过程中根据不同样本或不同部分的样本的重要性来调整损失函数权重的方法。
    • 损失函数 (Loss Function): 用于衡量模型预测输出和真实输出之间差异的函数。
    • 权重 (Weighting): 指的是对不同样本或不同部分的样本的损失值进行加权,以调整它们在训练过程中的重要性。
    • 动态 (Dynamic): 指的是权重不是固定不变的,而是随着训练的进行而动态调整的。
  • 工作方式:
    1. 确定权重: 根据某种策略,为不同的样本或不同部分的样本分配不同的权重。例如,可以为更难的样本或更重要的部分分配更高的权重。
    2. 调整损失函数: 将权重应用到损失函数中,使得模型更加关注那些被赋予更高权重的样本或部分。
    3. 动态调整: 随着训练的进行,根据模型的表现或其他因素,动态地调整权重。
  • 优势:
    • 提高模型性能: 动态损失加权可以使模型更加关注重要的样本或部分,从而提高模型的性能。
    • 解决数据不平衡问题: 动态损失加权可以用于解决数据不平衡问题,例如,可以为少数类样本分配更高的权重,以防止模型偏向多数类。
  • 在文中的含义: 论文提出的 FGIT 方法使用动态损失加权来优先考虑代码中错误敏感的片段,使得模型在训练过程中更加关注这些片段,从而提高代码生成的准确性。

简单比喻: 就像教一个学生做题,不仅告诉他正确答案是什么,还告诉他哪些步骤是关键的,哪些步骤容易出错,并且在批改作业时,对关键步骤的错误给予更高的惩罚,以促使他更加重视这些步骤。


http://example.com/posts/46.html
作者
司马吴空
发布于
2026年3月30日
许可协议