LoRA:大模型的低秩自适应微调模型

43ec911fe30482743cd1c12a8f1e2f74.png

来源:DeepHub IMBA
本文约1000字,建议阅读5分钟Low-Rank Adaptation大大减少了下游任务的可训练参数数量。

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

LoRA

f8bfdbd3402abef602bdcc5dd8a16149.png

对于预训练的权重矩阵W0,可以让其更新受到用低秩分解表示后者的约束:

2dec11027a19db212a1ccdb9a74738b8.png

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

6ae3c93e14e706deec4a165fdd25a98d.png

对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。

结果展示

797550fb0e5e59b1998246e57be86b0d.png

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

在大多数情况下,使用LoRA可以在GLUE上获得最佳性能。

75618c01a8a39349b047fd6f04062cb6.png

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

9855e68e359b424507ab808aec2774ee.png

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

Stable Diffusion

Lora首先被应用在大语言模型上,但是可能被更多人知道的还是他在SD上的应用:

d9f4f77be86f7bf35582f502a9071385.png

在Stable Diffusion微调的情况下,LoRA可以应用于将图像表示与描述它们的提示联系起来的交叉注意力层。下图的细节并不重要,只需知道黄色块是负责构建图像和文本表示之间关系的块。

117a816487a9b48e496503bd500d7d4c.png

所以可以看到这样训练出来的自定义Lora模型会非常的小。

我个人实验:Stable Diffusion进行全面的微调需要最少24G的显存。但是使用Lora,批处理大小为2的单进程训练可以在单个12GB GPU上完成(不使用xformer的10GB,使用xformer的6GB)。

所以Lora在图像生成领域也是非常好的一个微调模型的方式。如果你想了解更多,这里是论文地址:

https://openreview.net/forum?id=nZeVKeeFYf9

编辑:文婧

aeae0e1360b205cf76f92679cc3ee4f1.png

### 自适应 (LoRA) 模型微调与参数高效调整 #### 定义与原理 自适配(LoRA)[^3]是一种旨在减少预训练模型在特定下游任务上微调所需资源的技术。这种方法的核心在于将原本庞大的全连接层或注意力机制中的权重矩阵分解成两个较小维度的矩阵乘积形式,即$W=U\cdot V^{T}$,其中$U,V \in R^{r\times d}, r<d$。这种做法不仅能够大幅度削减待优化变量数目,而且有助于缓解过拟合现象。 #### 实现细节 具体来说,在Transformer架构里应用LoRA意味着只允许某些选定位置处的小规模新增模块参与反向传播过程并接受梯度更新操作;与此同时保持其余大部分网络组件处于冻结状态不变动。对于每一个被选中的线性变换而言,则会额外附加一对形状分别为$(d,r)$和$(r,d)$的新张量作为其扩展部分[^1]。 当执行评估模式(`model.eval()`), LoRA 参数将会同对应的预训练参数相融合以确保推理阶段无任何性能损耗; 而切换回训练模式 (`model.train()`) 后又自动恢复原状以便继续迭代改进[4]. ```python from peft import get_peft_model, LoraConfig, TaskType lora_config = LoraConfig( task_type=TaskType.SEQ_CLS, inference_mode=False, r=8, ) peft_model = get_peft_model(model, lora_config) ``` 上述代码片段展示了如何配置以及获取一个带有LoRA设置的目标分类任务专用PEFT(Prompt Engineering Fine-Tuning)版本transformer model实例. #### 性能优势 相较于其他选择性的参数高效微调方案(SaRA),LoRA可以在GPU内存占用方面提供超过百分之四十以上的节约效果,并且仅需极少量改动即可完成集成部署工作流转换[2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值