跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 23 — trl reward model 与 RewardTrainer(奖励模型,分类模型)

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列

    本讲实现 RLHF 的第二阶段:把同一 prompt 下的 chosen / rejected 回答编码为成对样本,用 Bradley–Terry / logistic 偏好损失训练一个输出标量分数的奖励模型。实践路径为:Anthropic HH-RLHF 数据集 → 四个 tokenized 字段 → 4-bit 量化模型 + LoRA → RewardTrainer → 比较 chosen 与 rejected 的 reward logits。

    奖励模型不直接学习“标准答案”,而是学习偏好顺序。对同一 prompt 的优选回答 ywy_w 与劣选回答 yly_l,模型输出标量 r(x,y)r(x,y),并希望:

    r(x,yw)>r(x,yl)r(x,y_w)>r(x,y_l)

    概率模型:

    P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w\succ y_l\mid x)=\sigma\big(r(x,y_w)-r(x,y_l)\big)

    损失:

    L=logσ(rwrl)\mathcal L=-\log\sigma\big(r_w-r_l\big)

    notebook 用 logsigmoid(chosen_rewards - rejected_rewards) 实现。

    原始样本包含 chosenrejected 两条对话文本。预处理函数分别 tokenize,增加四个 RewardTrainer 直接读取的字段:

    input_ids_chosen
    attention_mask_chosen
    input_ids_rejected
    attention_mask_rejected

    课程设置了最大长度并过滤过长样本。chosen/rejected 必须来自同一 prompt 语境,否则分数差不再表达有效的成对偏好。

    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,底座大部分权重冻结。

    RewardTrainer 接收 model、tokenizer、train/eval dataset、PEFT config 和训练参数。其关键不是普通单样本分类,而是同一 batch 中分别前向 chosen/rejected,然后计算 reward 差的 pairwise loss。

    训练后分别前向 chosen 和 rejected:

    r_chosen = model(**chosen_inputs).logits
    r_rejected = model(**rejected_inputs).logits

    理想结果是 r_chosen > r_rejected。在后续 PPO 阶段,Reward Model 固定参数,只负责给 actor 生成的 response 打分;它不是 PPOTrainer 内部自动维护的模型。

    loss = -torch.nn.functional.logsigmoid(
    rewards_chosen - rewards_rejected
    ).mean()

    LoRA 的权重增量:

    W=W+αrBAW'=W+\frac{\alpha}{r}BA

    这里 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:进入 TRL RewardTrainer 与 LoRA 配置。
    • 15:27:正式构造 RewardTrainer
    • 17:17:用训练后的模型输出 reward logits。
    • 17:56:说明 Reward Model 在第三阶段 PPO 中固定并负责打分。
    • 依赖 transformersdatasetstrlpeftbitsandbytes 及可用 CUDA;这些库版本耦合明显。
    • device_map={"": 0} 假定至少一张可用 GPU;CPU 环境不能原样复现 4-bit bitsandbytes 路径。
    • notebook 是教学规模配置,不代表 reward calibration、跨 prompt 可比性或线上安全评分已解决。
    • reward 绝对值没有直接语义,主要由成对差值约束;推理时应优先验证排序正确率而不是把单个分数解释成人类满意度。
    • 前接第 22 讲:从 Llama 推理源码切换到 RLHF 训练流水线。
    • 承接第 16 讲:第 16 讲已概览 TRL 的 SFT/Reward/PPO 三阶段;本讲落地第二阶段。
    • 后接第 27 讲:训练出的 Reward Model 成为 PPO rollout 的外部打分器。
    1. 为什么 Reward Model 用 r_chosen-r_rejected,而不是分别拟合两个绝对标签?
    2. 四个 tokenized 字段各自对应什么?
    3. 为什么 chosen 和 rejected 必须来自同一 prompt?
    4. 4-bit 量化与 LoRA 分别减少什么资源?
    5. Reward Model 在 PPO 阶段是否继续更新?
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。