
⭐ 本篇文章主要介绍 LLaMA系列的论文,主要分析LLaMA V1 的模型架构以及LLaMA V2的训练方法。
这篇文章主要是引出大模型的表现力并不是在模型的大小,而是训练数据的样本。之前的做法是尽可能的减少模型大小,但是这些方法忽略了推理代价。因此, LLaMA基于开源数据,提出了一种推理更快的模型架构
在方法架构上,V1还是提出了许多的改进的,例如归一化的方法、归一化的位置、激活函数以及位置编码。
在V1架构中,与传统的Transformer block块不同,v1 采用了pre-normalization的方式来对输入进行归一化,而不是对block块的输出做归一化,并且归一化方法采用了RMSNorm,取代了原来了LayerNorm. RMSNorm 是基于“层归一化中主要起作用的是缩放因子,而非平移因子”这个发现而提出的归一化方法。在层归一化中需要减去均值,而模型在训练过程中已经学会通过投影矩阵自动调节均值;而 $\gamma$ 的作用是调整每一维的相对 scale,是表达力的核心。具体计算公式:
\text{RMSNorm(x)}=\frac{x}{\sqrt{\frac{1}{d} \sum x^2_i + \sigma}} \cdot \gamma
🔴 Post-normalization: x = Norm(x + Sublayer(x))
🟢 Pre-normalization: x = x + Sublayer(Norm(x))
🧠 为什么要pre- ?
Post-Norm Transformer(如原始 BERT)在深层结构中容易出现梯度消失的问题,梯度在反向传播过程中不断被缩小,最终导致前面几层的参数几乎收不到有效的梯度信号. 本来模型是通过一个残差块解决的,但是,
LayerNorm会对激活进行标准化,会削弱或干扰残差的直接流动,所以导致梯度不能顺利穿过太多层LayerNorm Layer.
🔴 原来的激活函数: ReLU
🟢 V1 的激活函数: SwiGLU。SwiGLU(Swish-Gated Linear Unit) 是一种改进的激活函数,由 Google 在 PaLM(Pathways Language Model) 中首次提出,是 GLU(Gated Linear Unit)的改进版本,结合了 Swish 激活函数的特性,引入了门控机制,有更强的表达能力,并且Swith是平滑非单调且可谓的,有助于缓解梯度消失的问题。在 PaLM、LLaMA、DeepSeek 等大模型上被广泛使用,带来精度提升。
其中, W,V 是可学习的权重矩阵b,c 是偏置项
采用了旋转位置编码:RoPE(Rotary Positional Embedding)
RoPE 是一种通过“旋转”的方式,将相对位置信息引入注意力机制中的位置编码方法,与早期直接加入位置编码信息不同,RoPE是通过做一个向量空间的旋转变换来记录向量的位置信息。每个位置对应一个角度,位置越靠后旋转角度越大。例如,旋转矩阵为
每个向量token通过$R_m$就被赋予了位置坐标信息。🧠 这个旋转矩阵仅仅适用d=2的向量,如果是512维度的向量应该怎么做?RoPE 的旋转矩就是一个分块对角矩阵,每个对角块是一个二维旋转矩阵,每个二维组的旋转角度不同。
LLaMA是 only-decoder结构的模型,属于自回归语言模型(类似GPT)。因此,在做生成任务时,需要mask掉未来token的信息。在模型架构中采用了因果注意力机制,通过设置上三角掩码矩阵来遮挡未来信息。
Att=\text{softmax}(\frac{QK}{\sqrt{d_k}} + M)V
M = [[0, -inf, -inf, -inf, -inf],
[0, 0, -inf, -inf, -inf],
[0, 0, 0, -inf, -inf],
[0, 0, 0, 0, -inf],
[0, 0, 0, 0, 0]]大部分的预训练设置都与V1相同,在模型架构上基本相同,采用了和V1相同的bytepair encoding (BPE)分词器,只是增加了上下文的长度以及
grouped-query attention. 基于SFT和RLHF进行微调。本质上来说,架构上没有多少变化,本质就是做了一个SFT + RLHF

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。