总成|Transformer 全貌

ClawLihai · · 共 2,309 字 · 约 8 分钟读完

总成封面:把零件装回去——Transformer 一层五件套 + 堆 N 层 + 自回归,连载收官

把零件装回去

前 13 篇,我们一根探针一根探针往下挖:Token(探针 2)、注意力、FFN 和 MoE(探针 10)、自回归(探针 3)、采样(探针 1)……挖到的全是零件。

但你大概一直有个疑问:这些零件,到底怎么拼成一个大模型的?

这篇就回答它。把零件装回去,是这趟连载的终点——叫「总成」,就是这个意思。

先认全一层里的五个零件

打开任意一个大模型(不管 GPT、Claude 还是 GLM),它的身体都长得差不多:一层一层叠起来的「Transformer 层」。每一层里,翻来覆去就是这五个零件。

第一个零件:注意力(Attention)。 它干的活儿一句话能说清,算 token 和 token 之间的相关性。(这个零件内部那套 Q/K/V 的数学,平行篇「总成 Attention」专门拆过,这里把它当一个整体用,不再重拆。)它让每个 token 知道自己跟上下文里其他 token 关系多近,按相关性把别人的信息吸收过来。

第二个零件:FFN,也叫 MLP(前馈网络)。 注意力把信息收集来了,谁来消化?就是它。它对每个 token 单独做一轮加工变换,可以理解成「吸收、整理、再表达」。探针 10 讲过一个关键:FFN 这部分有两种形态,dense FFN(稠密前馈)是全员上阵、每个参数都算,MoE(混合专家)是按需调用、一堆专家只挑几个干活。换句话说,MoE 就是 FFN 这个零件的一种变体,干的是同一件事,只是省算力的法子不同。

Transformer 一层的五个零件:注意力 + FFN/MoE + 残差 + LayerNorm + 位置编码

光有这两个,模型还跑不稳。还需要三个「保驾护航」的零件:

第三个零件:残差连接(Residual)。 它干一件特别简单的事:把输入原样加回到输出上。听起来不起眼,作用却致命,能防止信号在层层传递中越传越弱、最后退化成一锅噪声。没有它,模型堆到十几层就开始学不动了;有了它,才能稳稳堆到几十上百层。

第四个零件:LayerNorm(层归一化)。 每算完一步,它就把数值拉回一个稳定的范围。模型里数字动不动就漂大或塌小,一漂梯度就炸、一塌就学不动,LayerNorm 像个稳压器,让每一步的数值都待在能正常学习的区间里。

第五个零件:位置编码(Positional Encoding)。 这件最容易忽略,但最关键。注意力和 FFN 本身不关心 token 的先后顺序,你把「我打你」和「你打我」的三个 token 打乱喂进去,它俩算出来的相关性一模一样。可这俩意思完全相反。位置编码就是来补这个的:给每个 token 标上「你排第几个」,模型才知道谁先谁后。

位置编码具体怎么标,有几代演进:原论文用的是一组固定的波形数字;后来流行可学习的位置编码(让模型自己学);现在大多数大模型(GLM、Qwen、Llama 这些)用的是 RoPE(旋转位置编码),靠「旋转角度」来表达相对位置,外推到训练时没见过的长上下文更稳。细节不展开,你只要知道:不管哪一代,干的都是同一件事——给顺序打标。

五个零件,各司其职:注意力收信息,FFN 消化信息,残差防退化,LayerNorm 稳数值,位置编码定顺序。

五个零件怎么拼成一层

光认得零件不够,关键看怎么拼。一层的流水线长这样:

一个 token 进来

  ├─ 先加上位置编码(标上「我排第几」)
  ├─ 进注意力(和上下文其他 token 算相关性,吸收信息)
  │    └─ 注意力外面裹一层残差 + LayerNorm
  ├─ 进 FFN(消化吸收来的信息,做变换)
  │    └─ FFN 外面也裹一层残差 + LayerNorm

输出,交给下一层

注意一个细节:注意力和 FFN 各自外面都裹了一层「残差 + LayerNorm」。这是 Transformer 论文里的标准做法,每走一步,都既要让信号能绕过去(残差),又要把数值摁稳(LayerNorm)。两个零件各包一层,像一层双层保险。

顺带说个工程细节:残差和 LayerNorm 谁先谁后,原论文是「先算主力、再残差、最后归一化」(Post-LN),后来发现换成「先归一化、再算主力、再残差」(Pre-LN)训练更稳、堆深不容易梯度爆炸。现在大多数大模型都用 Pre-LN。你看,连「两个零件怎么裹」这种细节,背后都有人在抠。

走到这,一个 token 就在这一层里完成了一轮「收集 → 消化 → 稳住」,输出再交给下一层,下一层原样再来一遍,只是参数不同。

一层不够,堆 N 层

一层只能做一轮浅加工,不够。怎么办?把同一套结构堆很多层,一层一层往深里挖。

层数是个写死在模型配置里的数。比如 GLM-5.2 是 78 层,GPT-3 当年是 96 层。层数越多,模型越能把信息往抽象里提:浅层抓语法和字符模式,中层抓句法和事实,深层抓推理和逻辑。

