Llama系列:Llama1, Llama2,Llama3内容概述
前言
参考视频:大模型修炼之道(三): Llama系列讲解 Llama1,Llama2, Llama3_哔哩哔哩_bilibili
本博客是基于视频的学习笔记,以及相关知识点的扩充
Llama1
1. 动机
- 使用完全开源数据,性能媲美GPT3
- 研究开源,禁止商用
2. scaling law
损失曲线图的解释:
图中显示了两个模型(10B和50B)的训练过程。损失(loss)曲线反映了模型在训练过程中的性能,损失值的降低表示模型的性能在提升。随着训练时间的增加,计算成本也在不断增加。随着计算时间的增加,两个模型的Loss都在不断降低,刚开始小模型的Loss下降更快,但随着训练的进行,小模型的性能逐渐饱和下降逐渐变慢,大模型下降速度超过了小模型。
当设定一个期望损失值时,如图,会发现大模型的训练花费可能会低于小模型。
但是!!Meta不这样认为!!!
Meta认为在考虑计算成本时,不仅要关注训练阶段的开销,更要重视推理时的计算成本。因为训练过程只能进行一次,而推理是一个重复的过程,影响到实际应用的频率和资源消耗。
所以从推理计算成本来看,小模型的成本是会小于大模型的。
按照原来的scaling law经验,原来10B的模型,建议用200B的token训练。
但是Meta对7B的模型使用了1T的token训练,发现性能还可以一直增长。
增加数据比扩大参数更有效:在后续的LLaMA系列中,Meta持续采纳这一观点,认为在提升模型性能时,增加训练数据的数量比扩大模型参数的数量更为有效。
3. 训练数据
1. CommonCrawl 2017-2020的数据,对非英文数据进行了去重。
2. 将wikipedia引用的网页作为正例,其他网页作为负例训练线性模型。
3. 将books 和 wikiledia 用两个epoch训练,其他数据集只用了一个epoch。
4. 总共1.4T token。
5. 训练时的上下文长度为2048,用了2048个A100 80G的GPU训练,用时21天。
4. 模型结构
Llama模型架构和GPT一样,都是采用Transformer Decoder架构,做了以下修改。
1. 和GPT2,3一样将Normalization从每个子层的输出位置移到了输入位置。
(左GPT1,右GPT2)
2. 将Layer Norm 改为了 RMS Norm
RMS Norm的动机是:
在进行normalization的时候,并不能改变特征的分布,所以可以去掉平移相关部分:
RMS Norm通过计算输入向量的均方根,进行归一化处理,消除了Layer Norm中计算均值的过程,简化计算。
RMSNorm(RMS归一化)介绍-CSDN博客
3. 采用了旋转位置编码
4. 采用了Silu激活函数
Llama2
1. 改进
- 可商用;
- 加大了数据量;
- 通过微调训练了chat model,对标chatgpt
2. 训练数据
- Llama2的训练数据比Llama1 多了40%,达到了2T的token(Llama1是1.4T token)
- 上下文token 从2048 翻倍到了4096
- 使用了10万条数据进行监督微调(人类提出问题并给出回答数据)
- 使用了100万条偏好数据(对同一个问题让模型给出多个回答,人工给这些回答进行排序)用来强化学习
- 共三个版本(7B,13B,70B)
- 70B的模型训练用了172万的GPU小时,相当于2048个GPU训练了35天
3. 训练流程
- 在处理好的无标注文本数据上进行自回归预训练;
- 然后进行监督微调训练;
- 接下来通过人类偏好数据训练两个模型(安全奖励模型,有用奖励模型);
- 再利用强化学习对模型训练;
- 最终得到Llama 2 的chat Model。
4. Train PPL—Tokens
纵坐标Train PPL-训练困惑度"(Training Perplexity)
困惑度是一个衡量语言模型预测能力的指标,反映了模型对测试数据的困惑程度。它可以被视为模型在生成文本时的“困惑”程度,数值越低,表示模型对数据的预测能力越强。
交叉熵损失(Cross-Entropy Loss)
- p(i) 是真实分布的概率(通常是一个one-hot编码的真值分布)。
- q(i)是模型预测的概率分布。
5. GPA (Group Query Attention)
Multi-Head Attention
每个Token都有多个Query、Key和Value:每个输入Token会生成多个Query(查询向量)、Key(键向量)和Value(值向量)。例如,如果有8个头,那么每个Token会有8个不同的Query和8个对应的Key和Value。
计算注意力:每个Query会与所有Token的Keys进行相似度计算,从而生成注意力权重,进而加权所有的Values,产生最终的输出。这种机制允许模型在不同的子空间中学习信息,从而增强表示能力。
Multi-query Attention
生成的特征不同:每个Token仍然生成多个Query,但只生成一个Key和一个Value。这样,所有的Query都与同一个Key进行相似度计算。这种机制减少了计算的复杂性,使得模型在处理时更加高效。
注意力计算:所有的Query会与自己唯一的Key进行相似度计算,这在一定程度上简化了计算过程,并可能提高模型的效率。
分组注意力(Group Attention)
Query的分组:在分组注意力中,Query被分为几个组。例如,可以将每两个Query分为一组。每组对应一个Key和一个Value。
组合优点:这种方法结合了多头注意力的优点和Marty Query Attention的计算效率。通过分组,模型可以在保持一定表达能力的同时,减少计算量。
原始Multi-head实现
假设原始的token维度为512,则w_q,w_k,w_v线性层的权重矩阵都为512*512,生成的q,k,v都是512维;
分为八个头,每个头的维度就是64:
Group Query Attention的实现
如果每两个query为1组,那么w_k和w_v矩阵为512*256,这里节省了模型的参数量;
这样Q有8个头,K,V只有4个头:
矩阵乘法的时候,将k,v的头再复制一份就可以相乘了:
注意:GQA再Llama2中只应用在了70B的模型中
Llama3
1. 性能表现
2. 改进
- 字典从3万2000个Token扩充4倍,达到了12万8。提高推理效率;
原来一个中文被编码为多个token,现在只需要一个token。
也就意味着原来需要多次推理才能输出一个汉字,现在只需要一次推理就可以。
但因为字典的增大,导致embedding层和分类头层增加,所以最小的模型也从7B到了8B.
- 所有模型,包括8B模型也用GQA;
- 序列长度从4096到了8192。
3. 训练数据
《Llama: The Llama 3 Herd of Models》预训练数据篇——论文精读笔记-CSDN博客
- 15T的训练Token,全部来自公开数据。是Llama2的7倍大小。代码数据多了4倍;
- 5%高质量非英语数据,涵盖30多种语言;
- 对数据进行了清洗过滤,llama2生成训练数据来帮助训练文本质量分类器;(不是用llama2生成训练数据)
- 微调阶段除了开源数据集,还人工标注了1000万样本。
4. 训练技能
5. 指令微调
指令微调是一种通过在特定的指令数据集上对预训练模型进行进一步训练的方法,使得模型能够更有效地处理和响应各种文本指令。这些指令可以包括问答、生成文本、总结、翻译等多种任务。
- SFT
- 拒接采样
- PPO
- DPO
SFT(Supervised Fine-Tuning)
定义: SFT是指在预训练模型的基础上,通过监督学习的方式对模型进行细化调整。这个过程通常利用带有标签的数据集来学习模型在特定任务上的表现。
特点:
- 数据依赖: SFT需要标注数据,通常由人类专家或自动化程序生成。
- 目标明确: 针对特定任务(如分类、问答等)进行微调,以提高模型的准确性和性能。
- 适用性广: 可以应用于各种NLP任务,如文本生成、文本分类等。
拒接采样(Reject Sampling)
定义: 拒接采样是一种用于生成样本的方法,它通过计算生成样本的概率并根据该概率进行选择。具体而言,对于每个生成的样本,决定是否接受该样本。
特点:
- 选择性强: 通过设定阈值来拒绝那些不符合特定条件的样本,从而提高生成样本的质量。
- 灵活性: 可以根据模型的输出概率进行动态调整,适应不同的应用场景。
- 应用: 常用于增强生成模型的质量,特别是在对生成内容有明确标准的时候。
PPO(Proximal Policy Optimization)
定义: PPO是一种强化学习算法,旨在优化策略的同时确保更新的稳定性。它通过限制每次更新的幅度,避免大幅度的策略变化。
特点:
- 稳定性: 通过使用剪切目标函数(clipped objective function)来限制策略更新,从而增大了训练的稳定性。
- 易于实现: 相较于其他强化学习算法,PPO的实现较为简单,且在多种任务上表现良好。
- 广泛应用: 常用于训练对话系统、游戏AI等需要动态学习的场景。
DPO(Direct Preference Optimization)
定义: DPO是一种直接优化策略,通常用于模型输出的偏好学习。DPO通过优化模型对不同输出的偏好,使模型能够更好地满足用户需求。
特点:
- 直接优化: 通过直接调整模型输出的偏好,优化模型的生成质量。
- 用户反馈: DPO通常使用用户反馈或排序信息来指导模型学习,从而提高用户体验。
- 应用场景: 常用于推荐系统和对话系统等需要考虑用户偏好的任务。