RLHF

2025-06-26

ChatGPT 背后的“功臣”——RLHF 技术详解

参考文章:ChatGPT 背后的“功臣”——RLHF 技术详解

OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型。

过去几年里各种 LLM 根据人类输入提示 (prompt) 生成多样化文本的能力令人印象深刻。然而,对生成结果的评估是主观和依赖上下文的,例如,我们希望模型生成一个有创意的故事、一段真实的信息性文本,或者是可执行的代码片段,这些结果难以用现有的基于规则的文本生成指标 (如 BLEUROUGE) 来衡量。除了评估指标,现有的模型通常以预测下一个单词的方式和简单的损失函数 (如交叉熵) 来建模,没有显式地引入人的偏好和主观意见。

如果我们 用生成文本的人工反馈作为性能衡量标准,或者更进一步用该反馈作为损失来优化模型,那不是更好吗?这就是 RLHF 的思想:使用强化学习的方式直接优化带有人类反馈的语言模型。RLHF 使得在一般文本数据语料库上训练的语言模型能和复杂的人类价值观对齐。

看看 ChatGPT 是如何解释 RLHF 的:

img

RLHF 技术分解

RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,这里我们按三个步骤分解:

  1. 预训练一个语言模型 (LM) ;
  2. 聚合问答数据并训练一个奖励模型 (Reward Model,RM) ;
  3. 用强化学习 (RL) 方式微调 LM。

Step 1. 预训练语言模型

首先,我们使用经典的预训练目标训练一个语言模型。对这一步的模型,OpenAI 在其第一个流行的 RLHF 模型 InstructGPT 中使用了较小版本的 GPT-3; Anthropic 使用了 1000 万 ~ 520 亿参数的 Transformer 模型进行训练;DeepMind 使用了自家的 2800 亿参数模型 Gopher

这里可以用额外的文本或者条件对这个 LM 进行微调,例如 OpenAI 对 “更可取” (preferable) 的人工生成文本进行了微调,而 Anthropic 按 “有用、诚实和无害” 的标准在上下文线索上蒸馏了原始的 LM。这里或许使用了昂贵的增强数据,但并不是 RLHF 必须的一步。由于 RLHF 还是一个尚待探索的领域,对于” 哪种模型” 适合作为 RLHF 的起点并没有明确的答案。

img

接下来,我们会基于 LM 来生成训练 奖励模型 (RM,也叫偏好模型) 的数据,并在这一步引入人类的偏好信息。

Step 2. 训练奖励模型

RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励,数值上对应人的偏好。我们可以用端到端的方式用 LM 建模,或者用模块化的系统建模 (比如对输出进行排名,再将排名转换为奖励) 。这一奖励数值将对后续无缝接入现有的 RL 算法至关重要。

关于模型选择方面,RM 可以是另一个经过微调的 LM,也可以是根据偏好数据从头开始训练的 LM。例如 Anthropic 提出了一种特殊的预训练方式,即用偏好模型预训练 (Preference Model Pretraining,PMP) 来替换一般预训练后的微调过程。因为前者被认为对样本数据的利用率更高。但对于哪种 RM 更好尚无定论。

关于训练文本方面,RM 的提示 - 生成对文本是从预定义数据集中采样生成的,并用初始的 LM 给这些提示生成文本。Anthropic 的数据主要是通过 Amazon Mechanical Turk 上的聊天工具生成的,并在 Hub 上 可用,而 OpenAI 使用了用户提交给 GPT API 的 prompt。

关于训练奖励数值方面,这里需要人工对 LM 生成的回答进行排名。起初我们可能会认为应该直接对文本标注分数来训练 RM,但是由于标注者的价值观不同导致这些分数未经过校准并且充满噪音。通过排名可以比较多个模型的输出并构建更好的规范数据集。

对具体的排名方式,一种成功的方式是对不同 LM 在相同提示下的输出进行比较,然后使用 Elo 系统建立一个完整的排名。这些不同的排名结果将被归一化为用于训练的标量奖励值。

这个过程中一个有趣的产物是目前成功的 RLHF 系统使用了和生成模型具有 不同 大小的 LM (例如 OpenAI 使用了 175B 的 LM 和 6B 的 RM,Anthropic 使用的 LM 和 RM 从 10B 到 52B 大小不等,DeepMind 使用了 70B 的 Chinchilla 模型分别作为 LM 和 RM) 。一种直觉是,偏好模型和生成模型需要具有类似的能力来理解提供给它们的文本。

img

接下来是最后一步:利用 RM 输出的奖励,用强化学习方式微调优化 LM。

Step 3. 用强化学习微调

