大模型学习笔记(二)中,大语言模型的结构与预训练流程是怎样的?

摘要:常见的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] 代替原有的绝对位置编码,绝对位置嵌入是指,每一个词的每一个嵌入的位置信息都是由位置本身计算的,且由于这种计算还有线性运算性质,所以位置信息被很好的保存了下来。 绝对位置的缺点是:位置是固定的;无法泛化到更长序列;只能处理训练时见过的位置。
阅读全文