跳转至

P6-4.1 LLM 内部的 Transformer 计算流程

Section ID: P6-4.1 Version: v2026.07.26

副标题:Transformer 如何把词元表示连接到下一候选分数?

现在需要把 Part 5 中学过的 Transformer 结构,重新放回 Part 6 的生成式语言模型主线中。

如果说 Part 5 解释的是 Transformer 块本身的结构,那么 Part 6 要在生成式语言模型的计算流程中重新阅读同一个结构。核心在于,词元 -> 嵌入 -> attention 块 -> 下一词元分数会连成一个生成流程。

从 LLM 的角度重新看 Transformer 时,真正重要的是什么?在 LLM 中,Transformer 是一种基础结构:它把词元转换成嵌入,通过 self-attention 读取词元之间的关系,再通过 feed-forward 和重复块细化表示,最后预测下一个词元。

Transformer 在生成计算中负责什么

重新阅读生成计算引擎时,核心问题有三个。

  • 从 LLM 角度重新看已经学过的 Transformer,变化在哪里?
  • 词元、嵌入、self-attention、下一词元预测如何连接?
  • 为什么 Transformer 会成为生成式语言模型的基本结构?

先抓住 Transformer 块的大结构之后,multi-head attention、位置表示、KV cache、sparse attention、long context 这些补充主题也都能放在同一条流程上。服务运营视角中的延迟和成本限制,最终也会连接到这条计算流程被重复多少次、重复多久、重复得多快。

比重新展开 Transformer 公式更重要的是一张 LLM 标准的结构地图。它会支撑 Part 6 后面关于 GPT、pretraining、next-token prediction、RAG、AI agent 的说明。比细节块名称更重要的判断标准是:输入词元经过怎样的计算流程,才连接到下一词元分数。

现在阅读的内容 后面会扩展的问题
词元、嵌入、attention 块、下一词元分数是否形成一条流程 context window 到底能容纳多大范围的输入
Transformer 是 LLM 的基本计算引擎 GPT 系列分化、pretraining、运营成本限制各自改变了什么

本节在 Part 6 主线请求流程中的作用,是展示输入词元会穿过怎样的计算引擎,再变成下一候选分数。只有先抓住这条流程,P6-5.1 的 GPT 系列、P6-7.1 的下一词元预测,以及后面关于 context window、prompt、RAG 的说明,才能放在同一个结构上阅读。

这里要确认的结果是:能否把 Transformer 读成一个中心引擎,而不是 只把下一个词元猜一次的装置。这个中心引擎会反映整个上下文,并更新下一候选分布。抓住这一区分之后,Part 5 的深度学习结构说明才能自然连接到 Part 6 的生成模型结构。

为什么要重新阅读同一个 Transformer

在 Part 5 中,我们把 Transformer 解释为一种深度学习结构。也就是说,当时的中心是这些块元素。

  • self-attention
  • feed-forward
  • residual connection
  • layer normalization

到了 Part 6,我们看的仍然是同一个结构,但问题变了。

  • 这个结构如何读取文本?
  • 这个结构为什么适合 next-token prediction?
  • 这个结构为什么会成为 LLM 服务的基本计算单位?

也就是说,结构相同,但 阅读视角不同。

读过 P5-14,并不意味着 P6-4.1 会自动变得清楚。P5-14 是关闭 Transformer 块内部有什么这个问题的 Section,而 P6-4.1 必须重新连接这个块如何 接收 LLM 请求,并以下一词元候选分数收束。

因此,从 Part 5 直接转到这里时,先要补上下面的空白。

P5-14 中已经抓住的内容 P6-4.1 中要重新连接的内容 为什么不能直接跳过
self-attention 读取词元之间的关系 当前生成位置如何从前文上下文拉取线索,并改变下一候选 因为“读取关系”本身还没有连接到生成候选的变化
feed-forward 和重复块加工表示 经过多层之后的最后位置表示,会变成下一词元分数表 因为只说表示变好,并不能看见实际输出形式
residual connection 和 layer normalization 稳定地连接块 在长生成流程中,同一类块计算会反复执行,持续更新候选分布 因为块稳定化和生成循环属于不同层位
Transformer 相比 RNN 更有利于并行计算和长上下文参照 在 LLM 中,这个优点成为 prompt、context window、GPT、RAG 说明的基础 因为计算结构的优点还没有和 Part 6 的服务与生成问题连接起来

这张表要确认的结果不是 能否重新解释 P5-14。要把 P5-14 的块说明当作踏板,但现在必须能够说明:反映上下文的表示如何变成下一词元候选分布。如果没有这座桥,P6-4.1 的案例和例子会像是突然跳到了 下一词元分数表。

在 LLM 中,词元是出发点

LLM 并不是把句子作为一个整体直接计算。它会先把文本读成词元(token)序列。

