参考Yi、InternLM2和XVERSE和大家一起分享一下上述3个开源工作的预训练方式。

1 InternLM2

1.1 model size and parameters

模型包括1.8B、7B和20B三个规模,训练数据大于2T Tokens,采用AdamW优化器,其参数设置为β1、β2和ϵ分别为0.9、0.95和1e−8,权重衰减为0.1,采用余弦学习率衰减策略,下降到其最大值的10%。

1.2 预训练方式

模型的预训练方式分为3部分:4k预训练、32k预训练、特定数据预训练。

  • 4k长度数据训练:约90%的训练步数属于该阶段,模型的最大输入长度为4096,如果数据超长采用强制截断处理。
  • 32k长度数据训练:约9%的训练步数属于该阶段,模型的最大输入长度为32K,但并不是所有数据都是32K数据,大概50%的数据依然为4K长度。在模型训练期间,将旋转位置编码的基数由50000调整到1000000。
  • 特定能力数据训练:该阶段主要利用一些STEM数据、领域数据、高质量数据进行模型训练,总计24B Tokens,详细如下表所示,为了防止数据泄漏,去除了评测榜中的评测集数据,同时为了更好地适应这些数据,采用了更小的学习率和更大的批次。增强后的模型在代码、推理、问答和考试等任务上具有显著地提升。

2 Yi

2.1 model / parameters

2.2 预训练方式

模型的预训练方式分为3部分:4k预训练,200k长上下文预训练

  • 3.1T tokens进行4k的预训练
  • 5B的200k上下文预训练

2.3 深度扩展

参考SOLAR 10.7B模型对Yi-6B模型进行深度扩展,将原来的32层扩展到48层,构建Yi-9B模型。在具体层的选择时,通过评估每一层输入和输出直接的余弦相似度得出,如下图所示,余弦相似度越接近于1,则表明复制这些层不会显著改变原始模型输出的logits,因此选择复制原始模型中间12-28的16个层。

采用两阶段训练

  • 第一阶段使用了0.4T数据(包含文本和代码),数据配比与Yi-6B模型一样;
  • 第二阶段使用了0.4T数据(包含文本、代码和数学),重点增加了代码与数学数据的比例,以提高代码性能。

扩展后模型性能:

3 元象

3.1 预训练方式

模型的预训练方式分为3部分:8K预训练,32K预训练,128K微调。

  • 8K长度预训练
  • 32K预训练:使用ABF+继续预训练的方法,将XVERSE-13B的序列长度从8K拓展到32K,该方法可以大幅度减少预训练的训练量。
  • 128K微调:使用NTK+SFT的方法,将序列长度从32K拓展到256K。这里的继续预训练的方法可解决前文提到的训练量激增问题,而ABF和NTK可解决模型attention衰减问题。

4 长文本微调

实际上如果需要保持住预训练的长文本能力,微调和RLHF过程中也需要进行长文本的微调和RLHF。

  • Yi:将短SFT数据与长上下文问答问答数据混合使用。文档问答数据由模型辅助构建,即随机将多个文档拼成一个长文档,从中抽取一个或多个段落,要求模型基于抽取段落内容构建问答对。Trick,要求给答案之前模型需要背诵或改写原始段落,这种数据格式鼓励模型进行检索,从而阻止依赖自身知识回答产生的幻觉。
  • InternLM2:为了保持大模型微调后的长上下文能力,在SFT和RHLF阶段中需要继续使用长上下文预训练数据,主要使用来自书籍的长上下文数据和从GitHub获得的长上下文数据。为了增强InternLM2的数据分析能力,选择在DS-1000中超过10000个核心仓库。实验结果表明,长上下文代码数据不仅可以提高大模型的长上下文能力,还可以提高大模型的代码能力。
  • 元象:NTK+SFT的方法,将序列长度从32K拓展到256K。使用预训练阶段使用的训练数据来构造长序列的SFT训练数据。和Yi的做法基本一致。首先,基于自研的XVERSE-65B模型生成与单个文章有关的高质量问题回答对;然后将文章内容混合成目标长度的整段内容,随机选择与其中某个内容匹配的问题回答对;最后将该问题和回答作为整段内容的问题和回答,构成训练的单个样本。通过上述批量化数据生产管线,我们可以得到32K、64K,一直到256K长度的高质量对话数据。

5 参考文献