AdaLoRA(Adaptive Budget Allocation)
一句话:不同层、不同模块对秩的需求并不相同;AdaLoRA 把增量用 SVD 形式参数化,并在训练中按"重要性"动态地把有限的秩预算分配到最需要的地方。(Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning, 2023)
提出年份:2023(arXiv) · 机构/团队:Georgia Tech & Microsoft · 会议/来源:ICLR 2023 / arXiv:2303.10512
前置阅读:LoRA
直觉与动机
标准 LoRA 在所有被注入的模块上使用同一个固定的秩
一个朴素的想法是:先用大
方法与公式
AdaLoRA 把每个模块的增量参数化为类 SVD 的三元组:
其中
为了让
重要性打分。 关键在于决定剪哪些三元组。AdaLoRA 不直接用奇异值
预算调度。 训练分三段,遵循"先宽后窄":
- 预热阶段保持初始的较高总预算
,让所有三元组都先学一会儿,避免过早误杀; - 中间阶段按一个三次衰减(cubic schedule)逐步把总预算从
降到目标值 ,每一步把全局重要性最低的若干三元组的 置零(并停止其更新); - 末段固定在目标预算上继续训练到收敛。
最终目标函数是任务损失加正交正则:

图源:Zhang et al., AdaLoRA: Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning, arXiv:2303.10512(用于学习注解,版权归原作者)
与 baseline 对比
| 维度 | LoRA | AdaLoRA |
|---|---|---|
| 增量参数化 | ||
| 秩分配 | 全局固定 | 按模块/层自适应,动态裁剪 |
| 重要性度量 | 无 | 敏感度(参数×梯度)+ 滑动平均 |
| 额外正则 | 无 | 正交正则 |
| 训练复杂度 | 低 | 较高(打分、调度、正则) |
| 同等参数预算下效果 | 基线 | 论文报告更优,尤其低预算时差距明显 |
| 推理 | 可合并,零开销 | 同样可合并为 |
实现要点
# 训练步内的伪代码(每个 AdaLoRA 模块)
h = x @ W0.T + (x @ Q.T) @ Lambda @ P.T # 前向:x P Λ Q
loss = task_loss(h, target) + gamma * ortho_reg(P, Q)
loss.backward()
# 敏感度 = |参数 * 梯度|,再做 EMA 平滑
for w in (P_col_i, Lambda_ii, Q_row_i):
I_bar = beta1 * I_bar + (1 - beta1) * (w.detach() * w.grad).abs()
U_bar = beta2 * U_bar + (1 - beta2) * (I_bar - I_inst).abs()
score_i = aggregate(I_bar * U_bar over the i-th triplet)
# 按 cubic schedule 计算当前总预算 b(t),剪掉得分最低的三元组
budget = cubic_schedule(t, b0, bT, warmup, final)
mask = topk_by_score(scores, k=budget) # 选出保留的三元组
Lambda.data[~mask] = 0.0 # 奇异值置零 = 剪枝实现层面注意:正交正则只对
调参与实践经验
- 关键超参:初始预算
、目标预算 、预热步数 、最终固定步数 、正交正则系数 (常用 )。预算调度的预热/收尾步数若设得太短,会因敏感度估计还没稳定就开始剪枝而误杀。 - 何时值得用:在总参数预算被严格卡死的场景(极端显存受限、或要把 adapter 控制到很小)下,AdaLoRA 比固定秩 LoRA 更划算。如果预算不紧,工程上往往直接把 LoRA 的
调大就能达到接近的效果,而省去了打分、调度、正则的全部复杂度——这也是 AdaLoRA 在实际工程中使用度不如 LoRA/QLoRA 的主要原因。 - 与其他变体的关系:AdaLoRA 解决的是"秩怎么分配",rsLoRA 解决的是"缩放因子怎么随秩稳定",LoRA+ 解决的是"
学习率怎么配",三者关注点正交,理论上可叠加,但叠加后调参空间变大,需谨慎。 - 训练成本:因为多了正交正则的
、 矩阵乘和逐三元组打分,单步开销比 LoRA 高,但相对全量微调仍然很小。
参考文献
- Zhang et al., 2023. Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning (AdaLoRA). arXiv:2303.10512
- Hu et al., 2021. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685