RM-R1 测试题
说明共 25 题,涵盖概念理解、项目结构、代码细节、优化思路四个维度。答案见 [[RM-R1_答案]]。
Part A:概念理解(共 8 题)
A1. 传统奖励模型和 RM-R1 的最核心区别是什么?请用一句话概括。
A2. 在 RLHF 中,奖励模型的作用是什么?它为什么可以替代人工标注?
A3. GRPO 相比标准 PPO 的主要改进是什么?在本项目中 GRPO 每个提示会生成多少个样本?
A4. 下面是一段模型输出,请判断奖励函数会返回什么值(ground_truth = “model_b”):
| |
A5. KL 散度在训练中起什么作用?KL 系数设为 0.001 说明什么?
A6. 什么是 FSDP?它和 DataParallel 的核心区别是什么?
A7. 为什么训练数据中有 50% 的样本会交换 A/B 并翻转标签?这解决了什么问题?
A8. 为什么最大输出 token 长度(8192)要远大于最大输入 token 长度(4096)?
Part B:项目结构(共 6 题)
B1. 请写出数据处理的完整流水线,从原始数据生成到最终训练文件,列出每一步使用的脚本名称。
B2. lm_as_judge.py 中的奖励函数为什么只检查模型输出的最后 80 个字符?
B3. 填写下表:
| 文件 | 主要职责 |
|---|---|
main_ppo.py | ? |
ray_trainer.py | ? |
rl_dataset.py | ? |
lm_as_judge.py | ? |
convert_fsdp_to_hf.py | ? |
B4. 训练脚本中 rollout批大小=32 和 PPO mini-batch=8 分别代表什么?为什么 mini-batch 比 rollout 批大小小?
B5. 本项目使用了哪些分布式训练技术?各自解决什么问题?
B6. 训练检查点默认每多少步保存一次?保存的是什么格式?使用时需要做什么转换?
Part C:代码理解(共 6 题)
C1. 以下是 RubricRMDataset 的部分逻辑,请解释 apply_chat_template 的作用:
| |
C2. 数据格式中 winner 字段的值可能是什么?在训练中它被用作什么?
C3. 以下 GRPO 优势计算场景中,请计算每个回答的相对优势(advantage):
对同一个提示,4个回答的奖励分别为:+1, -1, +1, -1
C4. 系统提示词要求模型输出的格式是什么?为什么要使用特殊标记格式而不是直接输出 “A” 或 “B”?
C5. 推理时使用 do_sample=False,这意味着什么解码策略?为什么评估时要用这种方式?
C6. 以下两种数据文件有什么区别,何时使用哪个?
train.jsonltrain_with_sys.jsonl
Part D:优化与设计思考(共 5 题)
D1. 如果你发现模型在测试集上总是倾向于选择"更长的回答",而不管内容质量,这是什么问题?项目中采用了什么措施来预防这个问题?
D2. 当前奖励函数只有 +1 和 -1 两种值(稀疏奖励)。有人提议改为:
- 判断正确 + 推理链质量高:+2
- 判断正确 + 推理链一般:+1
- 判断错误:-1
请分析这个改动的优缺点。
D3. 如果想在资源受限的情况下(只有1张24GB显卡)运行本项目的训练,你会采取哪些优化措施?至少列出3种。
D4. 本项目当前只针对中文客服场景。如果要扩展到英文金融场景,数据层面需要做哪些修改?
D5. 画出(或用文字描述)一次完整的 GRPO 训练步骤,包括:Rollout → Reward → Advantage 计算 → 策略更新。
#LLM #RewardModel #测试题 #S3