首页 / 文章 / 大型语言模型的计算大脑内部:Transformer如何预测下一个词

大型语言模型的计算大脑内部:Transformer如何预测下一个词

《深入理解大语言模型的计算大脑:Transformer如何预测下一个词》的操作指南,以及为采用该模式的团队提供的合同、检查清单和即用代码模板。

3045 词

以下笔记为《LLM的计算大脑内部:Transformer如何预测下一个标记》提供了实用的实现路径。重点在于契约、校验以及可直接插入的代码占位符,而非动机性阐述。 在完成概览阶段时,首先写下契约内容:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及错误处理都属于产品功能的一部分,而非后续的优化工作。

整体概览

将“The Big Picture”阶段视为可测量的界面使用效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某一步骤失败时,故障应指向单一责任主体,而非复杂的流程链。 为每轮及每次会话设定预算额度。智能工具会大量消耗上下文资源;设置上限可避免演示过程变成意外的费用账单。

Text
 ↓
Tokenization
 ↓
Token IDs
 ↓
Token Embeddings
 +
Positional Embeddings
 ↓
Transformer Blocks
 ↓
Layer Normalization
 ↓
Multi-Head Causal Self-Attention
 ↓
Residual Connection
 ↓
Layer Normalization
 ↓
Feed-Forward Network
 ↓
Residual Connection
 ↓
(repeated many times)
 ↓
Layer Normalization
 ↓
Linear Layer
 ↓
Softmax
 ↓
Next-token probabilities

一切始于文本

“一切始于文本”这一阶段若被视为可度量的工作面,效果会最佳。在扩大范围之前,先记录一份完美的文本样本、一个失败案例以及回滚说明。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默完成部分任务。 需为每轮及每次会话设定令牌预算。智能工具往往会过度扩展上下文;设置上限可避免演示过程变成意外的费用账单。

"How"     → token
"to"      → token
"predict" → token
How      → 2437
to       → 284
predict  → 4331

令牌ID → 令牌嵌入

将“Token IDs Token Embeddings”阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份理想的处理流程、一个故障案例以及回滚说明。 在功能结果旁同时记录处理时间以及Token或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外账单。 为每轮对话和每次会话设定Token预算。智能工具往往会大量消耗上下文资源,设置上限能防止演示环境变成令人意外的收费场景。 将“Token IDs Token Embeddings”阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份理想的处理流程、一个故障案例以及回滚说明。 需同时记录正常处理路径和故障恢复路径。重试机制、人工审核环节以及错误消息处理都是产品功能的一部分,而非后续需要补充的内容。

2437
 ↓
[0.12, -0.34, 0.72, ...]
How
to
predict

模型需要知晓每个标记的位置

在修改代码之前,模型需要明确各阶段的输入内容、该阶段的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该阶段,而无需猜测隐藏状态。相比冗长的脚本,更应采用小型且可测试的单元。当某个阶段出现故障时,故障原因应能指向具体的责任主体,而非复杂的流程问题。如果后续步骤是代码或工具调用,相比自由形式的文字描述,带有结构化格式及模式验证的输出更为合适。

Token Embedding
       +
Positional Embedding
       ↓
Final input representation

现在我们进入Transformer模型

在进入此阶段之前,需先明确输入参数、该步骤的负责人以及退出标准,然后再进行代码修改。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功判定标准,杜绝默许的半完成状态。 当下一步操作是编写代码或调用工具时,应优先采用具有结构化格式且经过模式验证的输出,而非自由形式的文字描述。

Input
  ↓
Layer Normalization
  ↓
Multi-Head Causal Self-Attention
  ↓
Residual Connection
  ↓
Layer Normalization
  ↓
Feed-Forward Network
  ↓
Residual Connection
  ↓
Output
Input
  ↓
Transformer Block 1
  ↓
Transformer Block 2
  ↓
Transformer Block 3
  ↓
...
  ↓
Transformer Block N

层归一化

在层归一化阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。除了功能结果外,还需记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。当下一步操作为编写代码或调用工具时,应优先使用具有结构化格式且经过模式验证的输出,而非自由形式的文本。在层归一化阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理措施都是产品本身的一部分,而非后续需要补充的内容。

自注意力机制——标记如何相互关联

