前言:llama基于transformer架构,与GPT相似,只用了transformer的解码器部分。本文主要是关于llama,llama2和llama3的结构解读。
目录
- [1. llama](#1. llama)
-
- [1.1 整体结构](#1.1 整体结构)
- [1.2 RoPE](#1.2 RoPE)
- [1.3 SwiGLU 激活函数](#1.3 SwiGLU 激活函数)
- [2. llama2](#2. llama2)
-
- [2.2 GQA架构](#2.2 GQA架构)
- [2.3 RLHF](#2.3 RLHF)
- [3. llama3](#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)