【DeepSeek-R1背后的技术】系列博文:
第1篇:混合专家模型(MoE)
第2篇:大模型知识蒸馏(Knowledge Distillation)
第3篇:强化学习(Reinforcement Learning, RL)
第4篇:本地部署DeepSeek,断网也能畅聊!
第5篇:DeepSeek-R1微调指南
第6篇:思维链(CoT)
第7篇:冷启动
第8篇:位置编码介绍(绝对位置编码、RoPE、ALiBi、YaRN)
第9篇:MLA(Multi-Head Latent Attention,多头潜在注意力)
第10篇:PEFT(参数高效微调——Adapter、Prefix Tuning、LoRA)
第11篇:RAG原理介绍和本地部署(DeepSeek+RAGFlow构建个人知识库)
第12篇:分词算法Tokenizer(WordPiece,Byte-Pair Encoding (BPE),Byte-level BPE(BBPE))
第13篇:归一化方式介绍(BatchNorm, LayerNorm, Instance Norm 和 GroupNorm)
第14篇:MoE源码分析(腾讯Hunyuan大模型介绍)

1 前言

参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)是指通过在预训练模型上仅微调部分参数来实现微调的策略。相较于全量微调,该方法节省计算资源和时间,特别适用于数据量有限、资源有限的情况。它也算是一种迁移学习的方法,但是与传统的迁移学习方法不同的是,它是专门针对大模型设计的,通常会保持原有模型的参数不变,以某种方式添加少量新的参数,通过调整这些新的参数使模型适应特定任务,同时保留底层通用的语义表示。而传统的迁移学习方法一般要达到比较好的效果,都不得不调整一部分原有模型的参数。同时,在保存或移植模型时,PEFT只要维护添加的那些参数,而传统的迁移学习方法需要保存整个调整后的模型,当需要微调很多任务时,通过PEFT微调模型可以大幅节省存储空间。

PEFT的应用特性:

  1. 固定预训练参数,仅需微调少量额外参数
    • 达到与全量微调相当性能的同时,大大降低了计算和存储成本
    • 对于不同任务只需要切换少部分参数,无需替换整个模型,具有部署轻便性
  2. 在低数据场景下往往性能优于全量微调
    • 有效缓解了知识灾难性遗忘的问题(全量微调容易遗忘)
    • 借助预训练知识,可以更好地泛化到域外场景(open set)
  3. 广泛适用于多种模态和模型
    • 除了NLP Transformer-based模型和任务,也适用于图像识别和生成等任务

目前,参数高效微调因其调整的参数占比很小(小于10%甚至0.1%),所需运算资源少,在同时需要出来很多下游任务时,节省大量存储空间,在目的单一的较小的样本集里(小于预训练语料的10%),已逐渐成为主流的微调方法。近年来,参数高效微调发展迅速,已出现30种以上的参数高效微调方法,如所示,它们可以分为3大类:

  • 选择性方法(selective):只微调原始LLM参数的子集。
  • 添加性方法(additive):通过添加一些可训练的层或参数来调整基础模型。它又可以分为2个小类:
    • 适配器(adapters):通过在基础模型中加入一些可调整参数的组件、模块来使模型适应下游任务。
    • 软提示词(soft prompts):通过某种方式达到给输入加入提示词的效果,从而适应下游任务。
  • 重新参数化方法(reparameterization-based):通过创建原始网络权重的新低秩转换来减少要训练的参数数量。

方法汇总

参数高效微调方法这么多,本文介绍几种比较有代表性的参数高效微调方法,如:适配器微调(Adapters tuning)、前缀微调(Prefix tuning)、提示词微调(Prompt tuning)、P-tuning和LoRA(Low-Rank Adaptation)。

对比

  • Adapter Tuning:通过在模型的每个层之间插入小型神经网络(称为adapters)来实现微调。这些adapters包含可训练的权重,而模型的原始参数保持不变。
  • Prefix Tuning:通过在模型输入层之前添加可训练的前缀嵌入(prefix embeddings)来影响模型的输出。这些前缀嵌入与原始输入拼接后一起输入到模型中,而模型的其他部分保持不变。相关工作包括Prompt Tuning、P-Tuning。
  • LoRA:通过在原始模型权重矩阵附近添加一个低秩矩阵来近似模型参数的更新。这种方法通过优化这个低秩矩阵来实现微调,而不需要修改原始模型参数。

对比1
如上图所示,绿色部分是 Adapter ,这种方法把一个称为 adapter 的模块插入到预训练模型的中间层。蓝色部分是 Prefix Tuning ,这种方法在输入或者隐层添加多个可学习的前缀 tokens 。红色部分是 LoRA ,这种方法通过学习两个小参数的低秩矩阵来近似权重矩阵的参数更新。这 3 类方法在微调时都固定了预训练参数,只训练添加的额外模块。