可以这样想。

1
2
3
4
5
6
raw text
-> tokens
-> token ids
-> embeddings
-> Transformer blocks
-> next-token scores

这里的 Transformer,是词元已经被切分之后的计算结构。也就是说,Transformer 不是直接解释文本的第一阶段,而更接近于 反复加工词元表示的中心引擎。

嵌入制造可计算的起始表示

如 P6-2 章所见,词元 ID 只是编号。Transformer 不会直接处理这些编号,而是先把它们转换成嵌入(embedding)向量。

这个嵌入向量会成为后续所有计算的出发点。

可以这样理解。

嵌入是把词元转换成 Transformer 可以计算的数字坐标的阶段。

也就是说,Transformer 不是把文本当作字符串来读,而是在已经嵌入的词元表示上工作。

self-attention 为什么对 LLM 特别重要

生成式语言模型必须在当前位置预测下一个词元。此时,到目前为止出现过的所有前文词元都可能成为线索。

例如,下面的信息都可能影响后面的生成。

  • 前面出现过的主语
  • 代码块中的函数名
  • 文档开头的关键条件

self-attention 让每个词元计算自己和其他词元之间的相关程度。因此,当前位置的词元表示可以同时反映附近词元和更远的前文词元。

在 LLM 中,self-attention 是一种计算结构,用来判断到目前为止出现的词元中,哪些对当前生成更重要。

为什么需要 feed-forward 和重复块

只靠 self-attention 可以混合词元之间的关系,但这些信息并不会立刻变成足够好的表示。

feed-forward network 会在每个位置再次加工该位置的表示。这个块经过多层重复之后,表示可以变得更丰富。

也就是说:

  • attention 读取关系
  • feed-forward 再次修整每个位置的表示
  • 多层重复让表示逐步细化

这条流程会直接连接到 Part 5 中的表示学习(representation learning)说明。

为什么最后会输出下一词元分数

LLM 说明中重要的差异在于最后输出的解释方式。

分类模型最后常常输出类别(class)分数。但生成式语言模型通常输出的是 接下来可能出现的词元候选的分数。

也就是说,经过 Transformer 块之后,最后的问题大致变成这样。

  • 下一个位置最可能出现哪个词元?

这些分数之后会通过 softmax 和 sampling 等步骤,连接到实际输出词元的选择。

因此,Part 5 的结构说明在 Part 6 中会被重新读成下面这样。

表示学习结构 -> 下一词元分布计算结构

把这个差异压缩到一个小输入中,可以这样看。

输入片段 先按 P5-14 的方式看到的内容 P6-4.1 中还要额外看到的内容
与客户的会议今天下午 2 点进行 词元表示经过 self-attention 和 feed-forward 后被更新 最后位置表示会连接到 举行、结束、开始等下一候选的分数差异
这是团队内部备忘录。今天会议下午 2 点进行 同一个 Transformer 块再次计算词元关系 因为前文有语气线索,候选分数表会从正式通知式表达偏向简短协作式表达

因此,目标不是重新背诵 Transformer 的部件名称,而是抓住同一批部件在 LLM 内部形成了 上下文反映 -> 表示更新 -> 下一候选分数这一生成流程。

用非常简单的方式画出来

flowchart TD
  A["词元"]
  B["嵌入 + 位置信息"]
  C["Transformer 块"]
  D["下一词元分数"]
  E["被选中的下一词元"]

  A --> B
  B --> C
  C --> D
  D --> E

这个图是在 Part 6 中阅读 Transformer 时最常想起的最小结构。

案例和示例

下面的图把本节三个案例重新放到一个共同问题下:不是 选择下一个词元一个,而是 前文整体如何改变下一候选分布。

flowchart TD
  A["同一个 Transformer 问题"]
  B["自动补全<br/>哪种续写适合这个上下文?"]
  C["代码生成<br/>哪些标识符和逻辑保持一致?"]
  D["长文摘要<br/>哪些前文条件必须继续生效?"]

  A --> B
  A --> C
  A --> D

从这个图中要确认的是:即使任务不同,最后阶段也很相似。所有场景都不应先看成 只点中一个下一词元,而应先看成 反映前面输入的整个上下文之后,现在形成了怎样的候选分布。

案例 1. 句子自动补全

想象一位运营人员正在写消息草稿,只输入了 今天会议在下午。这时很容易只看最后一个词后面,试着猜 2 点或 3 点这样的下一句话。但真正的自动补全并不是只看最后一个词的问题。Transformer 会查看前面的词元并计算下一候选分布,同时反映 会议和 下午等前文线索来选择下一表达。例如,即使句子结尾相同,如果前面有 与客户,更礼貌的通知式表达可能更自然;如果前面有 团队内部,更短的协作式表达可能更自然。这里变化的是判断标准:从 是否猜中了最后词后面的内容,转向 前文整体如何改变下一候选。

