【最终图解版】Transformer工作原理:一步一图

目标: 让模型理解一句话的深层含义,例如:“机器人爱吃苹果”。


🔀 起点:输入 (Input)

模型接收到的是一串词元(Tokens)。

[机器人] [爱] [吃] [苹果]


1️⃣ 步骤一:创建“数字身份证” (Input Embedding + Positional Encoding)

模型不认识文字,只认识数字。所以,它会执行两项操作:

  1. 词嵌入 (Word Embedding): 将每个词元转换成一个包含其语义信息的向量(一长串数字)。
  2. 位置编码 (Positional Encoding): 因为Transformer同时处理所有词,它本身不知道词的顺序。因此,模型会为每个词的向量加上另一个代表其位置的“位置向量”。

图解:

[机器人] [爱] [吃] [苹果]
| | | |
▼ ▼ ▼ ▼
[Vec_机器人] [Vec_爱] [Vec_吃] [Vec_苹果] (<- 词嵌入)

  •      +        +          +  
    

[Pos_1] [Pos_2] [Pos_3] [Pos_4] (<- 位置编码)
|| || || ||
▼ ▼ ▼ ▼
[X_1] [X_2] [X_3] [X_4] (<- 最终输入向量)

结果: 现在我们有了一组新的向量,每个向量 X 不仅知道“我是谁”(语义),还知道“我在哪”(位置)。


2️⃣ 步骤二:进入注意力模块 - 生成Q, K, V

输入向量 X 流入**多头自注意力(Multi-Head Self-Attention)**模块。在这里,每个向量 X 都会被用来生成三份“克隆体”,分别扮演不同角色:

  • Q (Query - 查询): 我要去问谁?(我的提问)
  • K (Key - 键): 我有什么信息可供别人查询?(我的标签)
  • V (Value - 值): 我实际代表什么?(我的内容)

图解: (以输入向量 X_2,即“爱”为例)

     ┌──> [Q_2] (Query)  
     |  

[X_2] —├──> [K_2] (Key)
|
└──> [V_2] (Value)

注意:实际上,因为是“多头”,所以会同时生成多组Q, K, V(比如8组),这里为简化只画1组。


3️⃣ 步骤三:自注意力核心计算

这是信息融合的关键。我们以计算“爱”(X_2)的新向量为例。

3a. 计算相关性得分 (Score)

“爱”的 Query (Q_2) 会和所有词Key (K_1, K_2, K_3, K_4) 进行点积计算,以判断相关性。

3b. 归一化得分 (Softmax)

将原始得分转换为总和为1的百分比权重,代表“注意力”的分配。

图解:

Score_2,1 –┐
Score_2,2 –┤ ┌–> Weight_2,1 (例如 0.6)
Score_2,3 –│ Softmax │–> Weight_2,2 (例如 0.1)
Score_2,4 –┘ ├–> Weight_2,3 (例如 0.1)
└–> Weight_2,4 (例如 0.2)

3c. 加权融合信息 (Weighted Sum)

用得到的权重,去加权乘以所有词Value 向量,然后求和。

图解:

(Weight_2,1 * [V_1]) ──┐
(Weight_2,2 * [V_2]) ──┤
(Weight_2,3 * [V_3]) ──┤──> [Z_2] (全新的、富含上下文的“爱”向量)
(Weight_2,4 * [V_4]) ──┘

结果: 新向量 Z_2 已经不仅仅是“爱”了,它融合了“谁爱 (机器人)”和“爱什么 (吃苹果)”的语境信息。所有其他的词(Z_1, Z_3, Z_4)也经过了同样的过程。


4️⃣ 步骤四:残差连接 与 层归一化 (Add & Norm)

为了防止信息丢失并稳定训练,模型会执行一个关键的“收尾”工作。

  1. 残差连接 (Add): 将注意力模块的输入 (X_2) 直接加到输出 (Z_2)上。
  2. 层归一化 (Norm): 对相加后的结果进行“标准化”,使其数值稳定,方便下一层处理。

图解:

原始输入 [X_2]

└─────┐

注意力输出 [Z_2] ➕ [X_2] –> [结果向量] –> 📊 LayerNorm –> [注意力层最终输出]


5️⃣ 步骤五:前馈神经网络 (Feed-Forward Network)

注意力层的最终输出,还会经过一个“前馈神经网络”。这可以被理解为对融合了上下文的新信息进行一次“深度思考”和“内容提炼”。

图解:

[注意力层最终输出] –> 🧠 Feed-Forward Network –> [思考后的向量]

最后,这里也会重复一次“步骤四:残差连接与层归一化”的操作。


🏁 终点:输出 (Output)

经过以上所有步骤,我们就完成了一个完整的Transformer Block。从这个模块输出的向量,已经对原始句子有了非常深刻和丰富的理解。

这个输出可以被送入下一个一模一样的Transformer Block进行更深层次的提炼,也可以作为最终结果用于生成文本或进行分类。