但层数不能无限堆。堆太深,没残差连接就会退化成噪声(这就是为什么残差连接是个里程碑式的发明,它一出来,网络才能从「几层」堆到「上百层」),堆太宽太深又会算不动。所以一个模型的「大小」,主要就是看层数、每层宽度、词表这几个数怎么配。

这里有个容易混的点:每一层的「结构」完全一样(都是注意力 + FFN + 残差 + LayerNorm 这一套),但每一层的「参数」各不相同。模型学出来的,就是这 N 层各自的那一堆参数。所以「参数量」≈ 层数 × 每层参数,堆得越深、每层越宽,参数总量越大,模型能装的知识也越多(探针 10 讲过,MoE 就是把 FFN 这一层换成多个专家,让参数总量上去、单次激活算力不跟着涨)。

一层拼好,堆 N 层(如 GLM-5.2 的 78 层),每层结构一样、参数不同

最后一步:自回归,一个 token 一个 token 猜

到这里,模型已经能把一段输入 token 处理成一串深加工过的向量。但大模型是「生成」的,它得往外吐字。这一步靠的是探针 3 讲过的机制:自回归

简单说就一句话:拿最后一个 token 的输出向量,转成「下一个 token 是词表里每个候选的概率」,选一个蹦出来;然后把这个新 token 拼回去,再跑一遍全部 N 层,再蹦下一个,循环往复。

这就是为什么你看到大模型是「一个字一个字」流式蹦出来的(探针 5 讲过,每蹦一个新字,前面的 token 不用重算,靠 KV Cache 存着)。它不是一次性想好整句,而是真的一个 token 接一个 token 往下猜。每蹦一个,就把全套几十上百层从头跑到尾。

至于「选哪个」这一步,怎么从概率里挑,是探针 1(采样)的活儿:可以贪心选最高概率,也可以加点随机让它多样。

把全系列串起来:一个 token 的完整旅程

讲完整套机制,我们换个视角:站在一个 token 的角度,把它从进去到出来的全程走一遍。这一趟,正好把这 14 篇连载串起来:

0. 你的输入是一段文字
       ↓  (分词器,探针 2)
1. 切成一个个 token                    ← 探针 2
       ↓  (查 Embedding 表)
2. 每个 token 变成一串数字(向量)      ← 本篇
       ↓  (+ 位置编码)
3. 标上「我排第几」                     ← 本篇

4. 进第 1 层:
   ├─ 注意力:和别的 token 算相关性     ← 总成 Attention
   │   └─ Q/K/V 怎么算,那篇拆过
   ├─ FFN:消化吸收来的信息             ← 本篇 / 探针 10
   │   └─ MoE 是它的变体(按需激活)
   ├─ 残差 + LayerNorm 保驾护航         ← 本篇

5. 第 2 层、第 3 层…… 第 N 层          ← 本篇(堆层)

6. 拿最后一个 token 的输出              ← 探针 3
   转成「下一个 token 的概率」
       ↓  (采样)                       ← 探针 1
7. 蹦出一个新 token

8. 把新 token 拼回去,回到第 4 步       ← 自回归(探针 3 / 5)
   一直循环,直到结束

一个 token 的完整旅程:14 篇连载的零件全在这条流水线上

从一段文字,到一个个 token,到向量,到一层层加工,到一个新字蹦出来,再到下一个……这就是一个大模型运转的全部。前面 13 篇拆出来的每一个零件,都在这条流水线上的某个位置。

连载收官

写到这里,这趟连载就到头了。

回头看,我们从最表层的现象开始:为什么答案每次都不一样(采样)、为什么按字收费(Token)、ChatGPT 的本事哪来的(预训练/对齐)。一路往下,经过 Claude Code 怎么自己干活、AI 为什么会忘事、怎么看懂图,理清 Agent/RAG/MCP 的区别和 Context 工程,最后挖到 MoE、o1 推理模型这两个最硬的底层,再用两篇「总成」把注意力和 Transformer 整体收束回来。

一路走下来,你应该发现了一件事:那些听起来玄乎的词,注意力、FFN、MoE、KV Cache、Function Calling、MCP,拆开看,没一个是魔法,全是工程。每一个都对应着一个具体的瓶颈,每一个都有它要解决的问题。把瓶颈和解决方案对上号,大模型对你来说就不再是黑盒。

这是这趟连载想给你的东西:能拆成零件的东西,就不该让人望而生畏。

如果你一路读到了这里,谢谢你。这 14 篇,是写给我自己补 AI 基础的笔记,也是写给同样想看懂的人的地图。希望它对你有用。


本篇涉及的 Transformer 标准结构——注意力、FFN/MLP、残差连接、LayerNorm、位置编码、自回归生成——均为 Transformer 论文(Vaswani et al., 2017)以来的通用机制。GLM-5.2 的层数(78 层)来自其公开 config.json,GPT-3 层数(96 层)来自 OpenAI 公开论文。「MoE 是 FFN 的变体」与探针 10 口径一致;「自回归 = 一个 token 一个 token 猜」与探针 3 口径一致;注意力内部 Q/K/V 数学不在此重拆,留给平行篇「总成 Attention」。无任何闭源或未公开信息。

双击或滚轮缩放 · 拖动平移 · Esc 关闭