Adapter微调

参数高效的适配器微调方法

核心思想

Adapter微调在预训练模型的Transformer层中插入小型瓶颈结构(Adapter), 训练时只更新这些Adapter参数,冻结原模型权重,实现参数高效微调。

# Adapter结构
Input → LayerNorm → Adapter → Attention → Adapter → Output
# 参数量仅增加3-4%

Adapter结构

# 瓶颈结构
d → m → d (m << d)
Adapter(x) = x + W_up(GELU(W_down(x)))
# 典型设置: m = d/64 或 d/128
降维
d → m
非线性
GELU激活
升维
m → d

插入位置

注意力后插入

在Multi-Head Attention输出后插入

Attention → Adapter → Add & Norm

FFN后插入

在Feed Forward Network输出后插入

FFN → Adapter → Add & Norm

与LoRA对比

特性AdapterLoRA
插入方式新增模块旁路连接
推理延迟增加(额外层数)无(可合并)
参数量3-4%0.1-1%
适用场景理解任务生成任务

代码实现

# 使用adapter-transformers
pip install adapter-transformers
from transformers import AutoModelWithHeads
model = AutoModelWithHeads.from_pretrained("bert-base-uncased")
model.add_adapter("task_adapter", config="pfeiffer")
model.train_adapter("task_adapter")
----