课题背景
近年来,全球迎来了一股大模型的热潮,众多大型预训练模型如 GPT-4、BERT 相继问世。这些模型通过在海量文本数据上进行训练,能够掌握丰富的语言模式和广泛的一般知识,在各种自然语言处理任务中表现出色。然而,这些模型的训练成本高昂,需要庞大的计算资源和大量的数据。此外,尽管大型预训练模型具备较好的通用性知识,但每个具体任务或应用(如情感分析、文本摘要和对话生成)都有其独特的需求和模式。
为了应对上述问题,许多研究人员开始探索大模型微调技术,即在预训练模型的基础上,针对特定任务进行额外的训练,以满足特定需求,提高预训练模型在新任务上的性能,同时也减轻了大型预训练模型的训练成本。这种方式即使在计算资源受限的情况下,也能迅速利用预训练模型的知识来适应新任务,实现高效的迁移学习。因此,大模型微调技术不仅提升了模型性能,同时大大缩短了训练时间和计算成本,使更多人能够参与深度学习研究。
微调的概念已经存在很多年,并在很多领域得到了广泛应用。微调技术已知最早的应用是机器翻译,研究人员使用预训练的神经网络来初始化一个更小的网络的权重,然后针对特定翻译任务对其进行微调。经典的大模型微调方法,即全量微调(Full Fine-Tuning)会将预训练模型与少量特定任务数据一起继续训练,在这个过程中,预训练模型的权重被更新,以更好地适应任务。
但是,随着模型变得越来越大,在消费级硬件上对模型进行全部参数的微调变得不可行。此外,为每个下游任务独立存储和部署微调模型变得非常昂贵,因为微调后的模型(即调整了所有参数的模型)和原始预训练模型的规模是相同的。为了解决这个难题,研究人员开始探索参数高效微调技术(Parameter-Efficient Fine-Tuning,简称 PEFT),该技术的目标是在尽可能减少所需参数和计算资源的同时,有效地微调预训练语言模型。相较于传统的全量微调方法,高效微调技术所需的参数和计算资源更少,这一技术通过只训练一小部分参数来解决传统微调技术所需的大量资源问题,这些参数可以是已有模型参数的子集,或者是新增的一组参数。这些方法在参数效率、内存效率、训练速度以及模型的最终性能等方面都有所不同,接下来我们将详细探讨一些常用的微调技术和其主要实现方式。
常用微调方法
(1)全量微调
全量微调(Full Fine-Tuning)是一种在预训练模型的基础上进行微调的方法,其基本思想是:首先在大量的未标注数据上预训练一个大型模型,然后在具体的任务数据上对整个模型进行微调。在微调阶段,所有的模型参数(包括预训练阶段学习到的参数)都会被更新。微调的目标是根据具体任务的标签优化模型的性能。
全量微调的优势在于能够借助模型在预训练阶段积累的通用知识,然后通过微调,将这些知识应用到特定任务中。而且,全量微调已经历了相当长的时间的验证,被广泛应用于各种场景,并且其性能也得到了众多行业专家的认可。然而,全量微调也面临着一些挑战。首先,由于需要更新所有模型参数,所以它需要大量的计算资源和时间。其次,由于微调可能导致模型过度适应微调数据(即过拟合),因此,我们需要谨慎调整学习率和正则化参数。最后,对于大型模型来说,全面微调所有参数可能会导致模型性能下降,因为有些参数可能在预训练阶段已经被优化到了理想的状态。
(2)前缀微调
前缀微调(Prefix-Tuning)是一种高效微调预训练语言模型的技术。这种技术的基本思想是在模型的输入端(前缀)增加一些可学习的参数,然后在训练过程中优化这些参数,而保持模型的主体部分固定不变。具体来说,我们首先定义一些额外的参数,这些参数可以被视为一个序列,我们把它添加到我们的输入序列的前面,然后一起输入到模型中。这些参数通常被初始化为零,但在训练过程中会被优化以改进模型在特定任务上的性能。该方法其实和构造提示(Prompt)类似,只是提示是人为构造的'显式'的提示,并且无法更新参数,而前缀则是可以学习的'隐式'的提示。同时,为了防止直接更新前缀的参数导致训练不稳定和性能下降,论文提出在前缀层前面加 MLP 结构,训练完成后,只保留前缀部分的参数。除此之外,通过消融实验证实,只调整输入层的表现力不够,因此,前缀微调在每层都加了前缀参数,改动较大。前缀微调有以下几个优点:
① 减少计算资源的需求:因为只需要更新一部分参数,所以前缀微调需要的计算资源比全模型微调少。
② 减少过拟合的风险:因为只更新一部分参数,所以前缀微调降低了过拟合的风险。
③ 更好的迁移性能:因为每个任务都有一个特定的前缀,所以前缀微调可以更好地将模型在预训练阶段学习到的一般知识迁移到具体的任务上。
然而,前缀微调也面临着一些挑战。首先,前缀的效果会影响模型的性能,所以如何设计合适的前缀是一项挑战。其次,虽然前缀微调减少了参数的数量,但如果前缀的参数数量很大,那么计算资源的需求仍然可能很大。最后,对于一些复杂的任务,只通过前缀微调可能无法充分利用模型的能力。
(3)提示微调
提示微调(Prompt Tuning)可以看作是前缀微调的简化版本,只在输入层加入 prompt tokens,并不需要加入 MLP 进行调整来解决难训练的问题,提示微调只关注模型的输入 prompt,它不直接改变模型的参数,而是找到一组优化的 prompt,这些 prompt 可以引导模型在特定任务上生成更好的输出。例如,假设我们有一个预训练模型,我们想使用它来生成关于电影的积极评论。我们可以使用提示微调来找到一个优化的 prompt,如'这部电影真的很棒,因为…',然后让模型在这个 prompt 的引导下生成评论。
提示微调的主要优点是其效率和灵活性。因为我们只调整输入 prompt,而不是模型的所有参数,所以提示微调可以节省大量的计算资源。此外,同一模型可以通过叠加不同的 prompt 来调整适应不同的任务,因此提示微调非常灵活。
(4)P-Tuning
P-Tuning 提出将 Prompt 转换为可以学习的 Embedding 层,这个任务是让模型来预测一个国家的首都。左边是全 token 的 prompt,文献里称为'离散的 prompt'。右边是 token+vector 形式的 prompt,其保留了原 token prompt 里面的关键信息 (capital, Britain),它们 (capital, Britain) 是和任务、输出结果最相关的信息,其他不关键的词汇 (the, of ,is) 留给模型来学习。


