本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

Transformer 网络结构总览

Transformer 网络结构总览

更新于 2026-04-08

简介

Transformer 是 2017 年由 Vaswani 等人在论文 “Attention Is All You Need” 中提出的神经网络架构。它完全基于 Attention 机制,摒弃了此前主流的循环(RNN)和卷积(CNN)结构,成为现代大语言模型(LLM)的基石。

GPT、LLaMA、BERT 等知名模型都建立在 Transformer 之上。理解 Transformer 的整体架构,是深入学习 Attention、KV Cache、Flash Attention 等进阶主题的前提。

直觉理解:从 RNN 到 Transformer

RNN 的瓶颈

RNN(包括 LSTM、GRU)按时间步顺序处理序列:t1t2tnt_1 \to t_2 \to \cdots \to t_n。每个时间步必须等待上一步完成,存在两个核心问题:

  1. 无法并行:序列长度为 nn 时,计算复杂度是 O(n)O(n) 个串行步骤,无法充分利用 GPU 并行能力。
  2. 长距离依赖衰减:信息需要逐步传递,经过多步后容易丢失或衰减。

Attention 的解法

Transformer 用 Self-Attention 替代了循环结构:每个位置可以直接关注序列中任意其他位置,一步完成全局信息聚合。

  • 并行度:所有位置的 Attention 可以同时计算
  • 长距离:任意两个位置之间的路径长度为 O(1)O(1)

这种设计使 Transformer 在长序列建模和训练效率上远超 RNN。

架构总览

下图展示了一个 Pre-LayerNorm 变体的 Transformer Block 内部结构。现代 LLM(GPT-2、LLaMA 等)几乎都采用这种变体,而非原始论文中的 Post-LayerNorm。

Transformer Block ×NInput Embeddings(B, S, H)Positional Encoding(B, S, H)LayerNorm(B, S, H)Multi-Head Self-Attention(B, S, H)⊕ Residual Add(B, S, H)LayerNorm(B, S, H)Feed-Forward (MLP)(B, S, 4H)→(B, S, H)⊕ Residual Add(B, S, H)residualresidual→ Output / Next Block
Pre-LayerNorm Transformer Block 结构(现代 LLM 常用变体)

一个完整的 Transformer 模型由 NN 个这样的 Block 堆叠而成。输入首先经过 Embedding 和 Positional Encoding,然后逐层通过每个 Block,最终输出用于下游任务(如语言建模的 next-token prediction)。

下图展示了以 GPT 为代表的 Decoder-only LLM 的完整架构:从输入文本到预测下一个 Token 的全流程。你可以切换不同模型,查看它们的具体超参数配置。

选择模型查看配置:
输入文本Tokenizer(B, S)Token Embedding [V×H](B, S, 768)+ Positional EncodingLearned Abs.×12Transformer Block #1Transformer Block #2Transformer Block #12Final LayerNormLNLM Head (Linear)(B, S, 50257)Softmax下一个 TokenBlock 内部LNSelf-Attention⊕ ResidualLNFFN (MLP) (GELU)⊕ Residual
层数: 12隐藏维度: 768词表大小: 50,257上下文长度: 1,024总参数: 117M
Decoder-only LLM 完整架构 — 从输入文本到下一个 Token 的完整数据流

一个 Transformer Block 算”一层”吗? 这取决于语境。业界说的”层数”(如 LLaMA-7B 有 32 层)指的是 Block 数——每个 Block 内部包含 Self-Attention + FFN 两个子层(sub-layer),但整个 Block 算作一层。所以”32 层”= 32 个 Block = 64 个子层。论文和代码中 n_layers / num_hidden_layers 这个参数,指的就是 Block 的数量。

各组件详解

Input Embedding + Positional Encoding

Token Embedding 将离散的 token ID 映射为连续向量:

xi=Embed(tokeni)RH\mathbf{x}_i = \text{Embed}(\text{token}_i) \in \mathbb{R}^{H}

其中 HH 是隐藏层维度(hidden size)。对于整个序列,输入张量的形状为:

输入:(B=batch,S=seq_len,H=hidden)

Positional Encoding 为每个位置注入顺序信息。原始 Transformer 使用固定的正弦/余弦编码:

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)

现代模型已发展出多种改进方案:

