当前位置:AIGC资讯 > AIGC > 正文

【大模型】llama系列模型基础

前言:llama基于transformer架构,与GPT相似,只用了transformer的解码器部分。本文主要是关于llama,llama2和llama3的结构解读。

目录

1. llama 1.1 整体结构 1.2 RoPE 1.3 SwiGLU 激活函数 2. llama2 2.2 GQA架构 2.3 RLHF 3. llama3 参考文献

1. llama

1.1 整体结构


由self-attention和mlp堆叠形成,相比较transformer结构主要区别有三个:

位置编码:transformer使用的绝对位置编码,llama使用的RoPE(旋转位置编码),对Q和K使用 归一化: transformer使用的layernorm在子层输出后,llama使用的RMSNorm 归一化函数,对子层的输入进行了归一化。pre-layer-norm使得训练更稳定,但是post-layer-norm使得模型具有更强的表达力。 激活函数:用 SwiGLU 激活函数替换 ReLU 非线性,以提高性能。

1.2 RoPE

RoPE的目标是找到一种函数,实现以下功能:

推导
以二维平面为例,m和n为绝对位置, θ {\theta} θ可以由以下公式得到:

d为词向量维度

论文中提出了一种形式如下:

f q 和 f k {f_q和f_k} fq​和fk​可以表示为:


最终:

扩展到多维
将二维的旋转操作扩展到多维度,是通过将嵌入向量的多个维度按照两两配对(形成二维子空间)来完成的。具体而言,它将嵌入向量的偶数和奇数维度配对,每一对维度都应用一次二维的旋转操作。这使得二维的旋转编码可以自然地扩展到更高维度。

Rope最终公式:

优势:相对于绝对位置编码,可以更好的捕捉相对位置信息。相邻位置的编码之间有一定的相似性,而远离位置的编码之间有一定的差异性。

1.3 SwiGLU 激活函数


结合了GLU和SiLU的优点。

表达能力更强
SwiGLU 通过在激活函数前引入门控机制(GLU),允许模型在特定条件下选择性地激活或抑制某些神经元,从而增强模型的非线性表达能力。这对于处理复杂的数据模式特别有效。

梯度流动更稳定
SwiGLU 在使用 SiLU 激活函数时,由于其平滑的曲线和非饱和性质,有助于保持稳定的梯度流动,避免梯度消失或爆炸的情况。这使得在训练深度神经网络时,模型能够更容易地收敛。

适应性更强
SwiGLU 的门控机制使得模型可以根据输入特征的不同,自适应地调整激活的强度。这种灵活性有助于在不同的输入条件下,模型能够选择最优的特征表示,从而提高整体性能。

提高计算效率
SwiGLU 的设计相对简单,计算复杂度较低,因此在大型模型或需要高计算效率的场景中,能够提供较好的性能提升,同时不会显著增加计算成本。

2. llama2

包含7B、13B和70B。其中,7B和13B沿用了Llama 1的经典架构,而70B模型则采用了创新的分组查询注意力(GQA)架构,相较于Llama 1,Llama 2的预训练语料增加了40%。整体结构基本与llama1相似,但是新增了GQA架构,与llama1相比主要优势:

扩展上下文长度:Llama 2 模型提供 4,096 个令牌的上下文长度,是 LLaMa 1 的两倍。 上下文长度(或上下文窗口)是指模型在推理(即生成文本或正在进行的对话)期间“记住”的最大令牌数。 这样,自然语言就更加复杂,交流也更加连贯流畅。 提高可访问性:LLaMa 1 专为研究用途而发布,而 Llama 2 可供任何组织(活跃用户少于 7 亿)使用。 更强大的训练:Llama 2 使用增加 40% 的数据进行预训练,增强其知识库和上下文理解。 此外,与 LLaMa 1 不同,Llama 2 聊天模型使用基于人类反馈的强化学习 (RLHF) 进行微调,有助于更好地将模型响应与人类期望保持一致。

2.2 GQA架构

一种在大型语言模型 (LLM) 中的多查询注意力 (MQA) 和多头注意力 (MHA) 之间进行插值的方法,它的目标是在保持 MQA 速度的同时实现 MHA 的质量。

MQA
让所有的头之间共享同一份 K 和 V矩阵,每个头正常的只单独保留了一份 Q参数,从而大大减少 Key 和 Value 矩阵的参数量。

