摘要
以往的LLM(Large Languages Models)研究都遵从一个假设,即更多的参数将导致更好的性能。但也发现,给定计算预算限制后,最佳性能的模型不是参数最大的,而是数据更多的。对于实际场景,首选的模型不是训练速度最快的,而是推理速度最快的,训练时间较长的较小的模型最终在推理时的成本会更低。故提出改进:
- 通过训练比通常模型使用的更多的token,训练一系列语言模型,在各种推理预算中实现尽可能好的性能。所得模型称为LLaMA,参数范围从7B到65B
- 模型只使用公开可用的数据训练,与开源兼容
框架
预训练数据
如上图,预训练数据集使用CommonCrawl、C4、Github、Wikipedia、Books、ArXiv、StackExchange各自不同比例的混合,具体:
CommonCrawl[67%]:使用CCNet pipeline预处理了从2017年到2020年的五个CommonCrawl数据。该过程在行级别对数据进行去重;用fastText线性分类器进行语言识别,删除非英语页面;用n-gram语言模型过滤低质量内容;此外,训练了一个线性模型,对维基百科中参考文献页与随机抽样页进行分类,并丢弃非参考文献页。
C4[15%]:实验发现使用不同的预处理CommonCrawl数据集可以提高性能,故将C4数据集包含进预训练数据中。预处理阶段进行了数据去重和语言识别过滤,与CCNet的主要区别是质量过滤方法,其依赖于启发式方法,如是否存在标点符号或网页中的单词和句子的数量大小。
Github[4.5%]:使用谷歌BigQuery上可用的公共GitHub数据集。只保留了在Apache、BSD和MIT许可下分发的项目;根据行长或字母数字字符的比例,使用启发式方法过滤低质量的文件;使用正则表达式删除样板文件,如headers等;最后,在文件级别对数据集进行精确匹配去重。
Wikipedia[4.5%]:使用2022年6月至8月期间的维基百科数据,包括20种使用拉丁语或西里尔文字的语言:bg、ca、cs、da、de、es、fr、hr、hu,nl、pl、pt、ro、ru、sl、sr、sv、uk。处理这些数据时删除了超链接、注释和其他格式化的样板文件。
Books[4.5%]:使用了两个图书语料库:古登堡项目,其中包含公共领域的书籍;以及ThePile的Books3部分。并删除了内容重复超过90%的图书。
ArXiv[2.5%]:使用了arXiv的Latex文件,每个文件都删除了first section之前的所有内容,以及参考书目;删除了来自.tex文件中的注释,以及由用户编写的内联扩展的定义和宏。
StackExchange[2.0%]:使用了StackExchange数据,包含从计算机科学到化学的各种主要领域的高质量问答网站。其中保留了来自28个最大的网站的数据,并从文本中删除了HTML标签,并按分数(从最高到最低)对答案进行了排序。
Tokenizer:本文使用字节对编码(BPE)算法对数据进行tokenize,使用Sentence-Piece的实现。处理过程中,将所有数字字符串拆分为单个数字,并在bytes级别分解未知的UTF-8字符。
总体而言,整个预训练数据集在tokenize后包含大约1.4T的token,除了Wikipedia和Books使用了大约两个epoch,其余token只使用一次。
模型架构
模型基于原始transformer架构,但做出一些改动:
- 为了提高训练稳定性,模型对每个transformer子层的输入进行归一化,而不是对输出归一化。归一化函数使用RMSNorm
- 为了提高性能,用SwiGLU激活函数取代了ReLU,维度变为 2 3 4 d \frac 234d 324d
- 将绝对位置嵌入替换为旋转位置嵌入(RoPE)
详细模型配置如上图。
优化器
模型使用AdamW优化器进行训练,超参数 β 1 = 0.9 β_1 = 0.9 β1=0.9、 β 2 = 0.95 β_2 = 0.95 β2=0.95