Transformer 架构说明
- Source Sentence:向 LLM 输入的内容
- Output Sentence:LLM 逐个回复的 token
- -> 我、我是、我是AI、我是AI大模…
- Embedding & Encoding: 向量化和位置标记
- 位置标记:向量化无法还原,通过在原始训练数据集中标记位置,事后才能确定当前 token 表示是具体文本是什么。
- Nx:层叠结构,多次执行。这是【神经网络】的 n 个隐藏层。
- 每一个 token 都需要走一遍完整的神经网络,走一遍隐藏层
- 上一个隐藏层 a 的输出是下一个隐藏层 b 的输入
- Multi-Head Attention:自注意力神经网络,内部权重是
W_q、W_k、W_v,是可训练参数。LLM 大模型的训练,主要就是训练这个参数。
- 使用【反向传播】+【梯度下降】
- Masked Multi-Head Attention:增加了 Token 向后的【遮挡】
- 训练阶段,abcde 字符串训练到 a/b 的时候,a/b 不能知道下一个是 c,而是应该通过 n 次训练后通过 w|b 计算出下一个是 c。如何让 a/b 看不到 c,就需要一个【遮挡】
- 推理使用阶段,使用的还是训练阶段的处理逻辑,所以还是会有【遮挡】。
- 实际上推理阶段会使用 KV 缓存,默认自带隔离
- Masked 通过【二维矩阵】填充 0,将后续的计算全部遮挡掉
- Feed Forward:前馈神经网络(正向反馈神经网络),内部权重是
w & b ,是可训练参数。LLM 大模型的训练,主要就是训练这个参数。
- 使用【反向传播】+【梯度下降】
- Add & Norm & Softmax:一些归一化、激活函数等操作,无可训练参数。
- 收敛数据
- 概率分布
- 图中左右分开,左侧是 Encode 层,右侧是 Decode 层:
- Encode:处理用户输入,即 Source Sentence 数据
- Decode:LLM 生成内容,即 Output Sentence 数据
- Encode 层,是一次计算,多次使用
- Decode 层,LLM 每生成一个 token 就需要计算一遍

Transformer 架构 LLM Token 生成过程
模型关键超参数
num_attention_heads = 8 # 注意力头数量: 将注意力计算分散到多个子空间进行
num_encoder_layers = 6 # Encoder层数 (Nx)
num_decoder_layers = 6 # Decoder层数 (Nx)
vocab_size = 50000 # 词汇表大小 (示例)
用户问: 你是谁
模型答: 我是 AI 大模型
下面将详细追踪 Token 是如何在 Transformer 模型内部被处理和生成的。
阶段一:Encoder - 理解输入 "你是谁"
Encoder 的目标是读取整个输入句子 "你是谁",理解其含义,并生成一个包含上下文信息的中间表示,供 Decoder 使用。
1. Tokenization (分词)
- 目的: 将文本切分成模型能理解的 Token。
- 过程:
- 输入: "你是谁"
- 分词 (示例):
['你', '是', '谁']
- 添加特殊标记:
[SOS] (句子开始) 和 [EOS] (句子结束)。
- 结果 (Token 序列):
tokens = [SOS, 你, 是, 谁, EOS]
- (为方便后续表示,用 S, Y, U, V, E 代表这五个 Token)
tokens = [S, Y, U, V, E]
2. Input Embedding (输入嵌入)
- 目的: 将 Token 映射到连续向量空间。
- 过程: 查询预先训练好的 Embedding Table (词嵌入矩阵),找到每个 Token 对应的固定维度向量。
Vec_S = EmbeddingTable[S]
Vec_Y = EmbeddingTable[Y]
Vec_U = EmbeddingTable[U]
Vec_V = EmbeddingTable[V]
Vec_E = EmbeddingTable[E]
- 结果 (向量序列):
[Vec_S, Vec_Y, Vec_U, Vec_V, Vec_E]。此时向量只包含 Token 的基础语义,没有位置信息。
3. Positional Encoding (位置编码)
- 目的: 向模型注入 Token 的序列位置信息。
- 过程: 生成与每个位置对应的 Positional Encoding Vector (PE) (维度与词嵌入相同)。将位置编码向量加到对应 Token 的 Embedding 向量上。
InputVec_S = Vec_S + PE_0
InputVec_Y = Vec_Y + PE_1
InputVec_U = Vec_U + PE_2
InputVec_V = Vec_V + PE_3
InputVec_E = Vec_E + PE_4