Adapter Tuning
起源
大模型预训练,再微调,现在是主流,但是如果是传统微调,就是全参数微调的话,会有三大问题:
1\计算成本高,每次都要重新训练
2\存储成本高,每次都需要保存一份完整的微调模型
3\灾难性遗忘,也就是原本大模型中预训练的通用知识会被覆盖
基本结构
以Transformer为例子.
Transformer的核心是Self-Attention和FFN两个子层,每个子层后都有残差链接和层归一化.
Adapter一般插入在每个子层的残差连接之后.
Adapter(x) = Linear2(ReLU(Linear1(x)))+x
其中x为子层的输出特征,如自注意力层的输出dmodel = 768
Linear1,降维,将dmodel降维成瓶颈维度,
Relu激活函数
Linear2,升维
最后残差连接
插入位置
Adapter插入的位置直接影响性能
直接插入的位置有:
Per-Sublayer Adapter(每个子层插入)
Per-Layer Adapter(每层插入一个)
Parallel Adapter(并行插入)
参数规模
效率很高,2.1%的规模
Adapter Tuning的训练逻辑
预训练
与传统大模型一致,使用大规模无标签数据训练原模型
微调
1\插入Adapter
2\冻结元模型参数
3\训练Adapter与辅助参数
4\损失函数
LoRA与Adapter结合
在自注意力层用Lora,在FFN层用Adapter,可以进一步提高参数和效率
LoRA Tuning的实现
LoRA是21年微软提出的参数高效迁移学习PETL方法,核心思想是通过低秩矩阵分解近似大模型微调时的权重更新.以小参数开销实现任务适应.同时保持全参数微调相当的性能.
核心思想: 低秩矩阵近似权重更新
与Adapter不同的点是,Lora不是选择插入新的线性层,而是选择修改原始的线性层,相当于是并行的添加低秩扰动.原始线性层(冻结),训练低秩矩阵.
LoRA 的本质是通过低秩分解将原始线性层的参数更新限制在低秩空间,仅训练低秩矩阵 和 ,从而实现参数高效的微调。其核心优势是参数效率高、训练稳定、推理速度无损失,因此成为当前大模型微调的主流 PEFT 方法之一(尤其适用于需要部署的场景)。
QLoRA
为何需要量化?
传统LoRA的痛点在于: 原始预训练模型的权重仍需要以高精度加载到显存中.
**例如:**175B参数的模型,FP16的175Bx2bytes =350GB显存.
Lora只需要0.1%的参数模型,但是原始模型的350GB显存需求仍然无法满足
为了解决这一问题, QLoRA将原始模型的权重量化到极低精度(如4位),从而将显存占用降低到原来的四分之一,同时通过QAT量化感知训练和LoRA的低秩适应博爱吃模型性能
QLoRA的核心技术:
量化
采用了
- NF4量化
- 双量化
- 分页量化
LoRA
QLoRA的工作流程
-
量化原始模型:将预训练模型的权重用 NF4 量化到 4 位,并存储在 GPU 显存中(原始模型权重冻结,不更新);
-
添加 LoRA 低秩矩阵:在原始模型的关键线性层(如 Q/K/V 投影层)上添加 LoRA 低秩矩阵( 和 ),这些矩阵用FP16存储(精度更高,保证训练稳定性);
-
训练 LoRA 参数:用下游任务数据训练 LoRA 的低秩矩阵( 和 ),原始模型的量化权重保持不变;
-
合并权重(可选):训练完成后,将 LoRA 的低秩矩阵(FP16)与原始模型的量化权重(NF4)合并,得到一个量化后的微调模型(推理时无需加载 LoRA 参数,直接使用合并后的模型,速度与原始模型一致)。
Prompt Tuning和P-Tuning
Prompt Tuning 简单前缀提示
1.核心思想
Prompt Tuning(又称 “Soft Prompt Tuning”)是最基础的软提示方法,其核心是在输入序列的开头添加一组可训练的连续向量(称为 “软提示” 或 “虚拟 tokens”),这些向量与输入的真实 tokens 一起输入模型,模型的原始参数保持冻结,仅训练软提示的参数。
P-Tuning: 结构化软提示
P-Tuning(全称 “Parameter-Efficient Tuning with Continuous Prompts”)是Prompt Tuning 的结构化改进,其核心是用一个小型神经网络(如 LSTM、MLP)生成软提示,而非直接使用固定长度的前缀向量。此外,P-Tuning 允许在输入序列的任意位置插入软提示(而非仅前缀),从而更灵活地捕捉任务语义。