乐趣区

关于深度学习:LoRA大模型的低秩自适应微调模型

对于大型模型来说,从新训练所有模型参数的全微调变得不可行。比方 GPT-3 175B,模型蕴含 175B 个参数吗,无论是微调训练和模型部署,都是不可能的事。所以 Microsoft 提出了低秩自适应 (Low-Rank Adaptation, LoRA),它解冻了事后训练好的模型权重,并将可训练的秩的合成矩阵注入到 Transformer 体系结构的每一层,从而大大减少了上游工作的可训练参数数量。

LoRA

对于预训练的权重矩阵 W0,能够让其更新受到用低秩合成示意后者的束缚:

在训练过程中,W0 被解冻,不承受梯度更新,而 A 和 B 蕴含可训练参数。当 h =W0x 时,修改后的正向流传变为:

对 A 应用随机高斯初始化,对 B 应用零初始化,因而 ΔW=BA 在训练开始时为零(这点须要留神)。

这种办法的一个长处是,当部署到生产环境中时,只须要计算和存储 W =W0+BA,并像平常一样执行推理。与其余办法相比,没有额定的提早,因为不须要附加更多的层。

在 Transformer 体系结构中,自关注模块中有四个权重矩阵 (Wq、Wk、Wv、Wo),MLP 模块中有两个权重矩阵。LoRA 只对上游工作调整关注权重,并解冻 MLP 模块。所以对于大型 Transformer,应用 LoRA 可缩小高达 2 / 3 的 VRAM 使用量。比方在 GPT-3 175B 上,应用 LoRA 能够将训练期间的 VRAM 耗费从 1.2TB 缩小到 350GB。

后果展现

采纳 HuggingFace Transformers 库中的预训练 RoBERTa base (125M) 和 RoBERTa large (355M) 还有 DeBERTa XXL (1.5B) 进行了评估。它们通过不同的微调办法进行微调。

在大多数状况下,应用 LoRA 能够在 GLUE 上获得最佳性能。

GPT-3 175B 在 WikiSQL 和 mnli 匹配的几种自适应办法的可训练参数数的比拟

能够看到应用 GPT-3, LoRA 匹配或超过所有三个数据集的微调基线。

Stable Diffusion

Lora 首先被利用在大语言模型上,然而可能被更多人晓得的还是他在 SD 上的利用:

在 Stable Diffusion 微调的状况下,LoRA 能够利用于将图像示意与形容它们的提醒分割起来的穿插注意力层。下图的细节并不重要,只需晓得黄色块是负责构建图像和文本示意之间关系的块。

所以能够看到这样训练进去的自定义 Lora 模型会十分的小。

我集体试验:Stable Diffusion 进行全面的微调须要起码 24G 的显存。然而应用 Lora,批处理大小为 2 的单过程训练能够在单个 12GB GPU 上实现 (不应用 xformer 的 10GB,应用 xformer 的 6GB)。

所以 Lora 在图像生成畛域也是十分好的一个微调模型的形式。如果你想理解更多,这里是论文地址:

https://avoid.overfit.cn/post/407a85d672384969848f8bc5cb9bc5fe

退出移动版