Skip to content

大模型架构基础:Transformer 内部结构详解

摘要: 针对大模型技术学习者对 Transformer 内部机制的系统性理解需求,本文以「数据流全景→组件逐层拆解→完整架构串讲」为主线,依次剖析了分词与嵌入的预处理、Attention 注意力机制(QKV 三部曲、缩放与 Softmax、自注意力与交叉注意力)、FFN 前馈网络(从经典升维降维到 SwiGLU 门控)、RoPE 旋转位置编码(时钟模型与相对距离直觉)、RMSNorm 归一化(从 LayerNorm 到 Pre-Norm 的演进)以及 LM Head 与 Temperature 的输出控制六大组件。每个组件的讲解均遵循「是什么→为什么这样设计→相比前代方案有何优势」的逻辑链路,最终将所有组件串联为完整的数据流,使读者能够理解 GPT、Claude、DeepSeek 等主流大模型共享的架构基因与设计取舍。

📄
图集速览:大模型架构基础如果你对大模型架构还比较陌生,建议先读这篇图集速览。用可视化图片集合和要点摘要,帮你快速理清 Transformer 内部结构与核心组件。
TransformerAttentionLLM架构

1. 引言

全篇内核

Transformer = (Attention + FFN) × N 层 + 残差连接 + 归一化。把这个结构做得足够大、喂足够多数据、训足够长时间,就是今天的大模型。

整个 Transformer 本质上是在反复做一件事——让每个 token 的向量表示与序列中其他 token 的向量进行加权交互,从而在向量中融入上下文信息。

前两篇我们画出了 AI 的版图,然后钻进了神经网络内部,理解了神经元如何计算、网络如何学习、深度为什么重要。现在来到最后一道门:Transformer 本身长什么样?

如果说神经网络是 LLM 的血肉,那 Transformer 就是 LLM 的骨架。GPT、Claude、DeepSeek、Qwen——所有这些模型的名字不同、规模不同、训练数据不同,但它们共享同一套架构基因。把这套基因拆开来看懂,你就理解了当代 AI 最核心的技术底座。

2. 全景数据流

在逐个拆解组件之前,先把整条链路铺开。一条文本从输入到输出,到底经历了什么?

整个过程分两步预处理、一个核心循环、一步输出:

figure

2.1 预处理第一道:分词

分词(Tokenization)将原始文本切分为模型可处理的最小单元(Token)的过程。这是文本进入模型的第一道工序,计算机不认识文字,只认识数字,所以必须先拆词,再映射为数字 ID。

例句: "AI 改变世界"

中文 Tokenizer(如 Qwen)切分结果:
["AI", "改变", "世界"]           → Token IDs: [10449, 43290, 34550]

英文 Tokenizer(如 GPT)切分结果:
["Hello", " world", "!"]        → Token IDs: [15496, 995, 0]

Token(词元):分词后的最小单元。中文里一个 Token 可能是一个字、一个词或一个标点;英文里可能是一个单词、一个子词或一个字母。

为什么需要分词?

  1. 统一输入格式:无论输入是中文、英文还是代码,最终都变成一串数字(Token IDs),模型只认这个
  2. 压缩语义分词不是按字符拆,而是按语义单元拆——「改变」作为一个整体 Token 比拆成「改」「变」两个字符更高效

主流分词算法:

算法原理代表模型
BPE(字节对编码)从字符开始,反复合并出现频率最高的相邻对GPT-2/3/4、LLaMA
WordPiece与 BPE 类似,但按概率增益选择合并对BERT
SentencePiece将文本视为 Unicode 字节流,语言无关LLaMA、Mistral、Qwen
Unigram从大词表出发,反复删除低频词T5、XLNet

词表大小的影响:

  • 词表太小:常见词被拆得太碎 → 「人工智能」可能被拆成「人」「工」「智」「能」四个 Token,信息密度低
  • 词表太大:Embedding 矩阵占用参数量巨大 → 词表从 5 万扩到 15 万,Embedding 参数翻三倍
  • 中文尤其需要大词表(10-25 万),否则常用汉字被过度拆分

