微调模型background
表示学习
表示学习是指通过机器学习算法自动地学习数据的特征表示,将原始数据映射到一个更加抽象、更具有表达能力的特征空间中。
表示学习可以如下描述:给定一个输入空间X和一个目标空间Y,表示学习的目标是学习一个映射函数f:X→Y,使得对于所有的x∈X,f(x)能够捕获x的关键特征,并且在目标空间Y中能够表达出来。这个映射函数f通常是通过训练数据来学习的,因此表示学习也可以看作是一种无监督学习或半监督学习的形式。
预训练模型
自然语言处理(Natural Language Processing,NLP)在过去几年中已经取得了长足的进展,其中最大的推动力来自于预训练模型,如GPT、BERT等等。这些模型通过在海量文本上进行训练来获得通用的语言理解能力,可以用于多种不同的自然语言处理任务,如文本分类1、语言生成1和问答系统1等。
预训练模型是一种利用大规模无标签数据进行无监督学习的方法。通过在大量无标签数据上进行预训练,预训练模型可以学习到通用的特征表示,这些特征表示包含了词汇、语法和语义等信息,通常以向量的形式保存在预训练模型的权重矩阵中,预训练模型可以通过微调或迁移学习等方式应用于特定任务中。预训练模型通常使用深度神经网络,例如卷积神经网络(CNN)1 和循环神经网络(RNN)1,Transformer1 2等来学习数据的特征表示。在无监督学习任务中,预训练模型可以使用自编码器1、对抗生成网络1等方法进行训练;在有监督学习任务中,预训练模型可以使用图像分类1、文本分类1等任务进行训练。目前,基于Transformer架构的预训练模型(如BERT、GPT等)成为了NLP领域的主流研究方向,它们已经在自然语言处理、计算机视觉等领域取得了重要进展。
其中,BERT是目前应用最广泛的预训练模型之一。BER基于Transformer网络结构,使用双向的上下文信息来预测下一个单词或句子,进而得到全局的上下文表示。与其他预训练模型相比,BERT在多个自然语言处理任务上取得了最先进的表现1,并且已经成为自然语言处理领域和相关研究的标准基准。
此外,还有其他一些预训练模型也取得了不错的效果。例如,GPT是一种基于Transformer网络结构的生成模型,它可以生成连贯的自然语言文本。预训练模型是自然语言处理领域的重要进展,为各种自然语言处理任务提供了有效的方法和思路。
微调
尽管预训练模型已经非常强大,在许多任务上都表现出色,但是,通用预训练模型在实际任务中任然有可能无法完全适应特定任务1 。微调可以使用特定任务的有标注数据集对预训练模型的参数进行部分或者全部调整1,以适应各种下游任务。然而,随着模型的参数量越来越大,GPT-3达到了惊人的175B的参数,对预训练模型的全部参数进行调整也越来越来越困难,因此,如何有效地对模型进行微调也成为了重要的研究问题。
假设我们有一个预训练模型
M
M
M,它的参数为
θ
M
\theta_M
θM,并且我们有一个特定任务
T
T
T,它的数据集为
D
T
D_T
DT,损失函数为
L
T
(
θ
)
L_T(\theta)
LT(θ)。微调的目标是通过在特定任务
T
T
T上微调预训练模型
M
M
M的参数,来最小化损失函数
L
T
(
θ
)
L_T(\theta)
LT(θ),即:
θ
∗
=
arg
min
θ
L
T
(
θ
)
\theta^* = \arg\min_{\theta} L_T(\theta)
θ∗=argθminLT(θ)
其中,
θ
∗
\theta^*
θ∗是微调后的参数。微调的过程可以通过梯度下降等优化算法来实现。
参数高效微调(PEFT),旨在通过仅训练一小组参数来解决这个问题,这些参数可能是现有模型参数的子集或新添加的一组参数。
一般来说,PEFT可以分为以下三类: 1
1)Additive methods
增量方法的主要思想是通过增加额外的参数或层来扩充现有的预训练模型,并仅对新添加的参数进行训练。目前,这是 PEFT 方法中最大和广泛探索的类别。在此类别中,比较具有代表的是两类方法:Adapters方法和prompts。其中,Adapters方法在Transformer子层之后引入小型全连接网络。1 。第二种是prompts方法,模型提示(Language model prompting)1 旨在通过修改输入文本来控制语言模型的行为,通常包括任务描述和一些上下文示例。然而,这些方法很难进行优化,并且由于最大模型输入长度的限制,在训练示例数量上天生存在局限性。
虽然Additive methods能够很有效地减少微调时需要调整的参数,但通常会引入额外的推理延迟。
2)Selective methods
Selective methods主要思想是选择性地微调网络中的一部分参数或层,以达到减少计算量和模型大小的目的。早期的方法主要是调整顶部的几层网络架构 1。现代方法通常基于层类型 1 或内部结构,例如仅微调模型Bias 1或特定行 1。
这类方法方法也可以有效地对预训练模型进行微调,以适应各种下游的任务,达到不错的性能和效率。但是,Selective methods通常需要手动选择与特定任务相关的部分参数,这需要领域知识和经验。如果选择不当,可能会导致性能下降。
3)Reparametrization-based methods
Aghajanyan等人1已经证明可以在低秩子空间中有效地执行微调。基于重新参数化的参数高效微调方法利用低秩表示来最小化可训练参数的数量。其中,最为人熟知的方法是 Low-Rank
Adaptation (LoRa)1, 对于预先训练的权重矩阵
W
0
∈
R
d
×
k
W_0 \in \mathbb{R}^{d \times k}
W0∈Rd×k,我们通过使用低秩分解
W
0
+
Δ
W
=
W
0
+
B
A
W_0 + \Delta W = W_0 + BA
W0+ΔW=W0+BA 来表示其更新,在其中
B
∈
R
d
×
r
B \in \mathbb{R}^{d \times r}
B∈Rd×r,
A
∈
R
r
×
k
A \in \mathbb{R}^{r \times k}
A∈Rr×k,并且秩
r
≤
min
(
d
,
k
)
r \leq \min(d,k)
r≤min(d,k)。在训练期间,
W
0
W_0
W0 被冻结并且不接收梯度更新,而
A
A
A 和
B
B
B 包含可训练参数。
这种方法易于实现,并已在具有高达1750亿个参数的模型上进行了评估并取得了不错的效果。此外,还出现了许多类似LoRa的方法,如 12 也探索了Kronecker乘积重新参数化(
Δ
W
=
A
⊗
B
\Delta W = A \otimes B
ΔW=A⊗B)的使用,这产生了更有利于秩和参数数量之间平衡点的结果。
微调策略(目前没看到有论文有总结这部分,不知道写不写的对)
微调策略则通常指在微调过程中使用的超参数设置和技术,以优化微调的性能和效率。
常见的方法有:
Learning Rate Scheduler-Based Fine-Tuning:学习率可以认为是模型训练中最重要的超参数之一。不同的层捕获不同类型的信息,因此应该对它们使用不同的学习率进行微调。研究人员已经为不同的优化问题开发了几种学习率计划,如线性衰减、余弦衰减、指数衰减、反平方根衰减等,有时还有预热步骤。基于学习率调度的微调策略,根据训练过程中的性能,调整学习率以进行微调。如论文1使用强化学习来训练一个学习率控制器,它使用受训网络的训练动态特征来提出学习率;论文3中使用过Layer-wise Decreasing Layer Rate,逐层递减学习率以达到一个更好的效果。论文2将一种简单且通用的基于梯度的超参数优化方法应用于序列到序列任务中,可以优化微调过程中的学习率时间表。
Fine-Tuning with Different Layers:采用不同的微调层,根据不同的任务以及数据集,选取不同的神经网络层进行微调。如论文1提出在文本分类中越底层的神经网络层提取文本特征的能力越强大,因此,越底层的学习率应该越小。
Progressive Learning:渐进式学习方式,逐步解冻预训练模型中的不同层,并在每一层上进行微调。论文1 中使用启发式学习率计划并逐渐解冻语言模型层以提高微调性能。
Network Pruning and Fine-Tuning:使用剪枝技术对模型进行修剪,进而减少模型参数。然后对修剪后的模型进行微调,以获得更好的性能。如论文1提出了一种有效的预训练模型>剪枝>微调的方式。
Meta Learning:元学习,通过多个任务的学习来优化微调过程,使得模型能够具有适应不同任务的能力。