paper: https://arxiv.org/pdf/2106.09685.pdf
code: https://github.com/microsoft/LoRA
摘要
作者提出了低秩自适应,或称LoRA,它冻结了预先训练的模型权值,并将可训练的秩分解矩阵注入变压器架构的每一层,大大减少了下游任务的可训练参数的数量。
学习到的过度参数化模型实际上存在于一个较低的内在维度上。作者假设模型适应过程中权重的变化也具有较低的“内在秩”,这导致了作者提出的低秩适应(LoRA)方法。LoRA允许作者通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预先训练的权值冻结,如图1所示。
方法
一个神经网络包含许多密集的层,它们可以执行矩阵乘法。这些层中的权重矩阵通常具有全秩。Aghajanyan等人在2020年的一项研究发现,即预训练语言模型在面向特定任务时显示出一种特殊的属性:它们具有低“内在维度”。这意味着,尽管这些模型可能包含数百万到数十亿的参数,代表着极其高维的参数空间,但当它们适应或学习新的特定任务时,实际上只需要一个相对较小的参数子集。简单来说,模型能够在这样一个由较少参数构成的“更小的子空间”内有效地学习和适应。受此启发,作者假设权重的更新在适应过程中也有一个较低的“内在秩”。对于预先训练的权值矩阵 W 0 ∈ R d × k W_0∈R^{d×k} W0∈Rd×k,作者用低秩分解 W 0 + ∆ W = W 0 + B A W_0 +∆W=W_0+BA W0+∆W=W0+BA表示后者来约束其更新,其中 B ∈ R d × r B∈R^{d×r} B∈Rd×r, A ∈ R r × k A∈R^{r×k} A∈Rr×k和秩 r ≪ m i n ( d , k ) r \ll min(d,k) r≪min(d,k)。在训练过程中, W 0 W_0 W0被冻结,不接收梯度更新,而A和B包含可训练的参数。注意, W 0 W_0 W0和 ∆ W = B A ∆W=BA ∆W=BA都与相同的输入相乘,它们各自的输出向量按坐标求和。对于 h = W 0 x h = W_0x h=W0x,作者修改后的前向公式为: h = w 0 x + △ W x = w 0 x + B A x h=w_0x+\bigtriangleup Wx=w_0x+BAx h=w0x+△Wx=w0x+BAx。如图1所示,首先初始化(对A使用高斯初始化,B初始化为0),所以 ∆ W = B A ∆W=BA ∆W=BA在训练开始时为零。然后作者用 α r \frac{\alpha}{r} rα缩放 ∆ W x ∆Wx ∆Wx(即相乘),其中α是r范围的一个常数,固定 α \alpha α一开始的 r r r,将 r r r作为超参数调整。当作者改变r时,这种缩放有助于减少重新调优超参数的需要。