Qwen2.5 大模型微调实践指南
1、基础概念
1.1、什么是微调(Fine-tuning)?
大模型微调,也称为 Fine-tuning,是指在已经预训练好的大型语言模型基础上(一般称为'基座模型'),使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。
经过预训练的基座模型其实已经可以完成很多通用任务,比如回答问题、总结数据、编写代码等。但是,并没有一个模型可以解决所有的问题,尤其是行业内的专业问答、关于某个组织自身的信息等,是通用大模型所无法触及的。在这种情况下,就需要使用特定的数据集,对合适的基座模型进行微调,以完成特定的任务、回答特定的问题等。
假设医院希望使用大模型来帮助医生从文本笔记生成患者报告或者辅助治疗。虽然通用模型能理解和创建一般文本,但它可能没有针对复杂的医学术语和特定医疗术语进行优化。这时医院可以用包含医疗报告和患者笔记的数据集上对模型进行微调,这样模型变得更加熟悉医学术语、临床语言的微妙之处和典型的报告结构,微调后的模型才有可能成为医生的好助手。
总的来说,需要微调是因为如下几点:
任务特定性能提升:预训练语言模型通过大规模的无监督训练学习了语言的统计模式和语义表示。然而它在特定任务下的效果可能并不令人满意。通过在任务特定的有标签数据上进行微调,模型可以进一步学习任务相关的特征和模式,从而提高性能。
领域适应性:预训练语言模型可能在不同领域的数据上表现不一致。通过在特定领域的有标签数据上进行微调,可以使模型更好地适应该领域的特殊术语、结构和语义,提高在该领域任务上的效果。
数据稀缺性:某些任务可能受制于数据的稀缺性,很难获得大规模的标签数据。监督微调可以通过使用有限的标签数据来训练模型,从而在数据有限的情况下取得较好的性能。
防止过拟合:在监督微调过程中,通过使用有标签数据进行有监督训练,可以减少模型在特定任务上的过拟合风险。这是因为监督微调过程中的有标签数据可以提供更具体的任务信号,有助于约束模型的学习,避免过多地拟合预训练过程中的无监督信号。
成本效益:与 prompt 提示相比,微调通常可以更有效且更高效地引导大型语言模型的行为。在一组示例上训练模型不仅可以缩短精心设计的 prompt,还可以节省宝贵的输入 token,同时不会牺牲质量。另外,你可以使用一个更小的模型,这反过来会降低延迟和推断的成本。例如,与 GPT-3.5 这类的现成模型相比,经过微调的 Llama 7B 模型在每个 token 基础上的成本效益更高,并且性能相当。
1.2、模型微调有哪些常见方法?
大模型微调的方法多样,随着技术的发展,涌现出越来越多的大语言模型,且模型参数越来越多。除了传统的 SFT(Supervised Fine-Tuning,有监督微调)外,还有 Adapter Tuning、PET、Prefix Tuning、P-Tuning、LoRA、QLoRA 等。这些方法各有优缺点,适用于不同的场景和需求。
例如,LoRA(Low-Rank Adaptation)和 QLoRA 是目前主流的大模型微调方法之一,它们通过冻结预训练模型的大部分参数,只微调一小部分额外的参数,从而避免灾难性遗忘,并且快速迁移到新的任务上。此外,还有 PEFT(Parameter-Efficient Fine-Tuning,参数高效调整)和 FFT(Full Fine-Tuning,全参数调整)两种微调方法,前者主要针对预训练模型中的某些部分参数进行调整,后者则是对所有层都参与微调。
本文侧重介绍下 SFT(有监督微调) 结合 LoRA 技术。
有监督微调意味着使用标记数据更新预先训练的语言模型来完成特定任务。所使用的数据已提前检查过。这与不检查数据的无监督方法不同。通常语言模型的初始训练是无监督的,但微调是有监督的。
接下来将介绍大模型微调具体流程:
- 数据准备:有许多开源数据集可以提供关于用户行为和偏好的洞察,即使它们没有直接格式化为指令性数据。例如,我们可以利用亚马逊产品评论的大量数据集,将其转化为微调的指令提示数据集。提示模板库包含了许多针对不同任务和不同数据集的模板。
- 执行微调:将数据集分为训练、验证和测试部分。在微调过程中,你会从训练数据集中选择提示,并将它们传递给 LLM,然后模型会生成完整的文本。
- 具体来说,当模型接触到针对目标任务的新标记数据集时,它会计算其预测与实际标签之间的误差或差异。
- 然后,模型使用这个误差来调整其权重,通常通过梯度下降等优化算法。
- 权重调整的幅度和方向取决于梯度,梯度指示了每个权重对误差的贡献程度。对误差贡献更大的权重会被更多地调整,而贡献较小的则调整较少。
- 迭代调整:在数据集的多次迭代(或称为周期)中,模型继续调整其权重,逐渐找到一种配置,以最小化特定任务的误差。目标是将之前学到的一般知识适应到新数据集中的细微差别和特定模式,从而使模型在目标任务上更加专业化和有效。
- 模型更新:在这个过程中,模型会根据标记数据进行更新。它根据其猜测与实际答案之间的差异进行改变。这有助于模型学习标记数据中的细节。通过这样做,模型在微调的任务上的表现会得到提升。


