预训练技巧:在训练末尾对领域数据上采样
1. 简介
- 介绍了一种在模型训练结尾对领域数据上采样能够提升在benchmark上的指标。
- 通过实验表明上采样比例在10-20%是能够在通用语言能力与目标benchmark保持权衡的最好比例。
2. 实验
- 数据:1T
- 模型:decoder-only结构,7B大小,具体模型参数如下:
3. 结果
3.1 baseline data mix
* Large-Scale Common Crawl:包含大量及多样性的数据。
* Small-Scale Common Crawl:经过严格过滤的数据,质量更高,但数据量更少。
* Domain Specific data:领域数据或某种高质量来源数据(eg. Wikipedia)
* Code:涉及不同的编程语言。
- 没经过过多的优化,通过启发式方法得到一个初始的数据比例,训练了两个7B模型,分别用0.5T和1T数据训练。实验效果如下所示:
3.2 Domain upsampling significantly boosts performance
- 为了验证domain upsampling的有效性,将在1T tokens训练阶段的剩余20%作为训练结尾,用0.8T数据训练模型并保存checkpoint,然后改变剩余0.2T数据的配比并continue pretrain。具体的数据配比如下图所示:
- 在continue pretrain数据的配比中,删除了large-scale common crawl dataset,虽然large-scale common dataset数据多样性比较好,但为了增加领域数据的信息密度,只好删除。但同时会保证small-scale common crawl数据的高比例,以免训练数据分布有大的偏移。
- 实验结果:
在训练末尾增加code和domain数据不仅能够提升code和domain benchmark上的效果,同时也不会损失通用语言模型能力,事实上,不仅不会损失,还会提升通用能力。
3.3 Changing the duration of domain upsampling enables us to navigate the trade-off between targeting specific domains and general purpose language models
- 在数学和代码相关的benchmark上,流入HumanEval,GSM8K及Gauntlet v0.3会随着domain upsampling比例增加效果一直提升;
- 其他benchmark上最佳指标是比例在20%或更少。
3.4 Domain upsampling is a FLOP-efficient tool to characterize how individual datasets impact model capabilities
- 通过domain upsampling的方式可以很好的将模型因为数据的改进归因于某个子集。如上图所示,在增加或删除数学相关数据集后可以对比二者之间的表现发现,这些特定的数据集负责base模型和上采样变体模型中的大部分数学知识和推理能力。
- 通过domain upsampling方式,可以在少量的training FLOPS的基础上实验一些消融实验。
4. 小结
- domain upsampling能够很好的提升模型在各个benchmark上的效果,同时最佳的比例是20%左右;
- 通过domain upsampling可以用少量的training FLOPS验证一些实验,比如说数据配比,某个domain dataset对模型的影响等。
如果本文对读者有帮助的话,辛苦一键三连。
参考文献
- [1] Does your data spark joy? Performance gains from domain upsampling at the end of trainin