LoRA微调方法详解:从原理到本征维度
LoRA微调方法详解:从原理到本征维度
LoRA(Low-Rank Adaptation)是近年来在大语言模型微调领域备受关注的技术。它通过低秩分解的方法,仅需训练少量参数就能使大模型在特定下游任务中达到很好的效果。本文将深入探讨LoRA的工作原理及其背后的理论基础——本征维度(Intrinsic Dimension),帮助读者理解这一技术的核心思想。
1. LoRA简介
1.1 LoRA简介
LoRA(Low-Rank Adaptation of Large Language Models)是在ICLR 2022年提出的一种大模型微调方法。其核心思想是利用低秩适配(low-rank adaptation)技术,使得大模型在适配下游任务时仅需训练少量参数就能达到很好的效果。
LoRA的微调过程如下:在预训练好的模型结构旁边加入A和B两个结构,这两个结构的参数分别初始化为高斯分布和0。A的输入维度和B的输出维度与原始模型相同,而A的输出维度和B的输入维度远小于原始模型的维度,这正是low-rank的体现。在训练时只更新A、B的参数,预训练好的模型参数保持不变。在推断时,通过重参数化(reparametrization)思想将AB与W合并,这样既能在新任务上达到fine-tune整个模型的效果,又不会增加推断的耗时。
1.2 LoRA基础原理
大语言模型中包含大量的线性变换层,其中参数矩阵的维度通常很高。研究人员发现模型在针对特定任务进行适配时,参数矩阵往往是过参数化的,其存在一个较低的内在秩。为了解决这一问题,LoRA提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新,从而减少适配下游任务所需要训练的参数。
给定一个参数矩阵 (W),其更新过程可以一般性地表达为:
[W = W_0 + \Delta W]
其中,(W_0) 是原始参数矩阵,(\Delta W) 是更新的梯度矩阵。LoRA的基本思想是冻结原始矩阵 (W_0 \in \mathbb{R}^{H \times H}),通过低秩分解矩阵 (A \in \mathbb{R}^{H \times R}) 和 (B \in \mathbb{R}^{H \times R}) 来近似参数更新矩阵 (\Delta W = A \cdot B^\top),其中 (R \ll H) 是减小后的秩。
在微调期间,原始的矩阵参数 (W_0) 不会被更新,低秩分解矩阵 (A) 和 (B) 则是可训练参数用于适配下游任务。在前向传播过程中,原始计算中间状态 (h = W_0 \cdot x) 的公式修改为:
[h = W_0 \cdot x + A \cdot B^\top \cdot x]
在训练完成后,进一步将原始参数矩阵 (W_0) 和训练得到的权重 (A) 和 (B) 进行合并:
[W = W_0 + A \cdot B^\top]
得到更新后的参数矩阵。因此,LoRA微调得到的模型在解码过程中不会增加额外的开销。
1.3 LoRA相关论文
LoRA的灵感来源于两篇关于本征维度的研究论文:
- MEASURING THE INTRINSIC DIMENSION OF OBJECTIVE LANDSCAPES,发表在ICLR 2018
- INTRINSIC DIMENSIONALITY EXPLAINS THE EFFECTIVENESS OF LANGUAGE MODEL FINE-TUNING,发表在ACL 2021
2. 本征维度是什么?
本征维度的概念在第一篇论文中提出。训练一个神经网络通常包括以下步骤:
- 对于一个给定的数据集,设计网络结构并选择对应的损失函数
- 对网络中的参数进行随机初始化
- 训练网络使得损失函数越来越低
训练阶段可以认为是在一个固定的目标图(objective landscape)上寻找有效的路径。这里的目标图是固定的,因为在数据集和网络结构固定下来后,待优化的问题就已经定义好了。
对于一个参数量为D的模型,训练该模型意味着在D维空间上寻找有效的解。文章认为D可能是冗余的,可能实际上只需要优化其中的d个参数就可以找到一个有效的解。用公式表示如下:
[\theta = \theta_0 + P \cdot \phi]
其中 (\theta) 表示D维的优化参数,(\theta_0) 表示随机初始化的一个参数且在训练时是不进行更新的,P是一个随机初始化的D×d大小的矩阵且训练时也不进行更新,(\phi) 表示待优化的d维参数。也就是说可以在训练网络时只更新d维参数,就可以达到该网络应有的效果。那么这个d就是所谓的该模型的本征维度。
上图中,蓝色部分为初始化好的网络参数,绿色为 (\theta_0),红色为 (\phi)。网络训练的时候只训练红色部分,其它参数都是固定的。d就是本征维度。
上面讲的只更新d维参数,让网络达到应有的效果,那么什么应有的效果呢?文章定义,在只更新d维参数的情况下,网络效果达到训练原始模型时效果的90%时,那么就认为达到了“应有的效果”,并且d就为本征维度。例如在做mnist这个数字分类任务时,如果原始模型精度能到0.9,那么在只更新d维参数的时候,精度能够达到90%×0.9=0.81,就认为这时候的d为本征维度记为。