LoRA: 大型语言模型的低秩适应
LoRA (Low-Rank Adaptation) 是一种针对大型语言模型的高效微调方法。它通过学习低秩矩阵来适应下游任务,同时冻结原始预训练模型的参数。这种方法大大减少了模型微调和存储所需的参数量,使得在部署时可以高效地进行任务切换,并且不会引入推理延迟。
主要特点
- 通过学习低秩分解矩阵对来减少可训练参数数量
- 冻结原始预训练模型权重,只训练新增的低秩矩阵
- 显著减少特定任务适配模型的存储需求
- 支持高效的多任务部署和切换
- 无推理延迟
- 在多项任务上的表现优于全量微调和其他高效微调方法
性能表现
在 GLUE 基准测试中,LoRA 在 RoBERTa 和 DeBERTa 模型上取得了与全量微调相当或更优的结果,同时只需训练和存储很小一部分参数。例如:
- RoBERTa base 模型上,LoRA 仅训练 0.8M 参数就达到了与全量微调 125M 参数相当的效果
- DeBERTa XXL 模型上,LoRA 训练 4.7M 参数就超过了全量微调 1.5B 参数的效果
在 GPT-2 模型上,LoRA 也优于全量微调和其他高效微调方法(如 Adapter、Prefix Tuning),在 E2E NLG Challenge、DART 和 WebNLG 等任务上取得了最佳或接近最佳的结果。
使用方法
使用 LoRA 非常简单:
- 安装 loralib 包
- 将需要适配的层替换为 loralib 中的对应实现
- 在训练前标记只有 LoRA 参数可训练
- 保存检查点时只保存 LoRA 参数
- 加载检查点时使用 strict=False
优势与应用
LoRA 方法的主要优势在于:
- 参数高效:显著减少了可训练参数数量,降低了计算和存储开销
- 性能出色:在多种任务上达到或超过全量微调的效果
- 灵活适配:可以应用于模型的不同层和组件
- 快速部署:支持高效的多任务切换,无需重新加载大模型
这使得 LoRA 特别适合于需要频繁适配和部署大型语言模型的场景,如个性化服务、多领域应用等。
总的来说,LoRA 为大型语言模型的高效适配提供了一种简单有效的解决方案,有望推动大模型在更多实际应用中的落地。