微调(fine-tune)相关概念

0、迁移学习

 迁移学习是一种机器学习方法,它将一个任务中训练好的模型应用到另一个相关但不同的任务中,使目标任务能够取得更好的学习效果。这种方法通过利用在源领域(原始或相关任务)中学习到的知识和经验,来加速和改进目标任务的学习和解决问题的能力。迁移学习特别适用于数据稀缺的情况,它可以减少对大量标记数据的需求。总的来说,迁移学习的核心在于找到目标问题的相似性,并利用旧领域学习过的模型来改进新领域的问题。

0.1、迁移学习过程

1)训练好一个网络base network
2)把他的前n层复制到target network的前n层
3)target network剩下的其他层随机初始化
4)开始训练target task

backpropogate(反向传播),有两种方法可以选择:

  • 把迁移过来的这前n层冻结,即在训练target task的时候,不改变这n层的值;
  • 不冻结这前n层,而是会不断调整他们的值,称之为fine-tuning

主要取决于target 数据集的大小和前n层的参数个数,如何target数据集很小,参数个数很多,为了防止过拟合,通常采用frozen;反之微调。

1、pretrain model

 预训练模型是指在大规模数据集上预先训练的神经网路模型,通常在通用任务上学习到的特征可以被迁移到其他特定任务中。预训练模型的思想是利用大规模数据的信息来初始化模型参数,然后通过微调或迁移学习,将模型适应到特定的目标任务上。

learn general language patterns and features.

优势
1、加速训练过程
 由于预训练模型已经学习到了大规模数据集中的通用特征和模式,因此在新任务上的训练过程可以更快地收敛。相比于从头开始训练一个深度学习模型,预训练模型可以大大减少训练时间和计算资源的消耗。
2、提升模型性能
 预训练模型通过学习大规模数据集中的特征和模式,可以获取到一些通用的知识。这些通用的知识可以帮助模型更好地理解和处理新的任务,从而提升模型的性能。通过在预训练模型的基础上进行微调,可以使模型更好地适应特定任务的数据分布和特征。
3、数据效率
 预训练模型可以通过学习大规模数据集中的特征和模式,提取出一些通用的特征表示。这些通用的特征表示可以被用于其他任务,从而可以在小规模数据集上获得较好的性能。这种数据效率的提升对于一些数据稀缺或者难以获取大规模标签的任务尤为重要。

2、fine-tuning

  微调是指在深度学习领域中,特别是针对预训练模型的一种训练策略。预先训练好的模型通常是在大规模无标注数据上通过自监督学习得到的,它们具有对一般自然语言结构的良好理解能力。微调则是在预训练模型的基础上,针对具体下游任务(如文本分类、问答系统、命名实体识别等),使用相对较小规模但有标签的目标数据集对该模型的部分或全部参数进行进一步的训练。

2.1、标准微调

 它是最基础的形式,通常指的是在整个预训练模型的所有可训练层上进一步训练,意味着所有权重都会根据新的目标任务进行更新。

 首先有一个已经在大规模无标签数据上预训练好的模型,已经在诸如语言模型任务上积累了丰富的语言理解能力和模式识别能力。当面临特定下游任务时,如文本分类、命名实体识别、问答系统等,我们会采用标准微调的方式:

  • 将预训练模型应用于新任务的数据集上,并保持模型的整体架构不变。
  • 打开所有可训练的权重参数,即包括所有的隐藏层、自注意力层、全连接层等的权重。
  • 在新任务的有标签数据集上进行监督学习,通过反向传播算法更新所有可训练的权重,使得模型能够根据具体任务的目标函数(如交叉熵损失函数)进行优化。
  • 通过微调过程,模型会基于预训练获得的基础能力之上,进一步学习和适应下游任务的特定模式和规律。
    这种方式的优点在于可以充分利用预训练模型所学的通用特征,同时通过对整个模型的调整来针对性地解决特定问题,因此在很多实际应用中取得了很好的效果。然而,缺点可能包括训练时间较长、容易过拟合等问题,尤其在资源有限或者数据不足的情况下,需要寻求更加精细化的微调策略。

