在大模型(如GPT、BERT、LLaMA等)的架构设计中,各个组件的协同工作是模型性能的核心保障。本文将详细解析大模型中Embedding、前馈神经网络(FFN)、LayerNorm、Softmax、MoE、残差连接的作用及计算顺序,帮助理解Transformer类模型的底层逻辑。
一、核心组件的作用与计算逻辑
1. Embedding层:将文本转化为向量表示
作用:将离散的输入token(如词语、子词)转换为连续的低维向量,捕捉基础语义信息,并融入位置信息。
计算顺序:
- 步骤1:分词与token映射
原始文本通过分词工具(如BPE、WordPiece)拆分为token序列,每个token被映射为唯一的整数ID(如“自然语言”→[102, 345]
)。 - 步骤2:词嵌入(Word Embedding)
整数ID通过嵌入矩阵映射为固定维度的向量(如768维),公式:Embedding(token_id) = 嵌入矩阵[token_id]
。 - 步骤3:位置编码(Positional Encoding)
为解决Transformer对序列顺序不敏感的问题,叠加位置信息(可选两种方式):- 固定编码:使用正弦/余弦函数(原始Transformer),公式为:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
- 可学习编码:位置信息作为可训练参数(如GPT系列),通过反向传播优化。
- 固定编码:使用正弦/余弦函数(原始Transformer),公式为:
输出:融合了语义和位置信息的向量序列(形状:[batch_size, seq_len, hidden_dim]
)。
2. 残差连接(Residual Connection)与LayerNorm:稳定训练的核心
作用:
- 残差连接:缓解深层网络的梯度消失问题,确保信息流直接传递(类似“高速公路”机制)。
- LayerNorm:对输入向量进行标准化,减少分布偏移,加速训练收敛。
计算顺序:
大模型中主流采用Pre-Norm结构(与原始Transformer的Post-Norm区分),具体流程:
LayerNorm(输入) → 子层(注意力/FFN/MoE) → 残差连接(输入 + 子层输出)
- LayerNorm公式:
LayerNorm(x) = γ * (x - μ) / √(σ² + ε) + β
其中μ
为均值,σ²
为方差,γ
和β
为可学习参数(控制缩放和偏移)。 - 残差连接公式:
Output = Input + Sublayer(LayerNorm(Input))
3. 自注意力机制(含Softmax):捕捉上下文关联
作用:计算序列中每个token与其他token的相关性,动态聚合上下文信息(如“他”指代前文的“小明”)。
计算顺序:
- 步骤1:生成Q、K、V矩阵
输入向量通过3个线性层分别转换为Query(查询)、Key(键)、Value(值):
Q = Input × W_Q
,K = Input × W_K
,V = Input × W_V
(W_Q/W_K/W_V
为可学习权重矩阵)。 - 步骤2:计算注意力分数
通过缩放点积计算token间的相关性:
Score = (Q × K^T) / √d_k
(d_k
为Q/K的维度,缩放避免分数过大导致Softmax梯度消失)。 - 步骤3:Softmax归一化
将分数转换为概率分布,确保权重和为1:
Attention_Weight = Softmax(Score)
(对序列长度维度计算,如[batch_size, num_heads, seq_len, seq_len]
)。 - 步骤4:加权聚合Value
根据注意力权重对Value进行加权求和,得到上下文向量:
Context = Attention_Weight × V
。 - 步骤5:多头注意力融合
将多个头(如12头)的Context
拼接,通过线性层输出:
MultiHead_Output = Concat(Context_1, ..., Context_head) × W_O
。
4. 前馈神经网络(FFN)与MoE:增强非线性表达
(1)前馈神经网络(FFN)
作用:对注意力输出进行非线性变换,增强模型拟合能力。
计算顺序:
FFN(Input) = Linear2(ReLU(Linear1(Input)))
- 两层线性变换中间通过ReLU(或GELU)激活,例如:
Linear1
将768维映射到3072维,Linear2
映射回768维。
(2)MoE(混合专家模型)
作用:替代FFN,通过多个“专家网络”处理不同任务,在参数量增加时保持计算效率。
计算顺序:
- 步骤1:门控网络(Gating Network)
输入通过线性层和Softmax生成专家权重:
Expert_Weight = Softmax(Linear_Gate(Input))
。 - 步骤2:专家选择与加权
选择Top-K个专家(如Top2),用权重对专家输出加权:
MoE_Output = Σ(Expert_Weight_i × Expert_i(Input))
(专家网络结构同FFN,不同专家专注于不同语义特征)。
5. 输出层:生成最终预测
作用:将模型最后一层的隐藏向量转换为任务相关输出(如文本生成的下一个token概率)。
计算顺序:
- 对最终隐藏层进行线性变换,映射到词汇表维度:
Logits = Linear(Last_Hidden_State)
。 - (可选)通过Softmax生成概率分布:
Token_Prob = Softmax(Logits)
(生成任务中常用Greedy Search或采样策略选择下一个token)。
二、典型模型的完整计算流程(以GPT为例)
以GPT系列的解码器结构为例,完整顺序如下:
输入文本 → 分词 → Embedding + 位置编码 → [重复N层] → 输出层┌───────────────────────────────── 每层结构 ─────────────────────────────────┐│ LayerNorm → 多头自注意力(带因果掩码) → 残差连接 → LayerNorm → FFN/MoE → 残差连接 │└─────────────────────────────────────────────────────────────────────────────┘
- 因果掩码:确保预测时只关注前文token(避免泄露未来信息)。
- N层堆叠:如GPT-3有96层,通过深度提升模型容量。
三、关键细节总结
- LayerNorm位置:主流模型(GPT-3、LLaMA)采用Pre-Norm(先归一化再进子层),训练更稳定。
- 残差连接必要性:每个子层(注意力/FFN/MoE)后必须接残差,否则深层网络难以训练。
- MoE与FFN的选择:MoE在大参数量模型(如100B+)中更高效,FFN在中小模型中更常用。
- Softmax的应用场景:仅在注意力权重计算和输出层概率生成时使用,其他场景无需归一化。
通过理解上述组件的协作逻辑,可更清晰地把握大模型的训练与推理过程,为模型调优或自定义架构提供基础。