#AI#RLHF

1

RLHF 的基本流程涉及三个步骤。首先,需要训练一个能够回答用户问题的语言模型。其次,需要收集人类偏好的数据,用于训练人类偏好的奖励模型。最后,可以选择一个 RL 优化器,通过采样生成并根据奖励模型进行评分来优化语言模型。

后训练可以总结为使用三种优化方法:

  1. 指令 / 监督微调 (SFT)
  2. 偏好微调(PreFT),和
  3. 强化微调 (RFT)。

4

从标准的 RL 设置到 RLHF,有多处核心更改:

  1. 从奖励函数切换到奖励模型。在 RLHF 中,使用一个学习到的人类偏好模型(如或其他分类模型)代替环境奖励函数。
  2. 不存在状态转换。在 RLHF 中,初始状态是采样自训练集的prompt,“动作”是对此prompt的completion。在标准实践中,此动作不会影响下一个状态,仅由奖励模型评分。
  3. 对整个响应的奖励。RLHF 对奖励的归因是基于一系列动作,这些动作由多个生成的 token 组成,而不在更细的粒度上进行。

给定问题是单轮的,优化可以不使用时间范围和折扣因子(以及奖励模型)重新编写:

RLHF 是从一个强大的基模型实现的,这引出了需要控制优化不要偏离初始策略太远的需求。为了在微调阶段取得成功,RLHF 技术采用了多种类型的正则化来控制优化。优化函数中最常见的变化是添加一个距离惩罚,该惩罚基于当前 RLHF 策略与优化初始点之间的差异:

7

有两种流行的表达方式用于训练奖励模型,它们是数值等价的。经典的实现是从 Bradley-Terry 偏好模型派生而来的。一个 Bradley-Terry 偏好模型衡量的是从同一分布中抽取的两个事件 i 和 j 进行成对比较时满足关系 i>j 的概率。

要训练一个奖励模型,我们要指定一个满足上述关系的loss函数。首先需要一个将语言模型转换为标量值输出的打分模型,通常以单分类概率 logit 形式。然后,就能用这个模型对两个样本进行打分。上述的 i 和 j 现在对应于一个 prompt 的 completion ,w为winner,l为loser。

然后,通过对模型参数求梯度,我们可以得到用于训练奖励模型的损失函数。 第一种形式,为sigmoid函数:

第二种形式:

推导: 由(2)式得(3)式,, 由(3)式得(4)式,代入

代码示例:

import torch.nn as nn
rewards_chosen = model(**inputs_chosen) # 正样本
rewards_rejected = model(**inputs_rejected) # 负样本
 
loss = -nn.functional.logsigmoid(rewards_chosen - rewards_rejected).mean()

在训练奖励模型时,最常见的做法是只训练 1 个 epoch 以避免过拟合。

8

在整个 RLHF 优化过程中,使用了许多正则化步骤以防止奖励模型过度优化。

在使用 RLHF 框架并结合奖励模型时,通用公式如下:

参考实现如下:

其中KL散度定义:

在 RLHF 中,感兴趣的两个分布是新模型的分布 和参考策略的分布

在实践中,KL距离的实现通常会被近似化,KL的求和可转换为直接从分布 取样的期望:

10

拒绝采样(Rejection Sampling)通过收集新的候选指令,根据训练好的奖励模型进行过滤,然后仅在最佳的completions上微调原始模型。

11 策略梯度算法

目标是估计精确的梯度,其中有许多类似的形式:

可以是以下内容:

  1. :轨迹的总奖励
  2. :奖励后续动作
  3. :前一个公式的基线版本
  4. :动作-价值函数
  5. :优势函数
  6. :TD残差 基线是用于减少策略更新方差的值

PPO: Proximal Policy Optimization

REINFORCE名称可能是回文缩略词:REward Increment = Nonnegative Factor X Offset Reinforcement X Characteristic Eligibility

GRPO: Group Relative Policy Optimization GRPO

参考