LoRA精读笔记
背景
随着我们预训练更大规模的模型,完全微调(即重新训练所有模型参数)变得越来越不可行。
==>提出了提出了低秩适应(Low-Rank Adaptation,LoRA)方法,该方法冻结预训练模型的权重,并在Transformer架构的每一层中注入可训练的秩分解矩阵,从而大大减少了下游任务中需要训练的参数数量。
一些研究者提出只调整部分参数或者学习外部扩展模块来应对新任务,这样只需要存储和加载一个较小数量的针对特定任务的参数,但当扩展模块深度增加或者降低模型可用的序列长度==>推理延迟;且这些方法通常很难达到微调的baseline,体现了efficiency和model quality的trade off。
一个参数化的模型事实上依赖于一个内部固有的低维度
并非所有的参数都是有效的,信息并不需要那么高的维度,一个M * N的参数矩阵,可以用M * r 和 r * N 的矩阵去近似
优点:
- 一个预训练模型可以被共享,并用于构建多个小型 LoRA 模块,以适应不同的任务。我们可以冻结共享模型,并通过替换图 1 中的矩阵 A 和 B 来高效地切换任务,从而显著减少存储需求和任务切换的开销。(切换任务只需要换不同的LoRA模块)
- 当使用自适应优化器时,LoRA 提高了训练效率,并使得硬件门槛降低了最多三倍,由于我们不需要对大多数参数进行计算梯度和维护优化器状态,反之,我们只优化注入的、更小的低秩矩阵。
- 我们简单的线性设计使得在部署时可以将可训练矩阵与冻结的权重合并,从而不会引入推理延迟,和完全微调模型相比,构建时没有额外的推理延迟。
- LoRA 与许多先前的方法是正交的(互补),并且可以与其中的许多方法结合使用,如前缀调优(prefix-tuning)。我们在附录 E 中提供了一个示例。
Related Work
Transformer架构
Prompt Engineering and Fine-Tuning
Parameter-Efficient Adaptation
Low-Rank Structures in Deep Learning
问题陈述建模
尽管LoRA方法对于训练目标是中立的,但是可以进行语言建模(language modeling)作为激励目标。考虑一个被
\[\Phi \]
参数化的预训练自回归语言模型(如GPT)
\[P_{\Phi}(y|x) \]
则每一个下游任务可以表示为在给定 context-target的训练集对,最大化条件语言建模目标:
During full fine-tuning, the model is initialized to pre-trained weights Φ0
and updated to Φ0 + ∆Φ
by repeatedly following the gradient to maximize the conditional language modeling objective:
\[\max_{\Phi} \sum_{(x, y) \in \mathcal{Z}} \sum_{t=1}^{|y|} \log P_{\Phi}(y_t | x, y_{<t}) \]
但是对于完整微调来说,对于每一个下游任务,都学习了不同集合的 ∆Φ
,其维度和 Φ
相同,但是 Φ
很大(GPT-3有175B),对应的∆Φ
也很大。
本论文采取了参数-便利的方法, ∆Φ
被一个非常小的参数集合 θ
编码,
\[\Delta \Phi = \Delta \Phi(\Theta) \quad \text{with} \quad |\Theta| \ll |\Phi_0| \quad \text{and optimizing over} \quad \Theta. \]
最终的优化目标变为了:
\[\max_{\Theta} \sum_{(x, y) \in \mathcal{Z}} \sum_{t=1}^{|y|} \log \left( p_{\Phi_0 + \Delta \Phi(\Theta)}(y_t | x, y_{<t}) \right) \]
现有解决方法
- Adapter Layers Introduce Inference Latency
- Directly Optimizing the Prompt is Hard
LoRA method
方法概述
具体步骤
-
低秩分解
将预训练权重矩阵 $ W_0\in \mathbb{R}^{d \times k} $ 的更新表示为低秩分解形式:\[W_0 + \Delta W = W_0 + BA \]
其中:
- $ B \in \mathbb{R}^{d \times r} $ 和 $ A \in \mathbb{R}^{r \times k} $ 是可训练参数。
- 秩 $ r $ 远小于 $ \min(d, k) $。
-
**冻结 $ W_0 \(** 在训练过程中,\) W_0 $ 被冻结,不接收梯度更新,而 $ A $ 和 $ B $ 包含可训练参数。
-
前向传播
修改后的前向传播公式为:\[h = W_0x + \Delta Wx = W_0x + BAx \]
-
初始化
- 使用随机高斯初始化 $ A $。
- $ B $ 初始化为零,使得 $ \Delta W = BA $ 在训练开始时为零。
-
缩放
通过 α/r 对 ΔWx 进行缩放,以调整学习率并简化超参数调优过程:\[\Delta Wx \text{ 被缩放为 } \frac{\alpha}{r} \cdot \Delta Wx \]
其中 $ \alpha $ 是一个常数, r 是低秩分解的秩。当使用 Adam 优化器时,适当缩放初始化后,调整 $ \alpha $ 的效果类似于调整学习率。
为什么要缩放(scale)?
:低秩分解后的更新矩阵 \(ΔW=BA\)的幅度会受到秩 r 的影响。当 r 较小时,$ΔW \(的幅度可能较小;当 *r* 较大时,\)ΔW $的幅度可能较大。
如果缩放系数只是个 α 的话,就会使得输出的增量部分的量级是 \(O(r)\),因此再除以一个 r 使输出稳定。
通过将 $ ΔWx $ 缩放为 \(\frac{\alpha}{r}⋅ ΔWx\),可以确保不同 r 值下的更新幅度保持一致(标准化),从而避免因 r 的变化而导致优化过程不稳定。而调整 $ \alpha $ 的效果类似于调整学习率。
但是rank-stabilized LoRA, rsLoRA研究了缩放因子对模型的影响,证明了应该除以\(\sqrt r\) 。
设定r为权重矩阵的rank,就是将LoRA泛化到Full Fine-tuning了
推理只需要换一个LoRA模块,(将 BA 换成 B’A’),类似的推理模块,不会引入更多延迟
理解低秩更新(原理方面的解释)
主要解决以下问题:
- Given a parameter budget constraint, **which subset of weight matrices **in a pre-trained Transformer should we adapt to maximize downstream performance? 在预训练的Transformer的哪写权重矩阵加LoRA对下游任务表现最好?(只考虑attention 权重)
在GPT-3 175B上设定参数预算为18M(如果存在FP16就大约是35MB),96层的Transformer(也就是在 18M 的参数预算内覆盖所有 96 层),如果已考虑一种权重矩阵,则 r 为8,两种则为4,4种则为2.
==>即使 r = 4 也能捕获到 \(\Delta W\) 中足够的信息,因此 调整更多权重矩阵(配上低rank)而不是单一矩阵(配上高rank)是更好的。
- Is the “optimal” adaptation matrix $ \Delta W $ really rank-deficient(低秩)? If so, what is a good rank to use in practice? 最优的rank是什么?
在 \(WikiSQL\) 和 \(MultiNLI\) 任务上对\(\{W_q\},\{W_q,W_v\},\{W_q,W_k,W_v,W_o\}\)进行adapt,并且选用了不同的 \(r \in \{1,2,4,8,64\}\)
===>>
在非常小的 $ r $ 值下,LoRA 已经表现出色,尤其是对于 $ {W_q, W_v} $ 组合,而不仅仅是 $ W_q $。这表明更新矩阵 $ \Delta W $ 可能具有非常小的“内在秩”(intrinsic rank)。
对比不同 r 的子空间特征相似度
分解方法:奇异值分解(SVD)
-
对适应矩阵 $ A_r $ 进行 SVD:
\[A_r = U_{A_r} \Sigma_{A_r} V_{A_r}^T \]
-
提取右奇异矩阵 $ U_{A_r} $,表示主成分方向。
子空间相似度计算
相似度函数 Φ 定义为:
\[\Phi(A_{r=8}, A_{r=64}, i, j) = \frac{\left\| {U^i_{A_{r=8}}}^\top U^j_{A_{r=64}} \right\|_F^2}{\min(i, j)} \quad \in [0, 1] \]
符号解释:
-
$ U^i_{A_{r=8}} $ 秩为 8 的适应矩阵 $ A_{r=8} $ 的前 $ i $ 个右奇异向量组成的子空间。
-
$ U^j_{A_{r=64}} $ 秩为 64 的适应矩阵 $ A_{r=64} $ 的前 $ j $ 个右奇异向量组成的子空间。
-
$ \left| \cdot \right|_F $ Frobenius 范数(矩阵元素的平方和再开平方)。
-
$ \min(i, j) $ 标准化分母,确保结果在 \([0, 1]\) 范围内。
==>热力图
==>低秩适应矩阵(如 r=8)已足够捕捉高秩矩阵(如 r=64)的核心方向,
- What is the connection between $ \Delta W $ and $ W $? Does $ \Delta W $ highly correlate with $ W $? How large is $ \Delta W $ comparing to $ W $?
将矩阵 $ W $ 投影到 $ \Delta W $ 的 $ r $-维子空间:
\[\text{投影矩阵} = U^\top W V^\top \]
其中:
- $ U $ 和 $ V $ 是 $ \Delta W $ 的左/右奇异向量矩阵。
- $ r $ 为子空间维度。
计算投影后矩阵与原矩阵的 Frobenius 范数差异:
\[\text{差异度量} = \left\| U^\top W V^\top \right\|_F \space compared\space with\space \left\| W \right\|_F \]
为了比较,\(U\) 和 \(V\) 选用了(1) \(∆W_q\), (2) \(W_q\), 或者 (3) a random matrix 的\(top\space r\) 个奇异向量方向
==>
\(ΔW\) 与$ W$ 的相关性显著强于随机矩阵,表明 \(ΔW\) 放大了$ W$ 中已有的某些特征。
\(ΔW\) 并非独立于 \(W\),而是选择性地增强$ W$ 中隐含但未被充分利用的特征。
结论和未来的工作
1.将 LoRA 与其他参数高效微调方法(如 Prefix-Tuning、Adapter 等)结合,探索正交性改进(orthogonal improvement)
2.预训练特征如何转化为下游任务能力?微调或 LoRA 的具体作用机制仍不明确。
3.目前依赖启发式规则选择应用 LoRA 的权重矩阵(如注意力层的 $ W_q, W_v $),需要开发更原则化的选择方法
4.若更新矩阵 $ \Delta W $ 是低秩的,预训练权重矩阵 $ W $ 本身可能也具有低秩性。