2.2、部分层微调

 只对预训练模型的一部分(通常是顶层或最后几层)进行微调,而保持底层的大部分权重不变。这种方法旨在利用底层通用特征表达的同时,让模型的高层能更好地适应新任务。

 部分层微调是深度学习领域中一种常见的微调策略,特别是在资源有限或者为了避免过度拟合新任务数据时。这种技术的核心思想是,在预训练模型的基础上,我们认识到模型的底层(浅层)通常学习到的是较为通用、抽象的特征表示,这些特征在各种不同的任务中都能起到作用。而模型的高层(深层)则更多地关注于针对特定任务的细节和差异。
 因此,在部分层微调中,我们选择仅对模型的顶层或最后几层进行参数更新,这些层通常负责将底层的通用特征映射到特定任务的空间。底层的权重参数被冻结,不会在新任务的训练过程中发生变化,从而保留了预训练模型在大量数据上学习到的基本特征提取能力。

这种策略的优势在于:

  1. 节省计算资源和训练时间,因为只需要训练模型的一小部分。
  2. 避免对预训练模型中已经学习到的有效特征表达产生过大干扰,有利于保持模型在不同任务之间的泛化能力。
  3. 特别适合于数据量相对较小的任务,可以有效避免过拟合现象。

2.3、Adapter微调

 Adapter模块是一种插入到预训练模型各层之间的小型可训练模块,它们通常包含一个线性变换层加上一个非线性激活函数,允许模型在不改变原模型参数的情况下进行微调。

  Adapter微调技术是一种在不改变预训练模型原有参数的前提下,为模型增加可训练模块以适应新任务的方法。这种技术主要在自然语言处理(NLP)和其他深度学习领域中应用广泛。

  Adapter模块通常插入到预训练模型每一层(尤其是Transformer架构中的每一层Self-Attention或Feed-forward层之后)的内部,作为一种插件式的扩展组件。Adapter模块由两部分构成:

  • 线性变换层(Linear Transformation Layer):Adapter模块首先包含一个小型的线性层,它会对当前层的输出进行降维和升维操作。降维是为了减少计算复杂度,升维则是为了恢复原有的维度,以便继续传递给下一层。

  • 非线性激活函数(Non-linear Activation Function):在这一步骤中,通常会加入ReLU、GeLU等非线性激活函数,以引入模型的非线性表达能力,增强模型的适应性和表达力。

 在微调过程中,只有Adapter模块的参数会被更新,而预训练模型中原有的权重则保持不变。这样做既可以利用预训练模型中学习到的高质量特征表示,又能在有限的计算资源下,通过仅训练少量新增参数来适应新的任务,从而实现了高效且灵活的迁移学习和微调。相较于标准微调和部分层微调,Adapter微调在保持模型大小可控和节省计算资源方面具有显著优势。

2.4、LoRA

 LoRA提出了一种低秩约束的参数调整方式,通过向原始模型参数添加低秩矩阵来进行微调,而不是直接修改原参数,这样既降低了存储成本,又减少了对预训练知识的潜在破坏。
 LoRA提出了一个新的思路,即不是直接修改预训练模型的原始参数,而是通过添加低秩矩阵的方式来调整模型的行为。具体来说,对于模型中的每一个权重矩阵W,LoRA不直接更新W,而是引入两个低秩矩阵ΔU和ΔV,用这两个矩阵相乘的结果去修正原始权重矩阵:
W ′ = W + Δ U @ Δ V T W' = W + ΔU{@} ΔV^T W=W+ΔU@ΔVT
 由于只对模型进行了低秩扰动,而非全局重写所有参数,这种方法能够在很大程度上保留预训练模型中的知识,同时还能针对新任务进行有效的微调。