长期以来出于工程和算法原因,人们认为用强化学习训练 LM 是不可能的。而目前多个组织找到的可行方案是使用策略梯度强化学习 (Policy Gradient RL) 算法、近端策略优化 (Proximal Policy Optimization,PPO) 微调初始 LM 的部分或全部参数。因为微调整个 10B~100B+ 参数的成本过高 (相关工作参考低秩适应 LoRA 和 DeepMind 的 Sparrow LM) 。PPO 算法已经存在了相对较长的时间,有大量关于其原理的指南,因而成为 RLHF 中的有利选择。

事实证明,RLHF 的许多核心 RL 进步一直在弄清楚如何将熟悉的 RL 算法应用到更新如此大的模型。

让我们首先将微调任务表述为 RL 问题。首先,该 策略 (policy) 是一个接受提示并返回一系列文本 (或文本的概率分布) 的 LM。这个策略的 行动空间 (action space) 是 LM 的词表对应的所有词元 (一般在 50k 数量级) ,观察空间 (observation space) 是可能的输入词元序列,也比较大 (词汇量 ^ 输入标记的数量) 。奖励函数 是偏好模型和策略转变约束 (Policy shift constraint) 的结合。

PPO 算法确定的奖励函数具体计算如下:将提示 x 输入初始 LM 和当前微调的 LM,分别得到了输出文本 y1, y2,将来自当前策略的文本传递给 RM 得到一个标量的奖励 rθrθ*。将两个模型的生成文本进行比较计算差异的惩罚项,在来自 OpenAI、Anthropic 和 DeepMind 的多篇论文中设计为输出词分布序列之间的 Kullback–Leibler (KL) divergence 散度的缩放,即 r=rθ−λrKL*r*=*rθλ**rKL 。这一项被用于惩罚 RL 策略在每个训练批次中生成大幅偏离初始模型,以确保模型输出合理连贯的文本。如果去掉这一惩罚项可能导致模型在优化中生成乱码文本来愚弄奖励模型提供高奖励值。此外,OpenAI 在 InstructGPT 上实验了在 PPO 添加新的预训练梯度,可以预见到奖励函数的公式会随着 RLHF 研究的进展而继续进化。

最后根据 PPO 算法,我们按当前批次数据的奖励指标进行优化 (来自 PPO 算法 on-policy 的特性) 。PPO 算法是一种信赖域优化 (Trust Region Optimization,TRO) 算法,它使用梯度约束确保更新步骤不会破坏学习过程的稳定性。DeepMind 对 Gopher 使用了类似的奖励设置,但是使用 A2C (synchronous advantage actor-critic) 算法来优化梯度。

img

作为一个可选项,RLHF 可以通过迭代 RM 和策略共同优化。随着策略模型更新,用户可以继续将输出和早期的输出进行合并排名。Anthropic 在他们的论文中讨论了 迭代在线 RLHF,其中策略的迭代包含在跨模型的 Elo 排名系统中。这样引入策略和 RM 演变的复杂动态,代表了一个复杂和开放的研究问题。

RLHF 的开源工具

如今,在 PyTorch 中已经有一些活跃的 RLHF 仓库,它们源于此。主要的仓库包括 Transformers Reinforcement Learning (TRL), TRLX ,后者最初是 TRL 的分支,以及 Reinforcement Learning for Language models (RL4LMs)。

TRL 旨在使用 PPO 在 Hugging Face 生态系统中微调预训练的 LLM。TRLX 是由 CarperAI 开发的 TRL 的扩展分支,用于处理在线和离线训练的大型模型。目前,TRLX 拥有 API,能够在 LLM 部署所需的规模(例如 330 亿参数)下进行生产就绪的 RLHF,并支持 PPO 和隐式语言 Q-Learning ILQL 。TRLX 的未来版本将支持高达 2000 亿参数的语言模型。因此,与 TRLX 的接口优化适用于具有此类规模经验的机器学习工程师。

RL4LMs 提供了用于使用多种强化学习算法(PPO、NLPO、A2C 和 TRPO)、奖励函数和指标微调和评估 LLMs 的构建模块。此外,该库易于定制,允许在任意用户指定的奖励函数上训练任何编码器-解码器或基于编码器的 Transformer LM。值得注意的是,在最近的工作中,该库在广泛的任务上经过了充分的测试和基准测试,共计 2000 个实验,突出了关于数据预算比较(专家演示与奖励建模)、处理奖励攻击和训练不稳定性等方面的几个实际见解。RL4LMs 当前的计划包括对更大模型的分布式训练和新的强化学习算法。

RLHF 的未来

