paper:LoRA: Low-Rank Adaptation of Large Language Models(https://arxiv.org/pdf/2106.09685.pdf)
简介
自然语言处理目前存在一个重要范式:一般领域数据的大规模预训练,对特定任务或领域的适应(finetune)。
但是随着预训练语言模型越来越大,这个范式存在以下问题:
基于上述背景,论文作者得益于前人的一些关于内在维度(intrinsic dimension)的发现:模型是过参数化的,它们有更小的内在维度,模型主要依赖于这个低的内在维度(low intrinsic dimension)去做任务适配。假设模型在任务适配过程中权重的改变量是低秩(low rank)的,由此提出低秩自适应(LoRA)方法,LoRA允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预先训练的权重不变。
方法
LoRA的实现思想很简单,如下图所示,就是冻结一个预训练模型的矩阵参数,并选择用A和B矩阵来替代,在下游任务时只更新A和B。
结合图片来看,LoRA的实现流程如下:
实现
接下来我们从公式上解释LoRA的实现。
假设要在下游任务微调一个预训练语言模型(如GPT3),则需要更新预训练模型参数,公式表示如下:
W0是预训练模型初始化的参数,ΔW就是需要更新的参数。如果是全参数微调,则它的参数量=W0参数量(如果是GPT3,则ΔW≈175B)。从这可以看出要全参数微调大语言模型,小家小户是不可能的。