LoRA:大型语言模型的低秩调整.
神经网络包含很多全连接层,其借助于矩阵乘法得以实现,然而很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后,模型中权重矩阵其实具有很低的本征秩(intrinsic rank),因此本文作者认为权重更新的那部分参数矩阵可以随机投影到较小的子空间中进行有效的学习,可以理解为针对特定的下游任务这些权重矩阵就不要求满秩。
LoRA的核心思想就是通过低秩分解来模拟参数的改变量,从而以极小的参数量来实现大模型的间接训练。
在涉及到矩阵相乘的模块,在原始矩阵乘法旁边增加一个新的通路,通过两个矩阵$A,B$相乘,第一个矩阵$A$负责降维,第二个矩阵$B$负责升维,中间层维度为$r$,用来模拟微调后矩阵的本征秩。
可训练层维度和预训练模型层维度一致为$d$,先将维度$d$通过全连接层降维至$r$,再从$r$通过全连接层映射回$d$维度,其中$r< <d$,这样矩阵计算就从$d^2$变为$2dr$,参数量减少很多。
在下游任务训练时,固定模型的其他参数,只优化新增的矩阵权重参数,并将预训练模型与新增的通路两部分的结果加起来作为最终的结果(两边通路的输入跟输出维度是一致的)。
\[h = W_0x+\Delta Wx = W_0x+BAx\]第一个矩阵$A$的权重参数会通过高斯函数初始化,而第二个矩阵$B$的权重参数则会初始化为零矩阵,这样能保证训练开始时新增的通路$BA=0$对模型结果没有影响。
在推理时,只要将训练完成的矩阵乘积$BA$跟原本的权重矩阵$W$加到一起作为新权重参数替换原本的$W$即可,对于推理来说,不会增加额外的计算资源。
\[h = W_0x+BAx= (W_0+BA)x\]Transformer的权重矩阵包括Attention模块里用于计算query, key, value的$W_q, W_k, W_v$以及多头attention的$W_o$,以及MLP层的权重矩阵。LoRA只应用于Attention模块中的4种权重矩阵,而且通过消融实验发现同时调整 $W_q$ 和 $W_v$ 会产生最佳结果。
实验还发现,保证权重矩阵的种类的数量比起增加隐藏层维度$r$更为重要,增加$r$并不一定能覆盖更加有意义的子空间。
关于秩的选择,通常情况下,$r=4,8,16$即可。
通过实验发现在众多数据集上,LoRA在只训练极少量参数的前提下,最终在性能上能和全量微调匹配,甚至在某些任务上优于全量微调。