大模型的七种微调方法
文章目录
- 大模型的七种微调方法
- 1. LoRA
- 2. QLoRA
- 3. 适配器调整
- 4. 前缀调整
- 5. 提示调整
- 6. P-Tuning
- 7. P-Tuning v2
1. LoRA
LoRA的主要步骤包括:
- 选择微调目标权重矩阵:首先在大型模型(如GPT)中识别需要微调的权重矩阵,通常位于多头自注意力机制和前馈神经网络部分。
- 引入低秩矩阵:引入两个维度较小的低秩矩阵A和B。假设原始权重矩阵的尺寸为dd,则A和B的尺寸可能为dr和r*d,其中r远小于d。
- 计算低秩更新:通过这两个低秩矩阵的乘积AB生成一个新矩阵,其秩(即r)远小于原始权重矩阵的秩。这一乘积实际上是对原始权重矩阵的一种低秩近似调整。
- 结合原始权重:将新生成的低秩矩阵AB叠加到原始权重矩阵上。因此,原始权重经过了微调,但大部分权重保持不变。这个过程可以用数学表达式描述为:新权重 = 原始权重 + AB。
参考文献: Hu et al., 2021. LoRA: Low-Rank Adaptation of Large Language Models
2. QLoRA
QLoRA是一种结合LoRA与深度量化技术的高效微调方法,其核心特点包括:
- 量化技术:QLoRA采用创新技术将预训练模型量化为4位,包括低精度存储数据类型(4-bit NormalFloat,简称NF4)和计算数据类型(16-bit BrainFloat)。这极大地减少了模型存储需求,同时保持了模型精度的最小损失。
- 量化操作:在4位量化中,每个权重由4个比特表示,量化过程中选择最重要的值并将它们映射到16个可能的值之一。首先确定量化范围(例如-1到1),然后将这个范围分成16个区间,每个区间对应一个4-bit值。原始的32位浮点数值将映射到最近的量化区间值上。
- 微调阶段:在训练期间,QLoRA先以4-bit格式加载模型,训练时将数值反量化到bf16进行训练,从而大幅减少了训练所需的显存。例如,33B的LLAMA模型可以在24GB的显卡上进行训练。
参考文献: Dettmers et al., 2023. QLoRA: Efficient Finetuning of Quantized LLMs
3. 适配器调整
适配器调整的主要步骤包括:
- 基于预训练模型:从一个已经预训练的大型模型(如BERT或GPT)开始,该模型已经学习了丰富的语言特征和模式。
- 插入适配器:在预训练模型的每层或指定层中插入适配器。适配器是小型神经网络,参数规模相对较小。
- 保持预训练参数不变:微调过程中,原有的预训练模型参数保持不变,仅训练适配器的参数。
- 训练适配器:根据特定任务的数据训练适配器,使其能够学习如何调整模型的行为。
- 任务特定调整:通过这种方式,模型能够对每个特定任务进行微调,同时不影响其他部分的通用性能。
LoRA与适配器调整的主要区别:
- LoRA:通过在模型权重矩阵中引入低秩矩阵来实现微调,这些低秩矩阵作为原有权重矩阵的调整项。
- 适配器调整:通过在模型各层添加小型神经网络模块来实现微调,仅调整适配器的参数。
4. 前缀调整
前缀调整采用一种在输入序列前添加可训练前缀的策略来微调预训练语言模型(LM),其主要特点包括:
- 连续可微前缀:这些前缀是可训练的,与离散的Token相比,更易于优化且效果更佳。
- 减少存储成本:前缀调整不需要调整模型的所有权重,通过添加前缀调整模型行为,节省了大量存储空间和微调成本。
参考文献: Li and Liang, 2021. Prefix-Tuning: Optimizing Continuous Prompts for Generation
5. 提示调整
以下是两者的训练示例,以说明它们的不同:
- 提示调整示例:
- 输入序列: [Prompt1][Prompt2] “这部电影令人振奋。”
- 问题: 评价这部电影的情感倾向。
- 答案: 模型需要预测情感倾向(例如“积极”)
- 提示: 没有明确的外部提示,[Prompt1][Prompt2]作为引导模型的内部提示,这里的问题是隐含的,即判断文本中表达的情感倾向。
- 前缀调整示例:
- 输入序列: [Prefix1][Prefix2][Prefix3] “I want to watch a movie.”
- 问题: 根据前缀生成后续的自然语言文本。
- 答案: 模型生成的文本,如“that is exciting and fun.”
- 提示: 前缀本身提供上下文信息,没有单独的外部提示。
提示调整是一种在预训练语言模型输入中引入可学习嵌入向量的方法,其主要特点包括:
- 模仿自然语言提示:将可学习向量设计为任务指导信息的一部分,倾向于使用较少的向量来模拟传统自然语言提示。
- 与前缀调整的区别:前缀调整更侧重于提供输入数据的直接上下文信息,而提示调整旨在引导模型输出特定任务的响应。
6. P-Tuning
P-Tuning与提示调整的主要区别在于:
- 提示调整:使用静态的、可训练的虚拟标记嵌入,初始化后保持固定,除非在训练过程中更新。
- P-Tuning:使用可训练的LSTM模型(提示编码器)动态生成虚拟标记嵌入,允许根据输入数据生成不同的嵌入,更高的灵活性和适应性,适合复杂任务。
参考文献: Liu et al., 2021. GPT Understands, Too
7. P-Tuning v2
P-Tuning v2对P-Tuning进行改进,其核心特点包括:
- 多层连续提示:在模型的每层中插入可学习提示,增加了任务特定参数的数量,提高了参数效率。
- 优化和实现细节:包括重新参数化编码器、提示长度优化和多任务学习。
包括:**
- 多层连续提示:在模型的每层中插入可学习提示,增加了任务特定参数的数量,提高了参数效率。
- 优化和实现细节:包括重新参数化编码器、提示长度优化和多任务学习。
参考文献: Liu et al., 2022. P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks