大语言模型四种主流微调技术解析
随着大语言模型(LLM)的快速发展,如何高效地对预训练模型进行微调以适应特定下游任务成为了研究热点。本文将详细介绍四种主流的微调技术:监督微调(SFT)、LoRA、P-tuning v2 以及 Freeze。
1. SFT 监督微调
1.1 基本概念
SFT(Supervised Fine-Tuning),即监督微调,是指在源数据集上预训练一个神经网络模型(源模型)。随后创建一个新的神经网络模型(目标模型),该模型复制了源模型除输出层外的所有设计及其参数。这些参数包含了源数据集上学习到的知识,同样适用于目标数据集。
源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数进行微调得到。
1.2 监督微调的步骤
具体来说,监督式微调包括以下几个步骤:
- 预训练:首先在一个大规模的数据集上训练一个深度学习模型,例如使用自监督学习或者无监督学习算法进行预训练;
- 微调:使用目标任务的训练集对预训练模型进行微调。通常,只有预训练模型中的一部分层被微调,例如只微调模型的最后几层或者某些中间层。在微调过程中,通过反向传播算法对模型进行优化,使得模型在目标任务上表现更好;
- 评估:使用目标任务的测试集对微调后的模型进行评估,得到模型在目标任务上的性能指标。
1.3 特点与局限
监督式微调能够利用预训练模型的参数和结构,避免从头开始训练模型,从而加速模型的训练过程,并且能够提高模型在目标任务上的表现。它在计算机视觉、自然语言处理等领域中得到了广泛应用。
然而,监督微调也存在一些缺点:
- 数据依赖:需要大量的标注数据用于目标任务的微调,如果标注数据不足,可能会导致微调后的模型表现不佳。
- 模型选择敏感:由于预训练模型的参数和结构对微调后的模型性能有很大影响,因此选择合适的预训练模型非常重要。
- 计算成本高:对于参数量巨大的大语言模型(如 GPT-3 达到 1750 亿参数),传统的监督微调方法不再适用,因为全量微调需要消耗巨大的显存和算力资源。
1.4 常见案例
在计算机视觉中,低层的网络主要学习图像的边缘或色斑,中层的网络主要学习物体的局部和纹理,高层的网络识别抽象的语义。因此,可以把一个神经网络分成两块:
- 低层的网络进行特征抽取,将原始信息变成容易被后面任务使用的特征;
- 输出层的网络进行具体任务的预测。输出层因为涉及到具体任务没办法在不同任务中复用,但是低层的网络是具有通用性的,可以应用到其他任务上。
BERT 模型是 Google AI 研究院提出的一种预训练模型,通过预训练 + 微调的方式于多个 NLP 下游任务达到当时最先进水平,如实体识别、文本匹配、阅读理解等。与上述思路一样,BERT 模型微调时,将预训练好的模型参数复制到微调模型,而输出层参数随机初始化。
2. LoRA 微调方法
2.1 基本概念
LoRA(Low-Rank Adaptation of Large Language Models),直译为大语言模型的低阶自适应。LoRA 的基本原理是冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅微调的成本显著下降,还能获得和全模型参数参与微调类似的效果。
随着大语言模型的发展,模型的参数量越来越大,微调所有模型参数变得不可行。LoRA 微调方法由微软提出,通过只微调新增参数的方式,大大减少了下游任务的可训练参数数量。
2.2 基本原理
神经网络的每一层都包含矩阵的乘法。这些层中的权重矩阵通常具有满秩。当适应特定任务时,预训练语言模型具有低的'内在维度',将它们随机投影到更小的子空间时,它们仍然可以有效地学习。
在大语言模型微调的过程中,LoRA 冻结了预先训练好的模型权重,并将可训练的秩的分解矩阵注入到 Transformer 体系结构的每一层。例如,对于预训练的权重矩阵 $W_0$,可以让其更新受到用低秩分解表示后者的约束:
$$ W = W_0 + \Delta W = W_0 + BA $$
其中:
- $W_0 \in \mathbb{R}^{d \times k}$
- $B \in \mathbb{R}^{d \times r}$


