文章目录
- 1. BitFit
- 2. Adapter
- 3. Prompt-Tuning
- 4. Prefix-Tuning
- 5. LoRA (Low-Rank Adaptation)
- 6. QLoRA (Quantized Low-Rank Adaptation)
- 7. LongLoRA
- 总结
1. BitFit
https://arxiv.org/abs/2106.10199
主要做法:
- BitFit(Bias Term Fine-Tuning)是一种只微调模型偏置项的方法。
- 在微调过程中,只更新模型的偏置项(bias term),保持权重矩阵(weights)不变。
优点:
- 低计算成本:只更新偏置项,相比全面微调整个模型,计算成本和内存需求大幅降低。
- 高效性:由于参数更新数量少,训练速度较快。
缺点:
- 有限的表达能力:只更新偏置项可能无法捕捉复杂的任务特性,适应性有限。
适用场景:
- 资源受限场景:计算资源和内存有限的情况下,在数据规模较少时候,仅微调偏差有优势。
- 任务简单场景:模型只需进行微小调整即可完成任务。
2. Adapter
https://arxiv.org/abs/2009.09139
主要做法:
- 在预训练模型的每一层中插入小型的适配器模块(adapter module)。
- 只微调这些适配器模块的参数,保持原始模型参数不变。
优点:
- 模块化:易于在不同任务之间共享并切换适配器模块。
- 节省存储:不需要存储整个模型的多个版本,只需存储适配器参数。
缺点:
- 额外计算开销:插入适配器模块会增加计算复杂度,增加推理开销(尤其是在批量大小较小而且序列长度较短的情况下)。
- 需要设计:适配器模块的设计和插入位置需要仔细策划。
适用场景:
- 多任务学习:在不同任务之间共享同一基础模型。
- 可扩展性需求:希望在一个模型基础上方便地扩展到多个任务。
3. Prompt-Tuning
https://arxiv.org/pdf/2104.08691
主要做法:
- 为输入添加可学习的提示词(prompt),使得模型能够更好地理解任务。
- 只微调这些提示词的参数,而保持其他模型参数不变。
优点:
- 参数高效:只增加少量参数用于提示词,节省了存储和计算资源。模型参数足够大时准确度媲美模型微调。
- 灵活性:可以通过调整提示词来适应不同任务。
缺点:
- 任务依赖性强:提示词的效果可能强烈依赖于任务的具体细节。占用可用的输入长度。
- 复杂性:设计和选择合适的提示词可能需要试验和调优。
适用场景:
- 自然语言处理任务:如文本分类、问答、文本生成等。
- 快速原型开发:快速测试和验证新任务或新数据集。
4. Prefix-Tuning
https://arxiv.org/abs/2101.00190
主要做法:
- 在输入序列的前面每一层前面添加可学习的前缀(prefix)。
- 只微调这些前缀的参数,不改变模型的其他部分。
优点:
- 参数高效:类似于Prompt-Tuning,参数开销较小。
- 任务适应性强:通过前缀调整模型以适应特定任务。
缺点:
- 任务依赖性强:前缀的设计可能需要根据任务进行调整。每层token更长,计算量更大,存在推理延迟。
- 复杂性:选择和微调前缀可能需要大量实验。
适用场景:
- 文本生成任务:如机器翻译、文本摘要。
- 逐步引导模型:通过前缀逐步引导模型输出特定类型的结果。
5. LoRA (Low-Rank Adaptation)
https://arxiv.org/abs/2106.09685
主要做法:
- 引入并行、可融合且可学习的分支:在模型的每一层中添加低秩矩阵分解(low-rank decomposition)。
- 通过低秩矩阵的微调来实现模型的调整,而不是直接调整原始参数。
优点:
- 参数高效:低秩矩阵减少了参数数量,节省了存储和计算资源。
- 表达能力强:相比于只调整偏置项,低秩矩阵可以捕捉更多复杂的特性。
缺点:
- 设计复杂性:低秩矩阵的选择和分解需要精心设计。
- 额外计算开销:尽管参数减少,但低秩分解的计算也增加了一定的复杂度。
适用场景:
- 中大型模型微调:需要在保持性能的同时减少微调参数的情况。
- 资源受限场景:希望在有限资源下实现高效微调。
6. QLoRA (Quantized Low-Rank Adaptation)
https://arxiv.org/abs/2309.14717
主要做法:
- 基于LoRA方法,将低秩矩阵进行量化处理(不使用16位的transformer为主干,将主干网络量化仅为4位NF4)。
- 利用MP6C对LoRa分支进行微调
优点:
- 存储和计算资源极度优化:通过量化进一步减少参数和计算需求。
- 保持性能:在某些任务中,量化处理可以在不显著损失性能的情况下实现高效微调。
缺点:
- 量化误差:量化处理可能引入误差,影响模型的精度。
- 设计复杂性:需要对量化方法进行仔细设计和验证。
适用场景:
- 超大模型微调:在超大模型上进行微调,同时需要极大地减少计算和存储需求。
- 边缘计算:在资源非常有限的边缘设备上运行大模型。
7. LongLoRA
https://arxiv.org/abs/2402.10171
主要做法:
- 基于LoRA进行扩展上下文,专门优化长序列处理。
- 通过平移稀疏注意力(注意力分组计算且每组移动一半)和增强LoRA(还得微调输入嵌入层和正则化层)
优点:
- 处理长序列优化:专门针对长序列问题进行优化,性能更好。
- 参数高效:保持LoRA的低参数量特性,适合长序列任务。
缺点:
- 设计复杂性:需要专门设计和验证长序列处理方法。
- 适用性有限:主要针对长序列任务,其他任务可能不适用。
适用场景:
- 长文本处理:如长文档摘要、长文本生成、长序列分析。
- 需要长依赖的任务:任何需要处理长依赖的自然语言处理任务。
总结
每种微调方法都有其独特的优缺点和适用场景:
- BitFit:适用于资源受限和简单任务,计算成本低但适应性有限。
- Adapter:适用于多任务学习和可扩展性需求,模块化设计节省存储,但增加计算开销。
- Prompt-Tuning:适用于快速原型开发和灵活任务调整,参数开销低但任务依赖性强。
- Prefix-Tuning:适用于文本生成和逐步引导任务,参数高效但需要设计和调优。
- LoRA:适用于中大型模型和资源受限场景,参数高效且表达能力强,但设计复杂。
- QLoRA:适用于超大模型和边缘计算,存储和计算资源优化,但可能引入量化误差。
- LongLoRA:适用于需要处理长序列依赖的任务,参数高效但设计复杂。