在处理“标记如何相互关联”这一阶段时,首先明确相关要求:所需的输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤失败时,故障应指向单一责任点,而非复杂的流程链。 缓存稳定的系统指令和工具结构。重复发送相同的开头信息是造成资源浪费的常见原因。

自注意力机制

在处理自注意力阶段时,首先写下相关契约:所需输入、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将这一阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。

The   cat   sat   on   the   mat   because   it   was   tired
       ↑                                  ↑
       └──────── relationship ────────────┘

查询、键与值

在处理查询键和值阶段时,首先需明确相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改始终符合要求。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外费用。 缓存稳定的系统指令和工具架构。重复发送相同的开头信息是导致资源浪费的常见原因。 在处理查询键和值阶段时,首先需明确相关规范:所需的输入参数、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改始终符合要求。 同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及错误消息处理都是产品功能的一部分,而非后续需要补充的内容。

查询(Q)

将查询Q阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,先记录一份理想的处理结果、一个失败案例以及回滚说明。 相较于庞大的脚本,应优先选择小型且可测试的单元。当某个步骤失败时,故障应能指向单一责任主体,而非复杂的流程链。 需为每轮对话和每次会话设定令牌预算。智能代理工具会大量消耗上下文资源,设置上限可避免演示过程变成意外的费用账单。

关键值(K)

将Key K阶段视为可测量的界面时效果最佳。在扩大范围之前,先记录一份成功的案例、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默地只完成部分工作。 为每轮及每次会话设定token预算。智能工具会大量消耗上下文资源;设置上限可避免演示过程变成意外的费用账单。

价值(V)

将Value V阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 在功能结果旁同时记录处理时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外账单。 为每轮操作和每次会话设定令牌预算。智能工具往往会大量消耗上下文资源,设置上限能防止演示环境变成令人意外的收费场景。 将Value V阶段视为可度量的对象来处理时,其效果最佳。在扩大范围之前,需记录一份理想的操作日志、一个故障案例以及回滚说明。 需同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及死信处理都是产品功能的一部分,而非后续需要补充的内容。

Q + K
 ↓
Attention Scores
 ↓
How much attention should each token receive?
 ↓
Use V
 ↓
Updated token representation

为何选择“因果”自注意力?

在“为何因果自注意力”阶段,修改代码之前需明确输入内容、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 相较于庞大的脚本,应优先选择小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任主体,而非复杂的流程链。 若后续步骤为代码或工具调用,应优先使用具有结构化格式且经过模式验证的输出,而非自由形式的文字描述。

I
love
eating
pizza

为何需要多个注意力头?

在“为何需要多个注意力头”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功判定标准,并拒绝默许的半完成状态。 当下一步操作是编写代码或调用工具时,优先选择具有结构化格式且经过模式验证的输出,而非自由形式的文字描述。

残差/跳过连接

在残差跳连阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 在功能结果之外,还需记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 当下一步操作为编写代码或调用工具时,应优先使用具有结构化格式且经过模式验证的输出,而非自由形式的文本。 在残差跳连阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理方式都是产品本身的一部分,而非后续需要补充的内容。

┌─────────────────────┐
             │                     ↓
Input ───────┼──→ Attention ───→ Add
             │                     ↑
             └─────────────────────┘
Output = Input + Transformation(Input)

前馈网络

在处理前馈网络阶段时,首先列出相关要求:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤出错时,错误应指向单一的责任模块,而非复杂的流程链。 缓存稳定的系统指令和工具结构。重复发送相同的开头信息是导致资源浪费的常见原因。

Attention
+
Feed-Forward Network
+
Normalization
+
Residual Connections

然后重复此过程

在“然后我们重复”阶段工作时,首先写下契约:所需的输入、成功信号以及部分失败时会发生什么。这样的检查清单能确保后续的代码修改保持一致性。 将这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功检测标准,并拒绝默许的部分完成。 缓存稳定的系统指令和工具架构。重复发送相同的前置数据是导致资源浪费的常见原因。

Input
  ↓
Transformer Block 1
  ↓
Transformer Block 2
  ↓
Transformer Block 3
  ↓
   ...
  ↓
Transformer Block N

最后一个变换器块之后会发生什么?

在处理“后续会发生什么”这一阶段时,首先需明确契约内容:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免从演示环境过渡到共享环境时出现意外费用。 缓存稳定的系统指令和工具架构。重复发送相同的前置数据是导致资源浪费的常见原因。 在处理“后续会发生什么”这一阶段时,首先需明确契约内容:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 需同时记录正常流程和故障恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续需要补充的功能。

