在 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 解决的问题为:根据模块的重要性为他们分配不同的秩。关注于以下几个问题:
- 如何融合 SVD 和 LoRA
- 如何衡量参数的重要性
- 如何根据重要性计算 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} P∈Rd1×r 和 Q ∈ R r × d 2 Q \in R^{r×d_2} Q∈Rr×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)=∣∣PTP−I∣∣F2+∣∣QTQ−I∣∣F2(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)=∣wij⋅∇wijL∣(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<

最低0.47元/天 解锁文章
165

被折叠的 条评论
为什么被折叠?



