RLHF and alternatives: DPO and CoH

RLHF 及其替代方案:DPO 和 CoH

2023 年 8 月 30 日

Argilla, MantisNLP

简介

这是一系列关于人类反馈强化学习替代方案的博客文章,由 Argilla 和 MantisNLP 团队共同努力创建。在继续阅读本文之前,请务必阅读本系列文章的第一篇第二篇

在我们第一篇博文的结尾,我们分析了对预训练的 LLM 进行监督微调所需的工作,以及指令数据对于此步骤的重要性。

在我们的第二篇博文中,我们描述了强化学习的过程,该过程需要高质量的偏好数据。

这个过程可能看起来有点复杂,而且非常消耗数据。也许现在您明白了为什么它被描绘成带有樱桃的 Shoggoth 怪物。图片由 twitter.com/anthrupad 提供

Shoggoth with Smiley Face

然而,我们开始看到隧道尽头的光亮,因为社区开始致力于简化这个过程。让我们谈谈 RLHF 的两种替代方案。

直接偏好优化 (DPO)

直接偏好优化:你的语言模型秘密地是一个奖励模型[1]中,作者介绍了一种称为直接偏好优化 (DPO) 的方法,用于实现对大规模无监督语言模型 (LLM) 的精确控制。如上所述,现有方法依赖于基于人类反馈的强化学习 (RLHF),该方法基于训练一个奖励模型并使用近端策略优化 (PPO)(如我们在第二篇博文中所述) 使 LM 的输出与人类偏好对齐。但是这种方法非常复杂且不稳定。

DPO 通过将约束奖励最大化问题视为人类偏好数据上的分类问题来解决该问题。该算法稳定、高效且计算量轻,无需奖励模型拟合、LM 采样和广泛的超参数调整。

与现有方法(训练一个奖励模型,然后基于该 RM 优化策略(使用 PPO 的人类反馈强化学习——图的左侧))不同,DPO 直接将偏好损失定义为策略的函数(右侧)。简而言之,它消除了首先训练奖励模型的要求。

Direct Preference Optimization

DPO 流程分为两个阶段

  1. 对感兴趣的数据集运行监督微调 (SFT)。
  2. 使用偏好数据(理想情况下与 SFT 示例来自同一分布)对步骤 1 中的模型运行偏好学习

如您所见,仍然需要偏好数据来训练策略。但它摆脱了首先训练奖励模型,然后优化 LM 策略,再微调 LLM 的复杂性。

这是如何实现的?想法是使用完全相同的 LLM 作为奖励模型。在微调期间,DPO 使用二元交叉熵目标优化策略。它使用人类偏好数据来确定哪些响应是首选的,哪些响应不是。通过将模型的响应与首选响应进行比较,它可以调整策略以提高其性能。

后见之明链

在《后见之明链将语言模型与反馈对齐》[5] 论文中,提出了另一个有趣的想法,再次使用 LLM 作为优化策略的手段。这次的关键思想是,人类有能力从丰富而详细的反馈中学习,反馈的形式是比较。

在这种情况下,我们使用偏好数据来补充输入。作者使用了一个在 PD 数据集中包含 2 个答案的示例,一个是有帮助的,另一个是没有帮助的。有帮助的答案在输入后以“有帮助的答案:”的形式添加,无帮助的答案也以类似的方式添加。

On the left, preference data. On the right, the concatenation of the input, the helpful answer and the unhelpful.

在训练期间,模型会获得由输入和对比数据(有帮助 vs 无帮助,好 vs 坏等)组成的反馈,正如我们上面所表达的那样。模型被条件化为预测更符合良好替代方案的输出。损失应用于相应的输出“{一个好的答案}”和“{一个坏的答案}”。在推理时,使用积极反馈“好:”来指示模型生成所需的输出。

总之,通过以对比信息的形式在人类偏好数据上应用 SFT 和 PPO,借助后见之明链,我们可以利用 LLM 的力量来优化策略,而无需训练外部奖励模型。

直接偏好优化:实践。

从上面解释的两种技术中,我们将展示应用直接偏好优化来微调 LLM 的简单步骤。

在以下链接中,您将能够找到 DPO Trainer 模块,它位于 TRL (Transformer 强化学习) 库中。

文档中描述的使用 DPO Trainer 代替 RLHF 的步骤如下

  1. 关于 SFT,他们确实提到这是首要要求,正如我们之前评论过的(……第一步始终是训练您的 SFT 模型,以确保我们训练的数据对于 DPO 算法是同分布的)。这也非常重要,因为 SFT 中的数据应该是同分布的,以便能够运行 DPO(或任何其他技术)。
  2. 之后,他们描述了偏好数据格式。他们使用了 Anthropic/hh-rlhf 的格式,如上所述,该格式使用了接受-拒绝的二元分类

Anthropic’s hh-rlhf dataset, renderer in Hugging Face Dataset viewer

数据由三个字段组成

  1. prompt,包含上下文输入。
  2. chosen,包含相应的选择的响应
  3. rejected,包含拒绝的答案。

Fields required by DPO

最后,他们用几行代码描述了如何配置 DPOTrainer 类并运行训练。以下是您需要的

  1. model,您的模型的微调版本(来自 SFT 的结果);
  2. model_ref,正在微调的模型的非微调版本。通常是您在 SFT 之前使用的原始检查点。
  3. training_args,transformers 库中存在的相同 TrainerArguments 类对象,包含训练参数列表,例如per_device_train_batch_size、max_steps、gradient_accumulation_steps、learning_rate、evaluation_strategy、output_dir 等
  4. beta,DPO 损失的温度参数,通常在 0.1 到 0.5 范围内。
  5. train_dataset,以上述格式的偏好数据,位于 Dataset 类对象内。
  6. tokenizer,从 model 实例化的分词器(通常使用 Autotokenizer)。

Syntax of the DPOTrainer in Hugging Face’s trl

有了这些,唯一要运行的命令仍然是 dpo_trainer.train() ,您就可以开始了!

结论

微调大型语言模型 (LLM) 以使用特定指南生成文本在各种应用中非常有用。通过提供特定指南,我们可以塑造 LLM 的输出以符合我们期望的目标,确保更准确和受控的文本生成。

这个过程在历史上非常复杂,需要首先训练一个奖励模型,然后优化 LLM 的策略。

然而,最近的方法,例如直接策略优化 (DPO) 和后见之明链 (CoH) 已经展示了如何将大型语言模型用作奖励模型。

更具体地说,我们已经展示了

  1. 如何使用 Argilla 创建用于监督微调步骤的数据以及偏好数据
  2. 如何使用 Hugging Face 的 trl 库,更具体地说是 DPOTrainer,使用偏好数据执行策略优化。

想了解更多?

这是致力于 RLHF 替代方案的系列博客文章的第三篇。第一篇第二篇文章也可以在我们的网站上找到。请参阅本博客系列的下一部分此处

Argilla 和 Mantis NLP 团队很乐意帮助解答您可能有的关于使用监督微调、强化学习或直接偏好优化训练 LLM 的准备步骤的任何问题。

Argilla 的 LLM 数据平台目前支持所有数据整理步骤,Mantis NLP 提供整个过程的端到端支持。