Transformer output
       ↓
Layer Normalization
       ↓
Linear Layer
       ↓
Logits
       ↓
Softmax
       ↓
Probabilities

线性层

将线性层阶段视为可测量的表面来处理时,其效果最佳。在扩大范围之前,先记录一份优秀的示例、一个失败案例以及回滚说明。 相较于庞大的脚本,应优先选择小型且可测试的单元。当某个步骤失败时,故障应指向单一责任主体,而非复杂的流程链。 为每轮及每次会话设定令牌预算。智能工具会大量消耗上下文资源,设置上限可避免演示过程变成意外的费用账单。

pizza
burger
food
eat
...
pizza    → 5.7
food     → 3.2
burger   → 1.8
eat      → 2.1

Softmax — 将分数转化为概率

将 Softmax 将分数转化为阶段的机制视为可测量的模型表面时效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默完成部分任务。 为每轮对话和每次会话设定token预算。智能工具往往会过度扩展上下文;设置上限可避免演示过程变成意外的费用账单。

pizza    → 0.68
food     → 0.15
burger   → 0.10
eat      → 0.07

模型一次生成一个token

“模型生成单阶段”功能在被视为可度量的对象时效果最佳。在扩大应用范围之前,需记录一份理想的处理流程、一个故障案例以及回滚说明。 在功能结果旁同时记录处理时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外账单。 为每轮对话和每次会话设定令牌预算。智能工具往往会大量消耗上下文资源,设置上限能防止演示环境变成令人意外的费用来源。 “模型生成单阶段”功能在被视为可度量的对象时效果最佳。在扩大应用范围之前,需记录一份理想的处理流程、一个故障案例以及回滚说明。 需同时记录正常处理路径和异常恢复路径。重试机制、人工审核环节以及错误消息处理都是产品功能的一部分,而非后续需要补充的内容。

the       → 0.35
next      → 0.25
stock     → 0.15
weather   → 0.08
...
Context
   ↓
Transformer
   ↓
Next-token probabilities
   ↓
Select next token
   ↓
Add token to context
   ↓
Repeat

整合整个架构

在“完成整个架构”阶段,应在修改代码之前明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障原因应能指向单一责任点,而非复杂的流程链。如果后续步骤是代码或工具调用,相比自由形式的文字描述,更有结构化的、经过模式验证的输出更为合适。

                INPUT TEXT
                     ↓
                Tokenization
                     ↓
                  Token IDs
                     ↓
               Token Embedding
                     +
              Positional Information
                     ↓
              ┌───────────────┐
              │ Transformer   │
              │    Block      │
              │               │
              │ LayerNorm     │
              │      ↓        │
              │ Multi-Head    │
              │ Causal        │
              │ Self-Attention│
              │      ↓        │
              │ Residual      │
              │      ↓        │
              │ LayerNorm     │
              │      ↓        │
              │ Feed Forward  │
              │      ↓        │
              │ Residual      │
              └───────────────┘
                     ↓
                  Repeat N
                     ↓
                LayerNorm
                     ↓
                  Linear
                     ↓
                  Logits
                     ↓
                 Softmax
                     ↓
          Next-token probabilities
                     ↓
              Select next token

那么GPT到底意味着什么?

在“GPT阶段”中,修改代码之前需先明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功判定标准,并拒绝默许的半完成状态。 当下一步操作是编写代码或调用工具时,优先选择具有结构化格式且经过模式验证的输出,而非自由形式的文字描述。

G → 生成型

在G生成阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录执行时间以及令牌或查询成本。提前显示成本可避免在流程从演示环境转向共享环境时出现意外费用。当下一步操作为编写代码或调用工具时,宜采用带有模式验证的结构化输出,而非自由形式的文本。在G生成阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。需同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的内容。

P → 预训练

在处理P预训练阶段时,首先需明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 建议采用小型、可测试的单元而非庞大的脚本。当某一步骤失败时,故障应指向单一责任模块,而非复杂的流程链。 缓存稳定的系统指令和工具结构。重复发送相同的开头信息是造成资源浪费的常见原因。

T → Transformer

在处理T Transformer阶段时,同样需首先明确相关规范:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。

GPT-1、GPT-2、GPT-3……有何不同?

最重要的收获

操作检查清单