minimind/learning/day02/03_exam.md

53 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Day 2 Exam
## A. 代码阅读题
1. `PretrainDataset.__getitem__` 为什么要手动加 BOS/EOS?
2. `SFTDataset.create_chat_prompt` 中 `tools` 是从哪里来的?
3. `SFTDataset.generate_labels` 如何定位 assistant 内容?
4. `post_processing_chat` 为什么会概率性移除空 `<think>`?
5. `RLAIFDataset.__getitem__` 为什么只返回 prompt,不返回标准 answer?
## B. 手写题
给定 SFT 对话:
```json
[
{"role": "user", "content": "2+2等于几?"},
{"role": "assistant", "content": "等于4。"}
]
```
请说明:
- 哪些部分是条件上下文?
- 哪些部分参与 loss?
- 如果 assistant 回答被截断到只剩 `"等于"`,训练信号有什么问题?
## C. 工业题
1. 如何发现 SFT mask 写错了?
2. 如果训练 loss 很低但模型推理不会聊天,可能是什么原因?
3. 如果 SFT 数据中 tool call JSON 经常不合法,会导致什么问题?
4. 为什么数据抽样检查比直接看 loss 更重要?
## D. 实验题
抽 3 条真实 SFT 样本,打印:
- chat template 后的文本
- token 数量
- loss token 数量
- loss token 占比
写出你的观察:样本长度分布和 loss token 占比是否合理?
## E. 通过标准
你能解释:
```text
同样是 cross entropy,pretrain 和 SFT 的差异主要来自 labels。
```