只用很少的数据,就能让大模型在原本表现没那么好的下游任务中“脱颖而出”,成为这个任务的专家。
ICLR2022
《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGEMODELS》
利用低秩适配(low-rankadaptation)的方法,可以在使用大模型适配下游任务时只需要训练少量的参数即可达到一个很好的效果。
LoRA利用对应下游任务的数据,只通过训练新加部分参数来适配下游任务。
而当训练好新的参数后,利用重参的方式,将新参数和老的模型参数合并,这样既能在新任务上到达fine-tune整个模型的效果,又不会在推断的时候增加推断的耗时。

A的输出维度和B的输入维度是一个远小于原始模型输入输出维度的值,这也就是
low-rank
的体现(有点类似Resnet的结构),这样做就可以极大地减少待训练的参数了。
低秩矩阵是指在线性代数中,其秩(即矩阵中线性无关的行或列的最大数目)较低的矩阵。矩阵的秩反映了它所包含的信息的多少和复杂程度。
低秩矩阵的特点和应用:
数据压缩
:低秩矩阵可以用来有效地压缩数据。如果一个大矩阵可以近似为一个低秩矩阵,那么存储和处理这个矩阵所需的资源就会大大减少。
特征提取
:在机器学习和统计分析中,低秩矩阵常用于特征提取和数据降维。例如,主成分分析(PCA)就是一种通过寻找数据的低秩表示来提取关键特征的技术。
噪声过滤:低秩矩阵也常用于噪声过滤和数据恢复。在这些应用中,假设数据的真实结构可以由低秩矩阵表示,而噪声和异常值导致的额外复杂性可以被去除。
图像处理:在图像处理中,低秩矩阵常用于图像去噪、压缩和恢复。
推荐系统:在推荐系统中,低秩矩阵分解技术可以帮助发现用户和物品之间的潜在关系,从而提高推荐的准确性。
全量微调Full Fine-Tuning
全量微调是指在预训练的大型模型基础上
调整所有层和参数,使其适应特定任务的过程。这一过程使用较小的学习率和特定任务的数据进行,可以充分利用预训练模型的通用特征
高效微调
高效微调(PEFT)是一种参数微调技术,它允许在预训练模型上
仅微调少量或额外的模型参数,同时固定大部分预训练参数,从而显著降低训练成本。这种方法相比于全参数微调,在没有微调过的大语言模型上性能略差,但在已经微调过的模型上,性能接近
PEFT(Parameter-Efficient Fine-Tuning)是hugging face开源的一个参数高效微调大模型的工具,里面集成了4种微调大模型的方法,可以通过微调少量参数就达到接近微调全量参数的效果,使得在GPU资源不足的情况下也可以微调大模型。
微调预训练模型的方法:
微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。
微调顶层:只微调预训练模型的顶层,以适应新的任务。
冻结底层:将预训练模型的底层固定不变,只对顶层进行微调。
逐层微调:从底层开始,逐层微调预训练模型,直到所有层都被微调。
迁移学习:将预训练模型的知识迁移到新的任务中,以提高模型性能。这种方法通常使用微调顶层或冻结底层的方法。
参数高效性微调方法中实现最简单的方法还是Prompt tuning(也就是我们常说的P-Tuning),固定模型前馈层参数,仅仅更新部分embedding参数即可实现低成本微调大模型。
LoRA理论上计算复杂度:和全参数微调相当
计算项
|
全参数微调
|
LoRA
|
主干模型(前向计算)
|
√
|
√
|
主干模型(梯度)
|
√
|
√
|
LoRA部分(前向+梯度)
|
×
|
√
|
LoRA理论上显存占用:比全参数微调更低(主要来自优化器部分)
显存占用 | 全参数微调 | LoRA |
主干模型(模型参数) | √ | √ |
主干模型(梯度) | √ | √ |
主干模型(中间激活) | √ | √ |
主干模型(优化器) | √ | × |
LoRA部分 | × | √ |