第 4 章复习与验收
本页不再教授新概念,而是检查你能否离开正文独立完成四件事:画出完整链路、推导关键 shape、估算资源数量级、定位典型错误。
建议先关闭其他课程页面完成第一轮,再根据补学链接修正。开放题先写自己的答案,提交后才查看 rubric。
覆盖范围
文本 → token/ID → batch/labels/masks
→ embedding → L × Decoder Block → norm → vocab logits
→ masked next-token loss → backward → optimizer step
→ Prefill → KV Cache → Decode → sampling → stop
→ 模型家族 / Scaling / MoE / 多模态 / 扩散 / 能力来源交互自测
先作答,再查看解释。记录只保存在当前浏览器。
任务一:从文本画出数据批次
给定:
<BOS> 机器 学习 很 有趣 <EOS>使用上下文长度 T=4,完成:
- 写出第一个窗口的 input 和 labels;
- 画出
4×4causal mask; - 说明第 1 行可以读取哪些列;
- 若最后两个位置是 PAD,分别写出 padding attention mask 和 loss mask;
- 解释为什么 attention mask 与 loss mask 不能互相替代。
参考答案
input = [BOS, 机器, 学习, 很]
labels = [机器, 学习, 很, 有趣]
causal mask(0 表示允许,-∞ 表示禁止)
0 -∞ -∞ -∞
0 0 -∞ -∞
0 0 0 -∞
0 0 0 0第 1 行读取列 0、1。若某样本后两格为 PAD,简化有效位置 mask 可写 [1,1,0,0];attention 侧阻止 PAD 成为 K/V,loss 侧阻止对应标签计分。
任务二:追踪完整模型 shape
设:
B=2, T=8, C=512, L=6, V=32000, H=8, d_h=64写出:
input_ids;- embedding 输出;
- 拆 head 后的 Q;
- 每个 head 的注意力分数;
- 合并 heads 后的 Block 输出;
- 最终 logits;
- labels 和 token loss。
参考答案
| 对象 | shape |
|---|---|
| input_ids | [2,8] |
| embedding / hidden | [2,8,512] |
| Q(拆 head) | [2,8,8,64],若实现转置为 [B,H,T,d_h] 则 [2,8,8,64] 数字恰巧相同,必须仍标轴 |
| score / head | [8,8];完整为 [2,8,8,8] |
| 合并 heads | [2,8,512] |
| logits | [2,8,32000] |
| labels / token loss | [2,8] / [2,8] |
注意:数字相同不能省略轴名。本题 H=T=8,错误 transpose 可能仅看 shape 无法发现,必须检查轴语义。
任务三:估算参数与显存
设 V=32000,C=768,L=12,r=4,使用标准注意力、输入输出 embedding 共享并忽略小项:
- 估算 embedding 参数;
- 估算每层 attention 与 MLP 参数;
- 估算总参数;
- 估算 BF16 权重显存;
- 说明为什么该显存不能代表训练总显存;
- 预测把
T从 2048 增到 4096 时哪些量不变、线性变化、平方变化。
可以在规模计算器中核对,但先手算。
参考数量级
embedding = 32000×768 ≈ 24.6M
attention/layer = 4×768² ≈ 2.36M
MLP/layer = 8×768² ≈ 4.72M
blocks = 12×(2.36M+4.72M) ≈ 84.9M
total ≈ 109.5M parameters
BF16 weights ≈ 219MB(十进制)≈ 209MiB训练还需要梯度、优化器状态和激活。T 翻倍:参数不变,标准 KV Cache 约翻倍,朴素注意力分数元素约四倍。
任务四:写出两阶段生成时间线
Prompt 是 <BOS> 我 喜欢,模型依次生成 猫、<EOS>。必须写出:
- Prefill 输入与输出;
- 每层缓存初始包含哪些位置;
- Decode “猫”时新计算什么、复用什么;
- “猫”的 position id;
<EOS>在哪里触发停止;- 训练参数是否变化。
评分要点
合格答案应说明:Prefill 并行计算三个 Prompt token并缓存每层 K/V;首轮 logits 选择“猫”;“猫”的 position id 为 3,只计算它的新 Q/K/V并读取历史 K/V,然后追加缓存;下一轮选择 <EOS> 并停止;常规推理没有 backward 和 optimizer step,参数不变。
任务五:四类故障诊断
A. 训练 loss 很低,自由生成完全失败
至少列出四个检查:label shift、causal mask 方向、训练/验证泄漏、生成时是否接回自己的输出、停止条件。
B. 开启 KV Cache 后结果明显变化
至少列出:position id、缓存拼接轴、不同 batch 有效长度、mask 长度、dropout/eval 模式。
C. 8K 上下文可以运行,32K 突然 OOM
不能只回答“参数太大”。应检查 KV Cache、batch/并发、dtype、激活、注意力内核是否物化 T² 分数。
D. MoE 总参数很大,但吞吐没有预期高
检查 active experts、路由负载、专家容量、all-to-all 通信、batch 是否足够以及权重布局。
任务六:比较四种模型闭环
不用背模型名,完成下表:
| 闭环 | 输入可见性 | 训练目标 | 生成/输出状态 |
|---|---|---|---|
| Encoder-only | ? | ? | ? |
| Encoder–Decoder | ? | ? | ? |
| Decoder-only | ? | ? | ? |
| 文本条件扩散 | ? | ? | ? |
参考答案
| 闭环 | 输入可见性 | 训练目标 | 生成/输出状态 |
|---|---|---|---|
| Encoder-only | 输入 token 通常双向 | masked token 等 | 上下文表示或任务头输出 |
| Encoder–Decoder | 来源双向;目标因果并 cross-attend 来源 | 条件序列/去噪文本目标 | 逐 token 目标序列 |
| Decoder-only | 全序列因果 | next-token | 逐 token 追加前缀 |
| 文本条件扩散 | 去噪状态读取文本条件 | 预测噪声/速度等 | 整个噪声/潜变量状态逐步更新 |
任务七:运行并扩展最小实验
进入最小 next-token 实验,提交一份记录:
- 初始与最终 loss;
- 每行概率和为 1 的断言;
- 固定 seed 的生成结果;
- 修改训练分布后的转移概率变化;
- 只改 temperature 时参数未变、样本分布变化的证据;
- 说明 bigram 模型与 Transformer 的共同接口及关键差异。
任务七:独立实现与故障验收
完成 tiny Transformer 实验,提供一次 CPU 训练日志、一个重新加载生成结果、一个继续训练等价检查。然后不看正文,选择“取消 causal mask”或“标签不右移”注入故障,保存触发断言、定位与修复后的结果。
评分要点:不是凭 loss 判断因果性;正确指出首个坏对象;恢复正确实现后再运行。只运行基线记“运行通过”,能独立修复故障才记“实现通过”。这项状态与下方概念分数分别记录。
评分标准
| 部分 | 分值 | 合格证据 |
|---|---|---|
| 交互自测 | 2 | 客观题至少 8/9,开放题覆盖 5 个要点 |
| 数据与 mask | 2 | 右移、三类 mask 与轴方向正确 |
| 模型与 shape | 2 | 能标清 [B,T,C]、heads 和 [B,T,V] |
| 参数与资源 | 2 | 数量级正确,区分权重/训练状态/KV/T² |
| 推理与诊断 | 2 | Prefill/Decode 完整,至少三类故障可定位 |
| 架构扩展 | 2 | 三类 Transformer、MoE、扩散边界清楚 |
| 实验 | 2 | 基线、反事实、断言和解释完整 |
总分 14 分:
0–7:回到对应课程补学;8–10:核心闭环基本建立,但资源或扩展部分仍薄弱;11–12:章节合格;13–14:概念与模拟部分充分;任务七另记实现状态后进入下一章。
补学索引
| 薄弱点 | 返回 |
|---|---|
| token 与 labels | 文本怎样变成训练样本 |
| batch、PAD 与 mask | 批次与因果遮罩 |
| 完整网络结构 | Decoder 语言模型组装 |
| logits 与 loss | next-token 前向 |
| 梯度与 step | 训练循环 |
| 参数和显存 | 资源估算 |
| KV Cache | Prefill 与 Decode |
| 采样 | 采样策略 |
| 模型家族 | BERT、T5 与 GPT |
| Scaling 与 MoE | 容量扩展 |
| 多模态与扩散 | 跨模态生成 |
| 能力归因 | 参数、上下文、检索与工具 |
完成后的下一步
记录完成日期、得分和仍不确定的三点。然后进入数据、训练与对齐,学习语料治理、预训练、监督微调和偏好目标怎样塑造模型行为;若更想先落地代码,则进入MiniMind 全链路实践。