(ICLR-2023)ADALORA:自适应预算分配,实现参数高效微调
ADALORA:自适应预算分配,实现参数高效微调
paper是佐治亚理工学院发表在ICLR2023的工作
paper title:ADALORA: ADAPTIVE BUDGET ALLOCATION FOR PARAMETER-EFFICIENT FINE-TUNING
code:地址
ABSTRACT
在下游任务上对大型预训练语言模型进行微调已成为 NLP 中的重要范例。然而,常见的做法是对预训练模型中的所有参数进行微调,当存在大量下游任务时,这种方法变得难以实施。因此,提出了许多微调方法,以参数高效的方式学习预训练权重的增量更新,例如低秩增量。这些方法通常将增量更新的预算均匀分布在所有预训练权重矩阵中,而忽略了不同权重参数的不同重要性。因此,微调性能不是最优的。为了弥补这一差距,我们提出了 AdaLoRA,它根据权重矩阵的重要性得分自适应地分配参数预算。具体而言,AdaLoRA 以奇异值分解的形式参数化增量更新。这种新颖的方法使我们能够有效地修剪不重要更新的奇异值,这本质上是为了减少它们的参数预算,但避免密集的精确 SVD 计算。我们对自然语言处理、问答和自然语言生成的几个预训练模型进行了广泛的实验,以验证 AdaLoRA 的有效性。结果表明,AdaLoRA 比基线有显着的改进,尤其是在低预算设置下。
1 INTRODUCTION
预训练语言模型 (PLM) 在各种自然语言处理任务中表现出色 (Devlin et al, 2019; Liu et al, 2019; He et al, 2021b; Radford et al, 2019; Brown et al, 2020)。将预训练模型适配到下游任务的最常见方法是微调所有参数 (完全微调,Qiu et al (2020); Raffel et al (2020))。 然而,预训练模型通常会占用大量内存。例如,BERT 模型 (Devlin et al, 2019) 包含多达 3 亿个参数;T5 (Raffel et al, 2020) 包含多达 110 亿个参数,GPT-3 (Brown et al, 2020) 包含多达 1750 亿个参数。 在这些预训练模型上构建 NLP 系统时,我们通常会处理同时到达的多个任务(Radford 等人,2019 年)。鉴于下游任务数量众多,完全微调需要每个任务维护大型模型的单独副本。由此产生的内存消耗非常昂贵。
为了解决这个问题,研究人员提出了两条主要的研究路线,以减少微调参数,同时保持甚至提高 PLM 的性能。具体来说,一条研究路线侧重于向 PLM 添加小型神经模块,并仅针对每个任务对这些模块进行微调——基础模型保持冻结并在任务之间共享。通过这种方式,只引入和更新少量特定于任务的参数,大大增强了大型模型的实用性。例如,适配器调整(Houlsby 等人,2019 年;Rebuffi 等人,2017 年;Pfeiffer 等人,2020 年;He 等人,2022 年)在基础模型的层之间插入称为适配器的小神经模块。 前缀调整(Li & Liang,2021 年)和提示调整(Lester 等人,2021 年)将额外的可训练前缀标记附加到基础模型的输入层或隐藏层。这些方法已证明能够实现与完全微调相当的性能,同时仅更新不到 1% 的原始模型参数,从而显著释放内存消耗。
另一种研究方向提出以参数高效的方式对预训练权重的增量更新进行建模,而无需修改模型架构 (Zaken et al., 2021; Guo et al., 2020; Hu et al., 2022)。例如,对于一个预训练权重矩阵 W ( 0 ) W^{(0)} W(0),diff pruning (Guo et al., 2020) 将其增量更新 Δ \Delta Δ 建模为一个稀疏矩阵。diff pruning 初始化 Δ \Delta Δ 的维度与 W ( 0 ) W^{(0)} W(0) 相同,然后基于元素大小对 Δ \Delta Δ 逐元素进行裁剪。因此,diff pruning 能够通过自适应地保留重要的更新并裁剪不重要的部分,大幅提高参数效率。尽管如此,diff pruning 存在一些局限性。首先,它依赖底层实现来加速非结构化稀疏矩阵的计算,而这并未被现有深度学习框架很好地支持。因此,在训练期间必须将 Δ \Delta Δ 存储为稠密矩阵。其次,它需要使用每个 Δ \Delta Δ 元素的梯度进行更新,然后再进行裁剪。这导致其计算成本与完全微调相似 (Guo et al., 2020)。
为了克服这些缺点,Hu et al. (2022) 提出了一个名为 LoRA 的方法,该方法通过两个更小矩阵的乘积将 Δ \Delta Δ 参数化为一个低秩矩阵:
W = W ( 0 ) + Δ = W ( 0 ) + B A W = W^{(0)} + \Delta = W^{(0)} + B A W=W(0)+Δ=W(0)+BA
其中 W ( 0 ) , Δ ∈ R d 1 × d 2 , A ∈ R r × d 2 , B ∈ R d 1 × r W^{(0)}, \Delta \in \mathbb{R}^{d_1 \times d_2}, A \in \mathbb{R}^{r \times d_2}, B \in \mathbb{R}^{d_1 \times r} W(0),Δ∈Rd1×d2,A∈Rr×d2,B∈Rd1×r 且 r ≪ { d 1 , d 2 } r \ll \left\{d_1, d_2\right\} r≪{d1,d2}。在微调过程中,只有 A A A 和 B B B 被更新。秩 r r r 被设置为远小于 W W W 的维度(例如,当 d 1 = d 2 = 1024 d_1=d_2=1024 d1=d2=1024 时, r = 8 r=8 r=8)。通过增加不到 0.5 % 0.5\% 0.5% 的可训练参数,与完全微调相比,训练开销最多可减少 70 % 70\% 70%。然而,LoRA 的性能可与完全微调相媲美,甚至更好 (Hu et al., 2022)。同时,与 diff pruning 中的非结构化稀疏矩阵相比,两小矩阵的乘积更易于实现和部署。
LoRA 仍然存在一些局限性,因为它为每个增量矩阵 Δ \Delta Δ 的秩 r r r 预先设定了相同的值。这忽略了在微调预训练模型时,不同模块和层的权重矩阵的重要性差异显著这一事实。为了说明这一点,我们在图 1 中给出了一个具体的例子。我们比较了在具有相同数量可训练参数的情况下,使用 LoRA 微调特定模块或层的性能。图 1a 表明,微调前馈网络(FFN)的性能优于自注意力模块。此外,图 1b 显示,顶层的权重矩阵比底层的权重矩阵更为重要。
图 1:在总可训练参数为 0.28M 的条件下,我们仅对 DeBERTaV3-base 的特定权重矩阵(左图)或特定层(右图)应用 LoRA,并比较其在 MNLI-m 数据集上的微调性能。- 图 1a:我们仅微调每个 Transformer 层中特定类型的权重矩阵,包括自注意力中的查询/键/值投影矩阵 W q , W k , W v W_q, W_k, W_v Wq,Wk,Wv、输出投影矩阵 $ W_o$,以及两层 FFN 中的两个权重矩阵 W f 1 , W f 2 W_{f_1}, W_{f_2} Wf1,Wf2。- 图 1b:我们对选定层的所有权重矩阵应用 LoRA。
为关键的权重矩阵分配更多的可训练参数,可以显著提升模型性能。相比之下,为那些不太重要的权重矩阵增加参数则带来的收益非常有限,甚至可能损害模型性能。在给定参数预算的情况下(即总可训练参数的数量),我们总是倾向于将更多的参数分配给重要的模块。而像 LoRA 和其他方法(例如适配器和前缀微调)那样,将预算平均分配给所有权重矩阵/层,通常会导致次优性能。因此,一个自然的问题是:
如何根据模块的重要性自适应地分配参数预算,以提高参数高效微调的性能?
为了回答这个问题,我们提出了一种新方法——AdaLoRA(Adaptive Low-Rank Adaptation),该方法在类似LoRA的微调过程中动态分配参数预算到权重矩阵上。具体来说,AdaLoRA通过调整增量矩阵的秩来控制预算。关键的增量矩阵被分配较高的秩,从而能够捕获更精细和任务特定的信息。不太重要的矩阵被剪枝以降低秩,从而防止过拟合并节省计算预算。现有矩阵近似文献中有一些方法用于控制矩阵的秩(Cai et al., 2010; Koltchinskii et al., 2011; Toh & Yun, 2010)。大多数方法直接计算矩阵的奇异值分解(SVD),然后截断最小的奇异值。这种操作可以显式地操作秩,更重要的是,最小化结果矩阵与原始矩阵之间的差异。然而,对于微调大型模型,迭代地对大量高维权重矩阵应用SVD变得极其昂贵。因此,我们选择用参数化的方式来近似SVD,而不是精确地计算SVD。我们将 Δ \Delta Δ 参数化为 Δ = P Λ Q \Delta = P \Lambda Q Δ=PΛQ,其中对角矩阵 Λ \Lambda Λ 包含奇异值,而正交矩阵 P P P 和 Q Q Q 分别表示 Δ \Delta Δ 的左/右奇异向量。为了正则化 P P P 和 Q Q Q 的正交性,我们在训练损失中加入了额外的惩罚项。这种参数化避免了SVD的高强度计算。此外,这种方法的另一个优点是我们只需要去除不重要的奇异值,而奇异向量被保留下来。这保留了未来恢复的可能性,并稳定了训练过程。关于与LoRA的详细对比,请参见第3节。
基于我们的SVD参数化,AdaLoRA通过重要性评分动态调整 Δ = P Λ Q \Delta = P \Lambda Q Δ=PΛQ 的秩。具体来说,我们将增量矩阵 P Λ Q P \Lambda Q PΛQ 划分为三元组,每个三元组 G i \mathcal{G}_i Gi 包含第 i i i 个奇异值及其对应的奇异向量。为了量化三元组的重要性,我们提出了一种新颖的重要性度量,综合考虑了每个 G i \mathcal{G}_i Gi 中每个条目对模型性能的贡献(Sanh et al., 2020; Liang et al., 2021; Zhang et al., 2022)。重要性分数低的三元组被赋予较低的优先级,因此其奇异值被置零。重要性高的三元组则被保留用于微调。此外,我们还提出了一种全局预算调度器来促进训练。具体而言,我们从初始参数预算开始,该预算略高于最终预算,然后逐步减少直到匹配目标。这样的调度器可以提高训练的稳定性和模型性能。有关我们的重要性度量和预算调度器的详细描述,请参见第3节。
我们对各种任务和模型进行了广泛的实验,以证明 AdaLoRA 的有效性。具体来说,我们使用 DeBERTaV3-base (He et al, 2021a) 在自然语言理解 (GLUE, Wang et al (2019)) 和问答 (SQuADv1, Rajpurkar et al (2016) 和 SQuADv2, Rajpurkar et al (2018)) 数据集上评估性能。我们还将我们的方法应用于 BART-large (Lewis et al, 2019),并评估在自然语言生成 (XSum, Narayan et al (2018) 和 CNN/DailyMail, Hermann et al (2015)) 任务上的性能。我们表明 AdaLoRA 始终优于基线,尤其是在低预算设置下。例如,与最先进的方法相比,AdaLoRA 在完全微调的可训练参数不到 0.1% 的情况下,在 SQuAD2.0 数据集上实现了 1.2% 的 F1 改进。
2 BACKGROUND
基于Transformer的模型。一个典型的Transformer模型由 L L L 个堆叠的块组成,每个块包含两个子模块:多头注意力(MHA)和全连接前馈网络(FFN)。对于输入序列 X ∈ R n × d X \in \mathbb{R}^{n \times d} X∈Rn×d,MHA在并行的 h h h 个头中执行注意力函数:
MHA ( X ) = Concat ( head 1 , … , head h ) W o , head i = Softmax ( X W q i ( X W k i ) ⊤ / d h ) X W v i \operatorname{MHA}(X)=\text { Concat }\left(\operatorname{head}_1, \ldots, \operatorname{head}_h\right) W_o, \quad \operatorname{head}_i=\operatorname{Softmax}\left(X W_{q_i}\left(X W_{k_i}\right)^{\top} / \sqrt{d_h}\right) X W_{v_i} MHA(X)= Concat (head1,…,headh)Wo,headi=Softmax(XWqi(XWki)⊤/dh)XWvi
其中, W o ∈ R d × d W_o \in \mathbb{R}^{d \times d} Wo∈Rd×d 是输出投影, W q i , W k i , W v i ∈ R d × d h W_{q_i}, W_{k_i}, W_{v_i} \in \mathbb{R}^{d \times d_h} Wqi,Wki,Wvi∈Rd×dh 分别是第 i i i 个头的查询、键和值的投影矩阵。通常设置 d h = d / h d_h = d / h dh=d/h。另一个重要模块是FFN,它由两次线性变换和中间的ReLU激活组成: FFN ( X ) = ReLU ( X W f 1 + b 1 ) W f 2 + b 2 \operatorname{FFN}(X)=\operatorname{ReLU}\left(X W_{f_1}+\boldsymbol{b}_1\right) W_{f_2}+\boldsymbol{b}_2 FFN(X)=ReLU(XWf1+b1)Wf2+b2,其中 W f 1 ∈ R d × d m W_{f_1} \in \mathbb{R}^{d \times d_m} Wf1∈Rd×dm 和 W f 2 ∈ R d m × d W_{f_2} \in \mathbb{R}^{d_m \times d} Wf2∈Rdm×d。最后,使用残差连接并随后进行层归一化(Ba et al., 2016)。
低秩适配(LoRA)。LoRA(Hu et al., 2022)通过两个小矩阵的乘积对预训练权重的增量更新进行建模。对于 h = W ( 0 ) x \boldsymbol{h}=W^{(0)} \boldsymbol{x} h=W(0)x,修改后的前向传播为:
h = W ( 0 ) x + Δ x = W ( 0 ) x + B A x \boldsymbol{h}=W^{(0)} \boldsymbol{x}+\Delta \boldsymbol{x}=W^{(0)} \boldsymbol{x}+B A \boldsymbol{x} h=W(0)x+Δx=W(0)x+BAx
其中, W ( 0 ) , Δ ∈ R d 1 × d 2 , A ∈ R r × d 2 W^{(0)}, \Delta \in \mathbb{R}^{d_1 \times d_2}, A \in \mathbb{R}^{r \times d_2} W(0),Δ∈Rd1×d2,A∈Rr×d2 和 B ∈ R d 1 × r B \in \mathbb{R}^{d_1 \times r} B∈Rd1×r,满足 r ≪ { d 1 , d 2 } r \ll\left\{d_1, d_2\right\} r≪{d1,d2}。通常将 A A A 随机初始化为高斯分布,而 B B B 初始化为零,以保证在训练开始时 Δ = 0 \Delta=0 Δ=0。进一步,我们用 A i ∗ A_{i *} Ai∗ 表示 A A A 的第 i i i 行, B ∗ i B_{* i} B∗i 表示 B B B 的第 i i i 列,并定义 G i = { A i ∗ , B ∗ i } \mathcal{G}_i=\left\{A_{i *}, B_{* i}\right\} Gi={Ai∗,B∗i} 为第 i i i 个双元组。Hu等人(2022)仅将LoRA应用于MHA中的查询和值投影(即 W q W_q Wq 和 W v W_v Wv)。He等人(2022)将其扩展到FFN的权重矩阵(即 W f 1 W_{f_1} Wf1 和 W f 2 W_{f_2} Wf2),从而提升了性能。同时,他们提出了一种统一视角来解释各种高效微调方法,包括适配器调优、前缀调优和LoRA。
3 ADALORA METHOD
我们的方法包含两个重要部分:(i)基于 SVD 的自适应,以奇异值分解的形式制定增量矩阵;(ii)重要性感知秩分配,根据我们新设计的重要性度量修剪冗余奇异值。
3.1 SVD-BASED ADAPTATION
正如第1节所述,我们提出以奇异值分解的形式对预训练权重矩阵的增量更新进行参数化:
W = W ( 0 ) + Δ = W ( 0 ) + P Λ Q W=W^{(0)}+\Delta=W^{(0)}+P \Lambda Q W=W(0)+Δ=W(0)+PΛQ
其中, P ∈ R d 1 × r P \in \mathbb{R}^{d_1 \times r} P∈Rd1×r 和 Q ∈ R r × d 2 Q \in \mathbb{R}^{r \times d_2} Q∈Rr×d2 分别表示 Δ \Delta Δ 的左/右奇异向量,对角矩阵 Λ ∈ R r × r \Lambda \in \mathbb{R}^{r \times r} Λ∈Rr×r 包含奇异值 { λ i } 1 ≤ i ≤ r \left\{\lambda_i\right\}_{1 \leq i \leq r} {λi}1≤i≤r,且 r ≪ min ( d 1 , d 2 ) r \ll \min \left(d_1, d_2\right) r≪min(d1,d2)。进一步,我们将 G i = { P ∗ i , λ i , Q i ∗ } \mathcal{G}_i=\left\{P_{* i}, \lambda_i, Q_{i *}\right\} Gi={P∗i,λi,Qi∗} 定义为包含第 i i i 个奇异值及向量的三元组。在实际操作中,由于 Λ \Lambda Λ 是对角矩阵,我们只需将其保存为一个向量 ∈ R r \in \mathbb{R}^r ∈Rr。 Λ \Lambda Λ 初始值为零,而 P P P 和 Q Q Q 采用随机高斯初始化,以确保训练开始时 Δ = 0 \Delta=0 Δ=0。为了强制 P P P 和 Q Q Q 的正交性,即 P ⊤ P = Q Q ⊤ = I P^{\top} P=Q Q^{\top}=I P⊤P=QQ⊤=I,我们使用以下正则项:
R ( P , Q ) = ∥ P ⊤ P − I ∥ F 2 + ∥ Q Q ⊤ − I ∥ F 2 R(P, Q)=\left\|P^{\top} P-I\right\|_{\mathrm{F}}^2+\left\|Q Q^{\top}-I\right\|_{\mathrm{F}}^2 R(P,Q)= P⊤P−I F2+ QQ⊤−I F2
在我们的方法中, Λ \Lambda Λ 在每次梯度下降步骤后会被迭代剪枝,以调整秩。如第1节所述,可以直接对每个 Δ \Delta Δ 计算SVD以操作奇异值。然而,其计算复杂度为 O ( min ( d 1 , d 2 ) d 1 d 2 ) O\left(\min \left(d_1, d_2\right) d_1 d_2\right) O(min(d1,d2)d1d2),对大量高维增量矩阵反复应用SVD的代价极其高昂。相比之下,我们的参数化方法避免了高强度的SVD计算,大大降低了计算开销。
需要注意的是,也可以对LoRA应用结构化剪枝来控制秩(即在公式(1)中按双元组剪枝 B A B A BA),但存在以下缺点:首先,当一个双元组被判定为不重要时,我们不得不剪除其所有元素。这使得被剪枝的双元组难以重新激活,因为其条目全部被置零且不再训练。相比之下,AdaLoRA仅基于公式(3)对奇异值进行掩码,而奇异向量始终被保留。这保留了错误丢弃的三元组在未来恢复的潜力。其次,LoRA中的 A A A 和 B B B 不是正交的,意味着双元组之间可能存在依赖关系。丢弃双元组可能比截断最小奇异值导致更大的原始矩阵变化。因此,每次秩分配后增量矩阵通常会发生显著改变,导致训练不稳定甚至影响泛化能力。为说明这一点,我们在第4.4节中展示了一项消融研究,比较了AdaLoRA与LoRA的结构化剪枝。
3.2 IMPORTANCE-AWARE RANK ALLOCATION
我们将基于SVD的适配方法(公式(3))应用于每个Transformer层的所有权重矩阵,包括 W q , W k , W v , W f 1 W_q, W_k, W_v, W_{f_1} Wq,Wk,Wv,Wf1 和 W f 2 W_{f_2} Wf2。为了控制预算,我们在训练过程中通过重要性评分对奇异值进行迭代剪枝。为方便引用,我们使用 k k k 来索引增量矩阵,即 Δ k = P k Λ k Q k \Delta_k=P_k \Lambda_k Q_k Δk=PkΛkQk,其中 k = 1 , … , n k=1, \ldots, n k=1,…,n, n n n 是适配的权重矩阵的数量。我们将 Δ k \Delta_k Δk 的第 i i i 个三元组记为 G k , i = { P k , ∗ i , λ k , i , Q k , i ∗ } \mathcal{G}_{k, i}=\left\{P_{k, * i}, \lambda_{k, i}, Q_{k, i *}\right\} Gk,i={Pk,∗i,λk,i,Qk,i∗},其重要性评分为 S k , i S_{k, i} Sk,i。进一步地,我们定义参数集 P = { P k } k = 1 n , E = { Λ k } k = 1 n , Q = { Q k } k = 1 n \mathcal{P}=\left\{P_k\right\}_{k=1}^n, \mathcal{E}=\left\{\Lambda_k\right\}_{k=1}^n, \mathcal{Q}=\left\{Q_k\right\}_{k=1}^n P={Pk}k=1n,E={Λk}k=1n,Q={Qk}k=1n,以及训练代价为 C ( P , E , Q ) \mathcal{C}(\mathcal{P}, \mathcal{E}, \mathcal{Q}) C(P,E,Q)。结合正则化项(公式(4)),训练目标为:
L ( P , E , Q ) = C ( P , E , Q ) + γ ∑ k = 1 n R ( P k , Q k ) \mathcal{L}(\mathcal{P}, \mathcal{E}, \mathcal{Q})=\mathcal{C}(\mathcal{P}, \mathcal{E}, \mathcal{Q})+\gamma \sum_{k=1}^n R\left(P_k, Q_k\right) L(P,E,Q)=C(P,E,Q)+γk=1∑nR(Pk,Qk)
其中 γ > 0 \gamma>0 γ>0 是正则化系数。在第 t t t 步,我们首先进行随机梯度下降步骤,更新 P k ( t ) , Λ k ( t ) P_k^{(t)}, \Lambda_k^{(t)} Pk(t),Λk(t) 和 Q k ( t ) Q_k^{(t)} Qk(t),对于 k = 1 , … , n k=1, \ldots, n k=1,…,n,具体地,对 Λ k ( t ) \Lambda_k^{(t)} Λk(t):
Λ ~ k ( t ) = Λ k ( t ) − η ∇ Λ k L ( P ( t ) , E ( t ) , Q ( t ) ) \tilde{\Lambda}_k^{(t)}=\Lambda_k^{(t)}-\eta \nabla_{\Lambda_k} \mathcal{L}\left(\mathcal{P}^{(t)}, \mathcal{E}^{(t)}, \mathcal{Q}^{(t)}\right) Λ~k(t)=Λk(t)−η∇ΛkL(P(t),E(t),Q(t))
其中 η > 0 \eta>0 η>0 是学习率。接着,根据重要性评分 S k ( t ) S_k^{(t)} Sk(t),奇异值按照以下方式被剪枝:
Λ k ( t + 1 ) = T ( Λ ~ k ( t ) , S k ( t ) ) , with T ( Λ ~ k ( t ) , S k ( t ) ) i i = { Λ ~ k , i i ( t ) S k , i ( t ) is in the top- b ( t ) of S ( t ) 0 otherwise \Lambda_k^{(t+1)}=\mathcal{T}\left(\tilde{\Lambda}_k^{(t)}, S_k^{(t)}\right), \text { with } \mathcal{T}\left(\tilde{\Lambda}_k^{(t)}, S_k^{(t)}\right)_{i i}=\left\{\begin{array}{lc} \tilde{\Lambda}_{k, i i}^{(t)} & S_{k, i}^{(t)} \text { is in the top- } b^{(t)} \text { of } S^{(t)} \\ 0 & \text { otherwise } \end{array}\right. Λk(t+1)=T(Λ~k(t),Sk(t)), with T(Λ~k(t),Sk(t))ii={Λ~k,ii(t)0Sk,i(t) is in the top- b(t) of S(t) otherwise
其中 S ( t ) = { S k , i ( t ) } 1 ≤ k ≤ n , 1 ≤ i ≤ r S^{(t)}=\left\{S_{k, i}^{(t)}\right\}_{1 \leq k \leq n, 1 \leq i \leq r} S(t)={Sk,i(t)}1≤k≤n,1≤i≤r 包含所有三元组的重要性评分。这里 b ( t ) b^{(t)} b(t) 表示第 t t t 步剩余奇异值的预算,我们将在第3.3节进一步解释。在这种方式下,通过剪枝不重要的奇异值,可以为优先级更高的增量矩阵留出更多预算。
接下来,我们介绍几种设计重要性评分的方法。奇异值的幅值是量化每个三元组重要性最直接的方法,即 S k , i = ∣ λ k , i ∣ S_{k, i}=\left|\lambda_{k, i}\right| Sk,i=∣λk,i∣。这种方式只丢弃最不显著的奇异值,最小化了与原始矩阵的偏差,并进一步稳定了训练。许多现有方法使用该标准来控制矩阵的秩(Cai et al., 2010; Koltchinskii et al., 2011; Toh & Yun, 2010)。然而,我们指出,这样一个简单的度量无法恰当地量化参数对模型性能的贡献。
基于敏感性的评分是另一种重要性评分的方法,它量化参数对训练损失的敏感性(Molchanov et al., 2019; Sanh et al., 2020; Liang et al., 2021; Zhang et al., 2022)。然而,现有工作主要利用敏感性来量化单个元素的重要性,并将其用于逐元素剪枝(unstructured pruning)。而在我们的场景中,由于三元组是以组为单位被剪除的,因此需要设计新的度量方法。每个元素的敏感性都应被考虑,并适当地结合,以量化整个三元组对模型性能的总体贡献。因此,我们提出了一种新的重要性度量方法,该方法同时考虑三元组 G k , i \mathcal{G}_{k, i} Gk,i 中的奇异值和向量:
S k , i = s ( λ k , i ) + 1 d 1 ∑ j = 1 d 1 s ( P k , j i ) + 1 d 2 ∑ j = 1 d 2 s ( Q k , i j ) S_{k, i}=s\left(\lambda_{k, i}\right)+\frac{1}{d_1} \sum_{j=1}^{d_1} s\left(P_{k, j i}\right)+\frac{1}{d_2} \sum_{j=1}^{d_2} s\left(Q_{k, i j}\right) Sk,i=s(λk,i)+d11j=1∑d1s(Pk,ji)+d21j=1∑d2s(Qk,ij)
其中,我们计算了 P k , ∗ i P_{k, * i} Pk,∗i 和 Q k , i ∗ Q_{k, i *} Qk,i∗ 的平均重要性,从而使 S k , i S_{k, i} Sk,i 不随三元组 G k , i \mathcal{G}_{k, i} Gk,i 中参数数量的变化而扩展。这里 s ( ⋅ ) s(\cdot) s(⋅) 是用于单个元素的重要性函数。我们可以将敏感性用作 s ( ⋅ ) s(\cdot) s(⋅),定义为梯度和权重乘积的幅值:
I ( w i j ) = ∣ w i j ∇ w i j L ∣ I\left(w_{i j}\right)=\left|w_{i j} \nabla_{w_{i j}} \mathcal{L}\right| I(wij)= wij∇wijL
其中, w i j w_{i j} wij 是任意可训练参数。公式(8)本质上近似了当一个参数被置零时损失的变化。如果删除某个参数对模型的影响很大,那么模型对该参数是敏感的,因此我们应该保留它(Molchanov et al., 2019; Liang et al., 2021; Zhang et al., 2022)。
然而,Zhang等人(2022)指出,公式(8)中的敏感性并不是一个可靠的重要性指标。该评分是在采样的小批量数据上估计的,而随机采样和复杂的训练动态会导致敏感性估计的高变异性和较大不确定性。因此,Zhang等人(2022)提出通过敏感性平滑和不确定性量化来解决这一问题:
I ˉ ( t ) ( w i j ) = β 1 I ˉ ( t − 1 ) ( w i j ) + ( 1 − β 1 ) I ( t ) ( w i j ) U ˉ ( t ) ( w i j ) = β 2 U ˉ ( t − 1 ) ( w i j ) + ( 1 − β 2 ) ∣ I ( t ) ( w i j ) − I ˉ ( t ) ( w i j ) ∣ \begin{aligned} \bar{I}^{(t)}\left(w_{i j}\right) & =\beta_1 \bar{I}^{(t-1)}\left(w_{i j}\right)+\left(1-\beta_1\right) I^{(t)}\left(w_{i j}\right) \\ \bar{U}^{(t)}\left(w_{i j}\right) & =\beta_2 \bar{U}^{(t-1)}\left(w_{i j}\right)+\left(1-\beta_2\right)\left|I^{(t)}\left(w_{i j}\right)-\bar{I}^{(t)}\left(w_{i j}\right)\right| \end{aligned} Iˉ(t)(wij)Uˉ(t)(wij)=β1Iˉ(t−1)(wij)+(1−β1)I(t)(wij)=β2Uˉ(t−1)(wij)+(1−β2) I(t)(wij)−Iˉ(t)(wij)
其中, 0 < β 1 , β 2 < 1 0<\beta_1, \beta_2<1 0<β1,β2<1。 I ˉ ( t ) \bar{I}^{(t)} Iˉ(t) 是通过指数移动平均平滑的敏感性, U ˉ ( t ) \bar{U}^{(t)} Uˉ(t) 是不确定性项,由 $ I^{(t)} $ 和 $ \bar{I}^{(t)} $ 之间的局部变化量化。随后,他们将重要性定义为 I ˉ ( t ) \bar{I}^{(t)} Iˉ(t) 和 U ˉ ( t ) \bar{U}^{(t)} Uˉ(t) 的乘积,这可以作为 s ( ⋅ ) s(\cdot) s(⋅) 的另一种选择:
s ( t ) ( w i j ) = I ˉ ( t ) ( w i j ) ⋅ U ˉ ( t ) ( w i j ) s^{(t)}\left(w_{i j}\right)=\bar{I}^{(t)}\left(w_{i j}\right) \cdot \bar{U}^{(t)}\left(w_{i j}\right) s(t)(wij)=Iˉ(t)(wij)⋅Uˉ(t)(wij)
在第4.4节中,我们通过消融研究详细比较了不同重要性度量方法的性能。我们发现基于敏感性变体(公式11)的提议度量方法(公式7)通常表现最佳。详细算法总结在算法1中。
3.3 GLOBAL BUDGET SCHEDULER
正如第1节所述,在低秩适配的背景下,调整秩自然可以用来控制参数预算。因此,我们将预算 b ( t ) b^{(t)} b(t) 定义为所有增量矩阵的总秩,即奇异值的总数量。回顾一下,预算分配是在微调过程中迭代进行的。为了便于训练,我们提出了一个全局预算调度器。具体来说,我们从初始预算 b ( 0 ) b^{(0)} b(0) 开始,其值略高于目标预算 b ( T ) b^{(T)} b(T)(例如, b ( 0 ) b^{(0)} b(0) 为 b ( T ) b^{(T)} b(T) 的1.5倍)。我们将每个增量矩阵的初始秩设置为 r = b ( 0 ) / n r=b^{(0)} / n r=b(0)/n。
在训练的前 t i t_i ti 步中进行热身,然后按照三次调度(cubic schedule)减少预算 b ( t ) b^{(t)} b(t),直到达到目标预算 b ( T ) b^{(T)} b(T)。最后,我们固定预算分配,并在随后的 t f t_f tf 步中对模型进行微调。预算调度的具体公式详见附录A。这种方式使AdaLoRA能够首先探索参数空间,然后逐渐专注于最重要的权重。