大模型学习笔记(二)中,大语言模型的结构与预训练流程是怎样的?
摘要:常见的transformer架构包括:encoder-decoder, encoder only, decoder only,区别如下: 模型类型 输入 输出 示例模型 应用场景 Encoder-only 文本(如句子) 表示(embedd
常见的transformer架构包括:encoder-decoder, encoder only, decoder only,区别如下:
模型类型
输入
输出
示例模型
应用场景
Encoder-only
文本(如句子)
表示(embedding)
BERT, RoBERTa
分类、问答、文本检索等
Decoder-only
文本(带上下文)
下一词预测
GPT, LLaMA
文本生成、对话、补全等
Encoder-Decoder
输入(如图像或句子)
输出(翻译后的句子等)
T5, BART, mBART
翻译、摘要、图文理解、多模态任务等
当前,绝大多数大语言模型都采用类似GPT的架构,使用基于 Transformer结构构建的仅由解码器组成的网络结构,采用自回归的方式构建语言模型,但是在位置编码、层归一化位置、激活函数等细节上各有不同。
LLaMA模型结构
下图是LLaMA的模型结构,由12个decoder堆叠而成,下面与transformer的decoder放在一起做对比:
Decoder-only架构,不需要Cross-Attention,所以LLaMA的特点如下:
没有Cross-Attention:因为它不是Encoder-Decoder结构,只做自回归语言建模任务(如续写、对话),所以每个 Decoder Block中只有Masked Self-Attention,这个掩码是决定它是decoder的标志。
使用Pre-LayerNorm:LLaMA的每一层都使用RMSNorm(Root Mean Square LayerNorm),而且是放在每个子模块的输入,不是输出之后再归一化,这称为Pre-Norm,相比Post-Norm稳定,支持训练更深的网络,输出经过Masked Self-Attention之后的层归一化,也是RMSNorm。
Rotary Position Embeddings(RoPE):LLaMA不使用传统的绝对位置编码,使用RoPE,将位置编码融合进 Attention的Q/K中,使得位置感知更加平滑且易于推广到更长的序列。
多头Attention 更高效:LLaMA使用FlashAttention等高效实现,使得推理和训练时内存与速度表现更优,在构建 Q/K/V 时的矩阵乘法优化也比早期Transformer更好。
更少的 Dropout、更紧凑的参数量设计:LLaMA没有Dropout(或者极少使用),使用SwiGLU激活函数(而不是 ReLU)。
RMSNorm归一化函数
针对输入向量a,RMSNorm函数的计算公式如下:
LayerNorm会对每个样本的所有特征做 均值为0,方差为1 的标准化,而RMSNorm只根据均方值(RMS)缩放输入,不进行中心化(不减均值)。LLaMA 选择RMSNorm的原因主要有:1. 计算效率更高(少一次均值计算)。 2. LayerNorm有时会破坏残差路径上的信息流,而RMSNorm没有中心化,更“温和”。3. 性能基本持平甚至略优。
SwiGLU激活函数
LLaMA的全连接层就相当于decoder的位置感知前馈网络,只是使用的激活函数不一样,decoder使用的是ReLU,LLaMA使用的是SwiGLU。
ReLU是简单、快速,直接把负数“砍掉”。而SwiGLU是一种门控激活机制(Gated Linear Unit 变种),在表现力和训练稳定性上明显优于ReLU,尤其适合大模型。对比可见它的优点:
特性
ReLU
SwiGLU
是否带门控机制
❌ 否
✅ 是(Gated)
是否平滑
❌ 不平滑(0处不可导)
✅ 平滑(可导)
计算复杂度
低
中等(sigmoid + 乘法)
表达能力
一般
更强(非线性更丰富)
在大模型中表现
一般
✅ 更优(PaLM、GPT-4 使用)
信息保留能力
容易截断(负值为0)
✅ 更好(避免大量信息丢失)
神经网络里,激活函数是为了增加非线性,又为了求导时保持导数连续有了sigmoid,而为了更大程度增加非线性,所以又有了SwiGLU,增加计算复杂度。
RoPE
使用旋转位置嵌入[48] 代替原有的绝对位置编码,绝对位置嵌入是指,每一个词的每一个嵌入的位置信息都是由位置本身计算的,且由于这种计算还有线性运算性质,所以位置信息被很好的保存了下来。
绝对位置的缺点是:位置是固定的;无法泛化到更长序列;只能处理训练时见过的位置。
