大模型有数十亿甚至上万亿的参数,如果对整个模型进行全量微调,需要巨大的计算资源(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. 1. 修改位置:

    • • 输入端: Prompt Tuning, P-Tuning (部分)

    • • 模型内部结构(添加): Adapter

    • • 模型内部计算(修改/添加): LoRA, Prefix-Tuning, P-Tuning v2, (IA)³

    • • 模型现有参数值: BitFit, Selective Fine-tuning

  2. 2. 参数类型:

    • • 直接优化权重/偏置: BitFit, Selective Fine-tuning

    • • 优化新增模块/矩阵: Adapter, LoRA

    • • 优化新增向量/因子: Prompt Tuning, P-Tuning, Prefix-Tuning, (IA)³

  3. 3. 主要权衡:

    • • 参数效率 vs 性能: BitFit/Prompt Tuning 参数最少,但性能可能有上限;LoRA/(IA)³ 在参数效率和性能间取得良好平衡;Adapter 稍多参数,性能也不错。

    • • 实现复杂度: BitFit/Prompt Tuning/LoRA/(IA)³ 相对简单;Adapter/Prefix-Tuning/P-Tuning 稍复杂;Selective FT 的选择策略可能复杂。

    • • 推理影响: Adapter 会略增延迟,其他方法基本不增加(或可优化到不增加)。

核心问题:

如何在冻结大部分预训练模型参数的情况下,实现有效的下游任务适配?

PEFT的几大流派类别:

  1. 1. 选择性微调(Selective Fine-tuning): 只微调模型中的一部分参数。

  2. 2. 基于提示的方法(Prompt-based Methods): 不改变模型参数,通过优化输入端的提示(Prompt)来引导模型。

  3. 3. 重参数化方法(Reparameterization Methods): 对模型中的部分参数(通常是权重矩阵)进行低秩分解或其他形式的变换,只训练变换后的少量参数。

  4. 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,并引入两个小的、可训练的低秩矩阵AB(通常A的维度是d x r,B的维度是r x k,其中r是远小于dk的秩)。模型的前向传播变为y = Wx + BAx。微调时只训练AB。QLoRA则在应用LoRA的同时,将冻结的预训练模型参数W量化为低精度(如4-bit),并在反向传播时将梯度传递给未量化的LoRA参数AB,极大地节省了显存。

  • • 优点:

    • • 参数效率高,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%免费】🆓

请添加图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

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

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

更多推荐