这些技术都是在大型预训练语言模型(LLM)基础上发展起来的微调方法,旨在高效地适应下游任务,减少训练成本,或者在资源有限的情况下优化模型性能。下面将逐一介绍它们的原理和使用场景。
1. Prompt Tuning
原理
Prompt Tuning 通过引入任务特定的提示(prompt)来微调预训练模型。这些提示通常是可学习的文本或词汇,前置在输入文本前,引导模型生成符合特定任务的输出。
-
提示向量:
- 使用一组可学习的提示向量作为前缀,这些向量在训练过程中被优化。
- 例如,在分类任务中,提示可能是
"Classify: "
,然后是输入文本。
-
固定模型参数:
- 模型的原始参数保持不变,只有提示向量会在训练过程中调整。
- 这种方法只需存储和优化少量提示参数,极大减少了微调所需的计算和存储成本。
使用场景
- 多任务学习:可以快速适应多个不同的任务,每个任务只需一个独立的提示向量。
- 少样本学习:在样本数量少的情况下,通过适当的提示可以增强模型的表现。
- 低资源环境:由于只需调整提示参数,适合在计算资源受限的环境下使用。
示例
- 任务描述:判断评论是正面还是负面。
- 原始输入 :
"The movie was amazing!"
- 提示词向量 :添加一个可学习的提示词
"Classify:"
,使模型知道这是一个分类任务。
训练时,输入格式变为:
plaintext
"Classify: The movie was amazing!"
模型通过学习 Classify:
提示词的意义,可以更准确地分类输入评论的情感。
2. P-Tuning
原理
P-Tuning 是对 Prompt Tuning 的扩展,将提示从离散的词汇表示为连续的嵌入向量。这些嵌入向量可以在模型的嵌入空间中被直接优化,允许更精细地调整模型的表示能力。
-
连续嵌入:
- 提示被表示为连续的嵌入向量,而不是离散的词或短语。
- 这些嵌入向量在训练过程中被作为独立变量优化。
-
深度调整:
- 连续嵌入向量提供了更细粒度的控制,特别是在复杂任务和需要深度语义理解的场景中。
使用场景
- 复杂任务:适合需要模型捕捉输入文本与任务需求之间复杂关系的场景,如深度语义理解。
- 高要求的生成任务:在需要精细控制生成内容的任务中,如自动写作或对话生成。
- 序列标注:在任务中,利用提示嵌入来引导模型,如命名实体识别(NER)或词性标注。
示例
- 任务描述:识别文本中的公司名称和地点。
- 原始输入 :
"Google is a company based in the US."
- 提示嵌入 :添加一组可学习的嵌入向量
[E1 E2 E3]
作为提示。
训练时,输入格式变为嵌入形式:
plaintext
"[E1 E2 E3] Google is a company based in the US."
这些嵌入向量 [E1 E2 E3]
是连续的向量,模型通过优化这些向量来更好地理解和识别实体。
3. Prefix-Tuning
原理
Prefix-Tuning 是通过添加一组可学习的前缀向量(prefix vectors)来调整预训练模型。这些前缀向量插入到模型的每一层中,作为辅助输入,帮助模型更好地适应特定任务。
-
前缀向量:
- 前缀向量是插入到模型输入序列前的一组可学习向量。
- 这些向量不仅在输入层使用,还在模型的每一层前向传播中加入。
-
轻量级调整:
- 前缀向量在训练过程中被优化,而模型的其余部分保持不变。
- 这种方法相比全模型微调,需要调整和存储的参数更少。
使用场景
- 跨层信息引导:在模型的每一层加入前缀向量,使得前缀信息能够在整个模型中传播,适合需要深度信息调整的任务。
- 高效微调:减少了微调过程中对模型参数的调整,适合资源受限的环境。
- 生成任务:在文本生成任务中,通过前缀向量可以控制生成内容的风格或结构。
示例
- 任务描述:生成具有特定风格的故事开头。
- 原始输入 :
"Once upon a time,"
- 前缀向量 :添加一组可学习的前缀向量
[P1 P2 P3]
,这些前缀在模型的每一层都被插入。
训练时,输入格式变为:
plaintext
"[P1 P2 P3] Once upon a time,"
这些前缀向量 [P1 P2 P3]
可以引导模型生成特定风格的故事文本。
与P-Tuning的区别
- 输入形式:P-Tuning 使用连续的嵌入向量作为输入提示,而 Prefix-Tuning 使用可学习的前缀向量作为额外的输入信息。
- 作用方式:P-Tuning 的提示向量直接参与模型的计算,而 Prefix-Tuning 的前缀向量通常不直接参与计算,而是提供额外的任务相关信息。
- 位置:P-Tuning 的提示向量直接嵌入到模型的输入中,而 Prefix-Tuning 的前缀向量被插入到模型的每一层输入前。
4. LoRA (Low-Rank Adaptation)
原理
LoRA 是一种通过低秩矩阵分解来调整模型的高效微调方法。它通过添加一组低秩的调整矩阵来近似表示模型的权重变化,从而减少微调的参数量和计算复杂度。
-
低秩分解:
- 将模型参数的调整表示为一对低秩矩阵的乘积。
- 这对矩阵在训练过程中被优化,用于捕捉参数调整的主要方向。
-
高效微调:
- LoRA 仅对低秩矩阵进行优化,而不改变原始模型的参数。
- 这种方法大幅减少了微调所需的参数量,适合在大规模模型上的高效微调。
使用场景
- 资源受限环境:由于只需存储和优化低秩矩阵,LoRA 适合在计算资源受限的环境中进行大规模模型的微调。
- 大规模模型微调:适用于需要频繁微调的大规模模型,如 GPT-3、BERT 等。
- 任务适应:在需要快速适应新任务的情况下,LoRA 可以提供有效的参数调整。
示例
假设我们微调一个 BERT 模型用于情感分类任务:
- 原始权重矩阵:
W
- 低秩调整矩阵:
A
和B
,其中W + AB
是微调后的权重表示。
通过优化 A
和 B
,可以有效地调整模型以适应特定任务。
5. QLoRA (Quantized Low-Rank Adaptation)
原理
QLoRA 结合了量化和低秩分解技术,通过在低精度下表示模型的参数来进一步减少计算和存储需求。它利用量化技术对模型参数进行低精度表示,同时应用低秩分解来高效地微调模型。
-
参数量化:
- 将模型的参数量化为较低的精度(如 8-bit 或 4-bit),以减少存储和计算成本。
- 量化后的参数仍然可以保持模型的主要特征,适合大规模模型的部署。
-
低秩分解:
- 结合低秩分解方法,通过优化低秩矩阵来调整量化后的模型参数。
- 这种方法在低精度的情况下,仍然能够有效地进行模型微调。
使用场景
- 超大规模模型:适用于在超大规模模型(如 GPT-3、T5)上进行高效的微调和部署。
- 边缘设备部署:由于量化和低秩分解大幅减少了计算和存储需求,适合在边缘设备或低资源环境中部署。
- 高效模型调整:在需要频繁调整模型以适应不同任务时,QLoRA 提供了一种高效的解决方案。
示例
对于量化后的 GPT-3 模型,进行情感分析任务:
- 量化权重矩阵:
W_q
- 低秩调整矩阵:
A
和B
,其中W_q + AB
是微调后的低精度权重表示。
通过优化 A
和 B
,可以在低精度的情况下有效地微调模型。
总结对比
特性 | Prompt Tuning | P-Tuning | Prefix-Tuning | LoRA | QLoRA |
---|---|---|---|---|---|
调整方式 | 离散的提示词向量 | 连续的提示嵌入向量 | 可学习的前缀向量,插入到每层 | 低秩矩阵分解 | 量化 + 低秩矩阵分解 |
参数量 | 较少 | 较多 | 较少 | 极少(仅低秩矩阵) | 极少(量化 + 低秩矩阵) |
微调粒度 | 较粗(提示词级别) | 较细(嵌入向量级别) | 深层次(模型各层) | 低秩近似 | 低精度 + 低秩近似 |
计算开销 | 较低 | 较高 | 较低 | 极低 | 极低 |
适用场景 | 多任务学习、少样本学习、低资源环境 | 复杂任务、深度语义理解 | 高效微调、生成任务、深度信息引导 | 资源受限环境、大规模模型微调 | 超大规模模型、边缘设备部署、高效调整 |
优点 | 快速适应新任务、存储需求低 | 高精度任务适应、深度语义理解 | 适合生成任务、参数量小 | 大幅减少参数量和计算需求 | 在低精度情况下仍然能保持高效微调能力 |
通过理解这些技术的原理和适用场景,开发者可以选择最适合的微调方法来优化模型在特定任务中的表现,同时有效地管理计算和存储资源。