目录
附加说明:此文为译文,原文链接:原文
像 GPT 这样的大型语言模型(LLMs)规模越来越大。即使是像 MPT 和 Falcon 这样的开源模型,参数也分别达到了 300 亿和 400 亿。随着规模的增大,这些模型的能力和复杂性也在增加。但这种增加的复杂性和模型大小也会带来挑战。训练更大的模型需要更广泛的数据集,并且随着模型的增长,需要调整的参数也更多。这可能会非常耗费计算资源,成本也很高。这就是微调发挥作用的地方。微调是一种允许重新利用预训练模型的技术,可以帮助降低构建更大模型的复杂性。
在本博客中,我们将讨论像 PEFT(参数高效微调)这样的高级微调技术,并看看它们如何在训练大规模大语言模型时为您节省大量时间和金钱。
什么是微调?
微调是获取一个已经在某些任务上进行过训练的模型,然后对其进行调整以执行类似任务的过程。当一个新的数据集或任务需要模型进行一些修改时,或者当模型在特定任务上表现不佳时,通常会使用微调。
例如,一个经过训练生成故事的模型可以被微调来生成诗歌。这是可能的,因为模型已经学会了如何生成自然语言和编写故事,如果对模型进行适当的调整,这种技能也可以用于生成诗歌。
微调是如何工作的?
如前所述,微调是针对其他任务对已经训练过的模型进行调整。其工作方式是获取原始模型的权重并对其进行调整以适应新任务。
模型在训练时学会执行某些特定任务,例如,GPT - 3 在大规模数据集上进行了训练,因此它学会了生成故事、诗歌、歌曲、信件和许多其他内容。人们可以利用 GPT - 3 的这种能力,并针对特定任务(如以特定方式生成客户查询的答案)对其进行微调。
有不同的方法和技术来微调模型,最流行的是迁移学习。迁移学习源自计算机视觉领域,它是冻结网络初始层的权重,只更新后面层的权重的过程。这是因为较低层(更接近输入的层)负责学习训练数据集的一般特征。而较高层(更接近输出的层)学习更具体的信息,这些信息与生成正确输出直接相关。
以下是微调工作原理的简要图示:
Alammar, J (2018). The Illustrated Transformer [Blog post].
为什么要使用微调?
随着模型规模的增加,训练它变得更加昂贵和耗时。并且随着规模的增大,需要更多的训练数据,否则模型通常会过拟合,并在生产环境中产生较差的结果。微调允许我们通过有效地利用预训练模型来避免这些问题。以下是您应该考虑微调而不是从头开始训练模型的一些原因:
- 更大的模型能很好地泛化到下游任务:我们都知道像 GPT - 3 和 GPT - 4 这样的大型模型在复杂任务上表现非常出色。这是因为它们具有非常复杂的架构,并在大规模数据集上进行了训练,这有助于它们在许多任务上很好地泛化。这些模型理解语言的潜在属性,这有助于它们以最小的努力学习任何新任务,如提示工程。
但是,如果我们想将这些模型用于一些非常具体的任务,如构建法律合同生成器,您可能应该对模型进行微调,而不是使用提示工程。这是因为在像语言生成这样的
非常通用的任务中表现良好的模型,在生成法律合同这样的下游任务中也会表现良好。
-
比训练整个模型更便宜:如前所述,从头开始训练这些大型模型可能非常昂贵,而且耗时很长。训练一个已经训练过的模型总是更便宜的。这也允许您利用已有的成果,而不是自己做所有的事情。大多数时候,构建良好的数据集可能非常困难且耗时。像 MPT 和 LLaMA 这样的开源模型已经由一些顶尖的研究人员进行了训练并确保它们能良好运行。在云基础设施中加载并训练它们是很容易的。
-
有利于在线训练:人工智能面临的最大挑战之一是让模型与最新数据保持同步。如果模型在生产环境中部署后没有定期更新,其性能可能会开始下降。例如,如果您部署一个人工智能模型来预测商店中顾客的行为,一旦商店重新进货,商品价格发生变化或者引入了新产品,该模型可能就不再表现良好了。这是数据变化如何极大地改变模型性能的一个典型例子。
微调可以帮助您使用最新数据不断更新模型,而无需重新训练整个模型。这使得在生产环境中部署模型变得更容易且成本更低。这被称为在线学习或在线训练,对于任何生产环境中的模型来说都是绝对必要的。
什么是 PEFT?
PEFT(参数高效微调)是一组技术或方法,旨在以最节省计算资源和时间的方式微调大型模型,同时又不会损失完全微调所能达到的性能。之所以需要这样做,是因为随着像 BLOOM 这样拥有多达 1760 亿参数的模型越来越大,如果不花费数万美元,几乎不可能对它们进行微调。但有时为了获得更好的性能,使用这样的大型模型几乎是必要的。这就是 PEFT 发挥作用的地方,它有助于解决在使用这类大型模型时面临的问题。
以下是一些 PEFT 技术:
为什么选择 PEFT?
如上文所述,在涉及生产级应用时,对更大的模型进行微调和使用已成为一种必要。PEFT 技术允许您高效地微调模型,从而节省资金和时间。这是通过仅微调神经网络中最重要和最相关的参数来实现的。这些技术会在网络中引入新参数,或者冻结整个模型的部分内容,以使模型更容易训练。
迁移学习
迁移学习是指我们获取一个模型已经学习到的一些参数,并将它们用于其他任务。这听起来与微调相似,但实则不同。在微调中,我们重新调整模型的所有参数,或者冻结一些权重并调整其余参数。但在迁移学习中,我们使用从一个模型中学到的一些参数,并将它们用于其他网络。这在我们能做的事情方面给了我们更多的灵活性。例如,在微调时我们不能改变模型的架构,这在很多方面限制了我们。但在使用迁移学习时,我们只使用已训练模型的一部分,然后可以将其附加到任何具有任何架构的其他模型上。