Appearance
Transformer Block
Attention 只完成跨 token 的信息路由与聚合;一个完整 Transformer Block 还需要把多 Head 结果重新融合、写回 residual stream,并通过 FFN 继续加工每个位置的特征。
典型 Pre-Norm Block 可以压缩为两行:
功能上:
text
Attention
→ 跨 token 通信
FFN
→ token 内部计算
Residual
→ 信息 / 梯度主干
Norm
→ 稳定子层输入尺度1. 从多个 Head 到统一表示
设:
经典 MHA 中:
例如:
单个 Head 输出:
8 个 Head 沿 hidden dimension 拼接:
Concat 在做什么?
假设两个 Head 对某个 token 分别输出:
Concat:
它只是把不同 Head 的特征保留下来并排列在同一个向量里,并没有完成充分的跨 Head 特征重组。
2. Output Projection
Multi-Head Attention 完整输出不是停在 Concat:
经典情况下:
因此:
- 将不同 Head 的特征重新线性组合;
- 允许跨 Head 信息混合;
- 将结果映射回 residual stream 使用的统一 hidden space。
所以:
text
Head 1 ─┐
Head 2 ─┤
... ├→ Concat → W_O → MHA Output
Head h ─┘3. 为什么还要 Residual
Attention 子层不会简单地:
Pre-Norm 中是:
可以把子层看成学习一个增量:
即:
不要求每层重新生成完整表示,而是在当前 hidden representation 上学习应该增加什么修正。
4. Residual 的信息与优化意义
一般形式:
信息角度
原始表示存在直接路径:
text
x ─────────────────┐
+ → y
x → F(x) ──────────┘因此深层网络不需要每一层都完全覆盖已有信息。
梯度角度
相比:
Residual 多出一条 identity path,对深层网络中的梯度传播和优化稳定性很重要。
这不意味着所有梯度问题被完全消除,而是网络结构中存在更直接的信息和梯度路径。
5. 为什么子层最后要回到
Residual 需要:
因此二者维度必须兼容。
若:
则 MHA 最终也要输出:
FFN 虽然中间会升维,最终也必须降回
6. Norm 到底归一化什么
传统 LayerNorm 对单个 token 的 hidden feature dimension进行归一化。
设一个 token:
其中:
均值:
方差:
标准化:
随后还可以使用可学习的缩放和平移参数:
若:
可以理解为:
text
Token 1 的 4096 维 → 单独归一化
Token 2 的 4096 维 → 单独归一化
...LayerNorm 不负责让不同 token 发生通信;跨 token 交互仍由 Attention 完成。
现代 LLM 常用 RMSNorm,第二课单独学习。
7. Pre-Norm 与 Post-Norm
Post-Norm
原始 Transformer 典型结构:
数据流:
text
X → MHA → +X → NormPre-Norm
现代深层 Transformer / LLM 更常见:
数据流:
text
X ───────────────────┐
│ │
↓ │
Norm │
↓ │
MHA │
↓ │
+ ←──────────────────┘
↓
H注意:
Residual 加回来的是原始
,不是 。
不要写成:
Pre-Norm 让 residual stream 保持更直接的 identity path,这对很深的 Transformer 训练稳定性有重要价值。
8. Attention 子层之后已经包含上下文
完成:
后,当前位置的
- 原始 hidden representation;
- 从其他可访问 token 聚合来的信息;
- 多个 Head 的不同子空间结果;
对 Head 特征的重新组合。
因此后面的 FFN 虽然不直接访问其他 token,处理的依然是已经上下文化的表示。
9. FFN:Position-wise 非线性计算
经典形式:
对序列中的每个位置分别应用同一套参数:
所以:
text
Attention
→ token 与 token 之间的信息通信
FFN
→ 每个 token 自己的 feature dimension 上进一步计算FFN 不在这个子层里直接混合不同 token,但输入
10. 为什么 FFN 必须有非线性
如果只有:
令:
则:
多层线性变换仍然等价于一层线性变换。
即使有 bias:
展开:
令:
仍然只是:
即一个仿射变换。
所以:
Bias 不等于非线性。
加入 ReLU / GELU / SiLU / SwiGLU 等非线性结构后,整个 FFN 才不能在全局上合并成一个固定仿射映射。
11. 为什么 FFN 常先升维再降维
经典结构:
通常:
例如概念上:
可以理解为:
text
升维
→ 给当前位置更大的中间特征空间
非线性
→ 进行复杂特征组合
降维
→ 回到 residual stream 的 d_model现代 LLM 中常见 SwiGLU 等门控 FFN 变体,第二课再展开。
12. FFN 子层的第二次 Residual
完成 Attention 子层得到:
随后:
最后:
所以一个 Pre-Norm Block 有两次 Residual:
13. 完整维度例子
设:
并使用:
Attention 子层
text
X 100 × 512
Norm(X) 100 × 512
每个 Q/K/V Head 100 × 64
每个 Attention Map 100 × 100
每个 Head Output 100 × 64
8 Heads Concat 100 × 512
W_O 512 × 512
MHA Output 100 × 512
Residual 后 H 100 × 512FFN 子层
text
Norm(H) 100 × 512
First Projection 100 × 2048
Activation 100 × 2048
Second Projection 100 × 512
Residual 后 X' 100 × 512Block 内部可以拆 Head、升维、再降维,但进入和离开 Block 的主 hidden dimension 仍保持
14. 一层接一层时发生什么
第一层输入:
Block 1 得到:
第二层不会继续使用第一层的 Q/K/V,而是使用第二层自己的参数:
重新计算:
因此:
每层都基于当前 representation 重新建立信息路由,并继续写回 residual stream。
15. Embedding 与后续 Hidden Representation
最初:
主要由 Token Embedding 与位置信息构成。
多层以后:
已经融合大量上下文关系和非线性特征计算。
例如同一个 token:
text
bank出现在:
text
central bank与:
text
river bank初始 token embedding 可以相同,但经过上下文相关的多层 Attention / FFN 后,hidden representation 会明显不同。
16. 高频误区
text
错误:Concat 已经完成所有 Head 融合
正确:Concat 只是拼接,W_O 继续重组 Head 特征text
错误:Attention Output 覆盖原始 X
正确:Residual 通常写成 X + sublayer outputtext
错误:Pre-Norm residual 加 Norm(X)
正确:X + F(Norm(X))text
错误:FFN 负责 token 间通信
正确:Attention 通信,FFN 对已上下文化的单 token 表示计算text
错误:Bias 产生神经网络非线性
正确:多层 affine 仍可合并;Activation 才引入非线性text
错误:FFN 升维后 Block 输出也变大
正确:FFN 最终降回 d_model,才能写回 residual stream17. 最终心智模型
text
X
↓
Norm
↓
Multi-Head Attention
↓
Concat → W_O
↓
Residual: + X
↓
H
↓
Norm
↓
FFN: 升维 → 非线性 → 降维
↓
Residual: + H
↓
X'
↓
Next Transformer Block功能上:
下一课:
04_modern-llm-components.md
Mistakes:
05_Mistakes/AI.md
Interview QA:
06_Interview/AI_QA/Transformer.md