注意力与残差连接 (Attention & Residual / Transformer Block)
1. 定义
- 自注意力 (Self-Attention):让序列里每个位置”按需去看和它相关的其他位置”的机制——谁相关、权重就大。它是 Transformer 抓取长程依赖的核心。
- 残差连接 (Residual / Skip Connection):把子层的输入直接加到输出上(
output = Sublayer(x) + x),让梯度有”高速公路”直达浅层。 - 两者组合成 Transformer 的基本块:注意力子层、前馈子层各包一层”残差 + 层归一化(Add & Norm)“。今天的大语言模型,本质就是把这种块堆叠几十上百层。
类比:注意力像”开会时每个人按需抬头看相关同事的发言再汇总”;残差像”在主线任务上叠加一个修正建议,但主线本身绝不丢”——这样叠很多层也不会把最初的信息冲没。
关联:LLM 的底座就是 Transformer,见
foundation_model.md;残差正是为了解决深层网络的梯度消失,见gradient-descent.md第 9 节;从感知机到深层网络的演进见single-layer-perceptron.md。
2. 核心概念
| 概念 | 含义 |
|---|---|
| Query / Key / Value (Q/K/V) | 注意力三件套:用 Q 去和每个 K 算相似度,按相似度加权求和 V |
| Scaled Dot-Product | 相似度 = QKᵀ / √d_k,再 softmax 得权重 |
| Multi-Head | 把 Q/K/V 拆成多组并行算注意力,捕捉不同子空间关系,再拼回 |
| 残差 / Skip | x + Sublayer(x),绕开子层直连,保梯度通路 |
| Add & Norm | 残差相加后再做 LayerNorm(层归一化),稳定训练 |
| FFN | 每个块里的”前馈网络”子层(两层线性 + 激活),做逐位置变换 |
3. 注意力机制(公式与直觉)
直觉:拿 Q 和每个位置的 K 算”有多相关” → softmax 变成权重(加起来为 1)→ 按权重加权求和 V,得到这个位置”看了全场之后”的新表示。
token 序列 ──▶ 各自算出 Q/K/V
│
▼ QKᵀ/√d_k → softmax → 权重
▼ 按权重对 V 加权求和
▼
每个 token 的新表示(已融合相关位置的信息)
缩放
√d_k很关键:维度大时点积数值过大,softmax 会进入梯度极小的饱和区,训练不动。
4. 残差连接:为什么必须有
深层网络(几十上百层)直接堆叠会把梯度乘很多次,容易梯度消失(浅层学不动)。残差给梯度留了条”直连高速”:
普通堆叠: x → 子层 → 子层 → 子层 … 梯度要层层反传、层层相乘,易消失
残差堆叠: x ──┐
├─▶ 子层(x) ─┐
x ──┘ ├─▶ + x ──▶ … 梯度可沿"+"直传回 x,不被子层吞掉
一句话:残差让”叠很深”成为可能——这正是 LLM 能堆成百上千层、从而涌现出强能力的工程前提。
5. 组合:Transformer Block(核心)
x ──▶ [LayerNorm] ─▶ Multi-Head Attention ─▶ + x (残差) ─▶ [LayerNorm] ─▶ FFN ─▶ + x (残差) ─▶ 输出
└──────────────── 子层1(注意力)────────┘ └────────── 子层2(FFN)──────────┘
这就是 LLM 反复堆叠的基本单元。 PyTorch 里一行就是一块:
import torch.nn as nn
# 现成块:d_model=隐藏维度, nhead=头数, dim_feedforward=FFN 宽度
block = nn.TransformerEncoderLayer(d_model=512, nhead=8, dim_feedforward=2048)
# 手动看残差长啥样(概念版)
def residual_attn(x, attn, norm):
return x + attn(norm(x)) # 注意力子层 + 残差
def residual_ffn(x, ffn, norm):
return x + ffn(norm(x)) # 前馈子层 + 残差6. 典型工作流 / 为什么重要
- 文本先
token化、做成嵌入,带上位置编码输入。 - 过 N 个 Transformer Block(注意力抓依赖、残差保深层可训)。
- 最后接任务头(分类 / 下一个 token 预测)。
- 优势:注意力天然并行(不像 RNN 要一步步)、能直接看任意远距离依赖;残差让它堆得极深——二者共同成就了现代大模型。
7. 常见误区
- ❌ “注意力 = 记住了全部信息” → 它只是对当前序列做加权聚合,是”看一眼相关位置”,不是存储记忆(长程记忆靠堆叠层与上下文)。
- ❌ “残差是装饰、可有可无” → 没有它,深层 Transformer 梯度消失、训不动。
- ❌ “Transformer 取代 RNN 只因为快” → 主因是可并行 + 抓长程依赖 + 残差使其能堆很深,速度只是并行带来的副作用。
- ❌ “QKᵀ 不用缩放也行” → 维度大时点积过大让 softmax 饱和、梯度消失,必须
/√d_k。 - ❌ “残差就是再把输出加一遍” → 是 子层输出 + 原始输入 x(同一分辨率的直连),不是简单重复。
8. 延伸阅读 / 关联概念
- 基座模型 — Transformer 是现代 LLM 的底座;见
../ai-agent-guide/foundation_model.md - 梯度下降 — 残差解决的”梯度消失”在此讲透;见 gradient-descent.md
- 单层感知机 — 从单层到深层网络的演进;见 single-layer-perceptron.md
- Token / Embedding — 注意力吃的就是 token 嵌入序列;见
../ai-agent-guide/token.md、../ai-agent-guide/embedding_model.md - Hermes / SFT — 在这些 Transformer 底座上做 SFT 得到能用的模型;见
../ai-agent-guide/hermes.md、../ai-agent-guide/sft.md