comments: true title: "LoRA: 大语言模型的低秩适配" 前言 随着预训练语言模型规模的不断增大,全量微调(即重新训练所有模型参数)需要花费巨大的计算资源,而且难以保证性能。为解决这个问题,微软研究院提出了低秩适配(Low-Rank Adaptation, LoRA)方法,即通过低秩分解的方式高效地微调大规模语言模型。 核心思想 LoRA 的核心思想是通过只更新一小部分参数,从而高效地将大型语言模型适配到下游任务的问题。 这种方法冻结整个预训练权重矩阵 $W0$,然后将权重更新 $\Delta W$ 分解为低秩表示。即 $$ W = W0 + \Delta W = W0 + BA \tag{1} $$ 其中: $W0$ 表示原始的预训练权重。
comments: true title: "LoRA: 大语言模型的低秩适配"
随着预训练语言模型规模的不断增大,全量微调(即重新训练所有模型参数)需要花费巨大的计算资源,而且难以保证性能。为解决这个问题,微软研究院提出了低秩适配(Low-Rank Adaptation, LoRA)方法,即通过低秩分解的方式高效地微调大规模语言模型。
LoRA 的核心思想是通过只更新一小部分参数,从而高效地将大型语言模型适配到下游任务的问题。
这种方法冻结整个预训练权重矩阵 W_0,然后将权重更新 \Delta W 分解为低秩表示。即
其中:
在训练过程中,输入 x 乘以原始权重矩阵 (W_0x) 并加上低秩适配 (BAx) 的结果。由于 r 远小于 d 和 k,因此与更新整个 W_0 相比,可训练参数的数量大大减少。
!!! note
为了确保训练的稳定性和效率,LoRA 对低秩矩阵的初始化和输出进行了特殊处理:
- $A$ 矩阵使用高斯分布进行随机初始化,为模型引入了随机性,有助于探索更广泛的参数空间。 - $B$ 矩阵初始化为零矩阵,这样在训练开始时,LoRA 的输出主要由原始模型决定,然后逐渐加入低秩适配的影响。 - **为了控制低秩适配对最终输出的影响,将 $BAx$ 的结果乘以一个缩放因子** $\frac{\alpha}{r}$,通过这种缩放操作,可以平衡原始模型和低秩适配的贡献,防止低秩适配过度影响最终输出。 - $\alpha$ 是一个常数,通常设置为 $1$ 或根据经验进行调整。 - $r$ 是低秩矩阵的秩。
在推理时,将预训练的低秩适配矩阵 A 和 B 加回到原始预训练权重矩阵 W 上,得到一个新的权重矩阵,即上文提到的 W 。它包含了原始预训练模型的信息和 LoRA 在训练过程中学习到的特定任务知识。
!!! note
具体来说,权重合并的过程如下:
1. 将训练好的 $B$ 和 $A$ 矩阵相乘,然后将结果乘以缩放因子 $\frac{\alpha}{r}$ 。 2. 将上述的最后结果加到原始权重矩阵 $W_{0}$ 上,得到新的权重矩阵 。 3. 使用新权重矩阵进行推理: 使用新的权重矩阵 $W$ 对输入 $x$ 进行推理,得到最终的输出。
LoRA 为微调大型语言模型提供了几项显著优势:
为了在实践中有效地利用 LoRA ,可以考虑以下建议: