Transformer_steps
【最终图解版】Transformer工作原理:一步一图
目标: 让模型理解一句话的深层含义,例如:“机器人爱吃苹果”。
🔀 起点:输入 (Input)
模型接收到的是一串词元(Tokens)。
[机器人]
[爱]
[吃]
[苹果]
1️⃣ 步骤一:创建“数字身份证” (Input Embedding + Positional Encoding)
模型不认识文字,只认识数字。所以,它会执行两项操作:
- 词嵌入 (Word Embedding): 将每个词元转换成一个包含其语义信息的向量(一长串数字)。
- 位置编码 (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)
为了防止信息丢失并稳定训练,模型会执行一个关键的“收尾”工作。
- 残差连接 (Add): 将注意力模块的输入 (
X_2
) 直接加到输出 (Z_2
)上。 - 层归一化 (Norm): 对相加后的结果进行“标准化”,使其数值稳定,方便下一层处理。
图解:
原始输入 [X_2]
│
└─────┐
▼
注意力输出 [Z_2] ➕ [X_2] –> [结果向量] –> 📊 LayerNorm –> [注意力层最终输出]
5️⃣ 步骤五:前馈神经网络 (Feed-Forward Network)
注意力层的最终输出,还会经过一个“前馈神经网络”。这可以被理解为对融合了上下文的新信息进行一次“深度思考”和“内容提炼”。
图解:
[注意力层最终输出] –> 🧠 Feed-Forward Network –> [思考后的向量]
最后,这里也会重复一次“步骤四:残差连接与层归一化”的操作。
🏁 终点:输出 (Output)
经过以上所有步骤,我们就完成了一个完整的Transformer Block。从这个模块输出的向量,已经对原始句子有了非常深刻和丰富的理解。
这个输出可以被送入下一个一模一样的Transformer Block进行更深层次的提炼,也可以作为最终结果用于生成文本或进行分类。