当前位置: 首页 > article >正文

论文阅读笔记——ADALORA: ADAPTIVE BUDGET ALLOCATION FOR PARAMETER-EFFICIENT FINE-TUNING

AdaLoRA 论文

在 LoRA 中通过在原特征一侧添加一个低秩的矩阵实现模型在下游任务的微调:
h = W 0 x + Δ W x = W 0 x + B A x ( 1 ) h=W_0x+\Delta Wx=W_0x+BAx \qquad \qquad (1) h=W0x+ΔWx=W0x+BAx(1)
其中 d i m ( A ) = r × k , d i m ( B ) = d × r r < < m i n ( d , k ) dim(A) = r×k, \quad dim(B)=d×r \quad r << min(d,k) dim(A)=r×k,dim(B)=d×rr<<min(d,k)
它的一个重要局限性在于:LoRA 在一个模型的所有使用 adapter 的模块都是用同一个 r,但是不同深度的参数,或者同一个深度不同模块的参数,在模型中的重要性应当是不同。

在这里插入图片描述
由图中可得,自注意力中的全连接层比计算 Q,K,V 的重要性更高,更深的参数比更浅的参数重要。

故而 AdaLoRA 解决的问题为:根据模块的重要性为他们分配不同的秩。关注于以下几个问题:

  1. 如何融合 SVD 和 LoRA
  2. 如何衡量参数的重要性
  3. 如何根据重要性计算 r

融合 SVD 和 LoRA

如果对 BA 直接进行秩的调整,会将 B 的某些列或者 A 的某些行置零,会丢失较多信息且难以恢复。并且 B 和 A 并不是正交矩阵,意味着各元素之间有强相关性,置零会破坏相关性。

AdaLoRA 将 LoRA 的计算方式调整为(SVD 奇异值分解)并且直接将参数 SVD 化可以避免训练中 SVD 计算带来的资源消耗:
W = W 0 + Δ = W 0 + P Δ Q ( 2 ) W = W_0+\Delta = W_0 + P\Delta Q \qquad \qquad (2) W=W0+Δ=W0+PΔQ(2)
其中 P ∈ R d 1 × r P \in R^{d_1×r} PRd1×r Q ∈ R r × d 2 Q \in R^{r×d_2} QRr×d2 Δ \Delta Δ 的左右奇异向量,同时为了确保 P 和 Q 的正交性有:
R ( P , Q ) = ∣ ∣ P T P − I ∣ ∣ F 2 + ∣ ∣ Q T Q − I ∣ ∣ F 2 ( 3 ) R(P,Q)=||P^TP-I||^2_F+||Q^TQ-I||^2_F \qquad \qquad (3) R(P,Q)=∣∣PTPIF2+∣∣QTQIF2(3)

  • 只调整 Δ \Delta Δ,训练中更容易恢复被误删的奇异值
  • P 和 Q 为正交向量,对 Δ \Delta Δ 的调整不会影响其他奇异值对应的奇异向量

特征重要性

