赞
踩
大型语言模型(LLMs)通常经过几个阶段的训练,包括预训练和几个微调阶段;请参见下文。尽管预训练很昂贵(即需要数十万美元的计算成本),但相比之下,微调LLM(或进行上下文学习)则较为廉价(即几百美元或更少)。鉴于高质量的预训练LLM(例如MPT、Falcon或LLAMA-2)广泛可用且免费使用(甚至商业用途),我们可以通过在相关任务上对LLM进行微调来构建各种强大的应用程序。
不同阶段的LLM训练(由作者创建)
在最近的AI研究中,最常用的LLM微调形式之一是监督微调(SFT)。这种方法通过创建一个高质量的LLM输出数据集,直接对模型进行微调,使用标准的语言建模目标。SFT使用简单/廉价,并且是对齐语言模型的有用工具,因此在开源LLM研究社区和其他领域中非常受欢迎。在这个概述中,我们将概述SFT背后的思想,查看关于这个主题的相关研究,并提供如何使用只有几行Python代码轻松使用SFT的示例。
为了深入了解SFT,我们需要对语言模型(以及深度学习)有一个基本的了解。让我们介绍一些相关的背景信息,并简要回顾一些重要的概念。
AI基础知识。 在我看来,学习AI和深度学习基础知识的最佳资源是来自fast.ai的Practical Deep Learning for Coders课程。这门课程非常实用,以自上而下的方式进行讲解,意味着你首先学习如何在代码中实现想法并使用所有相关工具,然后再深入了解细节,以了解一切是如何工作的。如果你对这个领域还不熟悉,想要快速掌握与AI相关的工具、如何使用它们以及它们的工作原理,可以从这些视频开始。如果想更详细地了解语言模型,可以查看这里的文章。
Transformers库。 这个概述中的代码依赖于transformers库,这是一个最强大的深度学习库之一。此外,该库还有大量的教程和文档,可作为任何深度学习或LLM相关项目的实用学习资源。
(from [2])
训练LLMs。 语言模型的训练过程通常分为三个阶段;见上文。首先,我们对语言模型进行预训练,这是训练中计算开销最大的步骤。然后,我们通过监督微调(SFT)和人类反馈的强化学习(RLHF)通常使用三步框架(见下文)进行对齐。
(来自[2])
上述步骤构成了用于大多数最先进的LLM(例如ChatGPT或LLaMA-2 [3])的标准化训练流程。与预训练相比,SFT和RLHF在计算上较为廉价,但它们需要对数据集进行策划,这可能是困难且耗时的,数据集可以是高质量的LLM输出或LLM输出的人工反馈。
当应用LLM来解决下游任务时,有时我们需要做更多的工作。特别是,我们可以通过领域特定的微调或上下文学习进一步专门化语言模型;请参见下文。领域特定的微调只是进一步训练模型,通常是通过语言建模目标,类似于预训练/SFT,使用与下游任务相关的数据,而上下文学习则将额外的上下文或示例添加到语言模型的提示中,用作解决问题的上下文。
(来自[2, 4])
什么是对齐? 最后,在上面的讨论中,有一个术语我们已经多次使用,这是很重要的要理解:对齐。一个预训练的语言模型通常是没有用的。如果我们用这个模型生成输出,结果可能会重复而且没有太多帮助。为了创建一个更有用的语言模型,我们必须将这个模型对齐到人类用户的需求上。换句话说,我们的语言模型学习生成用户所期望的文本序列,而不是生成最有可能的文本序列。
“对于我们的偏好注释集合,我们关注的是帮助性和安全性。帮助性指的是Llama 2-Chat的回应有多好地满足用户的请求并提供所需的信息;安全性指的是Llama 2-Chat的回应是否不安全。” — 来自[5]
通过上述的SFT和RLHF三步框架,这种对齐可以用来鼓励LLM中的各种行为和特性。通常,训练模型的人会选择一组或几个在对齐过程中强调的标准。常见的对齐标准包括:提高指令遵循能力,阻止有害输出,使LLM更有帮助等等。例如,LLaMA-2 [5] 被对齐为 i) 有帮助和 ii) 无害/安全;请参见上文。
监督微调(SFT)是LLM对齐过程中的第一步训练。实际上,它非常简单。首先,我们需要整理一组高质量的LLM输出数据集 —— 这些基本上只是LLM正确行为的示例;请参见下文。然后,我们直接在这些示例上对模型进行微调。这里,“监督”微调的方面来自于我们正在收集一个模型应该模仿的示例数据集。然后,在微调过程中,模型学习复制这些示例的风格。
**与下一个标记预测的关系。**有趣的是,SFT与语言模型预训练并没有太大的区别 - 预训练和SFT都使用下一个标记预测作为它们的基本训练目标!主要的区别在于所使用的数据。在预训练过程中,我们使用大规模的原始文本数据来训练模型。相比之下,SFT使用了一个高质量的LLM输出的监督数据集。在每个训练迭代中,我们会抽样几个示例,然后使用下一个标记预测的目标来对模型进行微调。通常,下一个标记预测的目标仅适用于每个示例中对应于LLM输出的部分(例如上图中的回答)。
这个三步对齐过程 - 包括SFT和RLHF - 最初是由InstructGPT [2]提出的(尽管在[21]中已经探索过用于摘要模型),它是ChatGPT的前身和姊妹模型。由于InstructGPT和ChatGPT的成功,这个三步框架已经成为标准化和非常流行的,导致它在许多后续语言模型中的使用(例如Sparrow [4]和LLaMA-2 [6])。通过SFT和RLHF进行对齐现在在研究和实际应用中被广泛使用。
**在SFT之前进行微调。**尽管SFT最近很受欢迎,但语言模型的微调一直是一种常用的方法。例如,GPT [7]直接在每个评估任务上进行微调(见下文),而仅有编码器的语言模型(例如BERT [8]) - 由于它们不常用于生成任务 - 几乎完全使用微调方法来解决下游任务。此外,一些LLM采用了与SFT略有不同的微调方法;例如,LaMDA [9]在各种辅助任务上进行微调,Codex [10]在代码语料库上执行特定领域的微调(即基本上对不同数据进行更多的预训练)。
(来自[7])
值得注意的是,SFT与通用微调略有不同。通常,微调深度学习模型是为了教会模型如何解决特定任务,但这使得模型更加专业化和非通用化- 模型变得“狭窄专家”。与通用模型相比,模型可能会更准确地解决其微调的任务(例如,参见GOAT [11]),但它可能会失去解决其他任务的能力。相反,SFT是调整语言模型的核心组成部分,包括通用的基础模型。因为我们是为了模仿正确的风格或行为而对模型进行微调,而不是为了解决特定的任务,所以它不会失去其通用问题解决能力。
(来自[2])
SFT的使用非常简单 - 训练过程和目标与预训练非常相似。此外,相对于预训练,该方法在执行对齐方面非常有效,并且计算成本较低(即,如果不是更低,则比预训练便宜100倍)。如上图所示,仅使用SFT(即,没有任何RLHF)在模型的指令跟随能力、正确性、连贯性和整体性能方面都有明显的好处。换句话说,SFT是一种提高语言模型质量的高效技术。然而,我们应该记住它并不完美!以下是我们应该考虑的一些缺点。
(来自[12])
创建数据集。 SFT的结果严重依赖于我们策划的数据集。如果这个数据集包含了多样化的例子,准确地捕捉到所有相关的对齐标准,并且能够描述语言模型的预期输出,那么SFT是一个很好的方法。然而,我们如何保证用于SFT的数据集全面捕捉到我们在对齐过程中想要鼓励的所有行为呢? 这只能通过仔细的手动数据检查来保证,但这种方法 i) 不可扩展,而且 ii) 通常很昂贵。作为替代方案,最近的研究探索了自动生成SFT数据集的自动化框架(例如,自我指导[12];见上文),但无法保证数据的质量。因此,尽管SFT很简单,但它需要策划一个高质量的数据集,这可能很困难。
(来自[5])
**添加RLHF是有益的。**即使在为SFT筛选了高质量的数据集之后,最近的研究表明,通过执行RLHF可以获得进一步的好处。换句话说,仅通过SFT对语言模型进行微调是不够的。这一发现在最近的LLaMA-2 [5]出版物中尤为明显,该出版物通过SFT和RLHF进行对齐;请参见上文。对于SFT,LLaMA-2使用了一个大型(总共27,540个示例)的对话会话数据集,该数据集经过手工筛选以确保质量和多样性。尽管对于SFT使用了大量且高质量的数据源,但进一步执行RLHF在有益性和安全性方面(即LLaMA-2的对齐标准)产生了巨大的好处;请参见下文。
现在我们了解了SFT的概念,让我们来探讨一下这个概念在实际和研究应用中如何被使用和已经被使用的情况。首先,我们将看一个如何在Python中执行SFT的示例。然后,我们将概述几篇最近发表的关于SFT主题的论文。
如前所述,SFT的实现与语言模型预训练非常相似。在底层,任何SFT的实现都将使用下一个标记预测(也称为标准语言建模)目标,我们已经广泛了解过了。在实践中,我们可以使用最好的工具之一来训练带有SFT的LLM,即transformer reinforcement learning (TRL) Python库,该库包含了一个可以用几行代码来微调现有语言模型的SFT实现。
from transformers import AutoModelForCausalLM # 导入AutoModelForCausalLM类,用于生成自回归语言模型 from datasets import load_dataset # 导入load_dataset函数,用于加载数据集 from trl import SFTTrainer # 导入SFTTrainer类,用于训练模型 dataset = load_dataset("imdb", split="train") # 加载IMDB数据集的训练集部分 model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m") # 从预训练模型facebook/opt-350m中加载自回归语言模型 trainer = SFTTrainer( model, train_dataset=dataset, dataset_text_field="text", max_seq_length=512, ) # 创建SFTTrainer对象,传入模型、训练数据集、数据集中文本字段名和最大序列长度 trainer.train() # 训练模型
**执行SFT。**基于HuggingFace transformers库,TRL可以使用上面显示的代码通过SFT训练语言模型(在本例中为Meta的OPT模型)。这个简单的例子演示了通过SFT训练模型的简单性!由于简单性,通过SFT微调模型在开源LLM研究社区中非常受欢迎。快速访问Open LLM Leaderboard将展示给我们一系列有趣的例子。使用SFT微调预训练的LLM目前是入门训练开源LLM的最简单和最有效的方法之一。
除了SFT的基本定义之外,还有一些有用(和更高级)的技术,我们可能想要使用,例如仅对模型响应应用监督(而不是完整的对话或示例),使用共享提示模板扩充所有响应示例,甚至采用参数高效微调(PEFT)方法(例如,LoRA [13])。有趣的是,TRL定义的SFTTrainer类足够适应和可扩展,可以处理这些情况中的每一种。请参阅此处的链接以获取更多关于实现的详细信息。
鉴于SFT是对齐过程的标准组成部分,它在AI文献中得到了广泛的探索。我们将概述几篇提供了有价值洞见的SFT的出版物。如常,下面概述的出版物并不详尽无遗。关于SFT(以及AI的一般性)的论文数量庞大。然而,我已经尽力突出研究社区中一些最有价值的洞见。如果有遗漏的内容,请随时在评论中与我和其他人分享!
InstructGPT. 大多数语言模型使用的三部分对齐过程——包括SFT和RLHF——最早由InstructGPT [2]使用,尽管之前在[21]中已经探索过用于文本摘要模型。这篇论文为最近LLM的许多进展奠定了基础,并包含了对对齐过程的许多有价值的洞见。与OpenAI最近提出的模型不同,InstructGPT的训练过程和架构的细节在论文中完全披露。因此,这个模型为创建强大的语言模型提供了巨大的洞见,阅读带有这些额外背景的ChatGPT和GPT-4的博客文章会更加有启发性。
(来自[17, 18, 19, 20])
模仿模型。 在LLaMA发布后,开源语言模型的爆炸式增长中,SFT在模仿学习的背景下得到了广泛应用。具体而言,我们可以:
从一个开源基础模型开始。
从专有语言模型(例如ChatGPT或GPT-4)收集对话会话的数据集。
使用SFT对生成的数据集进行训练。
这些模型(例如Alpaca,Koala和Vicuna)训练成本低且表现良好,突显了使用相对较少的计算资源可以获得令人印象深刻的结果。尽管早期的模仿模型后来被证明与专有模型相比表现不佳,但是最近在更大的模仿数据集上训练的变种模型(例如Orca [15])表现良好。将SFT与模仿学习相结合是制作一个不错的LLM的一种廉价且简单的方法。
(来自[16])
LIMA. 在模仿学习的研究中发现,使用专有语言模型生成大规模数据集用于SFT是一种有用的方法。相比之下,平行研究探索了是否可以通过更小、精心策划的数据集实现对齐。在LIMA [16]中,作者为SFT策划了一个仅有1K个示例的数据集,得到的模型与顶级开源和专有LLM相当竞争力;请参见上文。在这种情况下,成功的关键是对数据进行手动检查,以确保质量和多样性,这比用于SFT的原始数据集的规模更重要。这些结果得到了LLaMA-2的证实,作者发现具有高质量和多样性标准的适度规模的数据集为SFT提供了最佳结果。
开源对齐。 直到最近提出LLaMA-2(甚至之后),开源LLM主要使用SFT进行对齐,最小程度上使用RLHF。例如,MPT模型的几个变体以及Falcon和LLaMA的Instruct版本都是使用SFT在各种不同的数据集上创建的(其中许多数据集在HuggingFace上公开可用!)。此外,如果我们快速查看Open LLM Leaderboard,我们会发现许多顶级模型是流行基础模型(例如LLaMA-2或Falcon)的版本,它们经过SFT在不同数据的混合上进行了微调。其中一些著名的例子包括Platypus、WizardLM、Airoboros、Guanaco等等。
通过本文概述,我们了解了SFT,以及它如何在实践中使用,以及当前研究中对它的了解。SFT是AI从业者的强大工具,因为它可以以高效的方式将语言模型与特定的人类定义目标对齐。尽管通过RLHF可以获得进一步的好处,但SFT的使用简单(即与预训练非常相似)、计算成本低廉且高效。这些特性使得SFT在开源LLM研究社区中得到广泛采用,几乎每天都会训练出各种新模型(使用SFT)并发布。在拥有高质量基础模型(例如LLaMA-2)的情况下,我们可以通过SFT高效且轻松地微调这些模型,以处理各种不同的用例。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。