【第三十六周】LoRA 微调方法

news2025/5/19 13:01:51

LoRA

  • 摘要
  • Abstract
  • 文章信息
  • 引言
  • 方法
    • LoRA的原理
    • LoRA在Transformer中的应用
    • 补充
    • 其他细节
  • 实验与分析
    • LoRA的使用
    • 论文实验结果分析
  • 总结

摘要

本篇博客介绍了LoRA(Low-Rank Adaptation),这是一种面向大规模预训练语言模型的参数高效微调方法,旨在解决全模型微调带来的高计算与存储成本问题。其核心思想是在不修改原始模型权重的前提下,引入一对可训练的低秩矩阵,以近似模拟微调过程中权重的变化,从而以极小的参数量实现模型在下游任务上的快速适配。具体来说,LoRA 针对 Transformer 中的线性层(如注意力机制中的投影矩阵)进行改造,将参数更新表示为两个小矩阵 A A A B B B的乘积 Δ W = B A \Delta W = BA ΔW=BA,训练时仅更新这两个矩阵,部署时可与原始权重合并,保持推理效率不变。实验表明,LoRA 能在多种自然语言处理任务中达到接近甚至超过全量微调的性能,同时显著减少所需的可训练参数量。该方法优势在于高效、通用、部署灵活,但在模块选择、模型融合与多任务共享方面仍存在一定限制。

Abstract

This blog introduces LoRA (Low-Rank Adaptation), a parameter-efficient fine-tuning method designed for large-scale pre-trained language models. It aims to address the high computational and storage costs associated with full-model fine-tuning. The core idea of LoRA is to approximate weight updates during fine-tuning by introducing a pair of trainable low-rank matrices, without modifying the original model parameters. This enables rapid adaptation to downstream tasks with a minimal number of additional parameters. Specifically, LoRA modifies the linear layers within Transformer architectures—such as the projection matrices in attention mechanisms—by expressing the weight update as the product of two smaller matrices, Δ W = B A \Delta W = BA ΔW=BA. During training, only these matrices are updated, and at deployment time, the update can be merged into the original weights to maintain inference efficiency. Experiments show that LoRA achieves performance comparable to or even better than full fine-tuning across various natural language processing tasks, while significantly reducing the number of trainable parameters. Its advantages include efficiency, generality, and deployment flexibility, though it still faces limitations in terms of module selection, model merging, and multi-task sharing.


文章信息

Title:LoRA: Low-Rank Adaptation of Large Language Models
Author:Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen
Source:https://arxiv.org/abs/2106.09685


引言

在自然语言处理(NLP)领域,“预训练 + 微调”已成为主流范式:研究者先在大规模通用语料上训练语言模型,再针对具体下游任务进行参数更新(微调)。然而,随着模型规模的不断扩大,全模型微调(full fine-tuning)带来了极高的存储和计算成本。例如,对 GPT-3 175B(约 1750 亿参数)进行独立微调,不仅需要为每个任务保存一份同规模的模型检查点,更在部署时产生巨大的显存开销,难以在实际系统中承载与切换多任务需求。
为了解决上述瓶颈,研究者提出了多种参数高效的适配方法,包括仅更新部分参数(如 Bias-only/BitFit)、插入轻量级适配层(Adapters)或对输入进行可微调的提示优化(prefix-tuning、prompt tuning)等。但这些方法存在各自局限:部分方案会引入额外的推理延迟(Adapters),或占用原有序列长度(prefix-tuning),且在模型质量上往往难以完全匹配全模型微调的效果。
本文介绍的LoRA方法在保持原始预训练权重冻结不变的前提下,仅向 Transformer 各层注入一对低秩矩阵来分解并学习微调时的权重增量。LoRA 可以极大地减少需要微调的参数量,同时在推理时可将低秩增量与原权重合并,不引入额外延迟。

方法

传统的全模型微调(full fine-tuning)会对预训练模型的所有权重 W 0 W_0 W0进行梯度更新,导致每个下游任务都需要保存一份与原模型规模相同的参数。
全模型微调主要有以下三个问题:

  • 计算成本高,需要微调的参数与预训练好的参数数量一致。
  • 存储开销大,每个任务都要保存一份完整模型副本,占用大量硬盘空间。
  • 部署不灵活,想切换任务时,需要重新加载整套参数,速度慢且占显存。

LoRA的原理

