Loading... # Adapter Tuning 学习笔记(重整理版) > 目标: > **搞清楚 Adapter Tuning 是什么、为什么需要、怎么用在多任务中、以及它和传统迁移学习的本质区别** ## 1. 背景:迁移学习到底在“迁移”什么? 在 NLP 中,迁移学习通常指: > **先在大规模数据上训练一个模型(预训练), > 再把这个模型用于下游任务(迁移)。** 经典做法有两种: ### 1.1 Feature-based Transfer(基于特征的迁移) - 冻结预训练模型 - 把它当 **特征提取器** - 在特征上训练一个新模型 数学形式: $\chi_v(\phi_w(x))$ 缺点: - 下游任务 **无法改变模型内部表示** - 表达能力受限 ### 1.2 Fine-tuning(全参数微调) - 加载预训练模型 - **更新模型的全部参数** 数学形式: $\phi_{w'}(x)$ 缺点: - 每个任务都要一整套模型 - 参数开销大 - 连续任务会发生灾难性遗忘 ## 2. Adapter Tuning 是什么? **Adapter Tuning 是迁移学习的一种,但不是传统意义上的那两种。** 核心思想: > **冻结预训练模型(Backbone), > 在模型内部插入少量可训练的 Adapter 模块, > 只训练 Adapter 参数。** 数学表示: $\psi_{w,v}(x)$ 其中: - $w$:Backbone 参数(冻结) - $v$:Adapter 参数(任务特定) ## 3. Backbone 是什么?(关键概念) **Backbone = 预训练模型的主体(骨干网络)** 在 NLP 中通常是: - BERT / RoBERTa / LLaMA / Qwen 等 Transformer 模型 Backbone 的职责: - 学习 **通用语言/视觉/推理能力** - 被多个任务 **共享** 在 Adapter Tuning 中: - Backbone 参数 **始终不更新** - 是所有任务的共同基础 ## 4. Adapter 是怎么“新加参数”的? ### 4.1 Adapter 的结构(瓶颈结构) 设: - Backbone 隐藏维度:$d$ - Adapter 瓶颈维度:$m$,且 $m \ll d$ Adapter 计算形式: $\text{Adapter}(h) = h + W_{\text{up}} , \sigma(W_{\text{down}} , h)$ 特点: - 参数量小 - 内部有 skip-connection - 初始化为 **近似恒等映射** ### 4.2 插入位置(以 Transformer 为例) 在 **每一层 Transformer 中**: * **Attention 子层后插一个 Adapter** * **FFN 子层后再插一个 Adapter** 👉 插入的是**固定位置的“插槽”**,不是随意堆叠。 ### 4.3 参数量示例(BERT-base) - Backbone:110M 参数 - Adapter(m=64):≈ 2.4M / 任务 - 占比 ≈ 2% ## 5. 多任务使用 Adapter 时,到底“怎么插”?(你的核心疑问) ### ❌ 错误理解 > 新任务来了,在原 Adapter 上 **再加一个 Adapter** ``` Backbone └─ Adapter_A └─ Adapter_B └─ Adapter_C ``` ❌ 这种方式 **不是标准 Adapter Tuning** ❌ 会导致结构混乱、难以控制 ### ✅ 正确做法(Houlsby 原始设定) > **共享 Backbone,每个任务一套独立的 Adapter** ``` ┌─ Adapter_A Backbone ──┼─ Adapter_B └─ Adapter_C ``` - Backbone:**只有一份** - 每个任务: - 一套独立 Adapter - 互不影响 数学上: - Task A:$\psi_{w,v_A}(x)$ - Task B:$\psi_{w,v_B}(x)$ ### 5.1 训练流程(顺序任务) **Task A** 1. 冻结 Backbone 2. 初始化 Adapter_A 3. 训练 Adapter_A 4. 保存 Adapter_A **Task B** 1. 冻结 Backbone(仍然) 2. 初始化 Adapter_B(全新) 3. 训练 Adapter_B 4. 保存 Adapter_B 👉 不加载、不修改旧 Adapter ### 5.2 为什么不会互相影响? 因为: - 共享部分(Backbone)被冻结 - 任务特定部分(Adapter)完全隔离 > **旧任务的参数永远不会被新任务更新** 这也是 Adapter **天然避免灾难性遗忘**的原因。 ## 6. Adapter Tuning vs 传统迁移学习(本质区别) | 维度 | Feature-based | Fine-tuning | Adapter Tuning | | --------------- | ------------- | ----------- | -------------- | | 迁移位置 | 模型外部 | 整个模型 | 模型内部 | | 是否改 Backbone | ❌ | ✅ | ❌ | | 新增参数 | 中 | 极大 | 很小 | | 连续任务 | ❌ | ❌ | ✅ | | 参数共享 | 低 | 低 | 高 | 一句话总结: > **Adapter Tuning = 在模型内部进行“轻量、可插拔的迁移”。** ## 7. Adapter Tuning 的优缺点 ### 7.1 优点 - 参数高效(0.5%–8%) - 支持多任务 / 连续任务 - 无灾难性遗忘 - 工业可扩展性强 ### 7.2 缺点 - 表达能力受限(瓶颈结构) - 推理有额外计算开销 - 多 Adapter 管理复杂 - 不适合单任务 + 大数据 ## 8. 一个重要认知总结 > **Adapter Tuning 并不是“在迁移学习外面再包一层”, > 而是把“迁移能力”嵌入到模型内部结构中。** - 迁移学习关心:**怎么用预训练模型** - Adapter Tuning 关心:**模型内部哪些部分可以被任务“轻量改写”** ## 9. 一句话终极总结 > Backbone 提供通用能力, > Adapter 提供任务差异, > 多任务不是堆 Adapter,而是“切换 Adapter”。 Last modification:December 22, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