7.0. LoRA Improvements in fine-tuning
Last updated
Last updated
使用 LoRA 大大减少了所需的计算 来 微调 已经训练好的模型。
LoRA 使得通过仅更改模型的 小部分 来高效地微调 大型模型 成为可能。它减少了需要训练的参数数量,从而节省了 内存 和 计算资源。这是因为:
减少可训练参数的数量:LoRA 将 权重矩阵分成两个较小的矩阵(称为 A 和 B),而不是更新模型中的整个权重矩阵。这使得训练 更快,并且需要 更少的内存,因为需要更新的参数更少。
这是因为它不是计算一个层(矩阵)的完整权重更新,而是将其近似为两个较小矩阵的乘积,从而减少了更新计算:\
2. **保持原始模型权重不变**:LoRA 允许您保持原始模型权重不变,仅更新 **新的小矩阵**(A 和 B)。这很有帮助,因为这意味着模型的原始知识得以保留,您只需调整必要的部分。 3. **高效的任务特定微调**:当您想将模型适应于 **新任务** 时,您只需训练 **小的 LoRA 矩阵**(A 和 B),而将模型的其余部分保持不变。这比重新训练整个模型 **高效得多**。 4. **存储效率**:微调后,您只需存储 **LoRA 矩阵**,而不是为每个任务保存 **整个新模型**,这些矩阵与整个模型相比非常小。这使得将模型适应于多个任务而不占用过多存储变得更容易。
为了在微调过程中实现 LoraLayers 而不是线性层,这里提出了以下代码 https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb: