【大模型微调学习5】-大模型微调技术LoRA
- LoRa微调
- 1.现有 PEFT 方法的局限与挑战
- 2.LoRA: 小模型有大智慧 (2021)
- 3.AdaLoRA: 自适应权重矩阵的高效微调 (2023)
- 4.QLoRA: 高效微调量化大模型 (2023)
LoRa微调
1.现有 PEFT 方法的局限与挑战
-
Adapter方法,通过增加模型深度而额外增加了模型推理延时。
-
Prompt Tuning、Prefix Tuning、P-Tuning等方法中的提示较难训练,同时缩短了模型可用的序列长度。
-
往往难以同时实现高效率和高质量,效果通常不及完全微调(full-finetuning)。
-
简而言之,尽管大模型参数规模巨大,但关键作用通常是由其中的**低秩本质维度(low intrinsic dimension)**发挥的。
-
受此启发,微软提出了低秩适配(LoRA)方法,设计了特定结构,在涉及矩阵乘法的模块中引入两个低秩矩阵A和B,以模拟完全微调过程。这相当于只对语言模型中起关键作用的低秩本质维度进行更新。
2.LoRA: 小模型有大智慧 (2021)
论文:LoRA: Low-Rank Adaptation of Large Language Models
github:链接
为了使微调更加高效,LoRA的方法是通过低秩分解将权重更新表示为两个较小的矩阵(称为更新矩阵)。这些新矩阵可以在适应新数据的同时保持整体变化数量较少进行训练。原始权重矩阵保持冻结状态,并且不再接受任何进一步的调整。最终结果是通过将原始权重和适应后的权重进行组合得到。
实际上是在原始预训练语言模型(PLM)旁增加一个附加的网络通路,这可以视作一种“外挂”结构。这个外挂结构的目的是通过两个矩阵A和B的相乘来模拟本征秩(intrinsic rank)。
h
=
W
0
x
+
Δ
W
x
=
W
0
x
+
B
A
x
h=W_0x+\Delta Wx=W_0x+BAx
h=W0x+ΔWx=W0x+BAx
-
整体设计:(两个小模型)输入和输出的维度均为d,这与预训练模型层的维度相同。
-
低秩分解:A矩阵会将输入的d维数据降维至r维(增量矩阵的本征秩),r远小于d(r<< d)。矩阵计算从d x d变为d x r + r x d,减少了模型的参数量和计算量。
-
回映射:B矩阵将这些r维数据再映射回d维,以便与预训练模型的其他部分保持兼容。
3.AdaLoRA: 自适应权重矩阵的高效微调 (2023)
论文:AdaLoRA: Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning
github:链接
LoRA 核心思想:
- 对下游任务增量训练小模型( W = W 0 + △ W W=W_0+△W W=W0+△W)
LoRA 问题:
-
预先指定超参数增量矩阵的本征秩 r,无法自适应调整
-
低估了权重矩阵的种类和不同层对的微调效果影响
-
只微调了 Attention,忽略了 FFN 模块。
AdaLoRA 解决思路:
-
使用 SVD 提升矩阵低秩分解性能
-
模型剪枝:对模块参数(特征)的重要性建模
-
根据重要性评分,动态调整不同权重矩阵的本征秩 r
AdaLoRA 使用 SVD 提升矩阵低秩分解性能
AdaLoRA 对模块参数(特征)重要性建模
AdaLoRA 根据重要性评分剪枝和自适应调整本征秩 r
4.QLoRA: 高效微调量化大模型 (2023)
论文:QLoRA: Efficient Finetuning of Quantized LLMs
FFT vs LoRA vs QLoRA
QLoRA 提出新数据类型 4-bit NormalFloat (NF4)
QLoRA 提出双量化技术:量化(量化常数)
QLoRA 设计了一个存储数据类型(4-bit NormalFloat)和一个计算数据类型(16-bit BrainFloat)。QLoRA 将权重从存储数据类型反量化为计算数据类型,以执行前向和后向传播,但仅计算 16-bitBrainFloat 的 LoRA 参数的权重梯度。权重仅在需要时才解压缩,因此在训练和推理期间内存使用率都能保持较低水平。