背景
2018年Google发布BERT模型,BERT出现之后,fine-tuning技术也随之流行。微调旨在利用相对较少的领域特定数据对预训练模型进行优化。
一 基本技术
Fine-tuning是一种在自然语言处理(NLP)中使用的技术,用于将预训练的语言模型适应于特定任务或领域。Fine-tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。
二 常用方法
1 全参数微调(Full-Parameter Fine-Tuning, Full Fine-Tuning)
- 这种方法是对预训练模型的所有参数进行调整。它能够充分利用领域数据的信息,但需要较大的计算资源和较多的领域数据。因为调整所有参数可能会导致过拟合,尤其是在领域数据较少的情况下。
- 全参数微调:需要加载和更新全部LLM参数,需要更高的显存(需要的显存一般是单一参数的4倍),数据量上也需要更多的微调数据;
- 存在灾难性遗忘的风险,理论效果上限更高
2 参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)
PEFT 旨在在保持大模型大部分参数冻结的情况下,通过少量可训练参数实现高效的适配和微调。
- 适配层(Adapter):在模型的特定层(如 Transformer 层)引入小规模的可训练模块,而保持原始模型参数冻结,例如:
- Adapter(Houlsby Adapter)
- Compacter(低秩适配器)
- Prefix Tuning(仅调整前缀参数)
- 低秩适配(LoRA, Low-Rank Adaptation):在注意力层的权重矩阵上添加低秩矩阵进行调整,避免对整个权重进行更新。
- 只需要加载LLM参数,训练两个可学习的低秩矩阵,显存和数据量要求较低,训练速度也更快;
- 和全参数微调效果差距不大,稳定性和扩展性更好;
- 提示调优(Prompt Tuning & P-Tuning):
- Soft Prompt Tuning(Soft Prompt):为输入添加可训练的嵌入提示,而不是调整整个模型权重。
- P-Tuning(Prompt-based Tuning):用可训练的连续嵌入替代手工设计的离散提示。
- 差分调优(Diff-Pruning):通过学习一个稀疏的参数增量,使得仅少部分参数发生变化。
- BitFit:仅微调模型的偏置项,而冻结所有权重参数。
3 部分参数微调(Partial Parameter Fine-Tuning, PPFT)
部分参数微调(Partial Parameter Fine-Tuning, PPFT)介于全参数微调(Full Fine-Tuning, FFT)和参数高效微调(PEFT)之间,通常选择性地调整部分模型参数,以平衡训练开销和适配能力。以下是常见的部分参数微调方法:
1. 层选择性微调(Layer-wise Fine-Tuning)
- 只微调特定层,而冻结其他层:
- 顶层微调(Top-layer Fine-Tuning):仅更新 Transformer 的最后几层(靠近输出端)。
- 底层冻结(Bottom Freezing):冻结低层参数,只更新高层(适用于迁移学习)。
- 分层解冻(Progressive Unfreezing):逐步解冻模型的不同层,从输出层到底层。
2. 适配层(Adapter-based Fine-Tuning)
- 在模型的某些层插入小规模可训练模块,而保持主干网络参数冻结:
- Houlsby Adapter(Transformer 层内部增加小型全连接层)
- Compacter(低秩适配器)
- Parallel Adapter(适配器与主干网络并行)
- Residual Adapter(适配器用于残差连接)
3. 低秩微调(LoRA, Low-Rank Adaptation)
- 仅调整注意力层中的部分参数:
- 在注意力层权重矩阵 W 上添加低秩分解矩阵 Δ W = A B \Delta W = AB ΔW=AB(其中 A和 B是低秩矩阵)。
- 适用于 Transformer 架构,如 BERT、GPT、T5 等。
4. 偏置微调(BitFit, Bias-Only Fine-Tuning)
- 只更新模型中的偏置项(bias),而冻结所有权重参数。
- 计算和存储成本极低,但在某些 NLP 任务上效果接近全参微调。
5. 注意力头微调(Attention Head Tuning) - 仅调整 Transformer 的部分注意力头:
- 例如,在 MHA(Multi-Head Attention)中只训练部分头,而冻结其他头的参数。
- 可用于减少计算量,保持部分预训练信息。
6. 任务特定层微调(Task-Specific Layer Tuning)
- 仅微调与特定任务强相关的层:
- 例如,在 BERT 这类预训练模型上,仅调整任务相关的 FFN 层,而不微调整个 Transformer。
7. 结构剪枝(Structured Pruning Fine-Tuning)
- 例如,在 BERT 这类预训练模型上,仅调整任务相关的 FFN 层,而不微调整个 Transformer。
- 在微调前剪枝部分权重,使模型更轻量:
- 剪枝神经元(Neuron Pruning)
- 剪枝通道(Channel Pruning)
- 剪枝注意力头(Head Pruning)
4. 方法对比总览
类别 | 核心思想 | 代表方法 | 训练参数量 | 计算开销 | 适用场景 |
---|---|---|---|---|---|
全参数微调(FFT) | 更新模型所有参数,使其完全适配下游任务 | 常规微调(Fine-Tuning) | 最大(所有参数) | 最高 | 需要高性能计算资源,适用于高精度要求的特定任务 |
部分参数微调(PPFT) | 选择性地微调部分层或模块,平衡计算成本和适配能力 | 层选择性微调、LoRA、BitFit、Adapter、注意力头微调 | 中等(部分参数) | 中等 | 适用于计算资源受限但仍需较强适配能力的场景 |
参数高效微调(PEFT) | 通过额外的可训练参数高效适配,而不更新大模型主干参数 | LoRA、Adapter、Prefix Tuning、Prompt Tuning、Diff-Pruning | 最小(极少量参数) | 最低 | 适用于大模型轻量化适配、少样本学习、资源受限部署 |
5. 具体方法对比
类别 | 具体方法 | 调整的参数 | 参数占比 | 优点 | 缺点 |
---|---|---|---|---|---|
FFT | 常规全参微调 | 所有模型参数 | 100% | 适配能力最强,适用于高精度任务 | 计算成本高,存储占用大,容易过拟合 |
PPFT | 层选择性微调 | 仅调整部分 Transformer 层 | 10% ~ 50% | 计算量较小,兼顾适配性和效率 | 仍有较多参数更新,适配能力受限 |
LoRA(低秩适配) | 仅调整注意力层的低秩矩阵 | <1% | 计算量小,适配能力较强 | 适用于 Transformer 结构,不适用于所有模型 | |
BitFit(仅微调偏置项) | 仅更新偏置参数 | <1% | 计算量极小,适配效果较优 | 适用于 NLP 任务,对 CV 任务效果较差 | |
注意力头微调 | 仅更新部分注意力头 | 5% ~ 20% | 降低计算成本,适用于特定任务 | 需要任务相关性分析 | |
PEFT | Adapter | 额外小型适配层 | <1% | 增强可扩展性,不影响主干参数 | 适配层增加额外推理开销 |
Prefix Tuning | 仅训练可学习前缀 | <1% | 适用于文本生成任务,计算量极小 | 适配能力比 LoRA 低 | |
Prompt Tuning | 仅优化软提示 | <1% | 适用于少样本任务,计算开销极低 | 依赖任务数据,难以泛化 | |
Diff-Pruning | 仅学习参数增量 | <1% | 计算成本极低,适用于迁移学习 | 适配能力比全参微调弱 |
相关技术
参考链接
- https://www.datalearner.com/blog/1051681306547159
- https://mp.weixin.qq.com/s/MiQXHrr21V0klHFN4-FRIw
- https://www.hwzhao.cn/pages/d6f184/
- https://ascii-iie.github.io/Seminar/230224-Instruction%20tuning%20&%20Prompt%20tuning-%E5%BC%A0%E7%90%AC%E6%82%A6.pdf
- https://www.hwzhao.cn/pages/d6f184/
- https://mp.weixin.qq.com/s/b16EPZ3z-LpGapGy2Q7ZUg
- https://github.com/datawhalechina/llm-deploy/blob/main/docs/chapter4/chapter4_1.md