# Day 6 Exam ## A. GRPO 代码阅读题 1. `rollout_engine.rollout` 返回哪些字段?每个字段用于什么? 2. `old_per_token_logps` 和 `per_token_logps` 有什么区别? 3. `ref_per_token_logps` 为什么用 `torch.no_grad()`? 4. `completion_mask` 为什么要截到 EOS? 5. `advantages_std` 接近 0 说明什么? ## B. GRPO 推导题 给定同一个 prompt 的 4 个 reward: ```text [1.0, 2.0, 2.0, 5.0] ``` 计算: - mean - std - 每个 response 的 advantage 回答:哪个 response 被最强鼓励?哪个被压制? ## C. CISPO 理解题 1. CISPO 为什么对 ratio 使用 `.detach()`? 2. `epsilon_high` 太大或太小分别有什么风险? 3. CISPO 和 GRPO 哪个更像 PPO clip? ## D. 蒸馏代码阅读题 1. `distillation_loss` 中 teacher logits 为什么要 `detach()`? 2. 为什么 KL 只在 `loss_mask == 1` 的 token 上算? 3. `alpha=0.5` 表示什么? 4. teacher vocab 大于 student vocab 时,代码如何处理? ## E. 工业题 1. RL 训练 reward 上升但人工评测下降,可能是什么问题? 2. KL 持续升高说明什么? 3. response length 越来越长,可能是 reward 哪部分导致? 4. 小模型做数学 RLVR 为什么容易奖励稀疏? ## F. 通过标准 你能讲清楚: ```text SFT 是模仿标准答案;GRPO 是采样多个答案后按相对奖励调整概率;蒸馏是拟合 teacher 的硬答案或软分布。 ```