2.5、BitFit

 BitFit方法仅微调模型的偏置项(bias terms),而不改变权重矩阵,从而实现高效且有效的微调。
 BitFit是一种针对预训练模型进行微调时提出的轻量级优化方法,在探索更高效微调方案时的一个创新点

 具体来说,BitFit策略主要是针对预训练语言模型中的各个层的偏置项(bias terms)进行微调。在神经网络中,每一层的权重参数通常包括两部分:权重矩阵和偏置项。权重矩阵负责捕捉特征之间的关系,而偏置项则用于调整每层输出的全局平均值。

 BitFit进一步减少了需要调整的参数数量,仅关注于每个线性变换层的偏置参数。由于偏置项对于模型输出的影响相对较小但仍然关键,因此通过针对性地微调这些参数,BitFit能够在许多情况下实现比较好的性能提升,同时保持微调过程更为高效和计算资源消耗更低。这一方法在小样本学习场景下尤为有用,因为它可以减轻过拟合风险,并能更快地适应新任务。

2.6、分层微调

 分层微调是一种逐步释放预训练模型中各层权重冻结状态的微调策略。从模型的顶层开始微调,然后逐层向下逐渐解冻更多层进行训练,有助于平衡预训练知识的保留和新任务的学习。

 一种逐步释放预训练模型中各层权重冻结状态的微调策略。在初始阶段,通常仅对模型的顶层(输出层)进行微调,这是因为这部分最接近预测目标,需要对新任务的输出空间有更强的适应性。底层的层则保持冻结状态,保留预训练期间学习到的通用特征表示能力。

 随着训练过程的推进,按照一定的策略(如每经过一定轮次训练就解冻一层,或者依据验证集性能决定何时解冻下一层)逐步解冻更深层的权重,使其也能根据新任务进行调整。这样一来,模型既能充分利用底层的预训练知识,又能逐步习得新任务特有的高层特征。

 此方法有助于平衡模型对预训练知识的依赖和对新任务的学习,特别是在数据有限的情况下,能够缓解过拟合问题,提高模型在新任务上的泛化能力。不过,这种方法也需要仔细权衡解冻层数和训练轮数的关系,以及如何在保证预训练知识有效性的同时,最大化模型对新任务的学习效果。

每种微调技术都有其适用场景和优势,选择哪种方法取决于具体任务的需求、资源限制以及模型结构等因素。随着研究的深入和技术的发展,更多的微调策略将会被提出和优化。

2.7、prefix-tuning

 Prefix-Tuning 是另一种用于微调预训练语言模型的有效方法,尤其是针对Transformer架构的模型,比如GPT系列模型。与LoRA不同的是,Prefix-Tuning 不改变原有模型参数,而是引入了新的可训练参数——“前缀”向量(prefix vectors)。

 Prefix-Tuning会在每个自注意力层的输入序列前面添加一组可训练的“前缀”向量作为附加的提示信息,通过仅训练这些前缀向量来指导模型生成特定任务的输出。

 在Prefix-Tuning中,对于每个自注意力层(self-attention layer),在输入序列的起始位置会固定地附加一组可学习的向量。这些“前缀”向量在整个模型处理任何给定任务的输入时都会保持不变,并且它们会被优化以适应特定下游任务的需求。当模型在执行推理时,前缀向量会参与到自注意力机制中,引导模型基于预先学习到的语言结构和模式生成更符合特定任务需求的输出。

 这种技术的核心优势在于它仅需训练相对较少的新参数(即前缀向量),而无需调整原始模型的所有参数,因此能够有效利用预训练模型的知识并减轻过拟合风险,同时简化了微调过程,降低了计算资源要求。