在这里插入图片描述

  • 在原始 PLM (Pre-trained Language Model) 旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的 intrinsic rank。
  • 训练的时候固定 PLM 的参数,只训练降维矩阵 A 与升维矩阵 B 。而模型的输入输出维度不变,输出时将 BA 与 PLM 的参数叠加。
  • 用随机高斯分布初始化 A ,用 0 矩阵初始化 B ,保证训练的开始此旁路矩阵依然是 0 矩阵。

在标准微调中,会直接更新预训练权重 W W W。但在 LoRA 中,不直接改动原始的 W W W ,公式如下:
在这里插入图片描述
LoRA 的关键点在于:不直接学习 Δ W \Delta W ΔW(它的大小和W一样)而是把它拆成两个更小的矩阵 A A A B B B的乘积: Δ W = B A \Delta W = BA ΔW=BA其中 A ∈ R r × d A \in \mathbb R^{r\times d} ARr×d B ∈ R d × r B \in \mathbb R^{d\times r} BRd×r,通常 r 很小(如 4、8、16),远小于 d。
这就叫“低秩分解”,它能大大减少需要学习的参数数量。
例如,如果 W W W 是一个 1024 × 1024 1024\times 1024 1024×1024 的矩阵,有 1,048,576 个参数,而 LoRA 只需要学习两个小矩阵,总参数是 2 × 1024 × r 2\times 1024 \times r 2×1024×r,但 r = 8 r=8 r=8时,只需要 16,384 个参数,相当于只训练原始参数的约 1.6%。
训练时只更新 A A A B B B,而模型原始参数 W W W 保持不变,这样就大大减少了存储和计算需求。
另外,LoRA 把 B B B初始化为全零, A A A初始化为小的随机值,是为了让模型一开始行为不变,即 Δ W x = 0 \Delta Wx=0 ΔWx=0
LoRA的这种使用旁路更新的方法有点类似残差连接的思想,都是保证已学到的不会退化,再学其他的。

LoRA在Transformer中的应用

LoRA 方法可应用于任意密集层,论文中写的主要是Transformer层的自注意力模块,在该模块中,包含查询( W q W_q Wq)、键( W k W_k Wk)、值( W v W_v Wv)和输出投影( W o W_o Wo)。LoRA 的论文主要选择对注意力模块中的查询(Query)和数值(Value)矩阵进行插入,因为这两个部分对模型的表示能力影响很大。其他部分可以保持不变。

补充

为什么矩阵B、A不能同时为0?
这主要是因为如果矩阵 A A A 也用0初始化,那么矩阵 B B B 梯度就始终为0,无法更新参数,导致 Δ W = B A = 0 \Delta W = BA=0 ΔW=BA=0,推导如下:
对于 h = W 0 x + B A x h=W_0x+BAx h=W0x+BAx,设 h ( 2 ) = B A x h^{(2)}=BAx h(2)=BAx,则
在这里插入图片描述
因此:
在这里插入图片描述
如果矩阵 A A A 也用0初始化,那么上面的梯度就变成了0。所以矩阵 A A A也用0初始化,那么上面的梯度就变成了0。

其他细节

  • 缩放因子:由于 Δ W = B A \Delta W = BA ΔW=BA通常比较小,论文中加入了一个缩放因子 α / r \alpha /r α/r,防止它在训练过程中太弱。这个因子可以看作是学习率的调节器。
  • 推理时合并参数:在部署模型时,LoRA 可以把 Δ W \Delta W ΔW 直接加到 W W W 里变成一个新的矩阵,然后就不需要再动态计算 B A x BAx BAx 了,这样可以节省运行时计算资源。

实验与分析

LoRA的使用

目前 LORA 已经被 HuggingFace 集成在了 PEFT(Parameter-Efficient Fine-Tuning) 代码库里。

使用也非常简单,比如使用 LORA 微调 BigScience 机器翻译模型:

from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"

peft_config = LoraConfig(
    task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1
)

model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282

模型微调好之后,加载也非常简单,只需要额外加载 LORA 参数:

model.load_state_dict(torch.load(peft_path), strict=False)

论文实验结果分析

理解任务上:
在这里插入图片描述
MNLI、SST-2 、MRPC、CoLA、QNLI、QQP、RTE、STS-B表示各项任务:

  1. MNLI(Multi-Genre Natural Language Inference):该任务是一个自然语言推理任务,要求模型根据给定的前提和假设来判断它们之间的关系(蕴含、中立或矛盾)。数据集中包含来自不同文体(新闻、文学等)的句子对。
  2. SST-2(Stanford Sentiment Treebank):该任务是一个情感分析任务,要求模型判断给定句子的情感是正面还是负面。
  3. MRPC(Microsoft Research Paraphrase Corpus):该任务是一个语义相似度任务,要求模型判断给定句子对是否具有语义相似性。
  4. CoLA(Corpus of Linguistic Acceptability):该任务是一个语言可接受性任务,要求模型判断给定句子是否符合语法规则和语言习惯。
  5. QNLI(Question NLI):该任务是一个自然语言推理任务,要求模型根据给定的问题和前提,判断问题是否可以从前提中推导出来。
  6. QQP(Quora Question Pairs):该任务是一个语义相似度任务,要求模型判断给定问题对是否具有语义相似性。
  7. RTE(Recognizing Textual Entailment):该任务是一个自然语言推理任务,要求模型根据给定的前提和假设来判断它们之间的关系(蕴含或不蕴含)。
  8. STS-B(Semantic Textual Similarity Benchmark):该任务是一个语义相似度任务,要求模型判断给定句子对是否具有语义相似性,但是与MRPC不同的是,STS-B中的句子对具有连续的语义相似性等级。

可以看到 LORA 相比其它微调方法,可训练参数最少,但是整体上效果最好。

生成任务上:
在这里插入图片描述
在这里插入图片描述
在ROBbase 、GPT-2和GPT-3上,LORA 也取得了不错的效果(见上图)。

当增加微调方法的可训练参数量时,其它微调方法都出现了性能下降的现象,只有 LORA 的性能保持了稳定,见下图:
在这里插入图片描述
秩的选择:
在这里插入图片描述
实验结果显示,对于一般的任务, r r r取1,2,4,8就足够了,而一些领域差距比较大的任务可能需要更大的取值。
同时,增加 r r r 并不能提升微调的效果,这可能是因为参数量增加需要更多的语料。

总结

LoRA(Low-Rank Adaptation)是一种面向大规模预训练语言模型的参数高效微调方法,它通过引入两个低秩矩阵对权重更新进行重参数化,从而在冻结原始模型权重的基础上,仅训练极少量参数以适配下游任务。其核心结构是在特定的线性层(如注意力投影)中加入一个低秩的增量模块,训练时只更新该模块,并通过 Δ W = B A \Delta W = BA ΔW=BA的形式替代对原始权重 W W W的直接微调;推理时,该增量可以被合并进原模型中,不增加计算开销。LoRA 的工作流程包括:选择目标层、插入低秩模块、初始化并训练 A , B A,B A,B,以及部署前合并增量,实现在不影响模型性能的前提下大幅减少计算和存储成本。它的优势在于参数效率高、推理延迟低、适合多任务部署,缺点则包括对任务适配位置敏感、尚未覆盖非线性模块,以及难以在多任务共享权重场景中完全合并模型。未来研究可进一步探索其在 MLP、LayerNorm 等模块中的扩展应用、多任务场景下的动态权重调度机制,以及与提示学习等方法的融合潜力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 数据类型与操作完全指南

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。与传统的关系型数据库不同,Redis 提供了丰富的数据类型和灵活的操作方式,这使得它能够高效地解决各种不同场景下的数据存储和处理问题。本文将全面介绍 R…

Digi XBee XR 系列介绍

Digi 延续了 20 多年来亚 GHz 射频模块的传统,推出了 Digi XBee XR 系列远距离模块,包括 Digi XBee XR 900 - 已通过多个地区的预先认证 - 以及 Digi XBee XR 868 - 已通过欧洲地区应用的预先认证。 这些先进的射频模块专为远距离抗干扰无线通信而设计。…

【方法论】金字塔原理概述:写作逻辑的底层架构与实践法则

文章目录 一、为何采用金字塔结构:对抗认知局限的思维框架1、 梳理逻辑,抽象归纳2、自上而下,结论居首3、 结论先行之必要 三、金字塔结构1、纵向逻辑:上层思想必须是下层思想的概括提炼2、横向逻辑:每组思想需属于同一…

BERT 核心技术全解析:Transformer 双向编码与掩码语言建模的底层逻辑

一、引言:从 BERT 到生成式 AI 的进化之路 科学的突破从来不是孤立的奇迹,而是人类知识长河中无数基石的累积。 当我们惊叹于 ChatGPT、Google Bard 等大型语言模型(LLM)在生成式 AI 领域的惊人表现时,不能不回溯到 20…

