Transformer 系统学习路径:第1章 · 基础知识
分类:
machine-learning/transformer· 风格:专业 + 科普 · 少公式 · 重直觉
风格:专业 + 科普 · 少公式 · 重直觉(为什么 / 怎么调 / 效果是什么)
前置:总览
本章目标:能手画一个 Block、能讲清注意力、能区分三大架构
配图:本目录figures/下 8 张教学 SVG(可直接放大查看)
0. 先记住三句话
Section titled “0. 先记住三句话”- Transformer = 序列加工流水线,核心不是「更深」,而是「任意位置可以直接对话」。
- 注意力 = 动态路由:每个位置自己决定「该听谁、听多少」。
- 一层 Block 不改形状:
[条数, 长度, 维度]进,同样形状出——变的是每个位置「懂不懂上下文」。
1. 为什么需要 Transformer?(接力赛 vs 圆桌会)
Section titled “1. 为什么需要 Transformer?(接力赛 vs 圆桌会)”1.1 问题长什么样?
Section titled “1.1 问题长什么样?”一句话、一段 DNA、一条蛋白,本质都是:
一串有顺序的符号 → 你想预测下一个、填空、分类、生成……
| 领域 | 序列例子 | 典型输出 |
|---|---|---|
| 文本 | 词 / 子词 | 下一词、翻译、摘要 |
| DNA | A/C/G/T 或 k-mer | 启动子、剪接、变异效应 |
| 蛋白 | 氨基酸 | 结构、功能、结合 |
1.2 老方案的瓶颈(直觉)
Section titled “1.2 老方案的瓶颈(直觉)”| 方法 | 优点 | 缺点(人话) |
|---|---|---|
| 词袋 / 统计 | 快、稳 | 没顺序、没结构 |
| CNN | 擅长局部 motif(像找基序) | 要够着远处得堆很多层 |
| RNN / LSTM | 天然有顺序 | 像传话游戏:一站站传,远了就糊;还难并行 |
1.3 关键一跃:从接力到圆桌
Section titled “1.3 关键一跃:从接力到圆桌”不靠一站站传,而是每个位置直接问所有位置:你和我有多相关?再按相关度混合信息。
| 效果 | 直觉 |
|---|---|
| 长程依赖 | 第 1 位和第 1000 位可以「一步对话」(代价:长度一长,算力涨得快 → 第2章) |
| 可并行 | 训练时整句一起算,不像 RNN 必须按时间步串 |
| 可粗看 | 注意力权重能提示「模型在看哪里」(别过度神化) |
flowchart LR subgraph 老路 A1["位1"] --> A2["位2"] --> A3["位3"] --> A4["位4"] end subgraph 新路 B1["位1"] <--> B2["位2"] B1 <--> B3["位3"] B1 <--> B4["位4"] B2 <--> B3 B2 <--> B4 B3 <--> B4 end
2. Tokenization:切成模型能吃的「积木」
Section titled “2. Tokenization:切成模型能吃的「积木」”模型不吃字符串,吃的是 整数 ID 列表。
Tokenization = 切分规则 + 词表。
三种常见粒度
Section titled “三种常见粒度”| 粒度 | 直觉 | 序列变长? | 典型场景 |
|---|---|---|---|
| 字符 / 单碱基 / 单氨基酸 | 词表小、最忠实 | 很长 | DNA 单碱基、蛋白氨基酸 |
| 子词 BPE | 常见片段压缩,罕见的拆开 | 中等 | 自然语言、部分基因组模型 |
| k-mer | 固定窗口滑,生信老传统 | 仍较长 | 早期基因组 DL |
调参手感:
- 切得太碎 → token 串爆长 → 算力和上下文都紧
- 切得太粗 → 词表爆炸,罕见片段泛化差
- 记得留特殊符号:
[CLS]、[MASK]、[SEP]、[PAD]、物种标签等
生物向细节(步长、反向互补、多物种词表)→ 第3章。这里只要记住:tokenization 是第一道「信息瓶颈 + 长度预算」闸门。
批处理时长度不同 → 补 PAD,并 mask 掉:别让模型去「听」填充位。
3. Embedding + 位置:内容名片 + 座位号
Section titled “3. Embedding + 位置:内容名片 + 座位号”3.1 Embedding 在干什么?
Section titled “3.1 Embedding 在干什么?”每个 token ID → 查一张可学习的表 → 得到一个向量(如 512/768 维)。
[长度 L 的 ID] → [L, d_model] 的矩阵每个 token 领到一张「内容名片」;后面所有计算都在这个空间里做。
相似用法的 token,训完后向量会靠近——这就是「语义几何」的直觉。
3.2 为什么还要位置?
Section titled “3.2 为什么还要位置?”标准自注意力对换位置不敏感(它主要看内容像不像)。
但「ATG」≠「GTA」,基因组和语言都有顺序。
所以要注入位置:
内容名片 + 座位号名片 → 既知道是谁,也知道坐哪。
| 类型(第1章够用) | 直觉 |
|---|---|
| 正弦固定编码 | 用不同频率的「波」标记位置 |
| 可学习位置向量 | 每个座位一个可训向量(常卡死最大长度) |
更现代的 RoPE / ALiBi → 第2章。
4. Self-Attention:圆桌上的 Q / K / V
Section titled “4. Self-Attention:圆桌上的 Q / K / V”这是心脏。先建立画面,再记流程。
4.1 三个角色(会议室类比)
Section titled “4.1 三个角色(会议室类比)”| 角色 | 类比 | 在算什么 |
|---|---|---|
| Q Query | 「我在找什么?」 | 当前位提出的问题 |
| K Key | 「我的名牌 / 广告牌」 | 对外展示的检索键 |
| V Value | 「我背包里的货」 | 真正被加权拿走的内容 |
三步走:
- 用我的 Q 和所有人的 K 比相似度 → 打分
- Softmax 变成权重(一行加起来 = 100% 注意力预算)
- 按权重混合所有人的 V → 我的新向量
flowchart TB X["位置 i 的向量"] --> Q["Q:我在找啥"] X --> K["K:我的标签"] X --> V["V:我的内容"] Q --> S["和全场 K 打分"] S --> W["变成权重 和=1"] W --> O["加权混合全场 V"] V --> O O --> H["新的 h_i:听过全场"]
4.2 形状直觉(几乎不写公式)
Section titled “4.2 形状直觉(几乎不写公式)”输入 X: [L, d]打分矩阵: [L, L] ← 每个位置对每个位置打一枪输出: [L, d] ← 每个位置一个「更懂上下文」的向量[L,L] 是福也是祸:全局可见;长度一长,内存和算力涨得很快(第2章管效率)。
4.3 Softmax 与「温度感」
Section titled “4.3 Softmax 与「温度感」”- 分数差很大 → 权重很尖(几乎只听一个人)
- 分数差不多 → 权重很平(平均听)
缩放(scale)要点:维度高时点积容易爆大,Softmax 过尖、难训,所以实践上会除以一个与维度相关的数——为了好训练,不是玄学。
4.4 小例子手感
Section titled “4.4 小例子手感”句子:[CLS] 促 转 录
对「转」:可能高权重看「促」「录」;更深的层才可能抓更远调控语境。
浅层偏局部共现,深层才更抽象——和 CNN 感受野变大有点像,但注意力是内容决定的,不是固定窗口。
5. Multi-Head:多副眼镜同时看
Section titled “5. Multi-Head:多副眼镜同时看”单头容易学成一种「平均看世界」的方式。
多头 = 多套独立的 Q/K/V,每套偏一种模式,最后拼接再压回原来的宽度。
| 头(概念示意) | 可能关注 |
|---|---|
| 头1 | 相邻 / 局部 |
| 头2 | 长程搭配 |
| 头3 | 特殊符号、边界 |
| 头4 | motif 式局部模式 |
生物直觉:有的头偏局部基序,有的偏长程关系——单头解释别过度神化。
旋钮手感: 头数 ↑ → 模式种类多,但每头维度可能变碎;d_model 通常能被头数整除(如 768/12=64)。
6. 一个 Block:高速公路 + 两个服务区
Section titled “6. 一个 Block:高速公路 + 两个服务区”注意力解决 「和谁混合」;
混合完还要 「每个位置自己再加工」 → FFN / MLP。
flowchart TB X0["输入 x"] --> SA["Multi-Head Self-Attention"] SA --> R1["x = x + SA(x) 残差"] R1 --> N1["LayerNorm"] N1 --> FF["FFN:放大 → 激活 → 压回"] FF --> R2["x = x + FFN(x) 残差"] R2 --> N2["LayerNorm"] N2 --> X1["输出到下一层 · 形状不变"]
| 组件 | 人话 |
|---|---|
| 残差 | 应急车道:可不加工直通,信号不易洗没,深层好训 |
| LayerNorm | 把每个位置的数值校准到稳定范围,优化器好干活 |
| FFN | 通常放大到约 4× 再压回;逐位置加工(纵向) |
| 注意力 | 位置之间换信息(横向) |
现代大模型更常 Pre-Norm(Norm 在子层前),更好堆深层。第1章记住:有 Norm + 残差,深层才稳。
形状口令(肌肉记忆):
进: [B, L, d] 出: [B, L, d]变的是含义,不是形状| 任务 | 常见读出 |
|---|---|
| 句分类 | [CLS] 或平均池化 → 线性层 |
| token 分类 | 每个位置一个分类头 |
| 生成 | 每个位置投影到词表 → Softmax |
7. 三大架构:谁能看谁、适合干什么
Section titled “7. 三大架构:谁能看谁、适合干什么”| 架构 | 可见范围 | 经典预训练 | 擅长 | 生物影子 |
|---|---|---|---|---|
| Encoder-only | 双向全句 | MLM 填空 | 分类、表征、检索特征 | 蛋白 LM 取 embedding |
| Decoder-only | 因果(只看过去) | 下一 token | 续写、对话、生成 | 基因组自回归 FM |
| Encoder-Decoder | 编码双向 + 解码因果 + 交叉注意力 | seq2seq | 翻译、A→B 转换 | 序列→注释/设计 |
交叉注意力要点: 解码器用自己的 Q,去读编码器的 K/V——生成时「盯着源序列的哪些位置」。
第1章 决策树:
输出是「整段标签 / 向量」? → 偏 Encoder输出是「往后写 / 自由生成」? → 偏 Decoder输入一种、输出另一种结构? → 考虑 Enc-Dec很多现代系统用 Decoder-only + 提示词 包打天下;生物 foundation model 两边都有,第3章再对实例。
8. 掩码与生成:考试不能偷看答案
Section titled “8. 掩码与生成:考试不能偷看答案”| 掩码 | 作用 | 场景 |
|---|---|---|
| Padding mask | 别看 PAD | 所有架构 batch |
| Causal mask | 别看未来 | Decoder 训练/生成 |
| MLM mask | 输入挖空,预测空位 | BERT 式预训练 |
自回归生成循环:
- 输入已有 token
- 预测「下一个」的概率分布
- 采样或取最大(温度、top-p → 第2章)
- 拼到后面,重复直到结束
Teacher Forcing: 训练时常常喂标准答案前缀,而不是模型自己刚写错的字——训得快,但和真实推理有落差。知道有这回事即可。
KV Cache(缓存已算过的 K/V)是推理加速关键 → 第2章。
9. 可选迷你实验(重直觉)
Section titled “9. 可选迷你实验(重直觉)”| 实验 | 做什么 | 你要体会到什么 |
|---|---|---|
| A 热图 | 画某层某头的 [L,L] 注意力 | 行和≈1;有的头很局部 |
| B 打乱位置 | 去掉/打乱位置编码 | 内容+位置缺一不可 |
| C 掩码作弊 | 概念上:无因果掩码训 LM | 验证集虚高,一生成就废 |
10. 第1章 自检清单
Section titled “10. 第1章 自检清单”能口头答上,即可进第2章:
- RNN 为何难并行、难抓超长依赖?Transformer 靠什么缓解?
- Token、Embedding、位置编码各解决什么?
- Q/K/V 是什么?输出为何是 V 的加权和?
- 多头的「多」换来什么?代价?
- Block 里:注意力、FFN、残差、Norm 的分工?
- 三大架构怎么选?
- Padding mask 与 Causal mask 各防什么?
- 为何一层后仍是
[B,L,d]?
| 术语 | 要点 |
|---|---|
| Self-Attention | 按相关度混合全序列信息 |
| Multi-Head | 多套注意力,多种模式 |
| FFN | 逐位置非线性加工 |
| Residual | 高速公路,好训保信号 |
| LayerNorm | 校准尺度,稳训练 |
| Causal Mask | 不许看未来 |
| d_model | 每个位置向量有多宽 |
11. 核心参数一览 · 怎么调 · 一点点公式
Section titled “11. 核心参数一览 · 怎么调 · 一点点公式”前面讲了「塔长什么样」;这一节把旋钮摊开:有哪些 / 常见值 / 怎么调 / 为什么 / 预期效果。公式只留最少但最关键的几条,重直觉。
11.1 结构参数(决定「塔的形状与容量」)
Section titled “11.1 结构参数(决定「塔的形状与容量」)”| 参数 | 含义(人话) | 常见量级 | 怎么调 | 为什么 | 调大/调小的效果 |
|---|---|---|---|---|---|
d_model | 每个位置向量有多宽 | 256 / 512 / 768 / 1024 / 4096+ | 起步 256~512,逐步放大 | 太窄装不下模式,太宽算力爆 | ↑:容量强、参数近似 ∝ d²;↓:省但可能欠拟合 |
num_heads | 多头个数 | 4 / 8 / 12 / 16 / 32 | 必须满足 d_model % num_heads == 0 | 每头独立学一种模式 | ↑:模式多;单头维度会变碎 |
head_dim | 单头维度 = d_model / num_heads | 32 / 64 / 128 | 常见甜点 64 | 太小 softmax 分不清,太大冗余 | <32 常见崩坏 |
num_layers | Block 堆叠层数 | 6 / 12 / 24 / 48 / 96+ | 从 6~12 起 | 层数 = 抽象层级 | ↑:更抽象、更难训、需 warmup |
d_ff | FFN 中间维度 | ≈ 4 × d_model | 常 4×,可 2~8× | 逐位置非线性容量 | ↑:参数/算力↑,能力↑ |
max_seq_len | 上下文最大长度 L | 512 / 2k / 8k / 32k+ | 按任务实际长度调 | 注意力显存 ∝ L² | ↑↑:算力显存爆炸 |
vocab_size | 词表大小 | 数千 ~ 数万 | 由 tokenizer 决定 | 太大嵌入表爆,太小 token 变长 | 权衡 tokenization ↔ 参数 |
dropout | 随机丢弃比例 | 0.0 ~ 0.3 | 大数据 0 | 缓解过拟合 | ↑:抗过拟合、收敛慢 |
手感 · 头数与宽度的联动:
d_model = num_heads × head_dim。想加头数常常要一起加 d_model,否则每头维度会碎(<32 就危险)。
11.2 训练参数(决定「怎么爬坡」)
Section titled “11.2 训练参数(决定「怎么爬坡」)”| 参数 | 含义 | 常见值 | 怎么调 | 为什么 | 预期效果 |
|---|---|---|---|---|---|
learning_rate | 学习率 | 预训练 1e-4 ~ 5e-4;微调 1e-5 ~ 5e-5;LoRA 可 1e-4 | 扫数量级 | 太大震荡/NaN,太小爬不动 | 最关键旋钮 |
warmup_steps | 学习率热身 | 总步数 1%~10% | 大模型/大 batch 多热身 | 初期梯度乱 | 减少 loss spike |
batch_size | 批大小(按 token 计更准) | 数万~数百万 tokens | 显存不够 → 梯度累积 | 大 batch 稳但要配大 LR | ↑:稳、每步慢 |
weight_decay | 权重衰减 | 0.01 ~ 0.1 | 轻度正则 | 抑制权重无界增大 | 轻微抗过拟合 |
grad_clip | 梯度裁剪阈值 | 1.0 | Loss 抖大就打开 | 防偶发爆炸一步毁模型 | 稳训练救命稻草 |
optimizer | 优化器 | AdamW 是默认 | 特殊场景用 Lion/Adafactor | AdamW 自适应 + 解耦衰减 | 90% 场景选 AdamW |
lr_scheduler | 学习率曲线 | cosine + warmup | 长训用 cosine | 后期慢慢降有助收敛 | 更稳的收尾 |
11.3 生成参数(决定「输出多花哨」)
Section titled “11.3 生成参数(决定「输出多花哨」)”| 参数 | 含义 | 常见值 | 效果 |
|---|---|---|---|
temperature | 采样温度 T | 0(贪心)~ 1.5 | ↑:随机、创意、易胡言;↓:稳、死板 |
top_k | 从概率最高 k 个采样 | 20 ~ 100 | k=1 ≈ 贪心 |
top_p (nucleus) | 累计概率 ≤ p 的集合内采样 | 0.9 ~ 0.95 | 动态词表大小,比 top_k 更自适应 |
repetition_penalty | 复读惩罚 | 1.0 ~ 1.3 | 减少「XXX XXX XXX」 |
max_new_tokens | 最多生成长度 | 按任务 | 与 KV Cache 显存正相关 |
11.4 少而精的公式(记直觉,不背式子)
Section titled “11.4 少而精的公式(记直觉,不背式子)”① 注意力打分(scaled dot-product) — 第1章的心脏:
score = Q · Kᵀ / √d_kAttention(Q,K,V) = softmax(score) · V为什么除以 √d_k? 维度高时点积容易变很大,softmax 输出会变得极尖(几乎 one-hot),梯度趋近 0 难训。除以 √d_k 让打分方差稳定在 O(1),softmax 才有可学习的梯度。
② 残差 + LayerNorm(一层子模块的骨架):
Post-Norm (原论文): x = LayerNorm(x + Sublayer(x))Pre-Norm (现代主流):x = x + Sublayer(LayerNorm(x))人话: 应急车道 + 校准尺度。Pre-Norm 深层更好训(GPT/LLaMA 都用它),Post-Norm 则表达力更强但需要仔细 warmup。
③ Softmax(把分数变成注意力预算):
softmax(x_i) = exp(x_i) / Σ_j exp(x_j) ← 每行加起来 = 1人话: 每个位置有 100% 的「注意力预算」,按 softmax 分配给全场。
④ 位置正弦编码(第1章 够用的位置版本):
PE(pos, 2i) = sin( pos / 10000^(2i / d_model) )PE(pos, 2i+1) = cos( pos / 10000^(2i / d_model) )人话: 用多种频率的波同时给每个位置画一张「座位号名片」,加到 embedding 上。别背式子,记住「多频率波」即可。RoPE/ALiBi 在第2章。
⑤ 参数量粗算(心里有账本):
参数 ≈ 12 × num_layers × d_model² (只看主体,忽略 embedding 与 bias)人话: 一层 Block 大约有
12 d²的参数(4 组 QKVO + 2 层 FFN 大约 8 d²)。想快速估「这个模型多大」,用这条即可。
11.5 参数联动表(哪里改动会波及哪里)
Section titled “11.5 参数联动表(哪里改动会波及哪里)”| 你改动 | 会波及 |
|---|---|
d_model ↑ 一倍 | 主体参数 ×4(∝ d²),显存和算力同涨 |
num_heads ↑ | head_dim 自动变小,头太多要一起加 d_model |
num_layers ↑ 一倍 | 参数、算力线性翻倍 |
max_seq_len ↑ 一倍 | 注意力显存/算力 ×4(∝ L²);KV Cache ×2 |
batch_size ↑ | 显存↑;LR 常按 √ 或线性同步↑ |
LoRA rank ↑ | 额外可训参数↑,欠拟合缓解但过拟合风险↑ |
11.6 一份「起手式」配方(小型 Transformer,~50M 参数)
Section titled “11.6 一份「起手式」配方(小型 Transformer,~50M 参数)”# 结构d_model = 512num_heads = 8 (head_dim = 64)num_layers = 6~8d_ff = 2048 (4 × d_model)max_seq_len = 1024dropout = 0.1
# 训练optimizer = AdamW (β1=0.9, β2=0.95, weight_decay=0.01)learning_rate = 3e-4lr_scheduler = cosine + warmup 4000 stepsbatch_size = ~256k tokens/step (显存不够就梯度累积)grad_clip = 1.0precision = bf16 或 fp16 混合精度
# 生成(推理)temperature = 0.8top_p = 0.9注意: 这是「通用起手式」。生物向的推荐值(词表大小、上下文长度、GC/motif 相关调整)→ 第3章。
11.7 参数决策速查(3 秒决定要不要动它)
Section titled “11.7 参数决策速查(3 秒决定要不要动它)”loss 一步 NaN → 先查 LR、grad_clip、混合精度、脏数据训练降验证升 → 加数据 / dropout / 早停;不是加参数显存爆 → batch↓、L↓、梯度累积、FlashAttn (第2章)效果卡住不涨 → 先怀疑数据和评估,再想模型生成复读、太保守/太乱 → 调 temperature/top_p/repetition_penalty12. 配图索引
Section titled “12. 配图索引”| 文件 | 内容 |
|---|---|
/figures/transformer-tutorial-chapter1/tf1-01-rnn-vs-transformer.svg | 接力赛 vs 圆桌会 |
/figures/transformer-tutorial-chapter1/tf1-02-tokenization.svg | 切积木三种粒度 |
/figures/transformer-tutorial-chapter1/tf1-03-qkv-attention.svg | Q/K/V 圆桌 |
/figures/transformer-tutorial-chapter1/tf1-04-embedding-position.svg | 名片 + 座位号 |
/figures/transformer-tutorial-chapter1/tf1-05-multihead.svg | 多副眼镜 |
/figures/transformer-tutorial-chapter1/tf1-06-block-highway.svg | Block 高速公路 |
/figures/transformer-tutorial-chapter1/tf1-07-three-architectures.svg | 三大架构 |
/figures/transformer-tutorial-chapter1/tf1-08-mask-generate.svg | 掩码与生成循环 |
13. 下一站
Section titled “13. 下一站”第1章 = 单塔结构是什么。
第2章 = 预训练目标、长上下文、效率、LoRA、稳训练、与 CPT/对齐的接口。
→ 第2章 · 进阶
第1章 完 · Transformer 系统学习路径(形象图解版)
主题色
字体
字号
视觉效果
即将离开本站
你将前往外部网站:
该网站与本站无关,本站不对其内容、安全性或可用性负责。确定后将在新标签页打开。