跳转至

附录 D 练习、复盘与项目验收方法

本书不按时间表组织,也不要求固定学习速度。学习进度应由“能否独立完成验收”决定,而不是阅读页数。下面给出一套贯穿十四章的复盘方法。

D.1 五层掌握标准

  1. 能定义:不用术语循环解释术语,能说出对象解决的问题。
  2. 能画图:能画出输入、关键状态、输出和数据流。
  3. 能计算:能写形状、关键公式或复杂度数量级。
  4. 能实现:能完成最小 Python 代码,并通过边界测试。
  5. 能评估:能说明什么证据表明实现正确、何时会失败、怎样比较替代方案。

只有第一层通常只能应付选择题,无法完成项目或技术面试。每章至少选择两个主题做到第五层。

D.2 实验报告模板

# 实验名称

## 问题与假设
- 想验证什么?
- 为什么预期如此?

## 数据与环境
- 数据来源、许可、切分与版本
- Python/库/硬件/随机种子

## 方法
- 基线
- 本次唯一主要改动
- 指标及定义

## 结果
- 数值、曲线、耗时、内存或显存
- 代表性成功与失败样例

## 分析
- 证据直接支持什么?
- 哪些只是推断?
- 还有哪些替代解释?

## 回归测试与下一步

D.3 怎样设计练习

优先设计能失败的练习。比如注意力练习不只是“输出形状正确”,还应检查未来位置权重为零;RAG 不只是“能回答”,还要把目标证据从索引中移除,观察系统是否错误地凭参数记忆作答;Agent 不只是“调用工具”,还要注入未知工具、超时、空结果和权限拒绝。

每个核心函数至少覆盖:正常输入、最小/空边界、非法形状或类型、极端数值、固定随机性。涉及外部服务时,还要覆盖超时、限流、部分返回和重试幂等。

D.4 怎样读论文

第一次读论文先回答五个问题:研究问题是什么;以前方法哪里不足;作者做了什么;实验怎样支持结论;限制是什么。第二次再进入公式与实现,第三次用代码或小实验验证一项关键主张。

模型技术报告还要区分已公开事实、合理推断和未公开信息。训练数据、系统优化和评测设置常不能完全复现,不应把猜测写成确定结论。

D.5 怎样使用开源仓库

先读 README、许可证和目录,不要直接执行安装脚本。选择一个最小入口,固定 commit,查看配置和测试。运行成功后改变一个变量并预测结果;如果只能运行默认 Notebook,而不知道输入输出和失败边界,还没有真正掌握。

引用开源代码时遵守许可证和署名要求。正文可用自己的语言总结概念并链接原始来源,不要大段复制教程或书籍文本。

D.6 贯穿全书的毕业项目

建议最终完成一个“有评估的知识助手”,而不是只做聊天界面。最低要求:

  • 数据摄取支持至少两种文档格式,保留来源、页码、版本和权限。
  • 建立 BM25 基线、向量检索和混合检索,使用固定标注集比较。
  • 回答返回引用;程序验证引用 id 与实际上下文一致。
  • 服务记录 TTFT、总延迟、检索耗时、token 与错误类型。
  • 至少实现一个只读工具;高风险工具必须经过权限与确认。
  • 保存三类 bad case 的定位过程与回归测试。
  • README 提供架构图、运行命令、数据说明、指标定义、结果与限制。

资源有限时可使用小数据、模拟模型或公开 API,但必须诚实说明哪些环节没有在本地训练或部署。项目的可信度来自证据完整,而不是组件数量。

D.7 最终自检

  • 能否在白纸上画出从文本到 token、Transformer、logits 和生成的完整路径?
  • 能否解释 RAG 的错误来自解析、召回、重排还是生成,并给出相应指标?
  • 能否说明 LoRA/QLoRA 节省哪些状态,又没有节省哪些激活?
  • 能否比较 DPO、PPO、GRPO 的数据与训练要求,而不说绝对优劣?
  • 能否估算一个模型权重、KV Cache 和训练状态的数量级?
  • 能否为 Agent 写出工具 Schema、权限、停止和失败测试?
  • 能否用三分钟讲清一个项目的约束、个人决策、指标和 bad case?

若其中某项只能给出名词列表,就回到对应章节完成最小实验。真正的学习闭环是:发现说不清的地方,把它缩小成可运行问题,再用证据修正自己的理解。