- 论文:https://arxiv.org/pdf/2408.06663
- 代码:未开源
- 机构:约翰霍普金斯大学
- 领域:预训练与微调的关系
- 发表:arXiv
这篇论文详细地分析了大型语言模型(LLMs)在预训练(pre-training)和微调(fine-tuning)阶段的性能变化和它们之间的相互关系。
Abstract
- 研究目的:探索预训练与微调之间的关系,特别是它们是如何共同影响模型最终性能的。
- 研究方法:通过在18个数据集上微调多个预训练模型的中间检查点来进行实验分析。
- 主要发现:
- 持续的预训练能够在微调后以一种不明显的方式提升模型性能。
这句话的意思是,在大型语言模型(LLMs)的预训练阶段,即使模型在预训练过程中对某些任务的性能提升不明显,持续进行预训练仍然可以在后续的微调阶段带来潜在的性能提升。换句话说,预训练阶段的持续训练可能在当下看起来效果不大,但这些训练所获得的知识或能力会在模型针对特定任务进行微调时显现出来,从而提高模型在这些任务上的表现。
具体来说,这种提升可能表现在以下几个方面:
知识深度:预训练阶段让模型接触到更多的语言数据和模式,这可能加深了模型对语言知识的理解,即使这种理解在预训练阶段并未直接转化为性能提升。
潜在能力:模型可能在预训练过程中学习到了一些潜在的能力,这些能力在预训练阶段没有被激活或测试,但在微调时,当模型针对特定任务进行训练,这些潜在能力就被激发出来了。
泛化能力:持续的预训练可能增强了模型的泛化能力,使其在面对未见过的数据或任务时,能够更好地调整和适应,这种能力在微调时尤其重要。
微调效果:在微调阶段,模型需要调整其参数以适应特定的任务。如果模型在预训练阶段已经积累了丰富的知识,那么在微调时,这些知识可以作为基础,帮助模型更快地学习任务相关的特定特征,从而提升性能。
论文中的这一发现强调了预训练阶段的重要性,即使在预训练过程中看不到直接的性能提升,也不应该忽视其对模型长期学习和适应能力的潜在贡献。
- 微调对于那些在预训练阶段模型表现不佳的数据集提升更大。
- 监督式微调虽然能显著提升特定任务的性能,但可能导致模型忘记之前学到的领域知识或未在微调中见过的任务。
- 微调后的模型对评估提示非常敏感,但这种敏感性可以通过更多的预训练来降低。
Introduction
- 背景:介绍了大型语言模型的发展和它们在自然语言处理任务中的应用。
- 研究动机:尽管当前的研究集中在改善预训练和微调的各自阶段,但对这两个阶段如何相互作用的理解仍然有限。
Model Training
- 预训练:讨论了预训练的基本过程,包括使用大规模文本语料库和模型架构的改进。
- 微调:介绍了微调的不同形式,包括监督式微调和指令式微调,以及它们如何影响模型的行为。
- 上下文学习:讨论了上下文学习的概念,即模型如何使用少量监督数据来提升性能。
Experimental Setup
- 模型选择:选择了OLMo-1B模型,因为它是少数公开中间预训练检查点的模型之一。
- 训练过程:详细描述了微调过程,包括使用的超参数、批次大小和学习率。
- 评估方法:解释了如何评估模型在不同数据集上的性能,包括使用准确率和ROUGE-L等指标。
预训练对模型变化的影响(How does the model change across pre-training?)
- 性能评估:针对大模型在预训练过程中的checkpoints,进行下游任务zero-shot或few-shot测试,通过在不同预训练步骤上评估模型,来观察模型性能的变化。
- 发现:一些任务在预训练的早期阶段就显示出明显的性能提升,但随后趋于稳定;而另一些任务在整个预训练过程中性能保持不变。如上图可以发现,大模型随着训练步数的增加,并不是所有任务数据的效果会随之提高,部分任务数据在整个预训练过程中,基本没有变化(预训练没有学习过)。效果提高的任务数据,也主要在训练前期提高较多,后期趋于平稳。
模型在预训练过程中,更多在学习知识,即使学习更多,可能也不会使用。
预训练是否改善微调(Does more pre-training improve fine-tuning?)
- 在预训练时表现较好的任务数据,在微调过程中并不会得到改善,即在预训练过程中已经获取了知识信息,微调没有很大帮助。
- 在预训练阶段表现不好的任务数据,微调模型的每个checkpoint都会有明显的改善,微调收益先增加再平稳。
监督微调:模型学到了什么,忘记了什么?(Supervised Fine-Tuning: What does the model learn and forget?)
- 任务格式:使用三种任务格式(默认格式、IO格式、Intruct格式)验证大模型在不同checkpoint上的性能。发现在预训练早期,微调格式与预训练格式一致可以获取更好的效果,随着预训练步数增加,大模型对格式的敏感性会随之下降,可以变的更加灵活。微调阶段可以教会大模型去适应任务格式。
- 任务迁移:很多研究已经发现模型微调会导致某些任务的改进,但另一些任务的退化。通过实验发现,在生成任务上微调,在其他生成任务和分类任务上验证基本无下降;在分类任务上微调,在其他分类任务上无下降,但在生成任务上有明显下降。
- 领域知识:模型在学习其他能力之后,是否一定会遗忘微调之前拥有的领域知识。如下图所示,对于不同任务的结论不一致,所有NLI数据在MNLI上微调后,都会得到提高;但在Paws微调后,其他释义检测数据集均有下降。意味着遗忘和学习都发生。
Conclusion
主要发现可以总结为:
1. 一些在预训练中学习过的任务随着预训练的step数目提升在测试时显示出明显的性能提升,但随后趋于稳定;而一些在预训练中没有学习过的任务随着预训练的step数目提升在测试时性能仍旧保持不变。
2. 在预训练时表现较好的任务数据,在微调过程中并不会得到改善,即在预训练过程中已经获取了知识信息,微调没有很大帮助。在预训练阶段表现不好的任务数据,微调模型的每个checkpoint都会有明显的改善,微调收益先增加再平稳。
3. 在预训练早期,微调格式与预训练格式一致可以获取更好的效果,随着预训练步数增加,大模型对格式的敏感性会随之下降,可以变的更加灵活。微调阶段可以教会大模型去适应任务格式
4. 在生成任务上微调,在其他生成任务和分类任务上验证基本无下降;在分类任务上微调,在其他分类任务上无下降,但在生成任务上有明显下降。
Limitations
- 计算资源:由于资源限制,只能在较小的模型和有限的数据集上进行实验。
- 预训练检查点的可用性:公开的预训练检查点有限,这限制了研究的范围。
- 模型扩展性:研究没有涉及到更大规模模型可能表现出的“突现能力”。
- 分析协议:使用了单一的评估协议,可能无法全面反映模型的内部工作机制。
- 训练范式:研究只探索了全参数微调,未考虑参数高效的微调或基于人类偏好的微调。
整体来看,这篇论文通过在多个数据集上对大型语言模型的预训练和微调过程进行细致的研究,提供了对于如何更有效地训练和利用这些模型的深刻见解。论文的发现对于模型训练、多任务学习以及模型的可解释性都有重要的启示。