主题
第31章 习题闭环与延伸:知道哪里已经验证,哪里还没有
这本书的终点不是把仓库文件都列一遍,而是让读者能从一个结果追到数据、计算、参数和验证条件。最后一章把公开习题解答与前面章节重新接起来,并说明独立推理仓库为什么不能被算作本仓库的完整实现覆盖。
31.1 原题、公开解答与本书补充题的区别
上游appendix-C只提供各章解答Notebook入口,appendix-B说明没有代码;它们不提供一份可据此逐字转载的完整出版书。这里概括公开解答所演示的操作,不复制原书题面或原图。本书每章“补充题”是为自己的解释设计的检查;公开解答中保存的大模型输出和耗时属于上游记录,未在本书环境重新测量。
| 公开解答入口 | 复盘任务 | 本书定位 | 可以检查的结果 |
|---|---|---|---|
| ch02 2.1–2.2 | BPE分词检查与滑窗长度/步幅比较 | 第3章 | 分词可回解、输入/目标相差一位 |
| ch03 3.1 | 对齐两种注意力实现的权重方向 | 第4章 | 同权重输出一致 |
| ch03 3.2 | 拼接多个头后的输出宽度 | 第5章 | head数乘单头宽度 |
| ch03 3.3 | 实例化GPT风格多头注意力 | 第5、7章 | 维度、参数计数 |
| ch04 4.1 | 前馈与注意力参数比较 | 第7章 | 分模块计数与公式一致 |
| ch04 4.2 | 更大GPT配置 | 第6–7章 | 头维整除、总参数增长 |
| ch04 4.3 | 分离不同dropout位置的配置 | 第6章 | train/eval行为 |
| ch05 5.1–5.3 | 温度、top-k与确定性 | 第14章 | 分布与固定条件输出 |
| ch05 5.4 | 继续预训练 | 第13、15、17章 | 状态恢复与后续loss |
| ch05 5.5–5.6 | 预训练权重损失与更大模型 | 第13、15章 | 相同数据和配置比较 |
| ch06 6.1–6.3 | 长度、训练范围、读出位置 | 第24章 | 成本与可见信息范围 |
| ch07 7.1–7.2 | 提示风格与指令掩码 | 第25章 | 模板一致、监督位置 |
| ch07 7.3 | 更大指令数据集 | 第25–26章 | 缓存路径、数据边界 |
| ch07 7.4 | LoRA指令微调 | 第28章 | 参数范围、有效缩放 |
入口见appendix-C。这张表用于找回推理链,不代表本书运行了其中所有大型实验。
31.2 用一组题检查自己是否真的能修改代码
补充综合题A:某分类器训练时padding到120,推理时padding到1024,仍取最后一列。是否一定报错?不一定。若位置embedding支持1024,代码可以运行,但读出位置和训练分布已经变化。先恢复约定,再比较“最后真实token”的独立变体,不能把两项改动混在一起。
补充综合题B:答案专用SFT损失比全序列损失更低,可以直接说模型变好吗?不能。被评分的token集合变了;需要同一测试任务、相同生成条件和独立回答评价。将两条损失曲线画在同一轴上并不能消除目标差异。
补充综合题C:把DPO参考模型与策略初始化为同一份权重,初始loss不是log2,先查什么?查两者eval/dropout、掩码、token shift、归约方式和是否共享了会变化的状态。不要先调整β去“修正”初始loss。
补充综合题D:LoRA保存文件比预期大,是否说明实现失败?不一定。保存整个模型state_dict会包含冻结基座;若目标是adapter-only交付,应保存A/B与结构元数据,并指明基座版本。合并后的文件也仍是完整模型大小。
补充综合题E:界面每轮都能回答,是否实现了多轮会话?不一定。若回调只编码当前消息,没有历史模板或隔离缓存,模型只完成单轮请求。用第二轮明确依赖第一轮信息的人工fixture检查状态契约,再用真实模型另测语义能力。
这些答案都能落到一个具体检查,而不是用“模型不够大”解释任何失败。先证明输入、状态和目标正确,才值得投入更贵的训练。
31.3 独立推理仓库的边界
固定仓库通过 .gitmodules 将 reasoning-from-scratch 指向另一个项目。gitlink记录某个提交身份,不等于本书已经取得、审阅并解释该项目每个文件。因此本书只介绍主README链接的延伸主题,不把它们算作本仓库算法复现。子模块声明;独立项目
Qwen3提供可用于推理实验的模型与生成接口;本书第20章说明相关结构,但模型会生成推理式文本不自动证明推理正确。评测需要明确任务、答案提取和可核验评分。self-consistency通过多次采样后聚合答案,增加的是推理预算;如果所有样本共享相同误解,多数票也会一起错。self-refinement让模型依据反馈修订回答,反馈质量决定修订能否减少错误,不能把“改了一次”当作正确性证明。
GRPO属于基于一组候选相对表现的策略优化方向,与第27章离线偏好对目标不同。理解它需要额外的采样、奖励、组内归一化、概率比与训练稳定性知识。本书仅说明接口位置:提示进入采样器,候选进入评分器,评分回到优化目标;未提供该独立仓库完整代码,也未运行相关训练。继续学习时,应重新固定它自己的提交、许可证、数据和实验范围。
31.4 参考文献怎么用,而不只是放在书尾
实现细节以固定commit为准:alpha是否除rank、mask是否移位、cache是否重置,直接读对应函数。论文回答为何设计目标、假设是什么;框架文档回答函数的输入、归约与梯度契约。三者可能使用不同记号或实现变体,必须逐一对齐。
微调部分的主要阅读顺序是:先读ch06分类与ch07 SFT源码,亲手打印标签;再读LoRA论文并对应附录E的矩阵朝向;最后读DPO论文并对照源码的token平均变体。若只看公式而不看分词边界,可能训练错位置;若只跑代码而不看目标,可能把长度归一化当作无影响的实现细节。
本组参考入口:分类源码、指令与偏好源码、LoRA论文、DPO论文、PyTorch交叉熵。其他架构与训练主题的原论文、文档和固定源码已放在相应章节附近,避免一张长书单脱离具体论证。
31.5 什么叫完成这次复现
本书实际完成的微调验证是人工CPU算例:标签、梯度、LoRA等价、DPO数值、去重切分和UI状态。此外运行了少量固定上游函数的人工回归,不等于完整Notebook复现。没有下载预训练权重,没有进行短信或IMDb大型训练,没有调用OpenAI或Ollama,没有部署三个UI,也没有运行独立推理仓库。上述边界让“已通过”有明确含义。
逐文件、函数、Notebook单元、配置和练习对应位置见 research/finetuning/source_coverage.json;运行命令与版本见 qa/finetuning/README.md;源文件与交付哈希见 research/finetuning/manifest.json。映射是阅读审计的入口,正文才承担解释。碰到未运行的步骤,应记录条件与预期检查,而不是补写一段看起来合理的输出。