同样是 今天会议在下午这个结尾,前文不同,下一候选也会不同。

前文上下文 只看最后一个词时容易想到的内容 实际上更容易变自然的候选
与客户 只是 2 点或 3 点这样的时间候选 2 点按计划举行这样的通知式表达
团队内部 只要时间数字对了就够 2 点见这样的简短协作式表达
这是一封通知邮件 好像只要补上时间信息就结束 时间信息和引导句结构会一起被决定

这张表纠正的误解是:只要最后一个词相同,下一候选也差不多相同。自动补全案例正是打破这个误解,并最容易展示 Transformer 会看前文整体的结构。

案例 2. 代码生成

当前面已经有函数定义和变量声明,后面继续写实现时,如果只看紧挨着的上一行,很容易漏掉变量名。前面声明了 user_id,后面却滑向 userId或 account_id,语法看起来可能没错,但实现一致性会被破坏。函数名是 calculate_total,但折扣步骤或税费反映顺序缺失时,前面设定的目的和后面的实现也会错开。

同样是代码生成,能否抓住前文上下文,会让摇晃的位置不同。

前文中已经打开的内容 只看上一行时容易发生的问题 持续看前文时更能保持的内容
user_id 这样的变量声明 滑向相似但不同的名称 变量名一致性
calculate_total 这样的函数目的 漏掉折扣或税费步骤 实现目的和处理顺序的保持
条件语句或循环块结构 缩进和返回位置错开 块结构与返回流程的一致性

这个案例要确认的结果不是 当前行附近是否看起来自然,而是 前面声明的名称和目的是否继续反映到后面实现的下一候选中。Transformer 结构之所以在代码生成中重要,是因为它不仅基于紧邻上下文,还会基于已经打开的名称、目的、块结构来改变下一候选分布。

案例 3. 长文档摘要

总结长文档时,下一句候选也不是只由显眼的一句结论决定。前半部分的定义可能限制后面结论的适用范围,后面的例外条件也可能收窄前面的概括说明。比如结论句很短,但这个结论成立的范围被前面段落限定,那么摘要句的下一候选也要反映这个范围才自然。

这个案例要确认的结果不是 是否只抓住前面或后面某个显眼部分,而是 前面的条件和后面的例外是否一起反映到下一摘要候选中。长文档整体能维持多久,会在 P6-4.2 和 P6-4.5 中更直接讨论。这里先抓住一点即可:Transformer 会把上下文线索连接到下一候选分布。

从上下文反映的角度重新合并三个案例,可以这样看。

情况 只看紧邻前文时容易漏掉的内容 反映前文整体时更能保持的内容
句子自动补全 只看最后一个词后的候选 符合前文上下文的语气和后续表达
代码生成 只看当前行附近的词元 已声明变量名和函数目的的一致性
长文档摘要 只看显眼的一句结论 反映前面条件和后面例外的下一摘要候选

从失败场景重新看判断标准

在应用场景中重新看 Transformer 时,常见错误是把它只读成 困难内部结构名称的集合,于是错过在实际场景中什么时候该重新拿出这个视角。此时,与其重新背公式或块名称,不如先判断当前问题是不是 反映前文整体来选择下一候选的问题。

现在先看到的场景 先提出的问题 先重新看的轴
自动补全看起来只是机械地在最后一个词后面接数字 前文整体是否真的改变了语气和下一候选分布? Transformer 的上下文反映结构
代码生成在上一行附近看起来自然,但变量名和函数目的总是漂移 前面打开的名称和目的是否持续反映到后面实现中? Transformer 的长距离上下文连接
长文档摘要只留下显眼的一句结论,却经常漏掉条件或例外 它是否同时反映前后线索,而不是只抓住一个显眼部分? Transformer 的上下文整合结构

这张表的目的不是重新定义 Transformer,而是在看到实际失败场景时,先分流判断:这是 只接上紧邻片段就够的问题,还是必须重新读成 反映前文整体的结构的问题。

练习和示例

这个练习的目标不是实现完整 Transformer,而是用一个小分数表和图,确认前面整理的 上下文反映 -> 表示更新 -> 下一候选分数流程。我们将阅读共享同一个结尾的句子,如何因为前文上下文线索不同而变成不同的候选分布。

要确认的核心是:把下一词元预测读成 根据上下文中哪些线索被激活,候选分数和概率分布会随之改变的过程。下面的数值不是实际 LLM 的内部概率,而是为了说明分数差异如何呈现为候选分布而做的简化示例。

下面的图先压缩了这个例子要确认的流程。即使有相同结尾,前文上下文线索也会在 Transformer 块内部改变表示,而这个差异会连接到候选分数表和候选之间的差距。