特殊 Token:

Token含义
<bos> / <s>序列开始标记(Beginning of Sequence)
<eos> / </s>序列结束标记(End of Sequence)——模型输出这个就表示「说完了」
<pad>填充标记——批量处理时补齐长度到一致
<unk>未知词标记——碰到词表外的词用这个替代
<sep>分隔标记——用于区分输入的不同部分

2.2 预处理第二道:嵌入

嵌入(Embedding)将离散的 Token ID 映射为连续向量表示的过程

分词得到的是一串整数 Token ID(如 10449),但神经网络无法直接对整数做数学运算,必须先将 ID 转换为高维浮点数向量,才能进行后续的 Attention、FFN 等计算。

Embedding 层就是一张巨大的可训练字典——用 Token ID 做索引,查出对应的 d_model 维向量。语义相近的词在高维空间中靠得更近:「猫」和「狗」的向量夹角约 15°,「猫」和「宇宙」的向量夹角近 90°。

Embedding 的工作原理——查表:

Embedding 矩阵本质上是一张巨大的可学习字典:
       (vocab_size × d_model,即 词表大小 × 向量维度)

       ┌──────────────────────────┐
       │ 词0:  [0.1, -0.3, ...]   │  ← 第 0 行
       │ 词1:  [-0.2, 0.5, ...]   │  ← 第 1 行
       │ ...                      │
Token ID ──→ 查第 ID 行 ──→ 取出该行向量
       │ ...                      │
       │ 词N:  [0.4, 0.1, ...]   │  ← 第 N 行
       └──────────────────────────┘

关键特性——语义相近的词,向量也相近:

经过训练后,Embedding 空间自动形成语义结构。相似的词在空间中靠得更近:

余弦相似度:
cos("猫", "狗")   ≈ 0.85   → 都是宠物,向量夹角小
cos("猫", "汽车") ≈ 0.12   → 毫不相关,向量夹角大
cos("猫", "宇宙") ≈ 0.05   → 毫不相关,向量夹角很大

著名的类比:"国王" - "男性" + "女性" ≈ "女王"

Embedding 矩阵的参数量:

Embedding 矩阵尺寸 = 词表大小 × 向量维度。有些模型还同时维护一个等大的输出矩阵(未做权重共享时),这部分参数可占总参数的 15-30%:

模型词表大小d_modelEmbedding 参数量
GPT-250,2577680.39 亿
GPT-350,25712,2886.17 亿
LLaMA 2 7B32,0004,0961.31 亿
Qwen 2.5 7B152,0643,5845.45 亿
DeepSeek-V3129,2807,1689.27 亿

与 Tokenizer 的关系——配套使用: 每个预训练模型都绑定了特定的 Tokenizer 和 Embedding。分词和嵌入是紧密耦合的——用 LLaMA 的 Embedding 必须用 LLaMA 的 Tokenizer,否则 Token ID 对不上,查表查出来的是完全错误的向量。

2.3 核心循环:Transformer Block × N 层

预处理得到的向量序列进入 Transformer 的主体——十几个到上百个结构完全相同的 Block 层层堆叠。每个 Block 内部交替执行两个操作:Attention 让所有 token 互相「交流」,FFN 让每个 token 独立「思考」。

无论经过多少层,向量的维度始终不变(都是 d_model),所以 Block 可以无限制堆叠。

2.4 输出:LM Head + Softmax.

最后一层 Block 输出的隐向量仍然在 d_model 维的语义空间中。要变成人类可读的文字,需要用 LM Head 把它投影回词表空间——得到一个长度等于词表大小的 Logits 向量——再经过 Softmax 转成概率分布,选概率最高的那个词元输出。

3 Transformer 架构

Transformer 是一种基于自注意力机制(Self-Attention)的神经网络架构,由 Google 在 2017 年论文《Attention Is All You Need》中提出。它的核心思想是:抛弃传统的循环结构(RNN),让序列中每个位置都能直接关注所有其他位置,从而实现完全并行化的序列建模。

