论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

[论文阅读笔记77]LoRA:Low-Rank Adaptation of Large Language Models 从效果来看,不论预训练模型的大小,LoRA采用更少的参数,可以达到全参模型的更好的效果。 阅读详情

LoRA 论文
传统全面微调,对每个任务学习的参数与原始模型相同:
m a x Φ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t=1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(1)} maxΦ​(x,y)∈Z∑​t=1∑∣y∣​log(PΦ​(yt​∣x,y<t))式(1)
LoRA 提出对模型中权重更新部分低秩分解,编码任务特定的参数,大幅减少所需参数规模,同时优化 Θ \Theta Θ 来寻找 Δ Θ \Delta \Theta ΔΘ 。对于 175B 的 GPT-3 参数量只有原来的 0.01%。
m a x Θ ∑ ( x , y ) ∈ Z ∑ t = 1 ∣ y ∣ l o g ( p Φ 0 + Δ Φ ( Θ ) ( y t ∣ x , y < t ) ) max_{\Theta}\sum_{(x,y)\in Z}\sum^{|y|}_{t=1}log(p_{\Phi_0+\Delta \Phi(\Theta})(y_t|x,y<t)) maxΘ​(x,y)∈Z∑​t=1∑∣y∣​log(pΦ0​+ΔΦ(Θ​)(yt​∣x,y<t))

传统方法不足

  • 添加 adapters 的策略虽然参数少,但会在推理阶段引入延迟——增加了模型深度。并且有额外参数和计算,在模型中这些会被放大。
  • 直接优化输入层(prefix)在训练参数方面并非单调变化且保留一部分长度进行调整降低了下游任务的序列长度——占用了一部分序列长度,减少了可用的输入序列长度。并且他的优化难度也大。

LoRA

在这里插入图片描述
核心思想:对于一个预训练的 W 0 ∈ R d × k W_0 \in R^{d×k} W0​∈Rd×k ,训练低秩矩阵 B A BA BA 来替代权重更新部分 Δ W \Delta W ΔW, d i m ( A ) = r × k , d i m ( B ) = d × r r < < m i n ( d , k ) dim(A) = r×k, \quad dim(B)=d×r \quad r << min(d,k) dim(A)=r×k,dim(B)=d×rr<<min(d,k)。
h = W 0 x + Δ W x = W 0 x + B A x h=W_0x+\Delta Wx=W_0x+BAx h=W0​x+ΔWx=W0​x+BAx
其中,A 采取随机高斯初始化,B 为 0。

LoRA 在适应期间不需要满足满秩的条件,只需要将 r 设置为预训练权重矩阵的秩,大致可恢复完全微调的能力,可以维持原来架构。

LoRA 优势:

  1. 参数高效:训练参数减少了数千倍,例如在GPT-3中,训练参数从1750亿减少到数百万甚至更少。
  2. 计算资源节省:由于需要计算梯度的参数大大减少,显存占用降低,训练速度加快。
  3. 无额外推理延迟:训练完成后,可以将低秩更新融合到预训练权重中,推理时无需额外计算。
  4. 任务切换灵活:不同任务只需存储和加载小的低秩矩阵,实现快速切换,减少存储需求。
    将 LoRA 应用于 transformer 架构中,只需要对自注意力模块 ( W q , W k , W v , W 0 ) (W_q,W_k,W_v,W_0) (Wq​,Wk​,Wv​,W0​) 中的 W q , W v W_q,W_v Wq​,Wv​ 进行适应,保持 MLP 不变。
    在下游部署时,只需要减去 B A BA BA 即可恢复 W 0 W_0 W0​,再根据任务需求加上对应 B ′ A ′ B^{'}A^{'} B′A′ 。最明显的好处在于内存和存储使用量减少。

实验结果

在这里插入图片描述

代码实现

class LoRALayer():
    def __init__(
        self, 
        r: int, 
        lora_alpha: int, 
        lora_dropout: float,
        merge_weights: bool,
    ):
        self.r = r
        self.lora_alpha = lora_alpha
        # Optional dropout
        if lora_dropout > 0.:
            self.lora_dropout = nn.Dropout(p=lora_dropout)
        else:
            self.lora_dropout = lambda x: x
        # Mark the weight as unmerged
        self.merged = False
        self.merge_weights = merge_weights
class Embedding(nn.Embedding, LoRALayer):
    def __init__(
        self,
        num_embeddings: int,
        embedding_dim: int,
        r: int = 0,
        lora_alpha: int = 1,
        merge_weights: bool = True,
        **kwargs
    ):
        nn.Embedding.__init__(self, num_embeddings, embedding_dim, **kwargs)
        LoRALayer.__init__(self, r=r, lora_alpha=lora_alpha, lora_dropout=0,
                           merge_weights=merge_weights)

        if r > 0:
            self.lora_A = nn.Parameter(self.weight.new_zeros((r, num_embeddings)))
            self.lora_B = nn.Parameter(self.weight.new_zeros((embedding_dim, r)))
            self.scaling = self.lora_alpha / self.r
            # 冻结预训练权重
            self.weight.requires_grad = False
        self.reset_parameters()

    def reset_parameters(self):
        nn.Embedding.reset_parameters(self)
        if hasattr(self, 'lora_A'):
            nn.init.zeros_(self.lora_A)
            nn.init.normal_(self.lora_B)

    def train(self, mode: bool = True):
        nn.Embedding.train(self, mode)
        if mode:
            if self.merge_weights and self.merged:
                if self.r > 0:
                    self.weight.data -= (self.lora_B @ self.lora_A).transpose(0, 1) * self.scaling
                self.merged = False
        else:
            if self.merge_weights and not self.merged:
                # Merge the weights and mark it
                if self.r > 0:
                    self.weight.data += (self.lora_B @ self.lora_A).transpose(0, 1) * self.scaling
                self.merged = True
                
	    def forward(self, x: torch.Tensor):
	        if self.r > 0 and not self.merged:
	            result = nn.Embedding.forward(self, x)
	            after_A = F.embedding(
	                x, self.lora_A.transpose(0, 1), self.padding_idx, self.max_norm,
	                self.norm_type, self.scale_grad_by_freq, self.sparse
	            )
	            result += (after_A @ self.lora_B.transpose(0, 1)) * self.scaling
	            return result
	        else:
	            return nn.Embedding.forward(self, x)
【论文阅读】LoRA: Low-Rank Adaptation of Large Language Models 本文中的重新参数化(重参数化),只有A和B是可训练的。上图中,左边的蓝色的部分,冻住了。右边的橙色部分,是可训练的。注意,r = rank,即矩阵的秩,可以是非常小的一个量。(例如,r=1, 2 在上面图1中)上面还有个+号,是把左右两个分支,合并起来了。下面的输入是x,一个d维度(例如,可以是d=12288)的向量;上面的输出是h,也是一个向量。 阅读详情

相关推荐

大模型技术解析:RAG、AI Agent与多模态应用

大模型技术作为当前人工智能领域的核心技术,正在深刻改变各行各业的智能化进程。其核心原理基于Transformer架构,通过自注意力机制实现高效的上下文建模。在技术价值层面,大模型展现出强大的通用性和可扩展性,能够作为技术中台支撑多种AI应用。典型的应用场景包括智能客服、金融投顾、工业质检等。其中,RAG(检索增强生成)技术通过结合检索与生成模块,显著提升了生成内容的准确性;AI Agent技术则通过规划器、工具集和记忆模块的三层架构,实现了复杂任务的自动化处理。这些技术正在推动企业级AI解决方案的快速落地。

weixin_30680385的博客 409

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