方案代表模型特点
正弦/余弦(固定)原始 Transformer不可学习,支持外推
可学习绝对位置编码GPT-2, BERT直接学习每个位置的向量
RoPE (旋转位置编码)LLaMA, Qwen在 Attention 计算中通过旋转编码相对位置
正弦/余弦 (固定)
pos 0pos 1pos 2pos 3pos 4pos 5pos 6pos 7
每个维度不同频率的波,固定不可学习,支持外推到更长序列
可学习绝对位置
pos 0pos 1pos 2pos 3pos 4pos 5pos 6pos 7
训练时学习每个位置的向量,简单直接但外推能力差
RoPE (旋转)
pos 0pos 1pos 2pos 3pos 4相邻 token 旋转 θ 角度
在 Attention 计算中通过旋转编码相对位置,兼顾绝对位置和相对距离

LayerNorm

Layer Normalization 对每个 token 的隐藏向量做归一化:

LayerNorm(x)=xμσ+ϵγ+β\text{LayerNorm}(\mathbf{x}) = \frac{\mathbf{x} - \mu}{\sigma + \epsilon} \cdot \gamma + \beta

其中 μ,σ\mu, \sigma 是沿隐藏维度计算的均值和标准差,γ,β\gamma, \beta 是可学习的缩放和偏移参数。

Pre-LN vs Post-LN:

变体公式特点
Post-LN(原始论文)LN(x+Attn(x))\text{LN}(\mathbf{x} + \text{Attn}(\mathbf{x}))LayerNorm 在残差加法之后
Pre-LN(现代变体)x+Attn(LN(x))\mathbf{x} + \text{Attn}(\text{LN}(\mathbf{x}))LayerNorm 在子层之前
  • 原始 Transformer(2017)使用 Post-LN:LN(x+SubLayer(x))\text{LN}(\mathbf{x} + \text{SubLayer}(\mathbf{x}))
  • GPT-2 起,多数模型切换到 Pre-LN:x+SubLayer(LN(x))\mathbf{x} + \text{SubLayer}(\text{LN}(\mathbf{x})),因为它的训练更稳定
  • LLaMA 进一步用 RMSNorm 替代 LayerNorm,去掉均值中心化和偏置项,计算更高效
Post-LN (原始)Pre-LN (现代)InputAttention+LayerNormFFN+LayerNorm梯度必须穿过 LNInputLayerNormAttention+LayerNormFFN+梯度高速公路(残差直通路径)

Self-Attention(概述)

Self-Attention 是 Transformer 的核心。每个位置通过 Query、Key、Value 三组投影与序列中所有位置交互:

Attention(Q,K,V)=softmax ⁣(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right) V

其中 dkd_k 是每个 attention head 的维度。Multi-Head Attention 将隐藏维度拆分为多个 head 并行计算,再拼接输出:

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

Self-Attention 的细节(QKV 数据结构、计算流程、Multi-Head 机制)将在后续文章中展开。

Feed-Forward Network (MLP)

每个 Transformer Block 中的 FFN 是一个逐位置(position-wise)的两层全连接网络:

FFN(x)=GELU(xW1+b1)W2+b2\text{FFN}(\mathbf{x}) = \text{GELU}(\mathbf{x} W_1 + b_1) W_2 + b_2
  • W1RH×4HW_1 \in \mathbb{R}^{H \times 4H}:将维度从 HH 扩展到 4H4H(中间维度)
  • W2R4H×HW_2 \in \mathbb{R}^{4H \times H}:将维度从 4H4H 压缩回 HH
  • 激活函数:原始论文用 ReLU,GPT-2 使用 GELU,LLaMA 使用 SwiGLU

激活函数的演进:ReLU → GELU → SwiGLU

激活函数的选择对 FFN 的表达能力有直接影响。LLM 的演进中经历了三代:

-101234-4-2024ReLUGELUSwish (SiLU)
Swish (SiLU)
f(x) = x · σ(x)
优势平滑;自门控 — 输入本身决定"放行"多少;SwiGLU 的激活基础
劣势负区域的负值可能引入噪声;单独用不如 SwiGLU
采用者SwiGLU 的激活部分 → LLaMA, Mistral, Gemma

FFN 结构对比

标准 FFN(2 个权重矩阵)xW₁ (H→4H)GELUW₂ (4H→H)outSwiGLU FFN(3 个权重矩阵)xW_gate (H→d)SwishW_up (H→d)W_down (d→H)out

为什么 SwiGLU 胜出? 关键在于门控机制(Gated Linear Unit)。标准 FFN 用 2 个权重矩阵:xW1xW_1 过激活函数后乘 W2W_2。而 SwiGLU 用 3 个权重矩阵,多出的 WgateW_{\text{gate}} 形成一个数据相关的门

SwiGLU(x)=Swish(xWgate)门控:决定"放行多少"(xWup)值:提供"放行什么"\text{SwiGLU}(\mathbf{x}) = \underbrace{\text{Swish}(\mathbf{x} W_{\text{gate}})}_{\text{门控:决定"放行多少"}} \odot \underbrace{(\mathbf{x} W_{\text{up}})}_{\text{值:提供"放行什么"}}

