【第四章:大模型(LLM)】10.微调方法与实战-(5)Adapter Tuning
AdapterTuning是一种高效的大模型微调方法,通过在Transformer层间插入小型Adapter模块(降维-激活-升维结构)实现参数高效调优。相比全参数微调,它仅需训练1-3%参数;相比Prompt方法,能直接调整模型内部表征。核心优势包括参数效率高、支持多任务切换、迁移性强,常与LoRA等方法结合使用。典型实现是在FeedForward层后添加包含残差连接的瓶颈MLP模块,保持主干参
第四章:大模型(LLM)
第十部分:微调方法与实战
第五节:Adapter Tuning
第五节:Adapter Tuning
1️⃣ 背景与动机
在大模型微调中:
-
全参数微调:需更新所有参数,开销极大。
-
Prompt / Prefix / P-tuning:参数高效,但主要依赖“输入提示”,缺乏对模型内部表征的直接调整。
Adapter Tuning 被提出:
-
在 模型层内插入小型可训练模块(Adapter)。
-
保持预训练模型参数冻结,仅训练 Adapter。
-
实现 参数高效 + 内部特征适配 的平衡。
2️⃣ 核心思想
Adapter Tuning 的核心是:
-
在 Transformer 的 每一层(或部分层) 插入 Adapter 模块。
-
Adapter 模块是一个 小型瓶颈网络(bottleneck MLP):
-
先降维(Projection Down) → 压缩信息到低维空间。
-
再升维(Projection Up) → 恢复到原始维度。
-
-
只训练 Adapter 内部参数,主干模型参数保持冻结。
3️⃣ 方法结构
假设 Transformer 隐状态为 :
-
降维映射:
-
非线性激活:
-
升维映射:
-
残差连接:
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)。
更多推荐
所有评论(0)