资料摘要:personal chatgpt 23 — trl reward model 与 RewardTrainer(奖励模型,分类模型)
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
本讲实现 RLHF 的第二阶段:把同一 prompt 下的 chosen / rejected 回答编码为成对样本,用 Bradley–Terry / logistic 偏好损失训练一个输出标量分数的奖励模型。实践路径为:Anthropic HH-RLHF 数据集 → 四个 tokenized 字段 → 4-bit 量化模型 + LoRA → RewardTrainer → 比较 chosen 与 rejected 的 reward logits。
1. 奖励模型的监督信号
Section titled “1. 奖励模型的监督信号”奖励模型不直接学习“标准答案”,而是学习偏好顺序。对同一 prompt 的优选回答 与劣选回答 ,模型输出标量 ,并希望:
概率模型:
损失:
notebook 用 logsigmoid(chosen_rewards - rejected_rewards) 实现。
2. Anthropic HH-RLHF 数据处理
Section titled “2. Anthropic HH-RLHF 数据处理”原始样本包含 chosen 与 rejected 两条对话文本。预处理函数分别 tokenize,增加四个 RewardTrainer 直接读取的字段:
input_ids_chosenattention_mask_choseninput_ids_rejectedattention_mask_rejected课程设置了最大长度并过滤过长样本。chosen/rejected 必须来自同一 prompt 语境,否则分数差不再表达有效的成对偏好。
3. 4-bit 量化与 LoRA
Section titled “3. 4-bit 量化与 LoRA”notebook 使用 BitsAndBytesConfig 以 4-bit 加载序列分类模型,并让分类头输出一个标量:
AutoModelForSequenceClassification.from_pretrained( model_name, num_labels=1, quantization_config=bnb_config, device_map={"": 0},)LoRA 配置目标模块为 attention 投影层,课程示例包含 q_proj/k_proj/v_proj/o_proj,只训练低秩 adapter,底座大部分权重冻结。
4. RewardTrainer 的职责
Section titled “4. RewardTrainer 的职责”RewardTrainer 接收 model、tokenizer、train/eval dataset、PEFT config 和训练参数。其关键不是普通单样本分类,而是同一 batch 中分别前向 chosen/rejected,然后计算 reward 差的 pairwise loss。
5. 推理与下游用途
Section titled “5. 推理与下游用途”训练后分别前向 chosen 和 rejected:
r_chosen = model(**chosen_inputs).logitsr_rejected = model(**rejected_inputs).logits理想结果是 r_chosen > r_rejected。在后续 PPO 阶段,Reward Model 固定参数,只负责给 actor 生成的 response 打分;它不是 PPOTrainer 内部自动维护的模型。
公式 / 代码要点
Section titled “公式 / 代码要点”loss = -torch.nn.functional.logsigmoid( rewards_chosen - rewards_rejected).mean()LoRA 的权重增量:
这里 4-bit 量化降低底座模型显存,LoRA 降低可训练参数量;二者解决的是不同问题。
00:41:进入 RLHF 第二阶段 Reward Model。00:53:指出本阶段新增核心是 pairwise loss。02:43:开始推导/查看 Reward Model loss。07:06:介绍 Anthropic HH-RLHF 数据集。10:30:预处理得到四个 chosen/rejected 字段。12:17:进入 4-bit 量化配置。13:36:进入 TRLRewardTrainer与 LoRA 配置。15:27:正式构造RewardTrainer。17:17:用训练后的模型输出 reward logits。17:56:说明 Reward Model 在第三阶段 PPO 中固定并负责打分。
- 依赖
transformers、datasets、trl、peft、bitsandbytes及可用 CUDA;这些库版本耦合明显。 device_map={"": 0}假定至少一张可用 GPU;CPU 环境不能原样复现 4-bit bitsandbytes 路径。- notebook 是教学规模配置,不代表 reward calibration、跨 prompt 可比性或线上安全评分已解决。
- reward 绝对值没有直接语义,主要由成对差值约束;推理时应优先验证排序正确率而不是把单个分数解释成人类满意度。
与前后讲关系
Section titled “与前后讲关系”- 前接第 22 讲:从 Llama 推理源码切换到 RLHF 训练流水线。
- 承接第 16 讲:第 16 讲已概览 TRL 的 SFT/Reward/PPO 三阶段;本讲落地第二阶段。
- 后接第 27 讲:训练出的 Reward Model 成为 PPO rollout 的外部打分器。
- 为什么 Reward Model 用
r_chosen-r_rejected,而不是分别拟合两个绝对标签? - 四个 tokenized 字段各自对应什么?
- 为什么 chosen 和 rejected 必须来自同一 prompt?
- 4-bit 量化与 LoRA 分别减少什么资源?
- Reward Model 在 PPO 阶段是否继续更新?
- 视频:trl reward model 与 RewardTrainer(奖励模型,分类模型)
- 转录:🔒 personal chatgpt 23 视频转录
- 课件 / 代码:🔒 trl_reward_trainer.ipynb
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1jh4y1c713/
- 视频描述中的补充资料:https://www.bilibili.com/video/BV1zm4y1H79x/
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。