这种门控让网络能选择性地抑制或放大不同维度的信息,而 ReLU/GELU 只是对每个维度独立做非线性变换。Shazeer (2020, “GLU Variants Improve Transformer”) 的实验表明,在相同参数量下 SwiGLU 在 perplexity 上显著优于 GELU 和 ReLU。

参数量的权衡:SwiGLU 多了一个 WgateW_{\text{gate}} 矩阵(3 个矩阵 vs 2 个),为保持总参数量不变,FFN 中间维度从 4H4H 缩小到约 83H\frac{8}{3}H。这就是为什么 LLaMA-7B 的中间维度是 11008(83×4096\approx \frac{8}{3} \times 4096)而不是 GPT 风格的 4×4096=163844 \times 4096 = 16384

张量形状变化过程:

FFN 输入:(B=batch,S=seq_len,H=hidden)

→ 经过 W1W_1

中间层:(B=batch,S=seq_len,4H=intermediate)

→ 经过 W2W_2

FFN 输出:(B=batch,S=seq_len,H=hidden)
输入(B, S, H)Linear₁(B, S, 4H)GELU(B, S, 4H)Linear₂(B, S, H)↑ "菱形"结构:先扩维再压缩 ↑

Residual Connection(残差连接)

每个子层(Self-Attention 和 FFN)都被一个残差连接包裹:

output=x+SubLayer(x)\mathbf{output} = \mathbf{x} + \text{SubLayer}(\mathbf{x})

残差连接的作用:

  1. 缓解梯度消失:梯度可以通过”跳跃连接”直接回传,避免深层网络的梯度衰减
  2. 保持信息流:即使子层输出为零,原始信息也不会丢失
  3. 使深层堆叠成为可能:没有残差连接,堆叠 32 层甚至 126 层几乎不可能训练

注意:残差连接要求子层的输入和输出维度相同,这就是为什么 FFN 的输出维度必须回到 HH

张量形状追踪

以 GPT-2 Small(H=768H=768, 序列长度 S=1024S=1024, batch size B=1B=1)为例,追踪完整的数据流:

阶段张量形状说明
Token IDs(1,1024)(1, 1024)整数序列
Token Embedding(1,1024,768)(1, 1024, 768)查表得到向量
+ Positional Encoding(1,1024,768)(1, 1024, 768)加上位置向量
LayerNorm(1,1024,768)(1, 1024, 768)形状不变
Q, K, V 投影每个 (1,1024,768)(1, 1024, 768)线性变换
拆分为 12 个 head每个 (1,12,1024,64)(1, 12, 1024, 64)768/12=64768 / 12 = 64 per head
Attention 输出(1,1024,768)(1, 1024, 768)拼接所有 head
Residual Add(1,1024,768)(1, 1024, 768)加上输入
LayerNorm(1,1024,768)(1, 1024, 768)形状不变
FFN 中间层(1,1024,3072)(1, 1024, 3072)768×4=3072768 \times 4 = 3072
FFN 输出(1,1024,768)(1, 1024, 768)压缩回原维度
Residual Add(1,1024,768)(1, 1024, 768)加上输入

上述过程重复 12 次(12 层),最终输出 (1,1024,768)(1, 1024, 768) 的张量送入 LM Head 进行 next-token prediction。

Encoder-Decoder vs Decoder-only

原始 Transformer:Encoder-Decoder

原始 Transformer 为机器翻译设计,采用 Encoder-Decoder 结构:

  • Encoder(6 层):对源序列做双向 Self-Attention(每个位置可以关注所有位置)
  • Decoder(6 层):
    • Masked Self-Attention:只能关注当前位置及之前的位置(因果 mask),防止信息泄漏
    • Cross-Attention:对 Encoder 输出做 Attention,获取源序列信息

Decoder-only:现代 LLM 的主流

GPT 系列开创了 Decoder-only 架构,去掉 Encoder 和 Cross-Attention:

  • 只保留 Masked Self-Attention(因果注意力)
  • 每个 token 只能看到自己和之前的 token
  • 统一了”理解”和”生成”:用同一架构完成所有任务
结构代表模型Attention 类型典型应用
Encoder-Decoder原始 Transformer, T5, BART双向 + 因果 + 交叉翻译、摘要
Encoder-onlyBERT, RoBERTa双向分类、NLU
Decoder-onlyGPT 系列, LLaMA, Qwen因果(Masked)文本生成、通用 LLM
双向 (Encoder)
IloveNLPandML!IloveNLPandML!
所有位置互相可见 — BERT 等 Encoder 模型使用
因果 (Decoder-only)
IloveNLPandML!IloveNLPandML!
每个 token 只能看到自己和之前的位置 — GPT、LLaMA 等使用
交叉 (Encoder-Decoder)
IloveNLPandML!I→love→NLP→and→ML→!→
Decoder 可看到所有 Encoder 位置 — 原始 Transformer、T5 使用
可见 遮罩

