在大型神经网络时代,参数高效微调(PEFT)技术已成为降低计算成本的关键方案。其中低秩适应(LoRA)通过分解权重更新矩阵∆W=BA(B∈R^{m×r}, A∈R^{r×n})将微调参数量从O(mn)降至O(r(m+n)),使普通研究者也能对数十亿参数模型进行任务适配。然而当需要合并多个LoRA适配模型时,传统方法面临根本性矛盾:
精度与效率的两难困境
现有合并技术主要分为两类:
我们在Llama 3 8B上的实验表明(表2),这两种方法在合并6个NLI任务时要么牺牲性能(全空间TA方法90.38%),要么消耗3000秒计算时间(KnOTS+TSV)。这种矛盾在大模型场景愈发显著——当基础模型参数量达千亿级时,现有方法要么精度不足,要么计算代价难以承受。
Core Space的创新在于发现:多个LoRA模块的更新方向存在潜在相关性。通过建立共享的参考基(reference bases),可将各任务的低秩更新投影到统一子空间进行合并。具体实现分为三步:
基空间构造
对T个任务的低秩矩阵{A(t)}, {B(t)}分别执行垂直/水平拼接后SVD分解:
python复制# 伪代码示例
B_stack = torch.cat([B_1, B_2, ..., B_T], dim=0) # (Tm)×r
U_ref_B, _, _ = torch.svd(B_stack) # 得到m×Tr参考基
A_stack = torch.cat([A_1, A_2, ..., A_T], dim=1) # r×(Tn)
_, _, V_ref_A = torch.svd(A_stack) # 得到n×Tr参考基
核心矩阵计算
每个任务的更新被重新参数化为Tr×Tr的核心矩阵:
math复制M^{(t)} = (U_{ref_B}^\top B^{(t)})(A^{(t)}V_{ref_A}) ∈ R^{Tr×Tr}
该操作将原始m×n空间的更新压缩到Tr×Tr子空间,且理论证明(引理4.2)其信息无损。
合并与重建
在核心空间应用任意合并算法M(·)后,通过参考基重建最终更新:
math复制ΔW = U_{ref_B} · M({M^{(t)}}) · V_{ref_A}^\top
相比KnOTS需要对m×nT矩阵做SVD(O(n³T²)),Core Space仅需:
当r=16, T=8时,Core Space的FLOPs仅为KnOTS的1/375(图3)。这种优势随基础模型规模扩大而愈发显著——在n=4096的LLM场景,Core Space可将合并时间从小时级降至分钟级。
内存高效计算
避免显式构造全尺寸矩阵。以ViT-L/14(m=n=1024)为例,直接拼接8个LoRA模块需要16GB显存。采用分块SVD计算:
python复制# 分块计算示例
block_size = 4
for i in range(0, T, block_size):
block = [B[t] for t in range(i, min(i+block_size, T))]
partial_U = compute_block_svd(block)
U_ref = update_global_basis(U_ref, partial_U)
异构秩处理
当不同任务使用不同秩r_t时,建议先统一缩放至最大秩:
python复制max_r = max(r_1, ..., r_T)
for t in range(T):
if A[t].shape[0] < max_r:
A[t] = F.pad(A[t], (0, 0, 0, max_r - r_t))
B[t] = F.pad(B[t], (0, max_r - r_t))
实验显示(附录E.2),这种处理对最终性能影响小于0.5%。
Core Space作为通用框架,可与主流合并算法无缝结合:
| 合并方法 | Core Space适配方案 | 计算增益 |
|---|---|---|
| TIES | 在核心空间进行符号冲突解决 | 280x |
| DARE | 先对核心矩阵做随机丢弃再合并 | 397x |
| TSV | 对{M(t)}做SVD后任务向量正交化 | 400x |
| Iso-C | 在核心空间执行频谱平坦化 | 607x |
特别对于计算密集型的Iso-C方法,Core Space将其在Llama 3上的运行时间从540秒降至8秒,同时准确率提升33.25%(表2)。
在视觉-语言多任务场景下的实验结果:
视觉任务(ViT-B/32)
语言任务(Llama 3 8B)
通过子空间对齐率(SAR)度量发现:
多专家模型融合
将客服、编程、创作等不同领域的LoRA适配器合并为统一助手:
python复制# 实际案例:合并3个LLaMA适配器
core_matrices = [compute_core_matrix(A_i, B_i) for i in range(3)]
merged_core = weighted_average(core_matrices, [0.4, 0.3, 0.3])
merged_weights = reconstruct(merged_core)
持续学习系统
通过定期合并新旧任务核心矩阵,实现知识累积:
math复制M_{new} = γM_{current} + (1-γ)\sum_{t∈T_{new}} M_t
秩选择策略
合并权重调整
对准确率差异大的任务,采用逆温度加权:
python复制accs = [acc_t for t in tasks]
weights = torch.softmax(torch.tensor(accs)/τ, dim=0)
内存受限场景
当Tr² > 0.5×mn时,可启用低精度模式:
python复制torch.set_default_dtype(torch.bfloat16)
当前框架在极端大规模场景(如T>50)仍面临挑战。我们发现当T·r接近min(m,n)时,参考基的正交性会下降约15%。可能的改进方向包括:
在实际部署中,建议监控合并前后在验证集上的梯度相似度,当cos(∇W_orig, ∇W_merged)<0.7时,应考虑调整合并策略或增加正则化。