Pre-trained Language Models及其各种微调模型的实现细节和特点
-
-
- [1. Pre-trained Language Models](#1. Pre-trained Language Models)
- [2. semi-supervised Learning](#2. semi-supervised Learning)
- [3. zero-shot](#3. zero-shot)
- [4. Parameter-Efficient Fine-Tuning](#4. Parameter-Efficient Fine-Tuning)
-
- [4.1 含义:](#4.1 含义:)
- [4.2 实现方式:](#4.2 实现方式:)
- [5. LoRA](#5. LoRA)
-
- [5.1 LoRA 的主要特点:](#5.1 LoRA 的主要特点:)
- [5.2 LoRA 的实现方式:](#5.2 LoRA 的实现方式:)
- [6. LoRA 和Adaptor 的优缺点对比](#6. LoRA 和Adaptor 的优缺点对比)
-
- [6.1 LoRA(Low-Rank Adaptation)](#6.1 LoRA(Low-Rank Adaptation))
- [6.2 Adapter(适配器)](#6.2 Adapter(适配器))
- [6.3 综合对比:](#6.3 综合对比:)
- [7. Prefix Tuning](#7. Prefix Tuning)
- [8. soft prompting 微调方式](#8. soft prompting 微调方式)
- [9. 四种微调对比](#9. 四种微调对比)
- 参数高效微调方法
- [10. early Exit](#10. early Exit)
- [11. summary](#11. summary)
-
1. Pre-trained Language Models
2. semi-supervised Learning
3. zero-shot
PLMs 通常指的是 "Prompt Learning Models",即提示学习模型。这类模型在自然语言处理(NLP)中使用,特别是在预训练语言模型的基础上,通过引入提示(prompts)来改善模型对特定任务的理解和执行能力。以下是一些关于 PLMs 的特点:
-
提示(Prompt):
- 提示是一段文本,用来引导语言模型以特定方式回答问题或执行任务。
-
灵活性:
- PLMs 通过设计不同的提示,可以灵活地应用于各种不同的任务,而无需对模型进行大量的任务特定训练。
-
任务适应性:
- 通过精心设计的提示,PLMs 能够适应不同的 NLP 任务,如文本分类、问答、摘要等。
-
简洁性:
- 提示通常是简短的,它们简洁地指示模型需要执行的任务类型或所需的信息格式。
-
低资源消耗:
- 相比于为每个任务训练一个独立的模型,PLMs 通过复用预训练模型并添加少量的提示,可以减少计算资源和数据的需求。
-
易于实现:
- PLMs 相对容易实现,因为它们通常只需要在预训练模型的基础上进行轻微的调整。
-
可解释性:
- 由于提示是显式的文本,PLMs 相对于黑盒模型可能提供更好的可解释性。
-
上下文融合:
- PLMs 通过提示将输入文本与任务需求结合起来,使得模型能够更好地理解上下文信息。
-
微调能力:
- 尽管 PLMs 主要依赖预训练模型的能力,但在某些情况下,也可以对模型进行微调以进一步提高性能。
-
多样性:
- 提示的设计可以非常多样,包括简单的模板、问题形式、指令性语句等。
PLMs 是一种利用预训练语言模型潜力的有效方法,特别是在资源受限或需要快速适应新任务的场景下。然而,PLMs 的性能很大程度上依赖于提示的设计,这可能需要一定的经验和创造力。此外,PLMs 可能不如针对特定任务训练的模型那样强大,但它们提供了一种快速、灵活的解决方案。
4. Parameter-Efficient Fine-Tuning
Parameter-Efficient Fine-Tuning(参数高效微调)是一种微调预训练模型的技术,旨在在保持大部分预训练参数不变的同时,对模型进行特定任务的适应性调整。这种方法的目的是减少训练资源的消耗,同时保持或提升模型在特定任务上的性能。以下是 Parameter-Efficient Fine-Tuning 的含义和实现方式:
4.1 含义:
-
参数效率:
- 通过只调整模型中一小部分参数,而不是整个模型,来减少所需的训练时间和计算资源。
-
微调:
- 利用预训练模型在特定任务上的微调,以学习任务特定的特征和模式。
-
保留预训练知识:
- 通过微调少量参数,保留模型在预训练阶段学到的通用知识。
-
适应性:
- 使模型能够适应新任务,即使这些任务与预训练任务不同。
4.2 实现方式:
-
选择性微调:
- 只微调模型的某些层或组件,如顶层或特定层的输出层,而不是整个网络。
-
适配器层(Adapter Layers):
- 在模型的某些层中引入适配器层,这些层只包含少量参数,用于调整模型的输出以适应特定任务。
-
虚拟参数:
- 引入虚拟参数,如可学习的权重或偏差项,它们与模型的原始参数相乘,以微调模型的行为。
-
输入/输出调整:
- 调整模型的输入或输出表示,以更好地适应特定任务的需求。
-
任务特定的嵌入:
- 为特定任务添加任务特定的嵌入层,这些嵌入层可以与预训练模型的嵌入层一起工作。
-
多任务学习:
- 通过共享预训练模型的大部分参数,同时训练模型在多个任务上的性能。
-
正则化技术:
- 使用正则化技术,如 Dropout 或权重衰减,以防止在微调过程中对预训练知识的过度拟合。
-
数据效率:
- 使用迁移学习技术,如少量样本学习或零样本学习,以减少对大量标注数据的需求。
-
逐步微调:
- 逐步解冻和微调模型的层,从与任务最相关的层开始,逐渐向更深层次扩展。
-
元学习:
- 利用元学习技术,使模型能够快速适应新任务,即使只有少量的标注数据。
Parameter-Efficient Fine-Tuning 是一种在资源受限或需要快速适应新任务时非常有用的技术。通过只调整模型的一小部分,它可以显著减少训练时间和资源消耗,同时保持预训练模型的通用性和强大性能。
如何实现高效微调: 采用Adapter模型,长什么样子呢?看下图!
5. LoRA
LoRA,全称为 Low-Rank Adaptation,是一种微调预训练模型的技术,它通过在模型的权重矩阵中引入低秩结构来进行参数高效的调整。这种方法旨在在不显著增加模型参数的情况下,使预训练模型更好地适应特定任务。
5.1 LoRA 的主要特点:
-
低秩结构:
- 在模型的权重矩阵中引入低秩矩阵,这些矩阵具有较少的参数,可以高效地调整模型的行为。
-
参数效率:
- 相比于直接在所有权重上进行微调,LoRA 只调整低秩矩阵的参数,从而减少了参数的数量。
-
保留预训练知识:
- 通过在现有权重上添加低秩矩阵的乘积,LoRA 保留了预训练模型的大部分知识。
-
灵活性:
- LoRA 可以应用于不同的模型架构和任务,具有很好的通用性。
-
易于实现:
- LoRA 的实现相对简单,可以很容易地集成到现有的训练流程中。
5.2 LoRA 的实现方式:
-
选择权重矩阵:
- 确定在哪些权重矩阵上应用 LoRA,通常是模型中较大的权重矩阵。
-
引入低秩分解:
- 对于选定的权重矩阵 ( W ),引入两个较小的矩阵 ( U ) 和 ( V ),使得 W ′ = W + U V ⊤ W' = W + UV^\top W′=W+UV⊤。
-
训练低秩矩阵:
- 在训练过程中,只更新矩阵 ( U ) 和 ( V ) 的参数,而保持原始权重 ( W ) 不变。
-
反向传播:
- 在反向传播时,计算 ( UV^\top ) 对损失函数的梯度,并更新 ( U ) 和 ( V )。
-
微调策略:
- 可以采用不同的微调策略,如只微调模型的某些层,或者逐步解冻和微调模型的层。
-
正则化:
- 应用正则化技术,如权重衰减,以防止过拟合。
-
模型评估:
- 在验证集上评估 LoRA 调整后的模型性能,确保微调后的模型在特定任务上表现良好。
LoRA 是一种有效的微调技术,尤其适用于大型预训练模型,因为它可以在不显著增加参数数量的情况下,提高模型对特定任务的适应性。这种方法在资源受限或需要快速部署的场景下特别有用。
6. LoRA 和Adaptor 的优缺点对比
LoRA(Low-Rank Adaptation)和Adapter(适配器)都是微调预训练模型的技术,它们通过引入额外的参数来调整模型的行为,以适应特定的任务。尽管它们的目标相似,但在实现和效果上存在一些差异。以下是LoRA和Adapter的优缺点对比:
6.1 LoRA(Low-Rank Adaptation)
优点:
- 参数效率:LoRA通过在权重矩阵中引入低秩结构,只增加少量参数,从而实现参数高效的微调。
- 保留预训练知识:通过在现有权重上添加低秩矩阵的乘积,LoRA保留了预训练模型的大部分知识。
- 灵活性:可以应用于不同的模型架构和任务,具有很好的通用性。
- 易于实现:LoRA的实现相对简单,可以很容易地集成到现有的训练流程中。
缺点:
- 低秩限制:低秩结构可能限制了模型调整的复杂性,对于某些任务可能不够灵活。
- 超参数选择:需要选择合适的秩和正则化参数,这可能需要额外的调整和实验。
6.2 Adapter(适配器)
优点:
- 模块化:Adapter模块是独立的,可以轻松地插入到模型的任何位置,提供高度的灵活性。
- 任务定制:可以为不同的任务定制不同的Adapter模块,实现更精细的控制。
- 易于集成:Adapter模块设计为与现有模型架构兼容,易于集成和使用。
- 可扩展性:可以根据需要添加多个Adapter模块,以适应更复杂的任务。
缺点:
- 参数数量:相比于LoRA,Adapter可能会引入更多的参数,尤其是在使用多个模块时。
- 设计复杂性:需要精心设计Adapter模块的结构和参数,以确保它们能够有效地调整模型的行为。
- 超参数调整:可能需要调整额外的超参数,如模块大小和数量,这可能需要额外的实验和调整。
6.3 综合对比:
- 参数效率:LoRA通常更参数高效,因为它只引入少量的低秩参数。Adapter可能会引入更多的参数,尤其是当使用多个模块时。
- 灵活性和定制性:Adapter提供了更高的灵活性和定制性,可以为不同的任务设计不同的模块。LoRA虽然通用,但在任务特定的调整方面可能不如Adapter灵活。
- 实现和集成:LoRA和Adapter都相对容易实现和集成,但Adapter可能需要更多的设计工作来确保模块的有效性。
- 性能:两者都可以提高预训练模型在特定任务上的性能,但具体效果可能取决于任务的复杂性和适配器/LoRA模块的设计。
选择LoRA还是Adapter取决于具体的应用场景、任务需求、资源限制和性能目标。在某些情况下,这两种技术也可以结合使用,以实现更优的微调效果。
7. Prefix Tuning
原始的 版本
prefix tuning 之后的效果:
8. soft prompting 微调方式
9. 四种微调对比
参数高效微调方法
概述
参数高效微调方法显著减少了模型适应特定任务所需的任务特定参数。这些方法特别适用于在不需要重新训练整个模型的情况下,将大型预训练模型适配到特定任务。以下是四种主要微调方法的总结:Adapter、LoRA、Prefix Tuning 和 Soft Prompt。
方法
-
Adapter
- 任务特定参数: (\Theta(d_{\text{model}} r L))
- 可训练百分比: < 5%
- 示意图 :
- Adapter 在预训练模型层之间添加小型神经网络模块。
- 添加的模块参数 (r) 表示降维参数。
- 优点 :
- 显著减少任务特定参数数量。
- 对许多任务高效且有效。
- 缺点 :
- 可能引入额外的推理延迟。
- 适用模型: 大型预训练语言模型。
- 使用条件: 当需要在有限计算资源下进行微调时使用。
-
LoRA(低秩适应)
- 任务特定参数: (\Theta(d_{\text{model}} r L))
- 可训练百分比: < 0.1%
- 示意图 :
- LoRA 在预训练模型层中插入低秩矩阵。
- 通过学习低秩更新矩阵来修改原始权重矩阵。
- 优点 :
- 极其参数高效。
- 对模型性能影响最小。
- 缺点 :
- 集成到现有架构中复杂性较高。
- 适用模型: 基于Transformer的架构。
- 使用条件: 在参数效率至关重要的场景下理想。
-
Prefix Tuning
- 任务特定参数: (\Theta(d_{\text{model}} n L))
- 可训练百分比: < 0.1%
- 示意图 :
- Prefix Tuning 在每层的输入序列前添加可训练的连续向量(前缀)。
- 前缀长度 (n) 决定参数数量。
- 优点 :
- 在控制任务特定修改方面高度灵活。
- 不修改原始模型参数。
- 缺点 :
- 需要仔细调整前缀长度 (n)。
- 适用模型: 任意序列到序列模型。
- 使用条件: 需要任务特定定制而不改变核心模型时使用。
-
Soft Prompt
- 任务特定参数: (\Theta(d_{\text{model}} n))
- 可训练百分比: < 0.05%
- 示意图 :
- Soft Prompts 通过学习连续的提示向量,前置于输入序列之前。
- 前缀长度 (n) 控制任务特定适应的程度。
- 优点 :
- 极其轻量且高效。
- 对模型架构的改变最小。
- 缺点 :
- 适应复杂任务的能力有限。
- 适用模型: 任意预训练语言模型。
- 使用条件: 最适合任务特定数据有限或需要最小化模型架构变化时。
对比表格
结论
每种微调方法在参数数量、可训练性和集成复杂性之间有不同的权衡。方法的选择取决于任务的具体要求、可用的计算资源和使用的预训练模型架构。
10. early Exit
11. summary