3.1 为什么需要 Transformer?

在 Transformer 出现之前,处理文本序列的标配是 RNN 和 LSTM,但它们有一个致命问题:串行

RNN 的问题(串行):
Token 1 → Token 2 → Token 3 → ... → Token N
   ↓         ↓         ↓              ↓
 h₁  ──→  h₂  ──→  h₃  ──→ ... ──→  hₙ    ← 必须等前一步算完才能算下一步

RNN 处理第 N 个词的时候,必须等前面 N-1 个词全部算完。这带来了两个直接后果:

  • 第一,无法并行训练——GPU 的大量核心闲着等前面算完。
  • 第二,长距离依赖极差——经过多层传递后,开头的关键信息几乎被「遗忘」干净了。

你让 RNN 读一篇一万字的文章然后回答一个关于第一段的问题,它大概率会答错。

Transformer 在 2017 年用一句话破局:让每个 token 直接看到所有其他 token。不再逐字传递,而是一次性计算序列中所有 token 两两之间的关系——全局并行

Transformer 的突破:用 Attention 机制让每个 token 直接"看到"序列中所有其他 token,彻底并行化。

Transformer(并行):
Token 1 ───────────┐
Token 2 ───────────┼──→ 一次性计算所有 token 间的两两关系
Token 3 ───────────┘

这就好比把 RNN 的「传话游戏」换成了「圆桌会议」:每个人都能直接和房间里的任何一个人对话,不需要等人传话。因此,Transformer 成了现代大语言模型(LLM)的基石架构,GPT、LLaMA、Claude、Qwen、DeepSeek 等所有主流模型均基于其 Decoder 变体构建。Transformer 论文最初提出的是 Encoder-Decoder 架构,但后来的发展分化出三种范式:

  • Decoder-Only(GPT、LLaMA、Qwen、DeepSeek、Claude):只看左侧上文,单向注意力,专攻文本生成,这是当前 LLM 的唯一主流选择。
  • Encoder-Only(BERT、RoBERTa):双向注意力,同时看左右上下文,适合理解类任务如分类、实体识别。
  • Encoder-Decoder(原始 Transformer、T5、BART):Encoder 理解输入,Decoder 生成输出,适合翻译和摘要。

为什么 LLM 清一色选 Decoder-Only?

自回归生成本身就是单向的——你在写第 100 个 token 时,第 101 个 token 还没出生。Decoder 的单向注意力恰好匹配生成任务的天然约束。

4. Transformer Block 核心结构

以下是几乎所有 LLM 采用的标准 Block 结构——也叫 Pre-Norm 结构:

figure

每个 Block 包含两个子层,每个子层都遵循同一个模式:先归一化,再计算,最后加回原输入

  • 子层 1: Attentionx = x + Attention(RMSNorm(x)).先对输入做 RMSNorm,然后送入多头自注意力——Q/K/V 投影、RoPE 注入位置、Causal Mask 遮住未来、计算注意力权重、加权聚合 V,最后把 Attention 的输出加回原始输入。

  • 子层 2:FFNx = x + FFN(RMSNorm(x)).先对 Attention 的输出做 RMSNorm,然后送入 SwiGLU 前馈网络——每个 token 独立过一遍三个线性矩阵和门控乘法——最后把 FFN 的输出加回输入。

python
x = x + Attention(RMSNorm(x))   # 子层 1:所有 token 互相"交流"
x = x + FFN(RMSNorm(x))         # 子层 2:每个 token 独立"思考"

两行伪代码就是整个 Block 的全部逻辑。输出维度始终等于 d_model,所以 Block 可以无限制堆叠,每一层都在前一层的基础上做增量调整。

5. 残差连接——为什么能堆 100 层以上?

深层网络有一个天然困境:梯度消失。反向传播时,梯度从最后一层往回传,每经过一层就衰减一点,传到最底层时已经接近于零——底层参数几乎不更新。

