什么是LoRA
TL;DR
提出的背景:当时主流AR GPT-2的参数量是1.5b,主流AE BERT-large的参数量是340m,而新提出来的GPT-3有175b参数,且(当时视角下)未来若干月/年后可能有更大参数量的模型出现。
延伸出来的问题:如果逐任务做全量参数微调,意味着需要重复部署全量参数的模型,对部署有很大挑战。
LoRA的优势:
参数量少。相比较GPT-3,可训练参数量减少10000倍,GPU内存需求减少3倍。
效率更高。(1)训练时硬件门槛降低,因为不需要为大部分参数计算梯度。(2)推理时没有额外延迟,因为LoRA参数可以与原模型合并。
可扩展。LoRA与很多其他后训练方法正交。
在部署层面,可以通过维护一个冻结的原模型参数,以及一些训练好用来实现不同功能的LoRA参数,就可以快速实现不同任务间的切换。
在LoRA之前
对于大模型的非全量参数微调的知识迁移,有两种比较典型的方式:
增加Adapter layer:每个transformer增加两个层,或者一个层+一个LayerNorm。
$\textbf{Adapter}(H_i)=(\textbf{ReLU}(\textbf{LN}(H_i)W_i^E))W_i^D+H_i$
看似没有增加很多参数,但大模型一般会依赖硬件的并行来保持较低的延迟,而适配器层必须按顺序来处理,在在线推理的时候能观察到明显的延迟增加。


优化输入层的形式,如prefix-tuning.
训练:给从输入增加长度为N的可训练前缀,这个前缀是一个连续的向量序列(可训练的参数类似一个embedding table),每个任务有其独特的可训练前缀:[batch_size, seq_len, hidden_size] -> [batch_size, n+seq_len, hidden_size],每一层的transformer输入会变成[P1, P2, ..., PN, *原始文本]。
推理:对于特定任务,给原始输入增加特定的前缀,进行隐式提示。
LoRA
Adapter layer与prefix-tuning可以看作是全量参数fine-tune的两个折中方法,分别在模型输入层与输出层增加MLP。LoRA的思路是直接在模型的权重上增加一个可训练的MLP。
LoRA的核心思想基于一个重要的假设:模型在适应下游任务时,其参数的改变量是低秩的。换言之,尽管模型总参数量巨大,但真正需要为新任务调整的“知识”存在于一个远小于原始参数空间的低维子空间中。
形式化定义:其中$A,B$矩阵是低秩的。
$\begin{equation}
W’=W+\Delta W,\quad \Delta W=AB
\end{equation}$

一般加在transformer注意力模块中的线性投影矩阵,即$W_Q,Q_K,Q_V,Q_O$。如果需要融合到原模型的参数,直接使用矩阵加法。
LoRA效果:



- 在Transformer中,应该对哪个权重应用LoRA?如果可供训练的参数有限,应该如何分配?



- LoRA的最优秩应该是多少?

$W$与$\Delta W$存在什么关系?
- $\Delta W$与$W
$存在关联,并且相关系数明显强于随机矩阵;$\Delta W$放大了$W$中已经存在的某些特定特征(但不是主特征);这个放大倍数很高,说明$\Delta W$能够有效学到特定任务所需的特征。
- $\Delta W$与$W

如何使用LoRA:(特定参数量限制下)更小的秩,影响更多的权重。
数据稀缺场景下的LoRA, SFT与ICL
指导在实践中,在什么时候选择什么方法。
TL;DR
LoRA提供了最有效的平衡,在最小程度影响基础模型通用知识的前提下,成功赋予了新技能;
SFT在技能获取方面表现出色,但极易受到灾难性遗忘的影响;
ICL在融入事实性知识方面有效,但在复杂技能的学习上表现不佳。
定性->定量:
数据稀缺场景:1~256(如果再增加,ICL天然具有劣势);
什么是事实性知识:比较简单的封闭问题(简单的标注,简单的选择)
什么是复杂技能:复杂的封闭问题,或者依赖推理的问题(复杂标注、复杂QA,规划)
实验设定
方法
ICL:
仅通过提示词执行新任务,无需梯度更新;
CoT提示能够显著提升ICL在复杂任务上的效果(但本文中没有使用这个方法);