在模型剪枝中,单个参数的敏感度被定义为梯度和权重乘积的绝对值:
I ( w i j ) = ∣ w i j ⋅ ∇ w i j L ∣ ( 4 ) I(w_{ij})=|w_{ij}·\nabla_{w_{ij}}\mathcal{L}| \qquad \qquad (4) I(wij)=wijwijL(4)
在 SGD 中, I ( w i j ) I(w_{ij}) I(wij) 只是单个 batch 的样本的重要性,使用滑动平均来减轻评估误差得到敏感性,并且计算滑动平均的敏感性的不确定性(表示敏感性的局部时间变化) U ( t ) = ( w i j ) = ∣ I ( t ) ( w i j ) − I ‾ ( t ) ( w i j ) ∣ U^{(t)}=(w_{ij})=|I^{(t)}(w_{ij})-\overline{I}^{(t)}(w_{ij})| U(t)=(wij)=I(t)(wij)I(t)(wij)
I ‾ ( t ) ( w i j ) = β 1 I ‾ ( t − 1 ) ( w i j ) + ( 1 − β 1 ) I ( t ) ( w i j ) ( 5 ) U ‾ ( t ) ( w i j ) = β 2 U ‾ ( t − 1 ) ( w i j ) + ( 1 − β 2 ) U ( t ) ( w i j ) ( 6 ) \begin{aligned} &\overline{I}^{(t)}(w_{ij})=\beta_1\overline{I}^{(t-1)}(w_{ij})+(1-\beta_1)I^{(t)}(w_{ij}) \qquad \qquad (5) \\&\overline{U}^{(t)}(w_{ij})=\beta_2\overline{U}^{(t-1)}(w_{ij})+(1-\beta_2)U^{(t)}(w_{ij}) \qquad \qquad (6) \end{aligned} I(t)(wij)=β1I(t1)(wij)+(1β1)I(t)(wij)(5)U(t)(wij)=β2U(t1)(wij)+(1β2)U(t)(wij)(6)
使用敏感性 I ‾ ( t ) ( w i j ) \overline{I}^{(t)}(w_{ij}) I(t)(wij) 和不确定性 U ‾ ( t ) ( w i j ) \overline{U}^{(t)}(w_{ij}) U(t)(wij) 来描述特折重要性:
s ( t ) ( w i j ) = I ‾ ( t ) ( w i j ) ⋅ U ‾ ( t ) ( w i j ) ( 7 ) s^{(t)}(w_{ij})=\overline{I}^{(t)}(w_{ij})·\overline{U}^{(t)}(w_{ij}) \qquad \qquad (7) s(t)(wij)=I(t)(wij)U(t)(wij)(7)
对于三元组 G k , i = { P k ∗ i , Λ k , i , Q k ∗ i } \mathcal{G}_{k,i}=\{P_{k*i},\Lambda_{k,i},Q_{k*i}\} Gk,i={Pki,Λk,i,Qki} 表示奇异值和它对应的奇异向量 ,它的重要性是三个值的加权和,权值取决于 d 1 d_1 d1 d 2 d_2 d2
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 , j i ) ( 8 ) \boldsymbol{S}_{k,i}=s(\lambda_{k,i})+\frac{1}{d_1}\sum^{d_1}_{j=1}s(P_{k,ji})+\frac{1}{d_2}\sum^{d_2}_{j=1}s(Q_{k,ji}) \qquad \qquad (8) Sk,i=s(λk,i)+d11j=1d1s(Pk,ji)+d21j=1d2s(Qk,ji)(8)

根据重要性自动计算秩 r

为了计算 r ,一个直观方式是将 r 看做模型的一个参数,根据损失值来调整 r。由此定义他的损失为 cost 和正则项之间的加权和:
L ( P , ε , Q ) = C ( P , ε , Q ) + γ Σ k = 1 n R ( P k , Q k ) ( 9 ) L( \mathcal{P}, \varepsilon , \mathcal{Q}) = C( \mathcal{P}, \varepsilon , \mathcal{Q}) + \gamma\Sigma _{k= 1}^nR( P_k, Q_k) \qquad \qquad (9) L(P,ε,Q)=C(P,ε,Q)+γΣk=1nR(Pk,Qk)(9)
其中 P = { P k } k = 1 n , ε = { Λ k } k = 1 n , Q = { Q k } k = 1 n P=\{P_k\}_{k=1}^n,\varepsilon=\{\Lambda_k\}_{k=1}^n,Q=\{Q_k\}_{k=1}^n P={Pk}k=1n,ε={Λk}k=1n,Q={Qk}k=1n 表示可训练的参数集合。