flowchart TD
  A["相同结尾<br/>今天会议将于下午 2 点进行"]
  B["前文上下文线索<br/>语气、目的、格式"]
  C["Transformer 块<br/>更新上下文表示"]
  D["候选分数表<br/>举行 / 开始 / 结束"]
  E["类似 softmax 的分布<br/>候选间差距变化"]
  F["下一词元选择<br/>第一候选与 margin"]

  A --> C
  B --> C
  C --> D
  D --> E
  E --> F

下表的输入是四种上下文条件。四种条件都共享同一个结尾:今天会议将于下午 2 点进行,但前面附加的上下文线索不同。上下文变化列显示进入了什么线索,第一候选和 第二候选显示在该条件下接下来可能出现的表达候选排名。第一候选概率和 第 1、2 名差距用于阅读第一名有多稳定。

即使共享同一个结尾,只要前文读到的线索不同,候选分数表也会改变。

上下文变化 第一候选 第一候选概率 第二候选 第 1、2 名差距 要读出的点
客户通知邮件 举行 0.733 结束 1.24 通知式语气线索强烈推高正式收束表达
通知感变弱 举行 0.619 结束 0.84 第一名相同,但确信程度下降
团队内部备忘录 开始 0.684 结束 1.38 内部备忘录线索推高更短的表达
团队内部备忘录混入礼貌语气 举行 0.372 开始 0.09 第一名改变,但差距很小,看起来是不稳定选择

上下文线索变化导致的候选分布

读表时,先看 上下文变化列,再看第一候选是什么,最后看第 1、2 名差距是大还是小。例如在 客户通知邮件中,第一候选是 举行,差距也很大。相反,在 团队内部备忘录混入礼貌语气中,第一候选变成 举行,但差距只有 0.09。即使同样是第一名,也能看出稳定选择和摇摆选择的差异。

看图时也一样,重点不只是柱子的高度,而是候选之间的相对距离。在 团队内部备忘录混入礼貌语气中,举行是第一名,但和其他候选的差距很小。与其说下一词元选择已经稳定固定为一个选项,不如说上下文线索正在把候选分布拉向不同方向。

这样看,重要的不是 背一个正确词元,而是 上下文中的哪些线索会怎样推高或拉低候选分布。

这个例子要确认的核心如下。

  • 即使候选集合相同,只要前文中读到的线索不同,分数表就会改变。
  • Transformer 的最后计算,比起完整句子本身,更接近 关于下一候选的分数分布。
  • 实际输出词元会从这个分数表中选择最高候选,或者通过 sampling 等规则被选出。
  • 也就是说,比起 直接猜中一个词,把生成看成 反映上下文并持续更新候选分布更准确。

下一词元选择中分开的候选

前面的练习用更实际的分数表形式展示了:长上下文计算最终会以 候选分数比较和 下一词元选择收束。这里要读出的核心不是背下所有复杂内部块,而是这个计算最终会制造 随前文上下文而变化的下一词元分布。也就是说,阅读 Transformer 时,比起看 直接猜中一个正确词,看 整个上下文如何改变下一候选分布更准确。

为什么成为 LLM 的中心引擎

Transformer 成为语言模型的中心结构,并不只是因为性能好。

  • 它能够更好地处理较长上下文
  • 它很适合并行处理
  • 同一个基本结构可以广泛复用于翻译、摘要、问答、代码生成等多种语言任务

检查清单

  • 能否把 Transformer 解释为 反映整个上下文并更新下一候选分布的引擎?
  • 能否区分 Part 5 的结构说明和 Part 6 的生成说明在哪里分开?
  • 能否继续说明 Transformer 计算实际上也在输入范围限制内工作这一问题?

来源和参考资料

  • Ashish Vaswani et al., Attention Is All You Need, NeurIPS 2017, 确认日期:2026-07-19。用于说明 Transformer 的 self-attention、multi-head attention、positional encoding、feed-forward 块,是解释 LLM 结构的基本依据。
  • Alec Radford et al., Language Models are Unsupervised Multitask Learners, OpenAI 2019, 确认日期:2026-07-19。作为背景依据,说明 GPT-2 是基于 Transformer 的 language model,并能执行多种语言任务。
  • OpenAI, openai/gpt-2, 确认日期:2026-07-19。作为辅助依据,确认 GPT-2 代码和模型是上述论文的公开实现,并确认使用模型时需要评价。
  • Tom B. Brown et al., Language Models are Few-Shot Learners, arXiv 2020, 确认日期:2026-07-19。作为背景依据,说明 GPT-3 是 autoregressive language model,并说明 LLM 基于 next-token prediction 通过 few-shot text interaction 执行多种任务。
  • Jay Alammar, The Illustrated Transformer, 确认日期:2026-07-19。作为入门图解语言重新说明 Transformer 计算流程时的辅助教育资料。