大模型微调系列之LoRA详解

大模型微调之LoRA

1 大模型微调的动机

对于在开源大模型的基础上进行修改,创建可自用的大模型用于自定义的对话/翻译/推理/做题等业务,微调都是一个绕不开的研究方向。此外,由于个人的经济能力限制,可具备的计算资源也是有限的,且普通机箱的显卡槽位为1个,通常为单张RTX 4090 (24 GB显存)。而4卡槽/6卡槽工作站的显存可达到96 GB - 288GB (采用单张 24 GB 或 单张 48 GB 的显卡,型号包括90系,或A5000/A6000)。上述配置想开发自己的大模型的周期过长,且取得的效果也是有限的,此外目前开源社区 (huggingface魔搭社区GitHub) 中也存在大量的不同规格的开源大模型,如 (LLaMA 系列、通义千问 系列 等) 。以通义千问为例,各尺寸模型的微调所需计算资源如下:

微调方法名称方法类别精度7B13B30B72B110B
FULL全参数微调AMP120 GB240 GB600 GB1200 GB2000 GB
FULL全参数微调16 bit60 GB120 GB300 GB600 GB900 GB
Freeze部分参数微调16 bit20 GB40 GB80 GB200 GB360 GB
LoRA/GaLore/BAdam部分参数微调16 bit16 GB32 GB64 GB160 GB240 GB
QLoRA部分参数微调8 bit16 GB32 GB64 GB160 GB240 GB
QLoRA部分参数微调4 bit10 GB20 GB40 GB80 GB140 GB
QLoRA部分参数微调2 bit4 GB8 GB16 GB24 GB48 GB

如上表所示,全参数微调所需的计算资源仍然较大,但低精度微调的准确度又较低,因此选取较中间的部分参数微调方式,如LoRA (16 bit),可一定程度上达到精度与计算资源的平衡。本文就将结合原文介绍部分参数微调领域的经典方法: LoRA。

2 微调方法背景介绍

该论文的原文为:

LoRA: Low-Rank Adaptation of Large Language Models

在这里插入图片描述

如论文[1]题目所示,LoRA是 Low-Rank Adaptation 的简写,意为低秩自适应。动机为下列假设:

过参数化模型实际上存在于较低的内生性纬度中,在模型参数微调时,若假设其过参数化模型也存在于较低纬度中,则可通过仅对这些纬度进行微调,已达到可在降低计算量的并通知获取与全参数微调相同甚至更好的效果。

根据论文中的结论,使用LoRA可相对于传统方法提高3倍的训练效率。

3 论文主要内容

3.1 问题叙述

论文提出的方法是一般性的,但为了方便叙述,选定了大模型最常见的语言建模任务作为背景:

给定预训练自回归语言模型 (如 GPTQwen 等) P Φ ( y ∣ x ) P_\Phi(y|x) PΦ(yx) ,带有可训练参数 Φ \Phi Φ 。该模型中的每个下游任务 (downstream task) 由 Z = { ( x i , y i ) } i = 1 , . . . , N \mathcal{Z}=\{(x_{i},y_{i})\}_{i=1,...,N} Z={(xi,yi)}i=1,...,N 构成的数据集来表征(这里是因为大模型的数据驱动性比较强,基本是通过数据集来驱动新的模型业务),其中 x i x_{i} xi 为输入词元(input token), y i y_{i} yi 为输出词元(output token)。

在全参数微调时,上述模型可被初始化为预训练权重 Φ 0 \Phi_0 Φ0 ,并可通过最大化下列条件性语言模型并被更新为 Φ 0 + Δ Φ \Phi_0+\Delta\Phi Φ0+ΔΦ
max ⁡ Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( P Φ ( y t ∣ x , y < t ) ) \max_\Phi\sum_{(x,y)\in\mathcal{Z}}\sum_{t=1}^{|y|}\log\left(P_\Phi(y_t|x,y_{<t})\right) Φmax(x,y)Zt=1ylog(PΦ(ytx,y<t))
在上述过程中,全参数微调的缺点就在于,每次在进行微调时,均有更新后的参数量与初始化参数量相同,即 ∣ Δ Φ ∣ = ∣ Φ 0 ∣ |\Delta\Phi| = |\Phi_0| ∣ΔΦ∣=Φ0 ,相当于重新训练了一个参数,这对于一些比较大的模型,如Qwen1.5-110B, 就需要更新其中的全部1100亿个参数。而LoRA的参数微调,则通过对参数更深层次编码,每次微调时仅需要更新 ∣ Θ ∣ ≪ ∣ Φ 0 ∣ |\Theta|\ll|\Phi_0| ∣Θ∣Φ0 个参数即可完成微调,其更新过程可由下式获取
max ⁡ Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ log ⁡ ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) \max_{\Theta}\sum_{(x,y)\in\mathcal{Z}}\sum_{t=1}^{|y|}\log\left(p_{\Phi_0+\Delta\Phi(\Theta)}(y_t|x,y_{<t})\right) Θmax(x,y)Zt=1ylog(pΦ0+ΔΦ(Θ)(ytx,y<t))
对于一些较大的模型,如GPT-3 175B,使用LoRA进行参数微调需要更新的参数,甚至仅需全参数微调所需更新参数量的 0.01%