自然语言处理的一个重要范式是在通用领域数据上进行大规模预训练,然后根据特定任务或领域进行适应性训练。随着我们对模型进行更大规模的预训练,完全微调(重新训练所有模型参数)变得越来越不可行。以GPT-3 175B为例,部署独立的微调模型实例,每个实例有175B个参数,成本过高。我们提出了低秩适应(Low-Rank Adaptation,LoRA)方法,该方法冻结预训练模型的权重,并将可训练的秩分解矩阵注入到Transformer架构的每个层中,从而大大减少了下游任务的可训练参数数量。

qq_43800752的博客 3565

论文解读 翻译:LoRA:大型语言模型的低秩适应

从第二个式子可以看到,尽管参数看起来增加了(多了Δ Φ ( Θ ) \Delta \Phi\left(\Theta\right)ΔΦ(Θ)),但是从前面的max的目标来看,需要优化的参数只有Θ \ThetaΘ,而根据假设,Θ < < Φ \Theta

具身机器人和通用AI 1249

LoRA: Low-Rank Adaptation of Large Language Models低秩自适应

通过矩阵分解降低LLM中的模型参数

emphmeral的博客 6282

lora:low-rank adaption of large language models

根据之前的一些工作,发现大模型其实是过参数化的, 有更小的一个内在维度,于是文章做了一个假设,模型在任务适配过程中,参数的改变量是低秩的,在训练过程中,lora单独去学习这个改变量,而不是去学习模型的参数,通过把最终训练得到的参数分解为原参数W0和该变量deltaW进行相加,论文假设deltaW是低秩的,把deltaW进一步拆分为低秩矩阵A和低秩矩阵B,如图1所示,而在推理的过程中,由于模型参数已经固定不再变动,这时候把模型的改变量直接放到模型里,这样在推理的计算过程中,就避免了一次额外的矩阵乘法开销。

liguandong 3236

《论文阅读》LORA:大型语言模型的低秩自适应 2021

今天为大家带来的是《LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS》出版:时间:2021年10月16日类型:大语言模型的微调方法关键词:作者:Edward Hu, Yelong Shen 等第一作者机构:Microsoft Corporation。

MyHeartWillGoOn 1480

论文阅读之LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS(2021)

LoRA的核心思想是在预训练模型的基础上,通过注入可训练的低秩分解矩阵到Transformer架构的每一层,而不是对所有模型参数进行微调(fine-tuning),从而大幅减少下游任务的可训练参数数量。而且,当我们面对不同的下游任务时,因为原本的预训练模型是冻结的,所以预训练模型用一个就行,只需要保存的参数就是加入的低秩矩阵,这样的话,也能节省大量的存储空间。总的来说,文章的主要贡献在于提出了一种新的、高效的大型语言模型适应方法,这种方法在减少资源消耗的同时,保持了模型的性能,并且易于与现有技术结合使用。

学习笔记 3556

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models

论文阅读笔记:《LoRA: Low-Rank Adaptation of Large Language Models》

诸神缄默不语的博客 2816

手把手教你理解MIS结构C-V特性曲线:从理论到测试实操

本文深入解析了金属-绝缘体-半导体(MIS)结构的电容-电压(C-V)特性曲线,从积累、耗尽到反型等物理状态出发,详细阐述了其测试原理与实操要点。文章重点介绍了如何通过C-V曲线提取氧化层厚度、掺杂浓度、界面态密度等关键参数,并探讨了偏压-温度(B-T)应力实验在揪出可动离子电荷等可靠性问题中的应用,为半导体器件物理研究与工艺评估提供了实用指南。

weixin_29304021的博客 442

论文选题难?7种AI加持的万能选题法(全专业通用+工具实测)

AI时代学术选题新范式:7大智能方法破解研究痛点 传统选题方法面临范围失控、资料难寻、创新不足三大痛点,本文提出AI赋能的7种选题方法论: 1.现象+群体法:自动抓取热点与人群特征 2.理论+场景法:经典理论与新兴场景匹配 3.技术+问题法:前沿技术与领域痛点结合 4.对比+变量法:时空维度与变量关系分析 5.热点+理论法:事件传播与理论深挖融合 6.微调+变量法:已有选题变量置换创新 7.AI全流程法:关键要素智能迭代生成 同时警示AI使用的伦理边界,需规避虚构文献、伪造数据等风险,并提供针对本科生、研究