他们的更新采用梯度下降的方式,不同之处采取了剪枝——将不重要的元素置零,重要的元素进行替换:
Λ ~ k ( t ) = Λ k ( t ) − η ∇ Λ k L ( P , ε , Q ) ( 10 ) Λ k ( t + 1 ) = T ( Λ ~ k ( t ) , S k ( t ) ) ,   w i t h   T ( Λ ~ k ( t ) , S k ( t ) ) i i = { Λ ~ k , i i ( t ) S k , i ( t )  is in the top-  b ( t )   o f   S ( t ) 0  otherwise, ( 11 ) \begin{aligned} &\tilde{\Lambda}_k^{(t)}=\Lambda_k^{(t)}-\eta\nabla_{\Lambda_k}L( \mathcal{P}, \varepsilon , \mathcal{Q}) \qquad \qquad (10) \\& \boldsymbol{\Lambda}_{k}^{(t+1)} =\mathcal{T}\left(\tilde{\boldsymbol{\Lambda}}_k^{(t)},\boldsymbol{S}_k^{(t)}\right),\mathrm{~with~}\mathcal{T}\left(\tilde{\boldsymbol{\Lambda}}_k^{(t)},\boldsymbol{S}_k^{(t)}\right)_{ii} = \begin{cases} \tilde{\boldsymbol{\Lambda}}_{k,ii}^{(t)} & \boldsymbol{S}_{k,i}^{(t)}\text{ is in the top- }b^{(t)}\mathrm{~of~}\boldsymbol{S}^{(t)} \\ 0 & \text{ otherwise,} & & \end{cases} \qquad \qquad (11) \end{aligned} Λ~k(t)=Λk(t)ηΛkL(P,ε,Q)(10)Λ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,(11)
其中 S ( t ) = { S k , i ( t ) } 1 ≤ k ≤ n , 1 ≤ i ≤ r S^{(t)}=\{S^{(t)}_{k,i}\}_{1≤k≤n,1≤i≤r} S(t)={Sk,i(t)}1kn,1ir 是通过式(8)得到的所有三元组的重要性, b ( t ) b^{(t)} b(t) 是在第 t 步奇异值个数的预测:
b ( t ) = { b ( 0 ) 0 ≤ t < t i b ( T ) + ( b ( 0 ) − b ( T ) ) ( 1 − t − t i − t f T − t i − t f ) 3 t i ≤ t ≤ T − t f b ( T ) o . w . b^{(t)}= \begin{cases} b^{(0)} &\qquad 0 ≤ t <t_i \\ b^{(T)}+(b^{(0)}-b^{(T)})(1-\frac{t-t_i-t_f}{T-t_i-t_f})^3 &\qquad t_i≤t≤T-t_f \\b^{(T)} &\qquad o.w. \end{cases} b(t)= b(0)b(T)+(b(0)b(T))(1Ttitfttitf)3b(T)0t<tititTtfo.w.
在最开始的 t i t_i ti 步,给 b ( t ) b^{(t)} b(t) 一个较大的值让模型达到一个比较好的效果,接下来的 T − t i − t f T-t_i-t_f Ttitf,通过让 b ( t ) b^{(t)} b(t) 以三次方的速度逐渐减小来达到对秩的剪枝的目的,最后剩下的 t f t_f tf 步中,稳定秩的大小让模型效果达到当前秩上的一个局部最优。

总结

在这里插入图片描述
AdaLoRA 将适配器模块的秩视为一组超参数,并采用模型剪枝技术自适应地调整 LoRA 的秩。为了确保剪枝后模型的稳定性,AdaLoRA 使用 SVD 的三元组形式替代了 LoRA 的二元组,充分利用了 SVD奇异矩阵的正交性以及奇异向量绝对值与特征重要性之间的关联,从而设计出高效的剪枝策略,这一方法极具创新性。


http://www.kler.cn/a/588983.html

相关文章:

  • 五种最新优化算法(ALA、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
  • SpringBoot中的定时任务实现方式有哪些?
  • Flutter:签名板封装
  • 沐数科技数据开发岗笔试题2025
  • 《C#上位机开发从门外到门内》3-2::Modbus数据采集系统
  • HTTP+DNS综合实验
  • 谷粒商城:性能压测JVM堆区
  • C# Winform 实现换肤,并自定义皮肤功能
  • C#—闭包详解
  • 群体智能优化算法-旗鱼优化算法 (Sailfish Optimizer, SFO,含Matlab源代码)
  • SQL Server表数据变更捕获的5种方法及实战对比
  • C++(初阶)(五)——类和对象(下)
  • 【极光 Orbit·STC8x】05. GPIO库函数驱动LED流动
  • 【区块链+乡村振兴】四川云龙肉牛产业数字化平台 | FISCO BCOS 应用案例
  • 操作系统八股文整理(一)
  • Celery在Django中的作用
  • day05_Java高级
  • 深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)
  • 一款基于Python的从常规文档里提取图片的简单工具开发方案
  • 30、Vuex 为啥可以进行缓存处理