RM-R1 测试题

说明

共 25 题,涵盖概念理解、项目结构、代码细节、优化思路四个维度。答案见 [[RM-R1_答案]]。


Part A:概念理解(共 8 题)

A1. 传统奖励模型和 RM-R1 的最核心区别是什么?请用一句话概括。


A2. 在 RLHF 中,奖励模型的作用是什么?它为什么可以替代人工标注?


A3. GRPO 相比标准 PPO 的主要改进是什么?在本项目中 GRPO 每个提示会生成多少个样本?


A4. 下面是一段模型输出,请判断奖励函数会返回什么值(ground_truth = “model_b”):

1
2
3
4
...分析可知,回答[[A]]在态度上更生硬,而回答[[B]]则更有温度。
综合以上分析,最终判断为:

<answer>[[B]]</answer>

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批大小=32PPO mini-batch=8 分别代表什么?为什么 mini-batch 比 rollout 批大小小?


B5. 本项目使用了哪些分布式训练技术?各自解决什么问题?


B6. 训练检查点默认每多少步保存一次?保存的是什么格式?使用时需要做什么转换?


Part C:代码理解(共 6 题)

C1. 以下是 RubricRMDataset 的部分逻辑,请解释 apply_chat_template 的作用:

1
2
3
4
5
6
input_ids = tokenizer.apply_chat_template(
    context_messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt"
)

C2. 数据格式中 winner 字段的值可能是什么?在训练中它被用作什么?


C3. 以下 GRPO 优势计算场景中,请计算每个回答的相对优势(advantage):

对同一个提示,4个回答的奖励分别为:+1, -1, +1, -1


C4. 系统提示词要求模型输出的格式是什么?为什么要使用特殊标记格式而不是直接输出 “A” 或 “B”?


C5. 推理时使用 do_sample=False,这意味着什么解码策略?为什么评估时要用这种方式?


C6. 以下两种数据文件有什么区别,何时使用哪个?

  • train.jsonl
  • train_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