Conan_0728的博客 1881

VLM相关论文阅读:【LoRA】Low-rank Adaptation of Large Language Models

LoRA(Low-Rank Adaptation)是一种高效的大模型微调方法,通过冻结预训练模型权重并注入可训练的低秩矩阵,显著减少下游任务参数数量。实验表明,LoRA在GPT-3等模型上仅需0.01%的可训练参数,即可达到全量微调效果,且不增加推理延迟。相比适配器层和前缀微调等方法,LoRA在参数效率、计算开销和任务切换成本方面具有明显优势,特别适合大规模语言模型部署场景。

做cv的小昊的博客 1283

信道估计准则演进:从LS、MMSE到LMMSE的工程权衡

本文深入探讨了信道估计准则的演进历程,从LS、MMSE到LMMSE的工程权衡。通过对比分析三大经典算法的数学本质、工程实现及适用场景,揭示了在计算复杂度、实时性和性能之间的关键取舍。文章结合4G/5G基站项目实战经验,提供了算法选型的三维决策模型和前沿发展建议,为无线通信系统设计提供实用指导。

weixin_29327525的博客 282

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读

1、为什么要这么做?预训练模型越来越大,比如GPT-3 175B训练独立变得越来越不可行 2、方法:冻结预训练模型的权重,在Transformer架构的每一层中注入可训练的低秩分解矩阵 3、效果:训练参数量减少10000x,GPU显存减少3x,且不像adapter引入额外的推理延迟

lovep1的博客 2274

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 935

ROS2实战:构建模块化启动文件(launch file)以驱动复杂机器人系统

本文详细介绍了ROS2中构建模块化启动文件(launch file)的最佳实践,帮助开发者高效管理复杂机器人系统的节点启动。通过功能分解、参数化设计和嵌套启动等技术,实现批量管理、依赖控制和配置统一,显著提升系统稳定性和调试效率。文章包含实战代码示例和工程化建议,特别适合自动驾驶、物流机器人等场景应用。

weixin_28744613的博客 215

论文阅读LoRA: Low-Rank Adaptation of Large Language Models

LoRA(Low-Rank Adaptation)是一种用于高效微调大规模预训练语言模型的新方法。随着模型规模不断增长,如 GPT-3 级别的超大模型在多个下游任务上的应用需求越来越高,但传统的全参数微调方式不仅计算成本巨大,还需要为每个任务保存一套完整模型,导致存储与部署开销极高。LoRA 针对这一痛点提出了一个关键观点:大型模型在适配下游任务时,其权重更新往往存在“低秩特性”,也就是说,模型的有效更新方向远低于其原始参数维度。

2502_93849229的博客 1094

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4718

一文讲懂大模型的显存占用计算和lora微调

1、以说人话的形式介绍了大模型的推理、训练所占用的显存如何计算,并给出实际例子 2、以说人话的形式介绍了lora原理、必要性、为什么work和实际调参/初始化等

lovep1的博客 1360

冠层分析法提取叶面积指数及其应用

冠层分析法是利用植物冠层空间结构分析LAI的方法。其基本原理是通过相机或扫描仪对植物冠层垂直方向的照片或图像进行获取,再运用图像处理方法实现植被的自动识别和覆盖度计算,以此推算LAI。假设有一块田地,需测量其LAI,首先在田地中央设置一杆高度为3米、朝向田地中心、覆盖角度为50度的相机。利用上述函数,对相机采集到的图像进行处理,即可得到田地的LAI。在Matlab中,读取图片可以使用imread函数,对图片进行预处理可以使用imadjust函数调整灰度,使用imbinarize函数进行二值化处理。

