使用LoRA微调大型语言模型
作者: SAMLab 来源: SAMLab
报告者:邓宏宇
分享论文:
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
摘要 :
LoRA(Low-Rank Adaptation)是一种高效的微调技术,专为大型语言模型设计。它通过在模型的权重矩阵中引入低秩矩阵,实现了参数更新的简化。这种方法只需更新一小部分参数,就能达到与全参数微调相似的效果,显著降低了计算资源的消耗。在实际应用中,LoRA通过对预训练权重矩阵进行低秩分解,只训练分解出的低秩矩阵,而保持原有权重不变。这样,即使是计算资源有限的环境下,也能有效地微调大型模型,而且不会增加模型推理时的延迟,适合实时应用场景。LoRA的出现为自然语言处理领域带来了新的可能,使得更多研究者和开发者能够利用先进的预训练模型,推动了人工智能技术的发展和应用。
正文 :
随着大型语言模型(如GPT-3和BERT)的出现,它们在各种自然语言处理任务中展现出了卓越的性能。然而,这些模型通常包含数十亿个参数,微调这些模型需要大量的计算资源。为了解决这个问题,研究人员提出了多种不同的微调方法,然而这些方法大多具有一定的缺陷。例如全参数微调对微调采用的设备具有极高的要求,且每次都需要将整个模型的参数进行保存;冻结大部分网络层仅对剩余部分进行微调虽降低了优化的难度,但面临着待优化网络层的选择问题;添加额外网络以适应下游任务的做法虽然取得了不错的效果,但其在不同任务间切换需要不菲的开销。针对上述问题,LoRA被提出。
LoRA背后的数学原理是高维参数矩阵的低真实秩特性。具体而言,参数矩阵存在行秩和列秩,行秩指的是矩阵的线性无关的行的个数,列秩同理,行秩等于列秩。秩能够反映全连接层中关键特征的数目与位置。目前大型模型的内部维度通常极大,但这并不意味着其内部蕴藏的关键信息具有相同的高维度。实际上,网络中的矩阵基本上是过参数化的,其中存在大量冗余的参数信息。一些研究者认为,网络层矩阵的真实内部维度比人们认知中更小。这代表着我们能够采用更低维度的矩阵替代网络的高维矩阵,降低网络的体积和开销。
LoRA的核心思想是在模型的微调过程中只更新一小部分参数。具体而言,LoRA通过在Transformer模型的每一层引入两个低秩矩阵,从而替代高维的参数更新矩阵。全连接网络层的参数更新可以用下列公式进行表示,其中和是实际网络层更新的参数矩阵:
由于 同样是过参数化的高维矩阵,因此LoRA对其采用低秩分解,从而使用两个低秩的参数更新矩阵和进行替换,如下图所示。这两个矩阵分别负责降维和升维,从而模拟本征秩(intrinsic rank)。这样,只需训练这些低秩矩阵,就可以在保持模型性能的同时大幅减少参数量。
图一
LoRA作用的目标是Transformer模型中的全连接层,其中自注意力机制和前馈网络分别具有4个和2个全连接层,这些全连接层都能够用LoRA进行优化。低秩的参数更新矩阵和分别用随机正态分布和全零矩阵进行初始化,从而保证在优化开始时整个网络的等效输出仍与未优化时相同。训练过程中将冻结Tranformer网络的权重,仅对所有B和A进行优化。训练完成后,我们仅需要保存所有参数更新矩阵的参数即可,大幅降低了存储资源的消耗。而预测时则直接计算所有的结果,并叠加在原本的全连接层矩阵上即可。
LoRA相较于现有的微调方法具有较多的优势。首先,LoRA需要优化的参数量极少,极大地降低了设备的需要。其次,LoRA的稳健性和灵活性较好,无需担心灾难性遗忘的问题,且能够依据多任务需要训练不同的LoRA,不同的LoRA间还支持动态切换。最后,LoRA还能适配传统的全参数训练。仅需将参数更新矩阵的尺寸设置为原本网络矩阵的秩,即可等效为全参数微调。
实验结果显示,LoRA在多个任务上的微调效果能够与全参数微调方法相当,且需要优化的参数量极少,极大降低了设备需求。一些研究结果显示,LoRA相较于全参数训练,能够降低微调训练一个半精度模型的一半显存需要。这证明了LoRA方法的强大!
表一
目前已经出现一种协助用户使用LoRA微调大型模型的框架,PEFT。该框架提供了包含LoRA等多种微调方法。通过调用相关的方法,自动为模型插入LoRA并选定训练网络部分。该框架还提供用于微调训练的方法。
目前LoRA方法也发生了重大的改进。研究者将量化技术引入大模型的微调中,提出QloRA,进一步缩减了资源的需要。具体而言,该方法提出一种新型量化手段,在不缩减大模型性能的前提下,大幅降低模型的体积。随后再使用LoRA对量化后模型进行微调。
图二
编辑:张天瀚
更多AI工具,参考Github-AiBard123,国内AiBard123