无残差连接:               有残差连接:
x → Sublayer(x) → output   x → x + Sublayer(x) → output
   梯度经过非线性变换          梯度有一条恒等直达路径("短路")
   逐层衰减                   即使 Sublayer 梯度很小,x 的梯度也直通

直观理解:残差连接就像写论文的「在此基础上修改」。你不是从零开始重写,而是在已有的草稿上做增量调整。每一层只需要学习「变化量」Δ,不需要学完整的输出。这个设计让 Transformer 可以堆到一百层以上仍然稳定训练。

残差连接的解决方案优雅到了极致:在每一子层的输入和输出之间加一条直达通道。公式就是 x = x + Sublayer(x)。这条通道让梯度可以走恒等路径直达底层,完全绕过 Sublayer 内部可能带来的衰减。

6. Attention 注意力机制

注意力机制能让每个 Token 在被处理的时候,都能“环顾四周”,看看句子里哪些词和自己最相关。

注意力机制(Attention) 是 Transformer 的核心计算单元,它让序列中的每个 Token 能够动态地关注所有其他 Token,根据相关性自动决定「应该从哪些词获取信息、各取多少」。

作用:解决序列建模的三大难题

  1. 长距离依赖:无论两个词相隔多远(第 1 个和第 1000 个),Attention 都能直接建立联系——不像 RNN 需要逐层传递,不会「遗忘」开头的信息。
  2. 并行计算:所有 Token 两两之间的关系可以一次性并行算出,训练速度远超 RNN 的串行方式。
  3. 动态权重:同一个词在不同上下文中关注的对象不同(见下方例子),权重是动态分配的,而非固定。
figure

Q、K、V 三部曲

每个输入向量 x 经过三个不同的线性投影,产生三组向量:

  • Q(查询,我在找什么?)
  • K(键,我有什么特征供别人匹配?)
  • V(值,我的实际内容是什么?)

一个经典的直觉类比是图书馆检索:Q 是你输入的关键词,K 是每本书的目录标签,V 是书的实际内容——系统匹配 Q 和 K,按匹配度返回 V 的内容。

分三步理解: 第一步: 计算相关性,Q 和 K 做矩阵乘法 QKᵀ,得到一个 N×N 的注意力分数矩阵——序列中每两个 token 之间都有一个原始相关性分数。

Q(Query,查询):当前 token 在问"谁跟我有关?"
K(Key,键):   每个 token 的"标签/特征"
Q·Kᵀ 的结果:   一个 N×N 的注意力分数矩阵(每两两 token 之间都有一个分数)

示意(4 个 token 的句子):
           K₁   K₂   K₃   K₄
     Q₁ [ 0.9  0.1  0.3  0.0 ]
     Q₂ [ 0.2  0.8  0.1  0.1 ]
     Q₃ [ 0.1  0.1  0.7  0.4 ]
     Q₄ [ 0.0  0.1  0.3  0.9 ]

第二步:缩放,除以 √dₖ 做缩放,防止大值输入让 Softmax 落入饱和区。

为什么要除以 √d_k?

当 d_k 很大时(如 128),QKᵀ 的点积值会变得很大。大值输入 softmax 会落在梯度接近零的饱和区,导致模型学不动。 √d_k 让方差控制在 1 左右,保持 softmax 处于敏感区。

第三步:归一化与加权聚合,对每一行做 Softmax 把分数转成概率,然后用这些概率对 V 做加权求和——得到的就是融合了上下文信息的输出向量。

Softmax 将每一行的分数转为概率(和为 1):

分数:   [ 9.0  1.0  3.0  0.0 ]
  ↓ softmax
权重:   [ 0.88 0.01 0.11 0.00 ]    ← 88% 的注意力在第一个 token 上

output = 0.88 × V₁ + 0.01 × V₂ + 0.11 × V₃ + 0.00 × V₄