MHA
transformer中的模块,将Q,K,V分成多组,最后拼接,每个头的K,V矩阵不共享。

GQA
Q分成N组,每个组共享一个K和V

2.3 RLHF

核心思想:训练阶段,如果直接用人的偏好(或者说人的反馈)来对模型整体的输出结果计算reward或loss,显然是要比上面传统的“给定上下文,预测下一个词”的损失函数合理的多。

主要包含三个步骤:

收集样本预训练模型
常规的有监督训练 训练奖励模型
用多个模型(可以是初始模型、finetune模型和人工等等)给出问题的多个回答,然后人工给这些问答对按一些标准(可读性、无害、正确性blabla)进行排序(打分的话标注员差异太大),用排序数据训练一个奖励模型/偏好模型来打分(reward model)。对响应进行排名多半比编写响应更简单。 训练强化学习策略,微调 LM
用强化学习做LM训练的一种思路是用Policy Gradient做,这一块OpenAI用的是他们在17年提出的PPO算法,即Proximal Policy Optimization。

3. llama3

具有8B和70B,模型架构与llama2基本没区别,但是改进了tokinizer,对长文本的处理变快。由sentencepiece换成了tiktoken,这与GPT4 保持一致。同时,词表大小由32k扩展到了128k。

参考文献

[1] 十分钟读懂旋转编码(RoPE)
[2] 从零实现ChatGPT——RLHF技术笔记

总结

### 文章总结:LLama、LLama2与LLama3的结构解读
#### 前言
本文深入解析了基于Transformer架构的LLama系列模型——LLama、LLama2和LLama3的结构特点与创新。LLama系列模型主要聚焦于语言生成任务,通过不断优化Transformer的解码器部分,实现了性能与效率的提升。
#### 1. LLama
##### 1.1 整体结构
LLama的整体结构由self-attention和MLP堆叠而成,与标准Transformer的主要区别在于位置编码、归一化方法和激活函数。
- **位置编码**:采用RoPE(旋转位置编码),相较于绝对位置编码,能更好地捕捉相对位置信息。
- **归一化**:使用RMSNorm,对子层输入进行归一化,有助于训练稳定性。
- **激活函数**:引入SwiGLU激活函数,结合GLU和SiLU的优点,提升模型性能。
##### 1.2 RoPE
RoPE通过旋转操作实现位置编码,能够在多维空间中有效扩展,相比绝对位置编码,能更好地捕捉位置间的相对关系。
##### 1.3 SwiGLU 激活函数
SwiGLU结合了门控机制(GLU)和SiLU激活函数,增强了模型的非线性表达能力,同时保持梯度流动的稳定性,提高计算效率。
#### 2. LLama2
LLama2在保持LLama1经典架构的基础上,新增了GQA架构,并扩展了预训练语料,增强了模型性能。
- **GQA架构**:一种在MQA和MHA之间插值的方法,旨在保持MQA速度的同时实现MHA的质量。通过分组查询注意力,减少计算量同时保持性能。
- **RLHF**:采用基于人类反馈的强化学习进行微调,使模型响应更符合人类期望。
- **扩展优势**:增加上下文长度,提高模型可访问性,使用更多数据进行预训练。
##### 2.2 GQA架构
GQA通过分组查询注意力,实现多查询注意力与多头注意力之间的平衡,提高模型效率与性能。
##### 2.3 RLHF
RLHF通过收集样本、训练奖励模型和强化学习策略,微调语言模型,使其输出更符合人类偏好。
#### 3. LLama3
LLama3在LLama2的基础上,主要改进了tokenizer,提升了长文本处理速度,并与GPT4保持一致。
- **Tokenizer改进**:由sentencepiece换成tiktoken,词表大小从32k扩展到128k,提升了对长文本的处理能力。
#### 参考文献
文章最后提供了两篇相关参考文献,帮助读者进一步了解RoPE和RLHF技术的细节。
### 总结
LLama系列模型通过不断优化Transformer的解码器部分,引入RoPE、SwiGLU、GQA和RLHF等创新技术,实现了模型性能与效率的提升。LLama3更是在tokenizer上进行了改进,进一步增强了长文本处理能力。这一系列模型的发展,为自然语言处理领域的研究与应用提供了有力支持。

更新时间 2024-09-10