专栏名称: 待字闺中
深度分析大数据、深度学习、人工智能等技术,切中实际应用场景,为大家授业解惑。间或,也会介绍国内外相关领域有趣的面试题。
目录
相关文章推荐
黄建同学  ·  不得了了……Replit ... ·  昨天  
指尖新闻沈阳晚报  ·  热搜第一!微信又上新功能 ·  昨天  
指尖新闻沈阳晚报  ·  热搜第一!微信又上新功能 ·  昨天  
天津日报  ·  微信朋友圈更新!网友:年度最有效功能 ·  2 天前  
天津日报  ·  微信朋友圈更新!网友:年度最有效功能 ·  2 天前  
超前挖掘  ·  春节假期热点资讯梳理! ·  2 天前  
超前挖掘  ·  春节假期热点资讯梳理! ·  2 天前  
51好读  ›  专栏  ›  待字闺中

如何微调LLMs:DPO

待字闺中  · 公众号  ·  · 2023-11-29 08:56

正文

大型语言模型(LLMs)使得在自然语言处理(NLP)中微调模型的过程变得复杂。

最初,当像ChatGPT这样的模型首次出现时,主要的方法包括首先训练一个奖励模型,然后优化LLM策略。

来自人类反馈的强化学习(RLHF)显著推动了发展,并解决了NLP中许多长期存在的挑战。

然而,这是一项艰苦的工作,需要适当且相关的数据,以及复杂的多模型架构。

此外,改进的质量并不总是显而易见的,模型还会倾向于模仿和产生幻觉。

然而,最近的进步引入了更简单、更高效的方法。其中一种方法是直接偏好优化(DPO)。

什么是DPO?

DPO是一种实现对大型语言模型(LLMs)进行精确控制的方法。

在ChatGPT中,基于人类反馈的强化学习(RLHF)是基于训练一个奖励模型,然后使用近端策略优化(PPO)来使语言模型的输出与人类偏好一致。虽然有效,但复杂且不稳定。

DPO则将受限奖励最大化问题视为基于人类偏好数据的分类问题。这种方法稳定、高效且计算负担轻。它消除了对奖励模型拟合、大量采样和超参数调整的需求。

DPO是如何工作的?

DPO流程可以分为两个主要阶段:

1. 监督式微调(SFT):这是初始步骤,模型在感兴趣的数据集上进行微调。

2. 偏好学习:在SFT之后,模型使用偏好数据进行偏好学习,理想情况下这些数据来自与SFT示例相同的分布。

DPO的美在于其简洁性。它不是先训练一个奖励模型,然后基于该模型优化策略,而是直接将偏好损失定义为策略的函数。这意味着没有必要先训练一个奖励模型。

在微调阶段,DPO使用LLM作为奖励模型。它利用二元交叉熵目标来优化策略,借助人类偏好数据来确定哪些回应是被偏好的,哪些则不是。通过将模型的回应与偏好的回应进行比较,策略被调整以提高其性能。

监督式微调

监督式微调(SFT)是DPO的第一步。SFT是一种专门的方法,其中一个LLM在一个标记过的数据集上进行进一步训练。这个数据集提供了特定输入与期望输出之间的清晰映射。SFT的本质,特别是当与偏好学习结合时,是根据人为定义的标准塑造模型的响应,确保它更紧密地与特定要求对齐。

想象一家公司希望建立一个会话式人工智能,以帮助用户导航他们的新应用程序。虽然像Falcon-7B这样的现成LLM可能提供技术上准确的答案,但它可能与公司的语调或品牌形象不协调。例如,如果用户询问“协作编辑”这样的功能,Falcon可能会提供一个通用的描述。然而,为了提供无缝的用户体验,回应应该是用户友好的、详细的,甚至提供故障排除提示。SFT优化模型的输出,以确保它们不仅准确,而且也适当和一致。

理解自然语言处理中的偏好数据

偏好数据是针对特定提示精选的一组选项或替代方案。然后,标注员根据特定指南评估这些选项。目标是将这些选项从最受欢迎的排到最不受欢迎的。这种排名提供了人类偏好的洞察,用于微调模型以产生符合人类期望的输出。

创建偏好数据的过程包含几个步骤:

- Prompt选择

PD的基础是Prompt。选择Prompt有各种策略。有些人可能会选择预定义的一套,而其他人可能会使用模板来动态生成Prompt。另一种方法是将预定义的Prompt与从数据库中获取的随机提示符结合起来。

- 答案选择

一旦确定了提示,下一步就是确定答案。这些答案可以由模型的特定版本或各种检查点生成。要排名的答案数量可以不同。虽然有些人可能更喜欢二元排名系统(最好-最差),其他人可能选择更细粒度的方法,按比例对答案进行排名,比如从1到5。

- 注释指南

制定清晰的注释指南是至关重要的。这些指南确保排名过程得到标准化,并尽量减少个人偏见或解释。

公共偏好数据集

有几个数据集可供那些希望深入了解偏好数据的人使用。例如:

- OpenAI WebGPT 对比数据集:该数据集提供了2万个对比实例,每个实例包括一个问题、一对模型答案以及每个答案的人类评分偏好分数。

- OpenAI摘要数据集:该数据集提供了64k个文本摘要示例,包括人类编写的回应和人类评级的模型回应。

- Reddit ELI5:源自问答子版块的这个数据集包含了27万个问题、答案和评分的示例。

- 人类与ChatGPT对比语料库(HC3):该数据集提供了大约24K个问题的60K个人类回答和27K个ChatGPT回答。

实施DPO与TRL:分步指南

对于那些热衷于利用直接偏好优化(DPO)的力量的人来说,TRL(Transformer Reinforcement Learning)库通过其DPO训练器提供了一种简化的方法。以下是一个全面的指南,帮助您开始:

监督式微调

开始训练你的SFT模型。确保用于SFT的数据是符合分布的,为DPO算法有效工作奠定基础。

理解数据集格式

DPO训练器要求特定的数据集格式。鉴于模型被训练用于直接优化两个句子之间的偏好,数据集应该反映这种结构。

- prompt:包含上下文输入。

- chosen:存放相应的选定回应。

- rejected:列出相应的负面(或被拒绝的)回应。

值得注意的是,单个prompt可以对应于数据集数组中重复条目所反映的多个响应。

例如,一个样本数据集可能看起来像:

利用DPOTrainer

为了启动过程,请初始化DPOTrainer。这包括指定要训练的模型,一个用于计算偏好和拒绝响应的隐式奖励的参考模型`ref_model`,隐式奖励的`beta`超参数,以及带有上述三个条目的数据集。







请到「今天看啥」查看全文