2.8、prompt-tuning

 针对Transformer类模型提出的轻量级微调机制。

 Prompt-Tuning则更关注模型的输入层面,通常在自然语言处理任务中,通过改变模型输入的“提示词”或“提示模板”,并仅训练这些提示词相关的参数来调整模型行为。

 Prompt-Tuning并不直接改变模型输入的“提示词”或“提示模板”,而是在模型输入序列的开头或者嵌入层(embedding layer)部分增加一个可训练的“提示向量(prompt vector)”或称“提示 token embeddings”。这些额外的参数被专门设计用来引导模型在不同的下游任务中产生合适的上下文理解及输出。

 相较于Prefix-Tuning在每个自注意力层添加前缀向量,Prompt-Tuning往往涉及更少的额外参数,通常只在输入表示阶段添加可训练的向量,并调整这些参数来影响整个模型对输入的理解和生成的响应,从而达到微调模型在特定任务上的表现的目的。这样做的好处同样是避免了对预训练模型所有权重的大规模更新,从而可能减少过拟合的风险并提高泛化能力。

3、微调的过程

 深度学习模型微调(Fine-tuning)是指在预训练模型的基础上,针对特定任务进行进一步的训练过程。预训练模型通常是在大规模数据集上通过训练得到的,具有较好的泛化能力和对特征的学习能力。当我们的任务数据集较小或者与预训练模型原始训练数据集相关时,可以通过微调预训练模型来快速提升模型在新任务上的性能。

微调的步骤:

  • 加载预训练模型:首先加载已经在大规模数据集上训练好的模型及其参数。

  • 修改模型结构(可选):根据新的任务需求,可能需要在预训练模型顶部添加或修改一些层以适应新的任务,例如在图像分类任务中,可能需要在预训练的卷积神经网络后面添加一个全连接层用于输出类别。

  • 冻结部分层(可选):在开始微调时,可以选择冻结模型的部分层,即在训练过程中不更新这些层的参数,仅对未冻结层进行训练。这可以防止在有限的新任务数据上过拟合,并保留预训练模型已学到的良好特征表示。

  • 训练模型:使用新任务的数据集对模型进行训练,更新模型参数。这里的训练通常采用较低的学习率,以免破坏预训练模型中已经学到的有效特征。

  • 调整超参数:根据新任务的特点和模型在验证集上的表现,调整优化器、学习率、正则化等超参数,以达到最优效果。

 通过以上步骤,深度学习模型能够在预训练的基础之上,针对具体任务进行微调,从而获得更好的性能。这一方法在自然语言处理(如BERT、GPT系列等)、计算机视觉等领域得到了广泛应用。

4、微调的理论基础

微调的理论基础主要建立在以下几个核心概念上:

  • 迁移学习(Transfer Learning): 微调是迁移学习的一种实践形式,其核心理念是认为在某个大数据集上训练得到的模型,可以将其学到的通用特征和模式迁移到另一个相关但数据有限的任务中。预训练模型捕获了大量的底层特征和高层语义,这些知识可以在新任务上复用。

  • 深度学习模型的层次表征: 深度学习模型(尤其是CNNs和Transformers等)具有分层次的特征学习能力,底层通常学习到的是较通用的特征,而高层则更侧重于任务相关的抽象特征。微调策略如部分层微调正是基于这个理论,仅微调高层以适应新任务,底层保持不变以保留通用特征。

  • 欠拟合与过拟合的平衡: 在有限数据条件下,微调有助于避免过拟合,因为它允许模型在预训练的权重基础上进行小幅度调整,而不是从头训练所有参数。同时,恰当的微调策略也可以帮助模型在欠拟合和过拟合之间找到平衡点,提升模型在新任务上的泛化能力。

  • 稀疏交互假设: 在自然语言处理领域,一些微调方法如Prefix-Tuning和Prompt-Tuning基于“稀疏交互”假设,即模型的大部分权重不变,只需通过少数几个参数(如提示向量或前缀向量)与模型进行交互,就能有效引导模型适应新任务。

  • 贝叶斯观点: 从贝叶斯角度来看,预训练模型可以视为对参数分布的一个先验估计,微调就是在已有先验知识的基础上,结合新任务的数据进行后验推断,从而得到针对新任务的最优参数估计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值