【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理

目录 一、图像几何变化 1、对图片进行放大、缩小、水平放大和垂直放大 2、旋转、缩放、控制画布大小 二、图像形态学处理 1、梯度运算 2、闭运算 3、礼帽运算 4、黑帽运算 三、图像阈值分割 1、二值化处理 2、反二值化处理 3、截断阈值处理 4、超阈值零处理 5、低…

CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…

得力标签打印机系统集成方案的技术应用与场景实践

一、方案背景与技术特性 在物联网设备管理场景中,标签打印的自动化与效率提升成为企业数字化升级的重要需求。得力标签打印机驱动及系统集成方案,通过技术接口开发与硬件协同,为设备标识管理提供 轻量化对接能力。以下从技术适配性与功能设计…

【通用智能体】Playwright:跨浏览器自动化工具

Playwright:跨浏览器自动化工具 一、Playwright 是什么?二、应用场景及案例场景 1:端到端(E2E)测试场景 2:UI 自动化(表单批量提交)场景 3:页面截图与 PDF 生成场景 4&am…

精准掌控张力动态,重构卷对卷工艺设计

一、MapleSim Web Handling Library仿真和虚拟调试解决方案 在柔性材料加工领域,卷对卷(Roll-to-Roll)工艺的效率与质量直接决定了产品竞争力。如何在高动态生产场景中实现张力稳定、减少断裂风险、优化加工速度,是行业长期面临的…

永磁同步电机公式总结【一】——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程

一、PMSM 电机参数介绍 1.1 转子极数 转子极数 (Rotor Poles) :三相交流电机每组线圈都会产生 N、S 磁极,每个电机每相含有的永磁体磁极个数就是极数。由于磁极是成对出现的,所以电机有 2、4、6、8……极 (偶数)。 未知参数的电机&#xff…

STL - stack 和 queue 及容器适配器模式的介绍

文章目录 1. stack 的介绍和使用1.1 stack 的介绍1.2 stack 的接口及使用1.3 stack 的模拟实现 2. queue 的介绍和使用2.1 queue 的介绍2.2 queue 的接口及使用2.3 queue 的模拟实现 3. priority_queue的介绍和使用3.1 priority_queue 的介绍3.2 priority_queue 的接口及使用3.…

windows 安装gdal实现png转tif,以及栅格拼接

windows 安装gdal实现png转tif,以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法,此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装,前面部分很简单,就不再…

Socket.IO是什么?适用哪些场景?

Socket.IO 详细介绍及适用场景 一、Socket.IO 是什么? Socket.IO 是一个基于事件驱动的 实时通信库,支持双向、低延迟的客户端-服务器交互。它底层结合了 WebSocket 和 HTTP 长轮询 等技术,能够在不同网络环境下自动选择最优传输方式&#x…

深度学习入门:卷积神经网络

目录 1、整体结构2、卷积层2.1 全连接层存在的问题2.2 卷积运算2.3 填充2.4 步幅2.5 3维数据的卷积运算2.6 结合方块思考2.7 批处理 3、池化层4、卷积层和池化层的实现4.1 4维数组4.2 基于im2col的展开4.3 卷积层的实现4.4 池化层的实现 5、CNN的实现6、CNN的可视化6.1 第一层权…

【Odoo】Pycharm导入运行Odoo15

【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …

pytest框架 - 第二集 allure报告

一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…

pycharm连接github(详细步骤)

【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】 1.先安装git 没有安装git的小伙伴,看上一篇安装git的文章。 安装git,2.49.0版本-CSDN博客 打开cmd(…

oracle linux 95 升级openssh 10 和openssl 3.5 过程记录

1. 安装操作系统,注意如果可以选择,选择安装开发工具,主要是后续需要编译安装,需要gcc 编译工具。 2. 安装操作系统后,检查zlib 、zlib-dev是否安装,如果没有,可以使用安装镜像做本地源安装&a…

Text models —— BERT,RoBERTa, BERTweet,LLama

BERT 什么是BERT? BERT,全称Bidirectional Encoder Representations from Transformers,BERT是基于Transformer的Encoder(编码器)结构得来的,因此核心与Transformer一致,都是注意力机制。这种…

【AGI】大模型微调数据集准备

【AGI】大模型微调数据集准备 (1)模型内置特殊字符及提示词模板(2)带有系统提示和Function calling微调数据集格式(3)带有思考过程的微调数据集结构(4)Qwen3混合推理模型构造微调数据…