✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

Adapter 详解:原理、设计动机与面试题价值分析

创建时间:2026-08-30 更新时间:2026-08-30 阅读次数:1022 次

一、Adapter 是什么?

Adapter(适配器)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)方法,最早由 Houlsby et al.(2019)在论文《Parameter-Efficient Transfer Learning for NLP》中提出。

其核心思想是:在预训练模型的层与层之间插入小型的可训练模块(即 Adapter),微调时冻结原始模型的所有参数,只训练这些新插入的 Adapter 参数。

1. 结构组成

一个标准的 Adapter 模块通常包含以下结构:

$$ h_{out} = h_{in} + f(h_{in}) $$

其中 $f(\cdot)$ 是一个瓶颈结构(Bottleneck):

$$ f(h) = W_{up} \cdot \sigma(W_{down} \cdot h) $$

具体来说:

  • $W_{down} \in \mathbb{R}^{d \times m}$:下投影矩阵,将输入维度 $d$ 压缩到瓶颈维度 $m$
  • $\sigma(\cdot)$:非线性激活函数(如 ReLU、GELU)
  • $W_{up} \in \mathbb{R}^{m \times d}$:上投影矩阵,将瓶颈维度 $m$ 恢复到原始维度 $d$
  • 通常 $m \ll d$,因此每个 Adapter 的参数量非常小

2. 放置位置

Adapter 通常插入在 Transformer 的两个位置:

  • 注意力层之后:在 Self-Attention 的输出和 LayerNorm 之间
  • 前馈网络(FFN)之后:在 FFN 的输出和 LayerNorm 之间

每个 Transformer 层通常包含两个 Adapter 模块。

3. 残差连接

Adapter 模块本身带有残差连接,即:

$$ h_{out} = h_{in} + f(h_{in}) $$

这种设计使得在初始化时($W_{up}$ 初始化为零或接近零),Adapter 的输出近似为恒等映射,模型行为与原始预训练模型完全一致,训练可以稳定地从预训练状态开始。


二、Adapter 的原理

1. 参数高效的核心:瓶颈结构

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%

2. 为什么瓶颈结构有效?

(1)低秩假设的另一种体现

与 LoRA 类似,Adapter 的瓶颈结构也隐式地利用了任务适应过程中的低秩特性。将信息压缩到低维空间再恢复,迫使模型在低维流形中学习任务相关的调整。

(2)信息瓶颈的正则化作用

瓶颈结构可以看作一种信息瓶颈:输入特征必须通过一个窄小的通道才能传递到下一层。这种设计:

  • 迫使 Adapter 只保留与当前任务最相关的信息
  • 天然具有正则化效果,降低过拟合风险
  • 防止微调过程中破坏预训练模型学到的通用表示

(3)模块化与任务隔离

每个任务可以训练独立的 Adapter 模块,而共享同一个预训练模型主体。这种设计天然支持多任务学习持续学习

  • 切换任务时只需更换 Adapter 参数
  • 不同任务之间互不干扰
  • 存储成本极低(每个 Adapter 只有几 MB)

三、Adapter 与 LoRA 的对比

维度 Adapter LoRA
核心思想 插入瓶颈模块 低秩分解权重更新
修改方式 新增模块 旁路矩阵
推理延迟 有额外计算开销 可合并回原权重,无额外开销
参数效率 好(约 2-5% 参数量) 更好(约 0.1-1% 参数量)
训练稳定性 好(残差+零初始化) 好(零初始化)
多任务切换 天然支持 天然支持
公式表达 $h = h + W_{up}\sigma(W_{down}h)$ $h = W_0x + BAx$

四、Adapter 的变体

1. AdapterFusion

将多个任务的 Adapter 进行融合,通过注意力机制学习不同 Adapter 之间的权重组合,用于多任务迁移学习。

2. AdapterDrop

在推理时动态移除部分 Adapter 层,以在精度和推理速度之间取得平衡。研究发现移除较低层的 Adapter 对性能影响较小。

3. Compacter

利用 Kronecker 积和低秩矩阵进一步压缩 Adapter 的参数量,在保持性能的同时将参数效率提升一个数量级。

4. Parallel Adapter

将 Adapter 与原始层并行放置(而非串联),减少推理时的串行延迟。


五、作为面试题的考察点

Adapter 完全可以作为面试题,且与 LoRA 的对比是常见的追问方向。以下是它能够区分的层次:

1. 基础层(能说清楚“是什么”)

  • 能画出 Adapter 的瓶颈结构:下投影 → 激活 → 上投影
  • 知道 Adapter 插入在哪些位置(注意力后、FFN 后)
  • 知道预训练参数被冻结,只训练 Adapter 参数
  • 能说出瓶颈维度 $m$ 远小于隐藏维度 $d$

2. 进阶层(能解释“为什么”)

  • 能解释瓶颈结构为什么有效(低秩假设、信息瓶颈、正则化)
  • 能说明残差连接和零初始化的重要性
  • 能对比 Adapter 与 LoRA 的异同
  • 能讨论 Adapter 的推理延迟问题

3. 高阶层(能批判性思考)

  • 能讨论 Adapter 的局限性:
  • 推理时有额外计算开销(串联结构导致)
  • 对于需要大幅改变模型行为的任务,瓶颈可能限制表达能力
  • 最优瓶颈维度的选择依赖任务复杂度
  • 能分析 Adapter 与 Prompt Tuning、Prefix Tuning 之间的本质区别(修改隐藏状态 vs. 修改输入)
  • 能讨论 Adapter 在持续学习(Continual Learning)中的应用场景
  • 能分析为什么 Adapter 串联在 FFN 之后通常比串联在注意力之后效果更好
  • 能讨论 AdapterDrop 的动机:推理效率与精度的权衡

六、总结

维度 内容
核心公式 $h_{out} = h_{in} + W_{up} \cdot \sigma(W_{down} \cdot h_{in})$
关键洞察 瓶颈结构实现参数高效的任务适应
训练参数 每个 Adapter 约 $2dm$ 个参数,$m \ll d$
残差设计 零初始化保证训练开始时等价于恒等映射
面试价值 高——能考察候选人对 PEFT 方法共性与差异的理解

Adapter 是 PEFT 领域的开创性工作之一,理解它对于理解后续的各种高效微调方法(包括 LoRA)都有重要的铺垫作用。这道题特别适合在涉及大模型微调、多任务学习、持续学习等方向的面试中提出。


📌 面试天下网:一款便捷的大模型学习口袋书,让富士康流水线的打工人也能摸到改命逆天的机会!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录

评论专区

评论加载中...