LLM 学习日记 #1:Transformer
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you’ve already provided) here? Once I have it, I’ll translate it into Simplified Chinese while preserving all formatting, markdown, and technical terms.
关于我
我已经作为软件工程师工作了近 8 年,主要从事后端和基础设施工作,包括分布式系统、近线处理、批处理等。我在学校学过一些机器学习的基础知识,但没有复杂的机器学习用例经验。本系列将记录我作为一名普通软件工程师对大型语言模型(LLM)的学习体会。如果有什么错误,欢迎评论并提出问题。
Transformer
了解 Transformer 各组件的好资源是 Hugging Face 博客文章 Mastering Tensor Dimensions in Transformers。
- 仅解码器模型(GPT 系列、LLaMA、Claude)用于生成。
- 编码器‑解码器模型(BART、原始的 “Attention Is All You Need” Transformer)处理翻译和摘要。
- 仅编码器模型(BERT)用于分类和嵌入。
这里我们关注仅解码器的 LLM。概括该架构,Transformer 块有两个主要组件:掩码多头注意力(Masked Multi‑Head Attention,MMHA)和前馈网络(Feed‑Forward Network,FFN)。

掩码多头注意力 (MMHA)
注意力公式包含查询 (Q)、键 (K) 和值 (V):
\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right) V
- (Q)(查询) – 当前 token 正在寻找的内容。
- (K)(键) – 每个 token 所提供/代表的内容。
- (V)(值) – 实际要检索的内容。
在注意力权重的计算中,softmax 在 (Q) 与 (K) 之间产生权重;随后返回对值 (V) 的加权求和。
训练直觉: 每个 token 对所有其他 token 提出问题(生成一个 (Q)),并使用它们的 (K/V),同时应用因果掩码。
推理直觉: 仅最新的 token 生成一个 (Q);它会关注先前 token 中存储的 (K/V)。
Q/K/V 在训练与推理中的区别
-
训练: 完整序列可用,因此所有 token 位置并行处理。对于每个 transformer 层,(Q)、(K) 和 (V) 都是从相同的隐藏状态序列计算得到,并且因果掩码阻止对未来 token 的注意。
-
推理 包含两个阶段:
-
预填充阶段 – 整个提示(prompt)被处理。为提示 token 计算 (Q)、(K) 和 (V);模型仅缓存 (K/V) 对以供后续使用。(Q) 向量在前向传播后被丢弃。
-
解码 / 生成阶段 – 对于每个新生成的 token,模型计算全新的 (Q)(以及它自己的 (K/V))。新的 (Q) 会注意到来自提示以及先前生成 token 的缓存 (K/V)。随后将新 token 的 (K/V) 追加到缓存中。
-
KV 缓存于推理
同一作者在 KV Caching Explained: Optimizing Transformer Inference Efficiency 中解释了 KV 缓存。
如果不使用缓存,每个过去的 token 的 (K) 和 (V) 都必须在每一步生成时重新计算——这是一种浪费,因为它们从不改变。KV 缓存将这些矩阵存储起来,使得每个新步骤只计算 (Q)(以及当前 token 的 (K/V)),并复用缓存的值,从而显著加快推理速度。
两种推理阶段——prefill(对提示进行并行处理)和 decode(自回归生成,一次一个 token)——决定了延迟特性、批处理策略以及 KV 缓存的填充方式。
前馈网络(FFN)
FFN 执行一个 扩展 → 非线性 → 收缩 的变换:
\text{FFN}(x) = \sigma\!\bigl(xW_{1} + b_{1}\bigr)W_{2} + b_{2}
- (W_{1}) – 扩展权重(通常是隐藏维度的 4 倍)。
- (W_{2}) – 收缩权重(恢复到隐藏维度)。
概念上:
- 扩展 – 生成大量候选特征。
- 激活 – 对非线性函数 (\sigma)(例如 GELU)进行应用,以挑选有用特征。
- 收缩 – 将特征压缩回残差流。
目标扩展维度是一个超参数;常用经验是扩展因子为 4,正如 GPT‑3 所采用的。
权重 vs 超参数
Transformer 学习(调优)以下权重矩阵:
- 每个头的注意力投影:(W_{Q})、(W_{K})、(W_{V})
- 注意力输出投影:(W_{O})
- Token + 位置嵌入(在 GPT‑2 等模型中位置嵌入是学习得到的;旋转嵌入没有可学习参数)
- LayerNorm 的尺度和偏置((\gamma, \beta))
- 最终输出 / 解嵌入矩阵(通常与输入嵌入共享)
超参数不是通过梯度下降学习的;它们定义网络的形状,例如学习率、批大小、嵌入维度、FFN 扩展因子、层数、注意力头数等。
损失函数
标准的下一个标记语言模型损失为
L = -\frac{1}{T}\sum_{t=1}^{T}\log P\bigl(x_{t+1}\mid x_{\le t}\bigr)
反向传播会将该损失的梯度传递至每一层,联合更新所有学习到的权重,以降低误差。
可视化
要通过具体示例查看每一步,请尝试交互式工具 Transformer‑Explainer。