目前几乎所有主流 LLM(GPT-4、Claude、LLaMA、Qwen、Gemini)都采用 Decoder-only 架构。

典型模型超参数对比

参数原始 TransformerGPT-2 SmallGPT-2 XLLLaMA-7BLLaMA-3.1-8B
隐藏维度 HH512768160040964096
层数 LL6 (Enc+Dec)12483232
注意力头数 hh812253232
Head 维度646464128128
FFN 中间维度2048307264001100814336
词表大小37000502575025732000128256
上下文长度N/A102410242048131072
总参数量65M117M1.5B6.7B8B
LayerNormPost-LNPre-LNPre-LNPre-RMSNormPre-RMSNorm
激活函数ReLUGELUGELUSwiGLUSwiGLU
位置编码正弦/余弦可学习绝对可学习绝对RoPERoPE

注:Head 维度 = H/hH / h。LLaMA 系列使用 GQA(Grouped-Query Attention),其中 LLaMA-3.1-8B 的 KV head 数为 8(而非 32)。

推荐学习资源

如果你想更深入地学习 Transformer 架构,以下是我们精选的资源:

经典论文

  • Vaswani et al.《Attention Is All You Need》 — Transformer 架构奠基论文,提出 self-attention 和 multi-head attention 机制,所有后续工作的源头。
  • Lilian Weng《The Transformer Family Version 2.0》 — 系统梳理 Transformer 各种变体和改进,涵盖长上下文、高效注意力、自适应建模等方向,引用丰富的综述性参考。

视频课程

  • 3Blue1Brown — Attention in Transformers (Neural Networks 系列) — 以精美数学动画闻名,直觉化解释 attention 机制的几何意义。Chapter 6 专门讲 attention,视觉效果极为出色。
  • Andrej Karpathy “Neural Networks: Zero to Hero” — 从零手写 GPT,“Let’s build GPT” 一集(约 2 小时)从头实现 Transformer,是理解实现细节的最佳资源。配套 GitHub 代码和 Jupyter Notebook。

博客与教程(图文并茂)

  • Jay Alammar《The Illustrated Transformer》图文并茂的典范之作。通过数十张精心绘制的示意图逐步拆解 Transformer 架构,包括 encoder-decoder 堆栈、self-attention 的 Q/K/V 计算、multi-head attention、位置编码等。公认的最佳入门图解。
  • Jay Alammar《Visualizing Neural Machine Translation》 — Illustrated Transformer 的前置阅读,图解 seq2seq + attention 机制的工作原理,帮助理解 attention 的起源。
  • Harvard NLP《The Annotated Transformer》 — 对原始论文的逐行代码注释实现(PyTorch),将论文公式与代码一一对应,适合想深入理解每一行代码含义的读者。

交互实验

  • Transformer Explainer (Georgia Tech / Polo Club) — 浏览器内运行 GPT-2 模型,实时观察 attention 计算过程。IEEE VIS 2024 发表,交互体验极佳。(poloclub.github.io/transformer-explainer/)
  • Brendan Bycroft《LLM Visualization》 — GPT 推理过程的 3D 交互可视化,可以逐层观察数据流动和矩阵运算,视觉效果震撼。(bbycroft.net/llm)
  • Financial Times《Generative AI Explained》 — FT 数据新闻团队制作的可视化叙事,以精美交互动画展示 LLM 工作原理。(ig.ft.com/generative-ai/)

总结

本文梳理了 Transformer 的整体架构:

  1. 核心思想:用 Self-Attention 替代循环结构,实现并行计算和全局信息聚合
  2. Block 组成:每个 Transformer Block 包含 LayerNorm → Self-Attention → Residual → LayerNorm → FFN → Residual
  3. 现代演进:从 Post-LN 到 Pre-LN,从 LayerNorm 到 RMSNorm,从 ReLU 到 SwiGLU,从固定位置编码到 RoPE
  4. 架构选择:现代 LLM 几乎都采用 Decoder-only 架构

在后续文章中,我们将深入每个组件的细节:

  • QKV 的数据结构与直觉:理解 Query、Key、Value 到底是什么
  • Attention 计算详解QKTQK^T 矩阵乘法的完整流程
  • Multi-Head Attention:多头并行的原理和实现
  • KV Cache:推理加速的关键技术