λLLM Wiki

Transformer

Transformer 是 Vaswani et al. (2017) 提出的序列建模架构,完全基于注意力机制(Attention Mechanism),摒弃了循环(RNN)和卷积(CNN)。它是当前几乎所有大语言模型的基础架构。

本页先描述原始论文的设计,再逐项对比现代 Transformer 架构(以 GPT、LLaMA、DeepSeek 等为代表)的演变。


原始架构

整体结构:Encoder-Decoder

原始 Transformer 采用 编码器-解码器(Encoder-Decoder) 结构,用于序列到序列任务(机器翻译):

  • EncoderN=6N=6 层,每层包含 (1) multi-head self-attention + (2) position-wise FFN
  • DecoderN=6N=6 层,每层包含 (1) masked multi-head self-attention + (2) encoder-decoder cross-attention + (3) position-wise FFN
  • 每个子层都有残差连接(Residual Connection) + 层归一化(Layer Normalization)LayerNorm(x+Sublayer(x))\text{LayerNorm}(x + \text{Sublayer}(x))

Scaled Dot-Product Attention

Attention(Q,K,V)=softmax(QKdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) V

  • QQ(Query)、KK(Key)、VV(Value)分别由输入经线性投影得到
  • 除以 dk\sqrt{d_k} 防止点积过大导致 softmax 进入梯度饱和区
  • 复杂度 O(n2d)O(n^2 \cdot d),其中 nn 为序列长度,dd 为维度

Multi-Head Attention

MultiHead(Q,K,V)=Concat(head1,,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O

将 Q/K/V 分别投影到 hh 个子空间(h=8h=8dk=dv=64d_k = d_v = 64),各头独立做 attention,最后拼接并投影。多头使模型能同时关注不同位置的不同表示子空间。

Position-wise FFN

FFN(x)=ReLU(xW1+b1)W2+b2\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2

内部维度 dff=4×dmodel=2048d_{ff} = 4 \times d_\text{model} = 2048。逐位置独立应用,等价于两个 1×11 \times 1 卷积。

位置编码

PE(pos,2i)=sin(pos100002i/dmodel),PE(pos,2i+1)=cos(pos100002i/dmodel)PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_\text{model}}}\right), \quad PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_\text{model}}}\right)

加到输入 embedding 上。由于 self-attention 本身是置换不变的(不区分 token 顺序),位置编码是引入序列顺序信息的唯一途径。

参数共享

输入 embedding、输出 embedding 和 pre-softmax 线性层共享同一权重矩阵。

训练配置(Base 模型)

dmodel=512d_\text{model}=512h=8h=8N=6N=6,65M 参数,8× P100 训练 12 小时。


原始架构 vs 现代架构

现代大语言模型在原始 Transformer 基础上做了大量修改。以下按组件逐项对比。

1. 整体结构:Encoder-Decoder → Decoder-Only

原始 Transformer现代 LLM
结构Encoder-DecoderDecoder-Only
用途序列到序列(翻译)自回归语言建模
Cross-attention有(decoder 对 encoder)

GPT 系列确立了 Decoder-Only 范式:去掉 encoder 和 cross-attention,只保留 decoder 的 masked self-attention + FFN。所有输入(prompt + response)拼成一个序列做自回归生成。这种简化使得训练和推理流程统一,且更适合大规模无监督预训练。

极少数现代模型仍用 Encoder-Decoder(如 T5、BART),但在大语言模型领域 Decoder-Only 已成主流。

2. 归一化:Post-Norm → Pre-Norm (RMSNorm)

原始现代
位置Post-Norm:LN(x+Sublayer(x))\text{LN}(x + \text{Sublayer}(x))Pre-Normx+Sublayer(Norm(x))x + \text{Sublayer}(\text{Norm}(x))
归一化类型Layer NormalizationRMSNorm

原始架构在子层之后做 LayerNorm(Post-Norm)。现代架构几乎都改为在子层之前做归一化(Pre-Norm),因为 Pre-Norm 的梯度流更稳定,深层模型训练更容易收敛。

RMSNorm(Root Mean Square Normalization) 进一步简化了 LayerNorm——去掉均值中心化,只做方差归一化:

RMSNorm(x)=x1di=1dxi2+ϵγ\text{RMSNorm}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^2 + \epsilon}} \cdot \gamma

计算更快,效果相当。LLaMA、GPT-NeoX、DeepSeek 等均采用 RMSNorm。

3. 激活函数:ReLU → SwiGLU

原始现代
FFN 激活ReLUSwiGLU / GeGLU
FFN 结构两层线性三层线性(gate 机制)

原始 FFN 用 ReLU 激活:FFN(x)=ReLU(xW1)W2\text{FFN}(x) = \text{ReLU}(xW_1)W_2

现代架构广泛采用 SwiGLU(Shazeer, 2020),引入门控机制:

SwiGLU(x)=(Swish(xWgate)xWup)Wdown\text{SwiGLU}(x) = (\text{Swish}(xW_\text{gate}) \odot xW_\text{up}) W_\text{down}

其中 Swish(x)=xσ(x)\text{Swish}(x) = x \cdot \sigma(x)。SwiGLU 引入了第三个权重矩阵(gate),需要更多参数,但在同等计算量下效果显著更好。为保持参数量一致,dffd_{ff} 通常相应调小(如从 4d4d 调到 83d\frac{8}{3}d)。

4. 位置编码:正弦 → RoPE

原始现代
方式绝对正弦编码(加到 embedding)RoPE(旋转位置编码,作用在 Q/K)
外推能力有限更好(结合 NTK 等扩展)

原始正弦位置编码是绝对的——每个位置有一个固定向量加到 embedding 上。

RoPE(Rotary Position Embedding)(Su et al., 2021)把位置信息编码为 Q 和 K 向量的旋转角度:

RoPE(q,pos)=qeiposθ\text{RoPE}(q, pos) = q \cdot e^{i \cdot pos \cdot \theta}

RoPE 的核心优势是位置信息隐含在 QKQ \cdot K^\top 的内积中,使得注意力分数只依赖相对位置posqposkpos_q - pos_k),而非绝对位置。结合 NTK-aware scaling 等方法,RoPE 对训练长度之外的序列有更好的外推能力。LLaMA、Qwen、DeepSeek 等主流模型均采用 RoPE。详细推导见 rope

5. 注意力机制:MHA → GQA / MLA

原始现代
注意力MHA(每头独立 Q/K/V)GQAMLA
KV heads 数量hh(与 Q heads 相同)远少于 hh
推理 KV Cache显著减小

原始 MHA(Multi-Head Attention) 中,hh 个头各有独立的 K 和 V 投影。推理时,每个头的 K/V 都要缓存(即 kv-cache),显存占用与头数成正比。

GQA(Grouped Query Attention)(Ainslie et al., 2023)让多个 Q 头共享同一组 K/V 头。例如 LLaMA 2 70B 用 8 个 KV 头服务 64 个 Q 头,KV Cache 缩小到 MHA 的 1/81/8,推理效率大幅提升,质量损失很小。

MQA(Multi-Query Attention) 是 GQA 的极端情况:所有 Q 头共享 1 组 K/V。

MLA(Multi-head Latent Attention)(DeepSeek V2)更进一步:将 K/V 压缩到一个低秩潜在向量中,kv-cache 仅需存储一个 KV head 的量。

6. FFN 层:Dense → MoE

原始部分现代架构
FFN 结构Dense(全参数参与)MoE(稀疏激活)
计算量固定与激活专家数 kk 成正比

原始 FFN 是 Dense 的——每个 token 经过完整的两层(或三层 SwiGLU)线性变换。

MoE(Mixture of Experts) 将 FFN 拆成多个小专家,每个 token 通过 Gate 选择 Top-kk 个专家计算。参数总量极大但单 token 计算量可控。

DeepSeek V3 采用 256 个细粒度专家(k=8k=8)+ shared experts。MoE 涉及专门的 EP 策略。并非所有现代模型都用 MoE——LLaMA、GPT-4o 等仍为 Dense。

7. 规模

原始现代
参数量65M (base) / 213M (big)7B ~ 700B+
层数632 ~ 126
dmodeld_\text{model}512 / 10244096 ~ 18432
训练数据4.5M 句对数万亿 token

规模增长了三到四个数量级。这使得许多原始论文中无关紧要的设计选择(如归一化位置、激活函数)变得关键——在超大规模下,训练稳定性和效率的边际差异会被放大。


总结对比表

组件原始 Transformer (2017)现代 LLM (2024-2025)
整体结构Encoder-DecoderDecoder-Only
归一化Post-LNPre-RMSNorm
FFN 激活ReLUSwiGLU
FFN 结构DenseDense 或 MoE
位置编码绝对正弦RoPE
注意力MHAGQA / MLA
参数量65M-213M7B-700B+

这些改动并非凭空出现,而是在规模扩大过程中逐步被验证的:Pre-Norm 解决了深层训练不稳定,SwiGLU 在同等算力下提升表达能力,RoPE 改善长序列建模,GQA/MLA 降低推理成本,MoE 在参数量和计算量之间找到新的平衡点。


不变的核心

尽管有这些修改,Transformer 的核心设计至今未变:

  • Self-attention 仍是序列建模的基础算子——O(n2)O(n^2) 复杂度的根本结构没有改变
  • 残差连接 + 归一化 仍是层间连接的标准方式
  • 自回归生成(逐 token 生成,masked attention)仍是主流 LLM 的推理范式
  • FFN 层 仍占据模型参数的绝大部分

相关页面

Comments