Attention 本质上就是一次带权重的信息聚合。每个 Token 根据自己与上下文的匹配度,自动决定从哪些 Token 获取多少信息:

例句:"把 水 倒 进 杯子 里"

对于 "倒"(动词),Attention 权重可能如下:
  "把"   0.02   ← 语法助词,不太关心
  "水"   0.70   ← 动作的承受者,高度关注
  "倒"   0.05   ← 自己
  "进"   0.08   ← 方向补语
  "杯子" 0.12   ← 目标容器
  "里"   0.03   ← 方位词

结果:"倒" 的输出向量 ≈ 0.70 × V_水 + 0.12 × V_杯子 + 少量其他信息
→ "倒"的表示融入了「水」和「杯子」的语义

但如果换成 "把 足球 踢 进 球门 里":
对于 "踢",Attention 权重会完全不同,它关注的是 "足球" 和 "球门"
→ 权重是动态的,随上下文变化

自注意力 vs 交叉注意力:

类型核心操作用途
自注意力(Self-Attention)Token 与自己的序列内其他 Token 之间计算注意力理解上下文——LLM 的主力
交叉注意力(Cross-Attention)一个序列的 Token 关注另一个序列的 Token翻译(Encoder→Decoder)、多模态(文本关注图像)

Decoder-Only LLM 只使用自注意力;Encoder-Decoder 模型中 Encoder 用自注意力,Decoder 同时用两种。

7. FFN 前馈网络——知识存储的地方

Attention 让 token 之间互相「交流」,但交流完的信息还需要被「消化」——这就是 FFN 做的事。FFN 子层中每个 token 独立过网络,不与其他 token 发生交互。研究表明,事实性知识(如「巴黎是法国首都」)主要编码在 FFN 的参数中。

figure

经典 FFN 的结构很简单:Linear 升维 4 倍 → 激活函数 → Linear 降维回 d_model。为什么先升再降?升维给了模型更多的「中间思考空间」——相当于在白板上用更大的面积演算,最后把答案抄回小纸条。

SwiGLU 是现代 LLM 的事实标准。它在经典 FFN 的基础上引入了门控机制——三个线性矩阵协同工作:

  • gate 通路:SiLU(x · W_gate) 产生一个 (0, ∞) 的门控信号——决定「哪些信息可以通过」。
  • up 通路:x · W_up 产生候选内容——「提案」。
  • 两个通路逐元素相乘后,再经过 W_down 降维回 d_model。

用审批官的比喻最好理解:gate 是审批官,up 是提案——只有审批官点头的内容才会被保留。这个机制让模型学会了「有选择地保留信息」,而不是无脑全收。LLaMA 全系、Qwen、DeepSeek 都使用 SwiGLU。

8. 位置编码 RoPE——让模型感知顺序

Attention 本身有一个盲区:它对位置无感。「狗咬人」和「人咬狗」对 Attention 来说只是同一个集合的不同排列——如果不注入位置信息,模型无法区分。

RoPE(旋转位置编码) 用一种极其优雅的方式解决了这个问题。核心思想:用旋转矩阵给 Q 和 K 注入位置信息,使得两个 token 点积的结果只依赖于它们的相对距离。

把 Q 和 K 想象成二维平面上的向量:位置 m 的向量旋转 mθ 度,位置 n 的向量旋转 nθ 度。两个向量的点积等于 |Q| · |K| · cos((m-n)θ)——这个值只和相对距离 (m-n) 有关,与绝对位置 m、n 无关。

这就是「时钟模型」的直觉:每个 token 在钟面上占据一个角度,两个 token 的夹角取决于它们隔了多远,而不取决于它们各自在几点钟方向。距离越远的 token,夹角越大,相关性自然降低——这完全符合语言直觉。RoPE 还天然支持长文本外推:即使训练时最大上下文是 4K tokens,推理时也能处理 8K 甚至更长。

9. 归一化 RMSNorm——隐形的训练稳定器

