Transformer 架构扫盲

2026-09-10 · 专题调研 · 从 token 到注意力

封面:ATTENTION / attention is all you need.
封面:注意力把一团连线收成可计算的查找。2017 年那篇论文的原话,现在几乎所有大模型还在吃这套骨架。

它是什么,不是什么

Transformer 是一套处理序列的神经网络骨架。输入一串符号,输出还是一串符号。聊天模型、翻译、代码补全,底层几乎都是它。

2017 年 Google 的论文题目叫 Attention Is All You Need。核心主张就一句:别用 RNN 一步步往后传了,直接让序列里每个位置去查其他位置。

你每天用的 Grok / GPT / Claude / DeepSeek,默认都是 decoder-only Transformer:从左读到右,一次预测下一个 token。原文里的 encoder-decoder 是给翻译准备的,今天反而不是主流。

它不是:

五个基础词

Token

模型不吃汉字或英文单词,吃的是切出来的子词片。一句话先被 tokenizer 切成整数 ID,后面所有计算都在这些 ID 上发生。

「Transformer」可能被切成 Trans + form + er,也可能是别的切法。切法是训练时定死的,不是语法。

Embedding

每个 token ID 变成一个向量,比如 4096 维的一串数。位置信息再加进去(RoPE 或绝对位置编码),模型才知道谁在前、谁在后。

Attention

当前位置对其他位置做一次软查找:相关性高的权重大,低的权重小,然后把对应内容加权加起来。这就是那张封面里「把乱线收成查找」的部分。

Layer / Block

Attention + 前馈网络(FFN / MLP)叠成一块,再重复 N 次。7B 模型常见 32 层,更大的上百层。层数就是“这块积木重复几遍”。

Logits / 下一个 token

最后一层把向量映回词表大小的分数,softmax 之后抽样或取最大,吐出下一个 token。聊天就是把吐出来的 token 接回去,再跑一遍。

词一句话别和谁搞混
token模型的字母表条目不是“字”也不是“词”
embeddingID → 向量不是“理解”
attention按相关性加权查找不是人类注意力
FFN / MLP每个位置自己做非线性变换不是另一套注意力
decoder-only只能看左边,预测右边不是“解码器芯片”

心智模型:查通讯录

忘掉矩阵公式,先记这个比喻:

用 Q 去对所有 K 打分,分数大的 V 多拿一点,加总后就是这个位置的新表示。缩放点积注意力的写法是:

Attention(Q, K, V) = softmax(QKᵀ / √d) V

√d 只是防止点积随维度爆炸,让 softmax 不至于变成 0/1 开关。

Q K V softmax(QKᵀ/√d) 权重 加权后的 V
Q 去对 K 打分,得到的权重再去取 V。查找,不是循环。
聊天模型还有一条硬规则:因果掩码(causal mask)。预测第 t 个位置时,不许看 t 右边的 token。否则训练时等于偷看答案。

一层长什么样

现代 decoder 一层通常是:

  1. RMSNorm / LayerNorm
  2. 多头自注意力(有的还带 GQA,少算几组 K/V)
  3. 残差连接:输出加回输入
  4. 再一次 Norm
  5. FFN(SwiGLU 之类),残差再加回去
残差输入 x Norm → Multi-Head Attn + 残差 Norm → FFN + 残差 → 下一层 看全序列(有掩码) 每个位置各自算
注意力负责“看谁”,FFN 负责“看完之后怎么变”。残差是为了让上百层还能训练。

多头(multi-head)不是多套灵魂,是把向量切成几段,每段用不同的 Q/K/V 投影,再拼回来。有的头学语法,有的头学指代,这是事后观察,不是设计保证。

一条前向路径

以「猫坐在垫子上」预测下一个词为例:

  1. 切成 token ID
  2. 查 embedding 表,加上位置
  3. 送进第 1 层 → 第 2 层 → … → 第 N 层。每层都做注意力 + FFN
  4. 最后一个位置的向量,乘词表矩阵,得到每个候选 token 的分数
  5. 采样得到下一个 token,接到后面,重复
文本 token IDs embed+位置 N × decoder 下一个 token

训练时是并行的:整句一次性喂进去,靠掩码保证每个位置只预测自己右边第一个。推理时才变成自回归循环。这是它干掉 RNN 的关键——训练能吃满 GPU 的并行,不必一个时间步等下一个。

KV cache 是推理补丁,不是架构本身。 生成第 100 个 token 时,前 99 个的 K/V 已经算过,存下来复用,所以显存会随上下文变长。架构图里通常不画它,用的时候绕不开。

和现在这些模型的关系

你看到的名字骨架和原文的差别
GPT / Grok / Llama / Qwen / DeepSeekdecoder-onlyPre-Norm、RoPE、SwiGLU、GQA、更大上下文
BERT 系encoder-only双向注意力,适合填空和分类,不适合直接聊天
T5 / 原版论文encoder-decoder一边读源句,一边生成;翻译的老家
MoE(Mixtral、部分 DeepSeek)还是 TransformerFFN 换成专家路由,注意力那一段没换家

所以「Transformer 架构」和「某个 70B 模型」不是一层。前者是电路图,后者是按这张图焊出来、再用数据训出来的一块具体权重。

扫盲用途记这句就够:大模型 = tokenizer + 一叠 Transformer 块 + 词表投影。产品差异主要在数据、对齐、推理堆栈,不在“发明了另一种完全不同的层”。

读完能记住什么

和昨天那篇 CUDA 扫盲的接缝:CUDA 解释芯片上怎么把矩阵乘跑满;本文解释那些矩阵乘在算什么。一个是跑道,一个是跑的内容。