【大语言模型LLMs】Llama系列简介
Llama是由Meta AI推出的一系列的开源大语言模型(Large Languages Models, LLMs),最新版本为Llama3,其具有预训练和指令微调,包括8B和70B两个版本。
1. LLaMa
LLaMA 为该系列的开端,发布于2023年初,论文地址:LLaMA: Open and Efficient Foundation Language Models
1.1 引言
大语言模型性能优异,一般假设:更多的参数将带来更好的性能。但,2022年Hoffmann等人发现:经过更多数据训练的较小模型相比更大模型性能更优。
大模型训练快,推理慢,小模型训练慢,推理快,长时训练的小模型推理开销更低,这更重要。作者发现,7B模型在1T tokens 下性能仍然能继续提升。
LLaMa的优势便是在相同的推理预算下,实现了当时最佳的性能,且更少的依赖非公开数据。
1.2 方法
1.2.1 预训练数据
仅使用公开数据
Tokenizer. 使用字节对编码(bytepair encoding, BPE)算法(Sennrich等人,2015)对数据进行标记(SentencePiece的实现)。值得注意的是,LLaMa将所有数字拆分为单个数字,并退回到字节来分解未知的UTF-8字符。总词汇表大小为32k tokens(Llama2中描述)。
1.2.2 架构
基于 Transformer,主要有三点改进(已标注来源):
- Pre-normalization [GPT-3]:对每个transformer子层的输入进行归一化,而非输出。
- SwiGLU [PaLM]:引入SwiGLU取代ReLU,维度为 2 3 4 d \frac{2}{3}4d 324d 而非 4 d 4d 4d.
- Rotary Embeddings [GPTNeo]:引入旋转位置编码(rotary positional embeddings, RoPE)代替绝对位置编码
1.2.3 优化器
- Optimizer:AdamW, β 1 = 0.9 \beta_1 = 0.9 β1=0.9, β 2 = 0.95 \beta_2 = 0.95 β2=0.95,weight decay:0.1,gradient clipping:1.0.
- Scheduler:Cosine learning rate schedule,最终学习率等于最大学习率的10%, warmup 2000 步
1.2.4 效率
采用优化来提高训练效率
- 因果多头注意力( causal multi-head attention):减少内存和运行时间,实现可见xformers库,其通过不存储注意力权重和不计算由语言建模任务的因果性质而被掩盖的键/查询分数来实现效率提升
- 减少了检查点在向后传递过程中重新计算的激活量。节省了计算成本高的激活,比如线性层的输出。其通过手动实现transformer层的backward函数来实现,而非依赖PyTorch的autograd。进一步使用Korthikanti等人(2022)阐述的模型和序列并行来减少模型的内存使用Reducing Activation Recomputation in Large Transformer Models.此外,尽可能地重叠激活的计算和gpu之间通过网络的通信(all_reduce操作带来的)。
- 2048 张 80GB A100 上训练21天
2. Llama 2
Llama 2发布于2023年中,论文地址:Llama 2: Open Foundation and Fine-Tuned Chat Models
2.1 引言
LLMs一般遵循:
- Transformer架构
- 自监督语料库上预训练
- 依赖注释的微调
Llama2参数规模高达70B,新特性:
- 使用了新的公开数据组合进行训练,将预训练语料库的大小增加了40%
- 将模型的上下文长度增加了一倍,并采用了分组查询关注(Ainslie et al, 2023)。
- 更加注重安全性,使用安全的数据注释和调优,以及进行红队和采用迭代评估。
- 发布Llama 2- chat,Llama 2的微调版本,针对对话用例进行了优化。(7B、13B和70B参数量)
2.2 预训练
在Llama1的基础上做了一些优化。
- 更健壮的数据清洗,更新了数据混合,训练的总Token增加超过40%。
- 上下文长度增加了一倍
- 使用分组查询注意力(grouped-query attention,GQA)提高更大模型的推理可扩展性。
2.2.1 预训练数据
增加了新的公开来源数据,训练了 2 trillion tokens
2.2.2 训练细节
几乎与LLaMa 1 相同,包括:
- 标准 transformer 架构
- RMSNorm
- SwiGLU
- RoPE
不同的点:
- 增长的上下文长度
- 分组查询注意力 (GQA)
表:Llama 2系列模型。Tokens计数仅指预训练数据。所有模型都以全局4M tokens batch-size进行训练。更大的模型——34B和70B——使用分组查询注意(GQA)来提高推理的可扩展性。
2.2.2 预训练评估
测试基准:
- Code
- Commonsense Reasoning
- World Knowledge
- World Knowledge
- MATH
- Popular Aggregated Benchmarks.
2.3 微调
主要包括:
- 监督微调(supervised fine-tuning, SFT)
- 迭代奖励建模(iterative reward modeling)
- 人类反馈强化学习(Reinforcement Learning with Human
Feedback, RLHF)
新技术:幽灵注意力(Ghost Attention, GAtt),Meta AI 发现它有助于控制多个回合的对话流。
2.3.1 监督微调(SFT)
Llama 1 中,从公开可用的指令调优数据(Chung等人,2022)开始SFT阶段。
Quality Is All You Need. 第三方SFT数据来源广泛,但大多缺乏多样性和质量,尤其是在LLMs与对话式指令结合方面。因此,Meta AI 收集数千个高质量SFT数据示例,使用这些基于供应商注释的少而精的示例,结果得到了显著改善。共收集了27540条注释。
微调(Fine-Tuning)细节。
- scheduler:cosine learning rate schedule
- initial learning rate:2 × 10−5
- weight decay:0.1
- batch size:64
- sequence length:4096
2.3.2 人类反馈强化学习(RLHF)
RLHF是一种用于微调语言模型的训练方式,以进一步使模型行为与人类偏好和指令遵循保持一致。首先,由人类注释者选择他们更喜欢的两个模型输出,来收集代表经验采样的人类偏好的数据。这种人类反馈随后被用于训练奖励模型,该模型学习人类注释者的偏好模式,然后可以自动做出偏好决策。
2.3.2.1 人类偏好数据收集
要求注释者首先编写提示,然后根据提供的标准在两个抽样模型响应之间进行选择。为了使多样性最大化,对给定提示的两个响应从两个不同的模型变量中采样,并改变温度超参数。除了给参与者一个强制选择之外,我们还要求注释者标记他们对选择的答案的偏好程度:他们的选择是明显更好,更好,稍微更好,或者可以忽略的更好/不确定。
首先关注:有用性和安全性:
- 有用性(helpfulness):Llama 2-Chat响应满足用户请求并提供请求信息的程度
- 安全性(safety):Llama 2-Chat的回答是否不安全(例如,“给出制作炸弹的详细说明”可能被认为是有帮助的,但根据我们的安全指南,这是不安全的。)
2.3.2.1 奖励建模(Reward Modeling)
奖励模型将模型响应及其相应的提示(包括来自前一个回合的上下文)作为输入,并输出一个标量分数来指示模型生成的质量(例如,有用性和安全性)。利用这样的反应分数作为奖励,可以在RLHF期间优化Llama 2-Chat,以更好地调整人类的偏好,提高helpfulness和safety。
helpfulness和safety有时会相互权衡(Bai等人,2022a),这使得单一奖励模型在两者上都表现良好具有挑战性。为了解决这个问题,训练了两个独立的奖励模型,一个针对称为helpfulness(称为helpfulness RM)进行了优化,另一个针对safety(safety RM)进行了优化。
Training Objectives. 为了训练奖励模型,将收集到的成对的人类偏好数据转换为二元排名标签格式(即选择和拒绝)并强制“选择”的响应具有更高的分数。使用了二进制排序损失(binary ranking loss, Ouyang, 2022)
L ranking = − log ( σ ( r θ ( x , y c ) − r θ ( x , y r ) ) ) \begin{equation} \mathcal{L}_{\text {ranking }}=-\log \left(\sigma\left(r_\theta\left(x, y_c\right)-r_\theta\left(x, y_r\right)\right)\right) \end{equation} Lranking =−log(σ(rθ(x,yc)−rθ(x,yr)))
其中 r θ ( x , y ) r_{\theta}(x, y) rθ(x,y) 为提示 x x x 和完成 y y y 的标量评分输出,模型权值为 θ \theta θ。 y c y_c yc是注释者“选择”的首选响应,而 y r y_r yr是被“拒绝”的对应项。
在此binary ranking loss的基础上,进一步修改。考虑到偏好有四个评级(例如,显着更好),额外利用这些信息明确地教导奖励模型将更多差异分数分配给具有更多差异的生成结果:
L ranking = − log ( σ ( r θ ( x , y c ) − r θ ( x , y r ) − m ( r ) ) ) \begin{equation} \mathcal{L}_{\text {ranking }}=-\log \left(\sigma\left(r_\theta\left(x, y_c\right)-r_\theta\left(x, y_r\right)-m(r)\right)\right) \end{equation} Lranking =−log(σ(rθ(x,yc)−rθ(x,yr)−m(r)))
其中 margin m ( r ) m(r) m(r)是偏好评级的离散函数。当然,对于具有不同回答的配对,我们使用较大的margin,而对于具有相似回答的配对,我们使用较小的margin。
Training Details.
- epoch: 1 1 1(训练时间越长会导致过度拟合)
- The maximum learning rate:
- 5 × 1 0 − 6 5 × 10^{−6} 5×10−6 (Llama 2-Chat-70B)
- 1 × 1 0 − 5 1 × 10^{−5} 1×10−5 (the rest)
- scheduler:cosine learning rate schedule,学习率降低到最大学习率的10%。
- warm-up:总步数的3%(最少5步)
- batch size:512 pairs,or 1024 rows per batch
Scaling Trends. Meta AI 研究了奖励模型的数据和模型大小的缩放趋势,根据每周收集的奖励模型数据量的增加对不同的模型大小进行微调。即对于类似的数据量,更大的模型可以获得更高的性能。更重要的是,考虑到用于训练的现有数据注释量,缩放性能尚未达到稳定,这表明随着注释的增加,还有进一步改进的空间。他们注意到,奖励模型的的最佳实践是一个开放的研究问题,但奖励的排名任务没有歧义。
2.3.2.3 迭代微调(Iterative Fine-Tuning)
研究了两种主要算法的RLHF微调:
- 近端策略优化(Proximal Policy Optimization, PPO)(Schulman et al., 2017),RLHF文献中的标准。
- 拒绝采样微调(Rejection Sampling fine-tuning, RSFT). 从模型中采样 K K K 个输出,并根据的奖励选择最佳候选(Bai等人,2022b)。使用 LLMs 中的 re-ranking strategy(Deng等人,2019),其中奖励被视为能量函数。Llama更进一步,使用选择的输出进行梯度更新。对于每个提示,获得最高奖励分数的样本被认为是新的黄金标准(gold standard)。与Scialom等人(2020a)类似,随后在新的排序样本集上微调模型,强化奖励。
两种强化学习算法的主要区别在于:
-
广度(Breadth)——在拒绝抽样中,模型为给定提示探索K个样本,而PPO只进行一个。
-
深度(Depth)——在PPO中,在步骤 t t t 的训练期间,样本是在前一步梯度更新后从 t − 1 t-1 t−1 更新的模型策略的函数。在RSFT中,在应用类似于SFT的微调之前,对给定模型初始策略的所有输出进行采样以收集新的数据集。然而,由于应用了迭代模型更新,两种强化学习算法之间的根本差异就不那么明显了。
2.3.3 用于多轮一致性的系统消息
在对话设置中,一些指令应该适用于所有的对话回合,例如,简洁地回应,或者“扮演”某个公众人物。向Llama 2-Chat提供这样的指示时,后续的响应应该始终尊重约束。然而,最初的RLHF模型倾向于在几轮对话后忘记最初的指令。
为了解决这些限制,我们提出了幽灵注意(Ghost Attention, GAtt),这是一种受上下文蒸馏(Bai等人,2022b)启发的非常简单的方法,它利用微调数据来帮助注意力集中在多阶段过程中。GAtt允许对多个回合进行对话控制。
GAtt Method. 假设我们有一个多轮对话数据集,其中包括两个人(例如,用户和助手)之间的对话,对话由一系列消息组成,记为 [ u 1 , a 1 , … , u n , a n ] [u_1, a_1, \dots, u_n, a_n] [u1,a1,…,un,an],其中 u n u_n un 和 a n a_n an 分别对应第 n n n 轮中用户和助手的消息。接着,定义一个需要在整个对话中遵守的指令,记为inst。例如,这个指令可能是“扮演…”。可以将这个指令合成地添加到对话中所有用户的消息上。
基于最新的RLHF,可以从这个合成数据中采样,得到用于微调的上下文对话和采样文本,这个过程类似于拒绝采样。如果不在所有轮次的上下文对话中添加指令,而是只在第一回合中添加,这可能会导致训练时系统消息(即所有中间助手消息,出现在最后一回合之前)与我们的采样之间出现不匹配。为了解决这个问题,可以通过将之前轮次的所有标记(包括助手消息)的损失设置为0来避免训练受损。
为了创建训练指令,创建了一些合成约束来从中采样,比如:爱好(“你喜欢例如网球”)、语言(“用例如法语说话”)或公众人物(“扮演例如拿破仑”)。为了获得爱好和公众人物的列表,团队让Llama 2-Chat生成它们,以避免指令与模型知识之间出现不匹配(例如,要求模型扮演它在训练期间没有遇到过的人)。为了使指令更加复杂和多样化,他们通过随机组合上述约束来构建最终指令。在构建训练数据的最终系统消息时,还会在一半的时间里修改原始指令,使其不那么冗长,例如,“永远扮演拿破仑”变为“人物:拿破仑”。这些步骤产生了一个用于微调的SFT(Supervised Fine-Tuning)数据集,可以在这个数据集上微调Llama 2-Chat模型。
2.4 安全
Llama 2 对安全十分关注,包括:
- 预训练数据和预训练模型的安全性调查
- 安全校准 (safety alignment),解释如何收集与安全相关的注释并利用SFT和RLHF。
- 红方 (red teaming),进一步了解和提高模型安全性
- 定量安全性评估 (Llama 2-Chat)
3. Llama3
Llama3 发布于2024年4月,包括 8B 和 70B 参数。Llama 3 指令调优模型针对对话用例进行了优化,在常见的行业基准测试中优于许多可用的开源聊天模型。
Meta Llama 3 简介
Llama3 model card
Training Data | Params | Context length | GQA | Token count | Knowledge cutoff | |
Llama 3 | A new mix of publicly available online data. | 8B | 8k | Yes | 15T+ | March, 2023 |
70B | 8k | Yes | December, 2023 |
3.1 模型架构
与 Llama 2 相比,进行了几项关键改进:
- Llama 3 使用具有 128K 标记词汇表的分词器(Llama1和Llama2 为 32k tokens),可以更有效地编码语言,大幅提高模型性能。
- 为了提高 Llama 3 模型的推理效率,在 8B 和 70B 大小中都采用了分组查询注意力 (GQA)。
- 在 8,192 个token的序列上训练模型,使用掩码来确保自我注意力不会跨越文档边界。
3.2 训练数据
在预训练数据方面投入了大量资金。Llama 3 在超过 15T 的 tokens 上进行了预训练(公开来源收集)。相比 Llama 2 使用的数据集大 7 倍,包含的代码是 Llama 2 的 4 倍。为了应对即将到来的多语言用例,Llama 3 预训练数据集的 5% 以上由涵盖 30 多种语言的高质量非英语数据组成。
为了确保 Llama 3 接受最高质量的数据训练,开发了一系列数据过滤流程(data filtering pipelines)。这些pipelines包括使用启发式筛选器、NSFW 筛选器、语义重复数据删除方法和文本分类器来预测数据质量。前几代 Llama 在识别高质量数据方面出奇地好,因此使用 Llama 2 为 Llama 3 提供支持的文本质量分类器生成训练数据。
Llama3 团队还进行了广泛的实验,以评估在最终的预训练数据集中混合来自不同来源的数据的最佳方法。这些实验保证了合理的数据组合,确保 Llama 3 在包括trivia questions、STEM、coding, historical knowledge 等在内的用例中表现良好。
3.3 扩大预训练规模
在 Llama 3 的开发过程中对缩放行为进行了一些新的观察。例如,虽然 8B 参数模型的 Chinchilla 最优训练计算量对应于 ~200B 标记,但实验发现,即使在模型使用两个数量级的数据进行训练后,模型性能仍在继续提高。8B 和 70B 参数模型在进行高达 15T tokens 的训练后,持续对数线性提升。较大的模型可以与这些较小模型的性能相匹配,但训练计算较少,但通常首选较小的模型,因为它们在推理过程中效率更高。(同Llama 1)
为训练最大的 Llama 3 模型,结合了三种类型的并行化:数据并行化、模型并行化和管道并行化。在 16K GPU 上同时训练时,每个 GPU 的计算利用率超过 400 TFLOPS,仍然能超高效运算。Meta 在两个定制的 24K GPU 集群上执行了训练运行。为了最大限度地延长 GPU 正常运行时间,我们开发了一种先进的新训练堆栈,可自动执行错误检测、处理和维护。同时,Meta 还大大改进了硬件可靠性和静默数据损坏检测机制,并开发了新的可扩展存储系统,以减少检查点和回滚的开销。这些改进使总体有效培训时间超过 95%。总之,以上改进将 Llama 3 的训练效率比 Llama 2 提高了 3 倍。
3.4 指令微调
微调方法:
- 监督微调 (SFT)
- 拒绝抽样
- 近端策略优化 (PPO)
- 直接偏好优化 (DPO)
SFT 中使用的提示的质量以及 PPO 和 DPO 中使用的偏好排名对对齐模型的性能有很大影响。Meta称在模型质量方面的一些最大改进来自于仔细管理这些数据,并对人工注释者提供的注释执行多轮质量保证。
通过 PPO 和 DPO 从偏好排名中学习也大大提高了 Llama 3 在推理和编码任务上的表现。他们发现,如果你问一个模型一个它难以回答的推理问题,模型有时会产生正确的推理痕迹:模型知道如何产生正确的答案,但它不知道如何选择它。对偏好排名的训练使模型能够学习如何选择它。
结语
本文只是浅显说了Llama 系列模型的一些特点或技术总结。
Llama 系列模型提供了较好的开源服务,具有优异的性能,可以作为研究人员或是爱好者研究学习的对象。