深层网络中,每一层的输出分布会逐渐漂移。第 3 层输出值范围还在 (0, 1),到第 40 层可能已经漂到了 (0, 1000)——梯度开始震荡,训练收敛变慢。归一化就是把每一层的数据分布重新「拉回」标准范围

LayerNorm 是经典方案:减去均值、除以标准差,再乘 γ 加 β。RMSNorm 做了极简的减法——只除以均方根,砍掉均值计算,砍掉 β 平移偏置。计算量只略减了一点(归一化本身只占总 FLOPs 的 0.17%),但内存搬运量显著下降——少读/写均值向量和 β,实际运行时间快了约 25%,模型效果持平甚至略优。这就是现代 LLM 设计中的「免费午餐」式优化。

Pre-Norm 是另一个已成定论的设计选择:把归一化放在子层之前而非之后。Pre-Norm 让梯度有一条直通底层的恒等通道——Residual 路径不经过 Norm 变换——训练不需要 LR warmup,收敛更稳定。Post-Norm(归一化在子层之后)在原始 Transformer 和 BERT 中被使用,但随着层数加深,梯度被 Norm「拦截」,训练极易崩溃。2024-2026 年所有 LLM 的标配就是 Pre-Norm + RMSNorm。

10. LM Head 与 Temperature——从向量回到文字

整个 Transformer 在 d_model 维语义空间中完成所有计算,但最终要输出人类可读的文字。LM Head 承担最后一个任务:把隐向量投影回词表空间

最后一层 Block 输出的隐向量 → 乘上 LM Head 矩阵(尺寸 vocab_size × d_model)→ 得到一个长度等于词表大小的 Logits 向量。每个位置上的数值是该词元的「原始得分」——分数越高,模型越倾向于选它。再经过 Softmax 把 Logits 转成概率分布,选概率最高的那个词元——输出。

Temperature(温度系数) 是控制输出「创造力」的旋钮。它在 Softmax 之前用 T 缩放所有 Logits:

  • T < 1(低温):Logits ÷ 小值 = 差距放大 → 概率极度集中在最高分词 → 输出保守、确定、一板一眼。适合事实问答和代码生成。

  • T = 1(标准):Logits 原封不动 → 模型「本色出演」,保持训练时的统计模式。

  • T > 1(高温):Logits ÷ 大值 = 差距压缩 → 概率分布变平坦 → 冷门词也有不小概率被选中。适合写诗、头脑风暴、创意生成。

同一个模型、同一组参数,调一个数字就能在「严谨的工程师」和「天马行空的诗人」之间切换——Temperature 是整个大模型推理中最简洁也最实用的控制杆。

11. 六组件串起完整架构

走完了 Transformer 的全部六块积木,我们把它们拼在一起看:

figure
  1. Tokenizer + Embedding:把文字变成机器能算的向量。分词切 Token,Embedding 查表转高维向量,语义相近的向量靠得更近。

  2. Attention 注意力:让每个 token 看到全局。Q 查、K 标、V 给,加权聚合所有上下文的语义信息。多头并行捕捉语法、指代、语义等不同维度。Causal Mask 确保自回归的单向因果性。

  3. FFN 前馈网络:每个 token 独立思考。SwiGLU 用 gate 审批 + up 提案 + 逐元素过滤,让模型学会有选择地保留信息。事实性知识主要编码于此。

  4. RoPE 位置编码:用旋转给 Q/K 注入位置,点积天然只依赖相对距离。时钟模型让长文本外推成为可能。

  5. RMSNorm 归一化:Pre-Norm 让梯度直通底层,RMSNorm 快 25% 效果持平——2025 年唯一标准。

  6. LM Head + Temperature:从隐向量投影回文字。Temperature 是创造力的旋钮,同一个模型拧出不同的人格。

每一篇 GPT 生成的文字、每一段 Claude 写的代码、每一次 DeepSeek 做出的推理,背后都是这六块积木在数以百层的堆叠中、数万亿 token 的训练里、数百万次的学习循环后,默默运转的结果。