一文看懂大模型高效微调:从SoftPrompts到QLoRA的技术跃迁
大模型有数十亿甚至上万亿的参数,如果对整个模型进行全量微调,需要巨大的计算资源(GPU显存、算力)和大量时间,同时,如果为每个下游任务都保存一份完整的模型副本,存储成本非常高。
大模型有数十亿甚至上万亿的参数,如果对整个模型进行全量微调,需要巨大的计算资源(GPU显存、算力)和大量时间,同时,如果为每个下游任务都保存一份完整的模型副本,存储成本非常高。
参数高效微调(Parameter-Efficient Fine-Tuning, PEFT) 的核心目标是:在尽可能少地修改或增加模型参数的前提下,高效地将预训练大模型适配到各种下游任务,并取得接近甚至超越全量微调的效果。
本文将对PEFT进行总体上的对比阐述,后续文章将通过代码详细解读各类方法的底层原理。
前排提示,文末有大模型AGI-CSDN独家资料包哦
主流PEFT方法总览
|
特性 |
BitFit |
Adapter Tuning |
LoRA / QLoRA |
Prompt Tuning |
P-Tuning / v2 |
Prefix-Tuning |
Selective FT |
(IA)³ |
| 修改对象 |
偏置项 (Bias) |
新增Adapter模块 |
权重矩阵的低秩更新 |
输入端的Soft Prompt |
输入/内部Soft Prompt |
Attention的Key/Value |
部分现有权重 |
内部激活值 |
| 参数来源 |
选择性微调 (现有) |
添加式 (新增) |
重参数化/添加式 (新增) |
添加式 (新增Prompt) |
添加式 (新增Prompt) |
添加式 (新增Prefix) |
选择性微调 (现有) |
添加式 (新增缩放因子) |
| 参数量级 |
极少 |
较少 (1-5%) |
少 (r决定, <1%) |
极少 |
极少/少 |
少 |
可变 (取决于选择比例) |
极少 |
| 是否改变原模型 |
否 (只改值) |
是 (插入模块) |
否 (并行添加) |
否 (改输入) |
否 (改输入/内部) |
否 (改Attention计算) |
否 (只改值) |
否 (改激活计算) |
| 推理延迟 |
无增加 |
轻微增加 |
无增加 (可合并) |
无增加 |
无增加 |
无增加 |
无增加 |
无增加 (可融合) |
| 性能潜力 |
有限 |
较好 |
好/极好 |
中等 |
中等/较好 |
好 |
中等/好 (依赖选择) |
好/极好 |
| 主要应用场景 |
简单任务/快速适应 |
通用 |
通用,尤其推荐 |
通用,尤其NLU/简单任务 |
NLU任务 |
NLG任务 |
特定场景/研究 |
通用 |
| QLoRA特性 |
N/A |
N/A |
极大降低显存 |
N/A |
N/A |
N/A |
N/A |
N/A |
核心区别总结:
-
1. 修改位置:
-
• 输入端: Prompt Tuning, P-Tuning (部分)
-
• 模型内部结构(添加): Adapter
-
• 模型内部计算(修改/添加): LoRA, Prefix-Tuning, P-Tuning v2, (IA)³
-
• 模型现有参数值: BitFit, Selective Fine-tuning
-
-
2. 参数类型:
-
• 直接优化权重/偏置: BitFit, Selective Fine-tuning
-
• 优化新增模块/矩阵: Adapter, LoRA
-
• 优化新增向量/因子: Prompt Tuning, P-Tuning, Prefix-Tuning, (IA)³
-
-
3. 主要权衡:
-
• 参数效率 vs 性能: BitFit/Prompt Tuning 参数最少,但性能可能有上限;LoRA/(IA)³ 在参数效率和性能间取得良好平衡;Adapter 稍多参数,性能也不错。
-
• 实现复杂度: BitFit/Prompt Tuning/LoRA/(IA)³ 相对简单;Adapter/Prefix-Tuning/P-Tuning 稍复杂;Selective FT 的选择策略可能复杂。
-
• 推理影响: Adapter 会略增延迟,其他方法基本不增加(或可优化到不增加)。
-
核心问题:
如何在冻结大部分预训练模型参数的情况下,实现有效的下游任务适配?
PEFT的几大流派类别:
-
1. 选择性微调(Selective Fine-tuning): 只微调模型中的一部分参数。
-
2. 基于提示的方法(Prompt-based Methods): 不改变模型参数,通过优化输入端的提示(Prompt)来引导模型。
-
3. 重参数化方法(Reparameterization Methods): 对模型中的部分参数(通常是权重矩阵)进行低秩分解或其他形式的变换,只训练变换后的少量参数。
-
4. 添加式方法(Additive Methods): 冻结原模型,额外添加少量可训练参数/模块。
类型一:选择性微调
1. BitFit (Bias-Term Fine-tuning)
BitFit 是一种极其简洁的PEFT方法,它提出只微调模型中的偏置项,而冻结所有其他的权重参数(如Transformer中的权重矩阵)。
-
• 工作原理: 例如,在神经网络的线性变换
y = Wx + b中,W是权重矩阵,b是偏置项。BitFit冻结W,只通过梯度下降更新b,可能只更新不到0.1%的参数。对于Transformer模型,只更新Multi-Head Attention、Feed-Forward Network等模块中的偏置参数。 -
• 优点:
-
• 参数效率极高,需要更新的参数量非常少。
-
• 实现简单,易于理解。
-
• 存储成本低,只需存储更新后的偏置项。
-
-
• 缺点:
-
• 模型容量受限,因为只调整偏置项,表达能力不足以应对复杂任务或领域差异较大的任务,性能不如其他更复杂的PEFT方法。
-
• 效果很大程度上依赖于预训练模型的质量和泛化能力。
-
2. Selective Fine-tuning - 另一种思路
Selective Fine-tuning不是一个单一的方法,而是一类方法的统称。其核心思想是:识别出模型中对下游任务最重要的那部分现有参数,然后只微调这些选定的参数,其余参数保持冻结。
-
• 工作原理: 选择参数的方法有很多种:
-
• 基于层级:只微调最后几层或特定类型的层(如FFN层)。
-
• 基于模块:只微调Attention模块或FFN模块。
-
• 基于梯度:计算少量样本上的梯度,选择梯度幅度大的参数进行微调。
-
• 基于幅度:选择权重绝对值大的参数进行微调。
-
• 结合其他方法:例如,先用某种方法(如Fish Mask)识别重要参数,再进行微调。
-
-
• 优点:
-
• 不引入任何新的参数,模型结构不变。
-
• 参数选择得当,比BitFit有效。
-
-
• 缺点:
-
• 如何选择“重要”参数,没有通用的最佳策略。
-
• 需要存储哪些参数被修改了,或者存储完整的模型副本(即使大部分参数未变),存储效率不如LoRA、Adapter。
-
• 性能高度依赖于参数选择策略。
-
类型二:基于提示的方法
1. Prompt Tuning
Prompt Tuning是最早期的PEFT方法之一,它完全冻结预训练模型,只在输入端为每个任务学习一段连续的、可训练的向量序列(称为"Soft Prompt"(Hard Prompt效果较差)或"Continuous Prompt")。
-
• 工作原理: 对于一个输入序列
X = [x1, x2, ..., xn],Prompt Tuning会在其前面(或中间)添加k个可训练的连续向量P = [p1, p2, ..., pk],形成新的输入[P; X]。模型的其他部分完全不变。微调的目标就是通过梯度下降优化这k个prompt向量P,使其能够引导冻结的LLM执行特定任务。 -
• 示例: 对于情感分类任务,我们可能学习
k=20个向量P。当输入句子 "This movie is great!" 时,实际送入模型的可能是[p1, ..., p20, "This", "movie", "is", "great", "!"]的嵌入表示。模型需要学会根据P的引导,将这个句子分类为“positive”。 -
• 优点:
-
• 参数效率极高,只需要存储和训练很少的prompt向量(
k * hidden_dim个参数)。 -
• 实现简单,不改变模型结构。
-
• 一个模型可以服务多个任务,只需切换不同的prompt向量。
-
-
• 缺点:
-
• 性能可能不如修改模型内部参数的方法(如LoRA、Adapter),尤其是在模型规模较小或任务较复杂时。
-
• 所需prompt的长度
k是一个需要调整的超参数。 -
• 有时训练不够稳定,效果对初始化和优化策略敏感。
-
2. P-Tuning / P-Tuning v2
P-Tuning在Prompt Tuning的基础上进行了改进。P-Tuning v1引入了一个小型的Prompt Encoder(如LSTM或MLP)来生成Soft Prompt向量,并允许这些向量插入到输入序列的中间。P-Tuning v2更进一步,取消了Prompt Encoder,直接将可训练的prompt向量应用到模型内部更深的层级(类似于Prefix-Tuning),而不仅仅是输入层。
-
• 工作原理:
-
• P-Tuning v1: 使用一个小型网络(Prompt Encoder)将一些虚拟token(Anchor Tokens)映射为可训练的prompt向量,这些向量可以插入输入序列的任意位置。
-
• P-Tuning v2: 移除了Prompt Encoder,直接将可训练的prompt向量作为参数,并像Prefix-Tuning一样,将这些prompt应用到Transformer的每一层(或部分层)的Key和Value上。
-
-
• 优点:
-
• 相比Prompt Tuning,通常能获得更好的性能和训练稳定性,尤其是在NLU任务和较小模型规模上。
-
• P-Tuning v2参数量依然很少(比Prompt Tuning多)。
-
-
• 缺点:
-
• P-Tuning v1的Prompt Encoder增加了实现的复杂度。
-
3. Prefix-Tuning - 面向生成任务
Prefix-Tuning也是一种基于提示的方法,但它不是在输入嵌入层添加prompt,而是在Transformer的每一层(或部分层)的Multi-Head Attention模块中,为Key和Value向量添加一段可训练的“前缀”(Prefix)向量。
-
• 工作原理: 对于每一层的Attention计算
Attention(Q, K, V),Prefix-Tuning会学习一组特定于任务的前缀向量P_k和P_v。计算Attention时,将这些前缀拼接到原始的Key和Value序列之前:Attention(Q, concat(P_k, K), concat(P_v, V))。整个预训练模型仍然是冻结的,只训练这些前缀向量。 -
• 优点:
-
• 直接影响了模型内部的计算过程(Attention机制),比Prompt Tuning表达能力强。
-
• 在自然语言生成任务上通常表现优异。
-
• 参数效率高,只训练前缀向量(参数量约为
prefix_length * num_layers * hidden_dim * 2)。
-
-
• 缺点:
-
• 相比Prompt Tuning,需要训练的参数量增加。
-
• 训练不如LoRA稳定,有时需要精细调整学习率。
-
类型三:重参数化方法
1. LoRA/ QLoRA
LoRA目前非常流行,它假设模型在适配新任务时,权重的改变量(Update Matrix)是低秩(Low-Rank)的。因此,它不直接学习这个大的改变量矩阵 ΔW,而是学习它的低秩分解。QLoRA是LoRA的进一步优化,通过量化技术降低了显存占用。
-
• 工作原理:对于预训练模型中的某个权重矩阵
W(例如nn.Linear层),LoRA冻结W,并引入两个小的、可训练的低秩矩阵A和B(通常A的维度是d x r,B的维度是r x k,其中r是远小于d和k的秩)。模型的前向传播变为y = Wx + BAx。微调时只训练A和B。QLoRA则在应用LoRA的同时,将冻结的预训练模型参数W量化为低精度(如4-bit),并在反向传播时将梯度传递给未量化的LoRA参数A和B,极大地节省了显存。 -
• 优点:
-
• 参数效率高,
r通常很小(如8, 16, 32)。 -
• 性能强大,在很多任务上能媲美甚至超越全量微调。
-
• 推理时可以通过合并权重(
W' = W + BA)而不增加延迟。 -
• QLoRA显著降低了微调所需的显存,能在消费级GPU上进行大模型微调。
-
-
• 缺点:
-
• 秩
r是一个重要的超参数,需要调整。 -
• QLoRA虽然节省显存,但计算上可能因为反量化等操作略微增加训练时间。
-
类型四:添加式方法
1. Adapter Tuning
Adapter是一种在预训练模型的Transformer层之间插入小型、可训练的“适配器”模块的方法。
-
• 工作原理: 在Transformer的每个(或部分)Block内部(通常在Multi-Head Attention子层和Feed-Forward Network子层之后),插入一个或两个Adapter模块。每个Adapter模块通常是一个包含下采样、非线性激活和上采样的“瓶颈”结构。微调时,冻结原始模型参数,只训练这些新添加的Adapter模块的参数。
-
• 优点:
-
• 模块化设计,易于添加和移除,方便管理不同任务的适配器。
-
• 性能不错,能够达到接近全量微调的效果。
-
• 参数效率较高(通常只增加原模型参数量的1-5%)。
-
-
• 缺点:
-
• 增加了模型的深度,可能会略微增加推理时的延迟。
-
• Adapter的结构和插入位置需要设计,存在一定的超参数调整。
-
2. (IA)³ (Infused Adapter by Inhibiting and Amplifying Activations)
(IA)³ 不像Adapter那样添加模块,也不像LoRA那样修改权重,而是通过学习缩放因子 来调整模型内部的激活值,效率很高。
-
• 工作原理: (IA)³为模型中的某些激活(通常是Attention层和FFN层的输出)引入可训练的缩放向量
l。原始的激活x被修改为l ⊙ x(⊙表示逐元素相乘)。微调时,冻结所有原始模型参数,只训练这些缩放向量l。这些向量可以放大或抑制(Amplify or Inhibit)模型中不同部分的表示,从而适应新任务。 -
• 示例: 在Transformer块中,FFN层的输出
h_ffn可能会被乘以一个可学习的向量l_ffn,变成l_ffn ⊙ h_ffn。同样,Attention层的输出h_attn也可能被乘以l_attn。通过学习这些l向量,模型可以调整信息流的强度。 -
• 优点:
-
• 它只需要为每个目标激活学习一个向量,参数效率极高,比LoRA还要少。
-
• 性能非常有竞争力,在某些基准上甚至超过LoRA。
-
• 概念简单,实现也比较直接。
-
• 不增加推理时的计算量(缩放操作可以融合到现有操作中)。
-
-
• 缺点:
-
• 相对较新,在某些复杂场景下的鲁棒性需要验证。
-
• 表达能力能不能应对所有类型的任务转换,还需要研究。
-
总结
-
• 任务相对简单,追求极致的参数效率时,考虑 Prompt Tuning 或 BitFit。
-
• 追求性能和效率的平衡,并且希望通用性较好时,优先选择LoRA/QLoRA 和 (IA)³ 。
-
• 如果想做模块化管理任务,可以尝试Adapter。
-
• 做文本生成时,可以尝试Prefix-Tuning。
-
• Selective Fine-tuning 提供了不引入新参数的思路,但有很多不确定性。
读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用
针对0基础小白:
如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓


大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难。

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)