一、概念解析
1、什么是微调(Fine-tuning)?
大模型微调,也称为Fine-tuning,是指在已经预训练好的大型语言模型基础上(一般称为“基座模型”),使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。
经过预训练的基座模型其实已经可以完成很多任务,比如回答问题、总结数据、编写代码等。但是,并没有一个模型可以解决所有的问题,尤其是行业内的专业问答、关于某个组织自身的信息等,是通用大模型所无法触及的。在这种情况下,就需要使用特定的数据集,对合适的基座模型进行微调,以完成特定的任务、回答特定的问题等。在这种情况下,微调就成了重要的手段。
解析大语言模型训练三阶段这篇文章可以看到,得益于ChatGPT的成功,目前大模型微调一般可以分为SFT(有监督的微调,Supervised-Finetuning)和RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedback)。在实际应用中,由于大模型的参数量非常大,训练成本非常高,因此通常不会从头开始训练一个全新的模型,而是选择在预训练模型的基础上进行微调,这样不仅可以节省大量的时间和资源,还能快速迁移到新的任务上。
为了方便大家更好地理解微调的概念,下面有两个例子:
- 例1:情感分类
假设我们正在构建一个模型,用于判断电影评论是积极的还是消极的。我们可以先使用大量的语料库(比如维基百科)预训练一个模型,使其学会基本的语法和单词的语义。然后,我们收集一些标注过的电影评论,其中一部分评论是积极的,一部分评论是消极的。我们再在这些评论上继续训练模型,使其学会判断评论的情感。这就是一个fine-tuning的过程。
- 例2:图像分类
假设我们正在构建一个模型,用于识别猫和狗的图片。我们可以先使用大量的图片(比如imageNet数据集)预训练一个模型,使其学会识别图片中的基本形状和纹理。然后,我们收集一些标注过的图片,其中一部分圈片是猫,一部分图片是狗。我们再在这些图片上继续训练模型,使其学会区分猫和狗。这也是一个fine-tuning的过程。
这两个例子都展示了fine-tuning的基本步骤:首先在大量的数据上预训练一个模型,然后在特定的任务数据上继续训练模型。
2、为什么需要微调?
大语言模型为什么要微调的原因主要包括以下几点:
- 任务特定性能提升:预训练语言模型通过大规模的无监督训练学习了语言的统计模式和语义表示。然而它在特定任务下的效果可能并不令人满意。通过在任务特定的有标签数据上进行微调,模型可以进一步学习任务相关的特征和模式,从而提高性能。
- 领域适应性:预训练语言模型可能在不同领域的数据上表现不一致。通过在特定领域的有标签数据上进行微调,可以使模型更好地适应该领域的特殊术语、结构和语义,提高在该领域任务上的效果。
- 数据稀缺性:某些任务可能受制于数据的稀缺性,很难获得大规模的标签数据。监督微调可以通过使用有限的标签数据来训练模型,从而在数据有限的情况下取得较好的性能。
- 防止过拟合:在监督微调过程中,通过使用有标签数据进行有监督训练,可以减少模型在特定任务上的过拟合风险。这是因为监督微调过程中的有标签数据可以提供更具体的任务信号,有助于约束模型的学习,避免过多地拟合预训练过程中的无监督信号。
- 成本效益:与prompt提示相比,微调通常可以更有效且更高效地引导大型语言模型的行为。在一组示例上训练模型不仅可以缩短精心设计的prompt,还可以节省宝贵的输入token,同时不会牺牲质量。另外,你可以使用一个更小的模型,这反过来会降低延迟和推断的成本。例如,与GPT-3.5这类的现成模型相比,经过微调的Llama 7B模型在每个token基础上的成本效益更高(约为50倍),并且性能相当。