m0_47037246的博客 739

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大模型面试全攻略:从Transformer到实战应用

Transformer架构作为现代大模型的核心基础,通过自注意力机制实现了高效的序列建模。其关键技术如多头注意力和位置编码,显著提升了模型对长距离依赖关系的捕捉能力。在工程实践中,大模型训练涉及分布式计算、优化器选择等关键技术,而参数高效微调方法(PEFT)如LoRA和Adapter则大幅降低了部署成本。这些技术支撑了从自然语言处理到多模态应用的广泛场景,也是AI面试中的高频考点。掌握Transformer原理及大模型训练优化方法,能有效应对技术面试中的架构设计和性能优化问题。

weixin_34280237的博客 386

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从零基础到AI算法工程师:大模型技术转型实战指南

深度学习作为人工智能的核心技术,通过神经网络模拟人脑处理信息的方式,在计算机视觉、自然语言处理等领域展现出强大能力。其核心原理是通过反向传播算法优化网络参数,使模型能够从数据中自动学习特征表示。随着Transformer架构的提出和大模型技术的突破,AI工程实践正在经历范式变革。以PyTorch为代表的深度学习框架降低了技术门槛,而HuggingFace等开源社区加速了模型迭代。本文以真实转型案例为基础,详细拆解从编程基础、数学理论到分布式训练的技术进阶路径,特别针对大模型微调、LoRA等热点技术提供实操方

weixin_34167819的博客 295

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大模型工程师核心技能与30K+高薪求职指南

Transformer架构作为现代大模型的基础,通过self-attention机制实现了对长序列数据的高效建模。在深度学习领域,掌握分布式训练框架如Deepspeed和模型微调技术如LoRA,能显著提升大模型的训练效率和适应性。这些核心技术不仅推动着NLP、推荐系统等AI应用的发展,也造就了市场对高端AI人才的旺盛需求。当前具备大模型实战经验的工程师薪资普遍达30-50K,其核心竞争力在于能解决模型训练、推理优化等工程挑战。本文系统梳理了从Python编程到Transformer原理,再到分布式训练的全栈

weixin_30268921的博客 322

AI落地实战论文地图:50篇工业级关键技术路标

人工智能工程化落地的核心挑战,从来不是理论前沿性,而是技术方案与真实场景的精准匹配。从数据弱监督标注、模型轻量化部署,到多模态工业对齐与持续迭代中的灾难性遗忘,AI项目生命周期各阶段都存在高频、可复现的技术断点。本文聚焦‘问题驱动’范式,以《Snorkel》《TinyBERT》《CLIP》等50篇高复现度、强实操性的工业验证论文为锚点,系统梳理从纸面算法到产线代码的关键转化链路。内容覆盖弱监督学习、知识蒸馏、跨模态对齐、模型压缩、数据漂移应对等核心技术价值,并深度适配制造业、医疗、金融等垂直领域的真实约束条

weixin_34095889的博客 482

LLM论文工业落地筛选指南:高效识别高价值技术方案

大语言模型(LLM)技术迭代迅猛,但大量论文存在学术指标亮眼、工程落地困难的问题。理解LLM论文的核心在于区分‘理论创新’与‘技术价值密度’,关键需把握其问题真实性、方案可移植性与复现成本可见度三大维度。从长上下文稳定性、低资源微调效率到推理可控性等真实产线能力缺口出发,工程师需建立以工业适配性为导向的判别框架,将论文转化为可集成、可监控、可降级的生产级能力。本文聚焦LLM论文筛选、技术价值密度两大热词,提供一套面向算法负责人、中级工程师与技术管理者的实战方法论。

weixin_34116110的博客 403
上一篇: 论文阅读笔记——OpenVLA: An Open-Source Vision-Language-Action Model
下一篇: 论文阅读笔记——QLORA: Efficient Finetuning of Quantized LLMs
寻丶幽风
博客等级 码龄5年 656粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值