第四章:大模型(LLM)

第十部分:微调方法与实战

第五节:Adapter Tuning


第五节:Adapter Tuning

1️⃣ 背景与动机

在大模型微调中:

  • 全参数微调:需更新所有参数,开销极大。

  • Prompt / Prefix / P-tuning:参数高效,但主要依赖“输入提示”,缺乏对模型内部表征的直接调整。

Adapter Tuning 被提出:

  • 模型层内插入小型可训练模块(Adapter)

  • 保持预训练模型参数冻结,仅训练 Adapter。

  • 实现 参数高效 + 内部特征适配 的平衡。


2️⃣ 核心思想

Adapter Tuning 的核心是:

  • 在 Transformer 的 每一层(或部分层) 插入 Adapter 模块。

  • Adapter 模块是一个 小型瓶颈网络(bottleneck MLP)

    1. 先降维(Projection Down) → 压缩信息到低维空间。

    2. 再升维(Projection Up) → 恢复到原始维度。

  • 只训练 Adapter 内部参数,主干模型参数保持冻结。


3️⃣ 方法结构

假设 Transformer 隐状态为 h \in \mathbb{R}^d

  1. 降维映射

z = W_{down} h \quad , \quad z \in \mathbb{R}^r \quad (r \ll d)

  1. 非线性激活

z' = \sigma(z)

  1. 升维映射

h' = W_{up} z' \quad , \quad h' \in \mathbb{R}^d

  1. 残差连接

\tilde{h} = h + h'

Adapter 模块像是“旁路”修正,增强了任务特定的表示能力。


4️⃣ 特点与优势

参数高效:只需训练 Adapter(通常占比 1-3%)。
灵活性强:可在所有层插入,或仅在高层插入。
可组合性:不同任务对应不同 Adapter,可在同一模型共享主干、切换 Adapter 实现多任务学习。
迁移友好:适合跨任务迁移,任务切换只需替换 Adapter。


5️⃣ 与其他方法对比

方法 插入位置 参数规模 优势 劣势
Prompt Tuning 输入层 极小 简单高效 仅限输入提示,表达力有限
Prefix-Tuning Attention KV 中等 适合生成任务 缺乏深层特征适配
Adapter Tuning Transformer 各层 中等 直接调控中间特征,适配性强 相对参数量略大
LoRA 线性层(低秩分解) 中等 更轻量,推理高效 主要调整线性层,表达有限

6️⃣ PyTorch 伪代码

import torch
import torch.nn as nn

class Adapter(nn.Module):
    def __init__(self, hidden_dim, bottleneck_dim=64):
        super().__init__()
        self.down = nn.Linear(hidden_dim, bottleneck_dim)
        self.up = nn.Linear(bottleneck_dim, hidden_dim)
        self.act = nn.ReLU()

    def forward(self, x):
        return x + self.up(self.act(self.down(x)))

在实际使用时,可以将 Adapter 插入到 Transformer 的 FeedForward 层之后Attention 输出之后


7️⃣ 总结

  • Adapter Tuning 是一种通过在 Transformer 内插入轻量模块实现参数高效微调的方法。

  • 它兼具 高效性、适配性、可迁移性,在多任务学习与实际部署中广泛应用。

  • 发展方向:结合 LoRA、Prefix-Tuning 等方法,形成混合式高效微调策略(如 Adapter+LoRA)。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