随着大语言模型(LLM,如GPT系列、LLaMA系列)的飞速发展和广泛应用,模型的微调技术也随之备受关注。然而,庞大的模型参数带来的算力消耗、存储需求以及部署难度,也成了使用者的巨大挑战。
为了解决这一问题,参数高效微调方法(Parameter-Efficient Fine-Tuning,简称PEFT)逐渐进入大众视野,它提供了一种全新的方式,让我们用极少量的参数调整,便能在特定任务上实现非常好的性能。
本文将详细介绍PEFT的基本思想和几种主流实现方法,并分析其在实际应用中的优缺点。
一、什么是PEFT?
PEFT,即参数高效微调,本质上是在预训练模型基础上,通过增加少量可训练参数或调整少量已有参数,快速实现特定任务的微调,提升性能。其核心思想是:
- 冻结大部分预训练模型权重,不再进行修改;
- 增加少量参数,或只调整少量权重,通过更高效的参数调优方式,获得良好性能。
因此,相比传统的全量微调方法,PEFT具有参数更少、效率更高、部署更便捷的巨大优势。
二、主流的PEFT微调方法
目前主流的PEFT微调方法主要包括以下几种:
1. LoRA(Low-Rank Adaptation,低秩适配)
LoRA通过在原始模型参数矩阵旁边新增低秩矩阵,以微调的形式更新这些低秩矩阵,实现对模型的微调。
- 核心思想:
- 对原始权重矩阵 WW 添加低秩矩阵 BABA (其中B和A为小矩阵,秩很低);
- 训练时只更新 A,BA, B,原始权重冻结。
- 优势:
- 参数少,计算成本低;
- 微调后的参数文件极小(通常<1%原参数);
- 微调效果接近全量微调。
2. Prefix Tuning(前缀微调)
Prefix Tuning将一些额外可训练的向量(称为prefix)添加到模型输入前,以此作为任务特定的提示向量。
- 核心思想:
- 在模型输入序列前添加少量可训练的引导向量;
- 只训练这些prefix参数,模型主体权重保持冻结。
- 优势:
- 参数少、训练快;
- 部署简单,尤其适合API部署场景;
- 在少样本情景表现良好。
3. Adapter Tuning(适配器微调)
Adapter方法在原有Transformer层之间插入小的神经网络模块Adapter,训练时只微调这些额外模块的参数。
- 核心思想:
- 在原始网络层中插入小型前馈神经网络(Adapter);
- 冻结预训练权重,仅更新Adapter模块的参数。
- 优势:
- 参数量小,且易于部署;
- 可插拔,可复用性高,支持快速任务迁移。
4. Prompt Tuning(提示微调)
Prompt Tuning方法仅训练一组软提示(soft prompt),而不改变原始模型的参数。
- 核心思想:
- 使用连续的软提示token,构成任务引导;
- 冻结模型主体,仅训练这些软提示参数。
- 优势:
- 极低的参数消耗;
- 部署简单,训练快速,适合资源受限的环境。
三、PEFT微调的优点
PEFT方法在实践中呈现出明显优势:
- 节省资源:只调整极少参数,降低了对GPU资源的需求,节省算力和存储空间。
- 快速迭代:微调过程更快速,能迅速响应业务和任务需求的变化。
- 易于部署和共享:微调参数文件小巧,更便于部署、传输和分发,特别适合云端和边缘设备部署。
- 减少过拟合:由于冻结了大部分原始模型参数,在小样本或低资源的任务场景中,相对不容易出现过拟合现象。
四、PEFT微调的缺点
当然,PEFT也不是没有缺点,主要表现为:
- 极限性能略逊于全量微调:一般而言,PEFT的性能接近全量微调,但在一些对性能极致敏感的场景,可能会略微逊色。
- 超参数调优敏感:一些PEFT方法(例如LoRA)对低秩维度等超参数敏感,需要额外的超参数搜索和优化工作。
- 不擅长全新领域的任务:对于与预训练模型领域差距巨大的新领域任务,PEFT的微调效果可能不如全量微调明显。
五、PEFT的应用场景与建议
PEFT特别适合以下场景:
- 快速场景迁移:针对不同任务快速适配、部署。
- 低资源或零样本任务:数据少,任务切换频繁时PEFT优势明显。
- 边缘设备或移动端部署:受限环境下,参数量小至关重要。
而以下场景则更推荐全量微调:
- 对性能要求非常高,需极限优化的核心任务;
- 大量高质量领域数据充足,微调资源充裕,且需要大幅调整原始模型的内部表示时。
六、小结
PEFT的出现,为我们提供了一种参数高效、资源友好的模型微调方式。通过LoRA、Prefix Tuning、Adapter、Prompt Tuning等方法,PEFT能在快速、高效、易部署的同时,实现接近甚至媲美全量微调的性能。
虽然PEFT并非完美,存在一定局限性,但随着模型规模和应用场景的扩展,PEFT微调方法必将在未来发挥更大的作用,成为落地大语言模型的主流微调方式之一。
希望本文能帮助你更好地理解和应用PEFT,探索更加灵活、强大且高效的微调方案。
有的,PEFT 微调方法之间在训练时长方面确实存在差异,实际表现通常如下:
七、peft 训练的时候有没有注意他们训练的时间长短比较?
7.1 训练时长的整体趋势
总体来说,相较于完整微调,PEFT 的训练时间更短,因为只微调少量参数。但PEFT不同方法之间又存在一定差异:
-
LoRA 和 Adapter Tuning:
- 训练速度通常较快,尤其是 LoRA。因为只涉及少量低秩矩阵参数更新,计算负担小。
- 一般可在数小时甚至更短时间内微调完成。
-
Prefix Tuning 和 Prompt Tuning:
- 前期收敛可能略慢一些,因为 prefix 或 soft prompt 本质是全新增加的可训练引导参数,模型需更多时间学习有效表示。
- 可能需要较多的 epochs 才能充分收敛,尤其是 prompt tuning。
7.2 不同方法的具体对比(从快到慢)
方法 | 训练时长(相对) | 原因 |
---|---|---|
LoRA | 较快 | 只训练低秩矩阵,收敛迅速 |
Adapter Tuning | 较快 | 小型插入模块易收敛 |
Prefix Tuning | 中等 | 训练少量引导向量,需一定轮次收敛 |
Prompt Tuning | 偏慢 | 全新提示向量较难快速收敛 |
7.3 实际训练建议
- 如果追求最快的训练速度,推荐使用 LoRA 或 Adapter,尤其是 LoRA,因为它在实操中表现最稳定、速度最快。
- 如果在低资源或少样本场景中,考虑到性能更重要一些,推荐使用 Prefix Tuning 或 Prompt Tuning,尽管它们可能训练稍慢一些,但效果在小样本场景下更好。
7.4 额外注意事项:
- PEFT 方法的训练时间也会受超参数(如学习率、低秩维度、Adapter大小)明显影响,超参数选择不当也可能延长训练时间。
- 通常建议在实际训练前进行简单的超参数搜索,找到更快速收敛的参数组合。
7.5 小结
- PEFT整体比全量微调速度快。
- LoRA最快,Adapter次之,Prefix和Prompt Tuning稍慢一些。
- 具体使用时需要根据任务场景和资源需求进行灵活选择。