微调是指在预训练模型(Pre-trained model)的基础上,针对特定任务或数据领域,对部分或全部模型参数进行进一步的训练和调整(Fine Tune)。预训练模型通常是在大规模数据集上训练得到的,具有一定的通用性和泛化能力。微调的目标是在较小的目标数据集上,通过有限的训练数据,使模型更好地适应特定任务,从而提高模型在该任务上的性能。
预训练模型用了大量数据做训练,已经具备了提取浅层基础特征和深层抽象特征的能力。
卷积神经网络的核心是:
(1)浅层卷积层提取基础特征,比如边缘,轮廓等基础特征。
(2)深层卷积层提取抽象特征,比如整个脸型。
(3)全连接层根据特征组合进行评分分类。
对于图片来说,我们CNN的前几层学习到的都是低级的特征,比如,点、线、面,这些低级的特征对于任何图片来说都是可以抽象出来的,所以我们将他作为通用数据,只微调这些低级特征组合起来的高级特征即可,例如,这些点、线、面,组成的是园还是椭圆,还是正方形,这些代表的含义是我们需要后面训练出来的。
普通预训练模型用了大型数据集做训练,已经具备了提取浅层基础特征和深层抽象特征的能力。
想要完成一个新的任务,不做微调的情况:
(1)从头开始训练,需要大量的数据,计算时间和计算资源。
(2)存在模型不收敛,参数不够优化,准确率低,模型泛化能力低,容易过拟合等风险。
使用微调后:
(1)可以有效避免了上述可能存在的问题。
1) 使用的数据集和预训练模型的数据集相似,如果不太相似,比如你用的预训练的参数是自然景物的图片,你却要做人脸的识别,效果可能就没有那么好了,因为人脸的特征和自然景物的特征提取是不同的,所以相应的参数训练后也是不同的。
2)自己搭建或者使用的CNN模型正确率太低。
3)数据集相似,但数据集数量太少。
4)计算资源太少。
微调由以下4步构成:
通常的做法是截断预先训练好的网络的最后一层(softmax层),并用与我们自己的问题相关的新的softmax层替换它。例如,ImageNet上预先训练好的网络带有1000个类别的softmax图层。如果我们的任务是对10个类别的分类,则网络的新softmax层将由10个类别组成,而不是1000个类别。然后,我们在网络上运行预先训练的权重。确保执行交叉验证,以便网络能够很好地推广。
使用较小的学习率来训练网络。由于我们预计预先训练的权重相对于随机初始化的权重已经相当不错,我们不想过快地扭曲它们太多。通常的做法是使初始学习率比用于从头开始训练(Training from scratch)的初始学习率小10倍。
如果数据集数量过少,我们进来只训练最后一层,如果数据集数量中等,冻结预训练网络的前几层的权重也是一种常见做法。这是因为前几个图层捕捉了与我们的新问题相关的通用特征,如曲线和边。我们希望保持这些权重不变。相反,我们会让网络专注于学习后续深层中特定于数据集的特征。
以BERT模型为代表的“预训练语言模型 + 下游任务微调”训练模式成为了自然语言处理研究和应用的新范式。此处的下游任务微调是基于模型全量参数进行微调。
以 ChatGPT 为代表的预训练语言模型(PLM)规模变得越来越大,在消费级硬件上进行全量微调(Full Fine-Tuning)变得不可行。此外,为每个下游任务单独存储和部署微调模型变得非常昂贵,因为微调模型与原始预训练模型的大小相同。
此外,模型全量微调还会损失多样性,存在灾难性遗忘的问题。
因此,如何高效的进行模型微调就成了业界研究的重点,这也为参数高效微调技术的快速发展带来了研究空间。
参数高效微调是指微调少量或额外的模型参数,固定大部分预训练模型(LLM)参数,从而大大降低了计算和存储成本,同时,也能实现与全量参数微调相当的性能。参数高效微调方法甚至在某些情况下比全量微调效果更好,可以更好地泛化到域外场景。
PEFT 方法可以分为三类,不同的方法对模型的不同部分进行下游任务的适配:
常见的参数高效微调技术有BitFit、Prefix Tuning、Prompt Tuning、P-Tuning、Adapter Tuning、LoRA等,有机会再一一研究。
以下是部分简单总结:
特点:训练参数量极小(约0.1%)。 在大部分任务上效果会差于LoRA、Adapter等方法。
特点: 前缀Token会占用序列长度,有一定的额外计算开销。 Prefix Tuning的线性插值是比较复杂的。
特点:相对于Prefix Tuning,参与训练的参数量和改变的参数量更小,更节省显存。 对一些简单的NLU
任务还不错,但对硬序列标记任务(即序列标注)表现欠佳。
特点:引入一个prompt encoder(由一个双向的LSTM+两层MLP组成)来建模virtual token的相互依赖会收敛更快,效果更好。
特点:
解决了Prompt Tuning无法在小模型上有效提升的问题。 移除了对模型效果改进较小的重参数化的编码器(如:Prefix Tuning中的MLP、P-Tuning中的LSTM)。 对于一些复杂的硬序列标记任务(即序列标注)取得了不错的效果。
特点:
通过在Transformer层中嵌入Adapter结构,在推理时会额外增加推理时长。
AdapterFusion
一种融合多任务信息的Adapter的变体,在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现。
AdapterDrop
该方法在不影响任务性能的情况下,对Adapter动态高效的移除,尽可能的减少模型的参数量,提高模型在反向传播(训练)和正向传播(推理)时的效率。
特点: 通过从较低的 Transformer 层删除可变数量的Adaper来提升推理速度。
当对多个任务执行推理时,动态地减少了运行时的计算开销,并在很大程度上保持了任务性能。
特点:将BA加到W上可以消除推理延迟。 可以通过可插拔的形式切换到不同的任务。 设计的比较好,简单且效果好。
AdaLoRA
对LoRA的一种改进,它根据重要性评分动态分配参数预算给权重矩阵,将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。
QLoRA
使用一种新颖的高精度技术将预训练模型量化为 4 bit,然后添加一小组可学习的低秩适配器权重,这些权重通过量化权重的反向传播梯度进行微调。
特点:使用 QLoRA 微调模型,可以显著降低对于显存的要求。同时,模型训练的速度会慢于LoRA。
特点:整体上来说,最终的模型MAM Adapter效果会优于单个高效微调方法。
特点:相对于LoRA,BitFit,Prefix-tuning,训练的参数量更大;同时,推理更耗时;并且,输入会占用额外的序列长度。 多种PELT 方法的混合涉及PLM 的不同部分对模型有效性和鲁棒性都有好处。