尽管 RLHF 取得了一定的成果和关注,但依然存在局限。这些模型依然会毫无不确定性地输出有害或者不真实的文本。这种不完美也是 RLHF 的长期挑战和动力 —— 在人类的固有领域中运行意味着永远不会到达一个完美的标准。

收集人类偏好数据的质量和数量决定了 RLHF 系统性能的上限。RLHF 系统需要两种人类偏好数据:人工生成的文本和对模型输出的偏好标签。生成高质量回答需要雇佣兼职人员 (而不能依赖产品用户和众包) 。另一方面,训练 RM 需要的奖励标签规模大概是 50k 左右,所以并不那么昂贵 (当然远超了学术实验室的预算) 。目前相关的数据集只有一个基于通用 LM 的 RLHF 数据集 (来自 Anthropic 和几个较小的子任务数据集 (如来自 OpenAI 的摘要数据集) 。另一个挑战来自标注者的偏见。几个人类标注者可能有不同意见,导致了训练数据存在一些潜在差异。

除开数据方面的限制,一些有待开发的设计选项可以让 RLHF 取得长足进步。例如对 RL 优化器的改进方面,PPO 是一种较旧的算法,但目前没有什么结构性原因让其他算法可以在现有 RLHF 工作中更具有优势。另外,微调 LM 策略的一大成本是策略生成的文本都需要在 RM 上进行评估,通过离线 RL 优化策略可以节约这些大模型 RM 的预测成本。最近,出现了新的 RL 算法如隐式语言 Q 学习 (Implicit Language Q-Learning,ILQL) 也适用于当前 RL 的优化。在 RL 训练过程的其他核心权衡,例如探索和开发 (exploration-exploitation) 的平衡也有待尝试和记录。探索这些方向至少能加深我们对 RLHF 的理解,更进一步提升系统的表现。

LLM 训练:RLHF 及其替代方案

参考文章:LLM 训练:RLHF 及其替代方案 — LLM Training: RLHF and Its Alternatives

RLHF 流程以预训练模型为基础,采用监督方式微调,并进一步通过近端策略优化使其与策略对齐。为简化起见,我们将 RLHF 流程分为三个独立步骤:

  • RLHF 步骤 1:预训练模型的监督微调
  • RLHF 步骤 2:创建奖励模型
  • RLHF 第 3 步:通过近端策略优化进行微调

RLHF 的第一步,如下所示,是一个监督微调步骤,用于创建用于进一步 RLHF 微调的基础模型。

img

在 RLHF 的第一步,我们创建或从数据库中采样提示,并要求人类写出高质量的回复。然后我们使用这个数据集以监督的方式微调预训练的基模型。

在 RLHF 步骤 2 中,我们使用这个从监督微调中得到的模型来创建奖励模型,如下所示。

img

如上图所示,对于每个提示,我们从上一步创建的微调 LLM 生成四到九个响应。然后由个人根据其偏好对这些响应进行排序。尽管排序过程耗时,但可能比创建用于监督微调的数据集稍微不那么费工。这是因为排序响应可能比编写响应要简单。

在编译包含这些排名的数据集后,我们可以在 RLHF 步骤 3 中设计一个奖励模型,该模型为后续的优化阶段输出一个奖励分数。这个奖励模型通常源自先前监督微调步骤中创建的 LLM。让我们将奖励模型称为 RM,将监督微调步骤中的 LLM 称为 SFT。为了将 RLHF 步骤 1 中的模型转换为奖励模型,其输出层(下一个词分类层)被替换为一个回归层,该层具有单个输出节点。

RLHF 流程的第三步是使用奖励(RM)模型对从监督微调(SFT)步骤中得到的模型进行微调,如图所示。

img

在 RLHF 步骤 3,即最终阶段,我们现在正使用在 RLHF 步骤 2 中创建的奖励模型的奖励分数,基于近端策略优化(PPO)来更新 SFT 模型。PPO 的更多细节不在此文章的范围内,但感兴趣的读者可以在 InstructGPT 论文之前的四篇论文中找到数学细节:

  1. Asynchronous Methods for Deep Reinforcement Learning** (2016) by Mnih, Badia, Mirza, Graves, Lillicrap, Harley, Silver, and Kavukcuoglu introduces policy gradient methods as an alternative to Q-learning in deep learning-based RL.
  2. Proximal Policy Optimization Algorithms** (2017) by Schulman, Wolski, Dhariwal, Radford, and Klimov presents a modified proximal policy-based reinforcement learning procedure that is more data-efficient and scalable than the vanilla policy optimization algorithm above.
  3. Fine-Tuning Language Models from Human Preferences** (2020) by Ziegler, Stiennon, Wu, Brown, Radford, Amodei, Christiano, Irving illustrates the concept of PPO and reward learning to pretrained language models including KL regularization to prevent the policy from diverging too far from natural language.
  4. Learning to Summarize from Human Feedback** (2020) by Stiennon, Ouyang, Wu, Ziegler, Lowe, Voss, Radford, Amodei, Christiano introduces the popular RLHF three-step procedure that was later also used in the InstructGPT paper

RLHF in Llama 2

在上一节中,了解了 OpenAI InstructGPT 论文中描述的 RLHF 流程。这种方法通常被引用为开发 ChatGPT 所使用的。但与 Meta AI 最近发布的 Llama 2 模型相比,它的表现如何?

Meta AI 在创建 Llama-2-chat 模型时也使用了 RLHF。然而,这两种方法之间存在一些区别,我在下面的带注释的图中进行了说明。

img

总之,Llama-2-chat 在 RLHF 第一步的指令数据上进行了与 InstructGPT 相同的监督微调步骤。然而,在 RLHF 第二步中,创建了两个奖励模型而不是一个。此外,Llama-2-chat 模型经历了多个阶段,奖励模型根据 Llama-2-chat 模型中出现的错误进行更新。还有一个额外的拒绝采样步骤。

Margin Loss

另一个未在上述标注图中体现的区别,与模型响应如何排序以生成奖励模型有关。在先前讨论的标准 InstructGPT 方法中,用于 RLHF PPO 的研究人员收集排名为 4-9 的响应,并从中创建“k 选 2”比较。

例如,如果人类标注者对四个回答(A-D)进行排序,例如 A < C < D < B,这将产生“4 选 2”=6 次比较:

  1. A < C
  2. A < D
  3. A < B
  4. C < D
  5. C < B
  6. D < B

同样地,Llama 2 的数据集基于对响应进行二元比较,例如 A < B。不过每个人类标注者在每次标注轮次中只看到了 2 个响应(而不是 4-9 个响应)。此外,除了每个二元排名外,还会收集一个”间隔”标签(范围从”显著更好”到”几乎更好”),该标签可以选择性地通过一个额外的间隔参数用于二元排名损失,以计算两个响应之间的差距

InstructGPT 使用以下基于交叉熵的排名损失来训练奖励模型: \(\mathcal{L}_{\text {ranking }}=-\log \left(\sigma\left(r_\theta\left(x, y_c\right)-r_\theta\left(x, y_r\right)\right)\right)\) Llama 2 添加了以偏好评分为离散函数的边际“m(r)”,如下所示: \(\mathcal{L}_{\text {ranking }}=-\log \left(\sigma\left(r_\theta\left(x, y_c\right)-r_\theta\left(x, y_r\right)-m(r)\right)\right)\)

  • r_θ(x,y)是提示 x 和生成响应 y 的标量得分输出;
  • θ是模型权重;
  • σ是逻辑 Sigmoid 函数,将层输出转换为 0 到 1 范围内的得分;
  • y_c 是人类标注者选择的优先响应;
  • y_r 是人类标注者选择的拒绝响应。

例如,通过“m(r)”返回更高的间隔会使首选响应和拒绝响应之间的奖励差异更小,从而导致更大的损失,进而导致在策略梯度更新期间更大的梯度,并最终导致模型变化。

Two reward models

如前所述,Llama 2 中有两个奖励模型而不是一个。其中一个奖励模型基于有用性,另一个基于安全性。最终用于模型优化的奖励函数是这两个分数的线性组合。

img

Rejection sampling

此外,Llama 2 的作者采用了一种迭代产生多个 RLHF 模型(从 RLHF-V1 到 RLHF-V5)的训练流程。他们不仅依赖我们之前讨论的 PPO 方法,还采用了 PPO 和拒绝采样两种算法进行 RLHF 微调。

在拒绝采样中,会抽取 K 个输出,选择其中奖励最高的一个用于优化步骤中的梯度更新,如下所示。

img

拒绝采样用于在每次迭代中选择具有高奖励分数的样本。因此,与 PPO 每次基于单个样本进行更新不同,该模型使用具有更高奖励的样本来进行微调。在监督微调的初始阶段之后,模型仅使用拒绝采样进行训练,之后才结合拒绝采样和 PPO。

研究人员绘制了模型在 RLHF 阶段的表现,这表明经过 RLHF 微调的模型在无害性和有用性两个维度上都有所提升。

img

请注意,研究人员在最后一步使用了 PPO,这是在通过拒绝采样更新的先前模型基础上进行的。正如上图中”RLHF-v5 (with PPO)”和”RLHF-v5 (no PPO)”的比较所示,在最终阶段使用 PPO 训练的模型比仅使用拒绝采样训练的模型表现更好。