综上,全参数微调与LoRA等部分参数微调方法的区别可用下图表述:

project badge
微调效果图
对上述过程进行简化,则可表示为:

给定预训练后的权重矩阵 W 0 ∈ R d × k W_0\in\mathbb{R}^{d\times k} W0Rd×k ,及其全参数微调的结果, W 0 + Δ W W_0+\Delta W W0+ΔW 则基于LoRA的部分参数微调方法则主要是通过将微调矩阵通过低秩分解进行简化,即
W 0 + Δ W = W 0 + B A W_0+\Delta W=W_0+BA W0+ΔW=W0+BA
其中, B ∈ R d × r , A ∈ R r × k B \in \mathbb{R}^{d\times r},A \in \mathbb{R}^{r\times k} BRd×r,ARr×k r ≪ min ⁡ ( d , k ) r\ll\min(d,k) rmin(d,k) 。在训练过程中, W 0 W_0 W0 也是固定不变的,且不会受到梯度更新的影响(这也是为什么通过 LLaMA Factory 进行LoRA微调后,需要有merge的这个操作的原因)。则对形如 h = W 0 x h=W_0x h=W0x 的前向传播过程,有
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

project badge
LoRA结构图(LoRA原文中的figure 1)

如图一所示,在进行微调初始化时,通常设置 A A A 的初始值为期望值是0的标准高斯分布, B B B 的初始值为0矩阵,并可立即得到 W 0 = B A W_0=BA W0=BA 的初始也为0。 对 W 0 x W_0x W0x 项的放缩主要通过 α / r \alpha / r α/r 来完成,并有 α \alpha α r r r 中的一个常数。在进行实际运行时,通常取 α = r 0 \alpha = r_0 α=r0 (此处的 r 0 r_0 r0 指的是第一个尝试的秩阶次)以避免超参数的重复调整。

此外, 由于大模型的基底一般是transformer,LoRA论文中关于transformer的应用也有较大的研究价值。根据原文的叙述,LoRA对自注意力模块设定了4个权重矩阵 W q , W k , W v , W o W_q,W_k,W_v,W_o Wq,Wk,Wv,Wo ,分别对应查询、键、值以及输出,对多层感知机(multi-layer perception, MLP)设定了2个权重矩阵。其中,对 W q , W k , W v W_q,W_k,W_v Wq,Wk,Wv 均有尺度为 d m o d e l × d m o d e l d_{model}\times d_{model} dmodel×dmodel 。在进行LoRA微调时,对多层感知机对应的权重进行固定。

3.2 重要实验结果

实验结果中,对不同数据集的结果可参照原文,此处仅关注与LoRA训练过程中的调参相关的消融实验部分。

3.2.1 应该将LoRA应用于哪些参数矩阵?

论文首先固定了参数的数量为 18 M B 18MB 18MB ,即LoRA的秩阶次为8。当应用于单个参数矩阵时,每个参数矩阵的阶次为8;当应用于2个参数矩阵时,每个参数矩阵的阶次为4;当应用于2个参数矩阵时,每个参数矩阵的阶次为2。具体实验结果如下表

project badge
消融实验结果1
3.2.2 对LoRA来说最优的阶次是什么?

当阶次较低时,LoRA也可达到较好的实验结果。因此,需要进行低阶次,多参数微调。

project badge
消融实验结果2

3 参考文献

[1] Hu, Edward J., et al. “Lora: Low-rank adaptation of large language models.” arXiv preprint arXiv:2106.09685 (2021). [PDF]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值