Zhangzhe's Blog

The projection of my life.

0%

大模型RLHF入门

TL;DR

  • 本文是大模型RLHF的入门教程,目的是用尽可能简单的方式介绍大模型RLHF的基本概念和原理,不涉及过多实现细节。

什么是 RLHF

  • RLHFReinforcement Learning with Human Feedback (人类反馈强化学习) 的缩写,目的是在强化学习任务中引入人类反馈,以提高强化学习模型的性能
  • 大多数分类体系下,SFT 属于 RLHF 中的一个步骤,但本文不讨论 SFT,假设起点模型已经做好了 pre-trainSFT
  • RLHF 的目标是:
    • helpful
    • honst
    • harmless

RLHF 相关术语

  • policy model:策略模型,即待训练的强化学习模型
  • reference model:参考模型(基准模型),通常是冻结参数的原始 policy model,防止模型在 RL 过程中出现退化(可理解为正则化项)
  • reward model:奖励模型,用于评估 policy model 生成的结果的好坏,相当于强化学习的 environment
  • value model:价值模型,通常是 policy model 的一个子模块,用于评估状态的价值(也可以理解为对环境的估计),辅助 policy model 的决策,仅仅在 RLHF 过程中有效,训练结束后会被丢弃

RLHF 的流程

1. 训练奖励模型

  • 奖励模型通常选比原模型尺寸小的预训练模型,将 head 换成一个标量输出的 head
  • 奖励模型的输入是 prompt + response,输出是一个奖励标量,即:奖励模型作用的对象是一个序列,不是一个 token
  • 训练数据格式是:(prompt, response_chosen, response_reject)
    • prompt:输入给策略模型的问题
    • response_chosen:期待的大模型输出
    • response_reject:不期待的大模型输出
  • 训练损失函数:pairwise ranking loss,本质就是对比学习

L=E(x,yw,yl)logσ(R(x,yw)R(x,yl))L=-E_{(x,y_w,y_l)}\log \sigma(R(x, y_w) - R(x, y_l))

  • 其中:
    • xprompt
    • y_wwin response,也就是 response_chosen
    • y_llose response,也就是 response_reject

2. 强化学习阶段

2.1 Rollout 阶段

对每个 Prompt x:

  1. 用当前 Actor πθ\pi_\theta 自回归采样一条完整回答 y=(y_1, …, y_T),直到遇到结束符
  2. (x, y) 拼成一整句喂给冻结的 Reward Model,得到一个标量 rTr_T
  3. 同时用 πref\pi_{ref} 算同样这条回答的 log-problogπref(yx)\log \pi_{ref}(y|x)

2.2 Reward Shaping 阶段

  • 由于 Reward Model 只给整句打分,而 PPO 需要每一步都有 Advantage,所以要先构造 “即时奖励” 再让 GAE 去算回报:

rt={rTβKLtif t=TβKLtif t<T r_t=\left\{ \begin{aligned} r_T-\beta\cdot KL_t && \text{if}\ t=T \\ -\beta\cdot KL_t && \text{if}\ t<T \end{aligned} \right.

KLt=logπθ(ytx,y<t)logπref(ytx,y<t)KL_t=\log \pi_\theta(y_t|x,y<t) - \log \pi_{ref}(y_t|x,y<t)

  • 其中:
    • KL 表示 KL 散度损失,用于方式模型偏离参考模型太远
    • 参考模型:经过 SFT 之后冻结的模型
    • β\betaKL 散度系数, 要调得够大(0.1–0.5),否则 πθ\pi_\theta 会迅速 “讨好” RM,生成乱码或重复文本

Thoughts

  • 用对比学习的方式训练奖励模型,可以减少人工标注数据量,同时降低数据标注的主观性噪声
  • 强化学习的部分设计的挺巧妙的,不过仍然是单回合强化学习,如果从 Agentic RL 角度看,需要多回合强化学习来微调模型使得模型更像一个 Agent