2 Adapter

实现方式:在预训练模型内部添加新的网络模块(Adapter)来适配下游任务。

adapter:一个bottleneck结构的模块,包括一个两层前馈网络(向下投影、非线性、向上投影)和一个输入输出之间的残差连接。根据连接的不同,可以分成两类:

  • Series Adapter:模块添加到多头注意力之后、前馈层之后
  • Parallel Adapter:模块与多头注意力、前馈层并行计算集成

Adapter

3 Prefix Tuning(前缀微调)

Prefix Tuning在原始文本进行词嵌入之后,在前面拼接上一个前缀矩阵,或者将前缀矩阵拼在模型每一层的输入前。

这个前缀与输入序列一起作为注意力机制的输入,从而影响模型对输入序列的理解和表示。由于前缀是可学习的,它可以在微调过程中根据特定任务进行调整,使得模型能够更好地适应新的领域或任务。

如下图所示,要点是:

  • 在模型输入/隐藏层前添加一段连续的、任务特定的、可学习的前缀序列(prefix)
  • 训练时只优化特定任务的前缀,部署时共享基座语言模型,灵活切换任务前缀
  • 使用较低维参数矩阵+MLP作为前缀部分的隐藏激活

Prefix Tuning 固定语言模型的预训练参数,只优化特定任务的 prefix,部署时也只需要存储一份预训练模型参数和每个任务少量的 prefix 参数,灵活轻便。

PT1

下图是一个自回归的语言模型,根据这个公式计算每一层的隐层激活 hi ,如果当前索引对应前缀,直接从参数矩阵 Pθ 取对应的向量作为 hi ,后面其它的 hi 通过语言模型计算得到,依赖左侧的前缀参数,也就是说通过前缀来影响后续序列的隐层激活值。但是直接优化 Pθ 会导致训练不稳定,作者使用了一个更小维度的参数矩阵+一个MLP来替代原有的参数矩阵。

PT2

3.1 Prompt Tuning

Prompt Tuning简化了Prefix Tuning,只在输入文本前添加多个可学习token,不使用额外的编码层(每个任务对应一个Task Prompt)。

模型参数量达到一定规模时,仅使用Prompt Tuning足以达到全量微调的性能(Scaling能力强)。

Prompt

3.2 P-Tuning

针对现有的 Prefix Tuning 等方法在自然语言理解 NLU 任务上性能不佳,P-Tuning 对此做了一些优化和适配。

与Prefix Tuning思路相近,设计了一个Prompt Encoder(包括Bi-LSTM和MLP),对Prompt embedding序列编码后再传入语言模型。

P-Tuning的结构如下图所示:

P-tuning

P-Tuning v2如下图所示,改动是从输入层拓展到模型每一层:

v2

4 LoRA

我们来看看前两类方法有什么不足:

  • 在 Adapter 中,添加 adapter 模块会引入额外的推理延迟;
  • 在 Prefix Tuning 中,为前缀保留部分序列长度会导致处理下游任务的序列长度减少。

LoRA 的全称是 Low-Rank Adaptation,意思是用低秩矩阵来近似满秩权重矩阵的参数更新。

LoRA1
LoRA2

5 总结

5.1 统一框架

将这几类PEFT方法统一到一个框架中:

统一框架

典型的PEFT方法的设计选择有下面几种:

  • 新增参数形式
  • 嵌入形式(串行、并行)
  • 修改的表示层(attn、ffn)
  • 与原参数组合方式(简单相加、门控式、缩放式)

5.2 方法对比总结

方法 参数量 适用任务 优势 劣势
Adapter 0.5%-8% 多任务学习 任务独立性高,参数效率显著 增加推理延迟,结构设计复杂
Prefix <0.1% 生成任务 参数极少,任务切换灵活 训练不稳定,NLU任务表现较弱
Prompt 极低(仅提示词) 大模型通用任务 无需修改模型,适合超大模型 小模型效果差,提示词敏感
P-Tuning v2 0.1%-3% 复杂NLU任务 深层优化,跨任务通用性强 实现复杂,需多层参数注入
LoRA 0.1%-1% 多任务、大规模模型 无推理延迟,参数可合并部署 主要适配注意力层,灵活性受限

5.3 应用场景建议

  • 生成任务(如文本续写):优先选择Prefix Tuning或Prompt Tuning。
  • 复杂NLU任务(如序列标注):P-Tuning v2或LoRA更优。
  • 资源受限环境:LoRA和Adapter适合显存有限的场景。
  • 超大模型适配:Prompt Tuning和LoRA因参数效率高更具优势。

6 HuggingFace的PEFT算法库

Hugging Face开源的PEFT库目前支持几种方法,链接如下,此处不展开叙述了。

Huggingface PEFT GitHub

Huggingface的PEFT库实现的论文集合

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