- 原来受限于上下文窗口只能做few\-shot,目前上下文窗口长度扩展,[many\-shot ICL](https://arxiv.org/abs/2404.11018)也是可行的。
PEFT(LoRA)
LoRA的约束特性能从本质上缓解灾难性遗忘(学得更少,遗忘得也更少);
通过将更新限制在低秩子空间,LoRA起到了强大的正则化作用,防止SFT中知识退化。
数据
| 任务 | 数据集 | 目标 |
|---|---|---|
| 知识导向 | BoolQ | 布尔问题。自然发生的是/否问题的阅读理解,答案可以通过提供的文本片段推理得出。 |
| GPQA | 研究生级谷歌防查问答。挑战性的专家级选择题,即使借助搜索工具也难以解答 | |
| GSM8K | 小学数学8K。高质量数学问题数据集 | |
| NQ | 自然问题。来自Google的真实搜索查询,要求模型仅依靠内部知识生成答案。 | |
| 技能导向 |
UPOS | 通用词性标注 |
| XPOS | 词性标注 | |
| Head | 句法核心词预测。识别句子中每个词的“核心词”,用来构建句法依赖树的二元关系。 | |
| FEATS | 形态特征预测。给单词分配详细的语法属性 | |
| LEMMA | 词元预测 | |
| ANLI | 对抗性自然语言推理。自然语言推理基准,通过迭代式对抗过程构建 | |
| Blocksworld | 规划数据集,评估大模型的规划能力。 | |
| Logistics | 另一个规划数据集。通过协调卡车和飞机,来找到运输包裹的最优方案。 | |
| Winograd | 共指消解。运用常识来推理句子中模糊代词的正确指代对象。 |
实验结论
Gemma-3 4B,batch size=8,LoRA lr=5e-3,SFT lr=(1e-4, 1e-3)
整体:没有明确的可以归纳的结论,但可以从中导出一些insight。
ICL
无论复杂还是简单任务,从zero-shot到one-shot是非常重要的;
one-shot提升准确率,不一定是学到了知识,而是可能学到了格式;
激进增加shot数量不一定有太大意义。

SFT
使用训练/测试数据集评估当前任务的学习效果,使用NQ评估灾难性遗忘的程度。
简单任务上没必要,复杂任务上有一定优越性。
鱼与熊掌不可兼得。


LoRA
- 需要一定数据量支撑



随着样本数量与秩的提升,泛化性能也会提升。说明有效的LoRA学习既需要足够的秩,也需要充足的训练数据。
Insights
值得注意的是:实际业务实践中,大部分情况下并不在意NQ评测结果。
ICL
样本数量:在样本数量极少的时候最优选择(\<20),在样本数量相对局限+模型输入支持长上下文的情况下(10~100)考虑作为备选方案,在样本数量继续增加时不具有优越性。
效果:在大部分任务中,0->1的提升效果最显著(如果会有提升的话,但至少不会下降);随后随样本数量增加边际收益会显著下降;对于复杂任务,shot数和效果之间不一定正相关,甚至可能有轻微负相关,复杂任务无需激进增加shot数量;
其他note:在样本数量不变情况下,可以考虑Reinforced ICL进一步提升效果。
SFT
样本数量:如果不考虑灾难性遗忘问题,简单任务上一般128样本就能让SFT与ICL效果打平,但lr的设置不能过低,文中一般设置在1e-3;
效果:在小样本训练时(16-256),SFT;大样本量时论文中没有讨论,但推断应当优于LoRA;
其他note:对于知识密集型任务,SFT不如基于检索增强的方法来得有效。
LoRA
样本数量:需要一定数量的数据,才能找到新技能的有效低秩近似;
其他note:高层的LoRA的参数更新大小显著高于低层的LoRA,一个解释是与任务相关的决策规则存在于更接近能影响logits的位置。浅层主要编码词汇与拼写特征,对于任务来说已经足够充分。
在实践中可以考虑的guideline:
在任务封闭且简单,或在样本数量极少时(\<20),优先考虑使用ICL,可以进一步结合Reinforced ICL以增强效果;对于相对更复杂的任务,使用SFT。
ICL适合在一个简单且封闭的任务中,对准确率上限进行快速评估。
这个样本量不考虑LoRA
在样本数量比较局限(100-1k),且任务比较复杂时,优先使用SFT,但LoRA已经可以成为可选项;
- 知识密集型优先考虑使用RAG而不是SFT。
在样本数量充足,根据实际情况选择SFT/LoRA。
Diffusion模型相较LLM似乎有所不同:
几张图片就足够学到一个生成指定风格的LoRA;
LoRA的正交特性能够很好的让一个模型融合多个不同的风格,并允许按比例调节;此时LoRA体现出特殊的优越性。