Adapter(适配器)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)方法,最早由 Houlsby et al.(2019)在论文《Parameter-Efficient Transfer Learning for NLP》中提出。
其核心思想是:在预训练模型的层与层之间插入小型的可训练模块(即 Adapter),微调时冻结原始模型的所有参数,只训练这些新插入的 Adapter 参数。
一个标准的 Adapter 模块通常包含以下结构:
$$ h_{out} = h_{in} + f(h_{in}) $$
其中 $f(\cdot)$ 是一个瓶颈结构(Bottleneck):
$$ f(h) = W_{up} \cdot \sigma(W_{down} \cdot h) $$
具体来说:
Adapter 通常插入在 Transformer 的两个位置:
每个 Transformer 层通常包含两个 Adapter 模块。
Adapter 模块本身带有残差连接,即:
$$ h_{out} = h_{in} + f(h_{in}) $$
这种设计使得在初始化时($W_{up}$ 初始化为零或接近零),Adapter 的输出近似为恒等映射,模型行为与原始预训练模型完全一致,训练可以稳定地从预训练状态开始。
Adapter 的本质是利用低维瓶颈来限制新增参数的数量。
假设隐藏层维度为 $d = 768$,瓶颈维度为 $m = 64$,则每个 Adapter 的参数量为:
$$ d \times m + m \times d = 2dm = 2 \times 768 \times 64 = 98,304 $$
而原始 Transformer 一个 FFN 层的参数量为:
$$ d \times 4d + 4d \times d = 8d^2 = 8 \times 768^2 = 4,718,592 $$
Adapter 的参数量仅约为原始 FFN 层的 2%。
与 LoRA 类似,Adapter 的瓶颈结构也隐式地利用了任务适应过程中的低秩特性。将信息压缩到低维空间再恢复,迫使模型在低维流形中学习任务相关的调整。
瓶颈结构可以看作一种信息瓶颈:输入特征必须通过一个窄小的通道才能传递到下一层。这种设计:
每个任务可以训练独立的 Adapter 模块,而共享同一个预训练模型主体。这种设计天然支持多任务学习和持续学习:
| 维度 | Adapter | LoRA |
|---|---|---|
| 核心思想 | 插入瓶颈模块 | 低秩分解权重更新 |
| 修改方式 | 新增模块 | 旁路矩阵 |
| 推理延迟 | 有额外计算开销 | 可合并回原权重,无额外开销 |
| 参数效率 | 好(约 2-5% 参数量) | 更好(约 0.1-1% 参数量) |
| 训练稳定性 | 好(残差+零初始化) | 好(零初始化) |
| 多任务切换 | 天然支持 | 天然支持 |
| 公式表达 | $h = h + W_{up}\sigma(W_{down}h)$ | $h = W_0x + BAx$ |
将多个任务的 Adapter 进行融合,通过注意力机制学习不同 Adapter 之间的权重组合,用于多任务迁移学习。
在推理时动态移除部分 Adapter 层,以在精度和推理速度之间取得平衡。研究发现移除较低层的 Adapter 对性能影响较小。
利用 Kronecker 积和低秩矩阵进一步压缩 Adapter 的参数量,在保持性能的同时将参数效率提升一个数量级。
将 Adapter 与原始层并行放置(而非串联),减少推理时的串行延迟。
Adapter 完全可以作为面试题,且与 LoRA 的对比是常见的追问方向。以下是它能够区分的层次:
| 维度 | 内容 |
|---|---|
| 核心公式 | $h_{out} = h_{in} + W_{up} \cdot \sigma(W_{down} \cdot h_{in})$ |
| 关键洞察 | 瓶颈结构实现参数高效的任务适应 |
| 训练参数 | 每个 Adapter 约 $2dm$ 个参数,$m \ll d$ |
| 残差设计 | 零初始化保证训练开始时等价于恒等映射 |
| 面试价值 | 高——能考察候选人对 PEFT 方法共性与差异的理解 |
Adapter 是 PEFT 领域的开创性工作之一,理解它对于理解后续的各种高效微调方法(包括 LoRA)都有重要的铺垫作用。这道题特别适合在涉及大模型微调、多任务学习、持续学习等方向的面试中提出。
评论专区
评论加载中...登录后即可发表评论