PaperAgent 2024年07月21日
史上最全的Lora策略综述都在这里,还怕没有适合你的一款
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

LoRA 是一种通过在模型密集层中插入低秩矩阵来更新模型参数的技术,它可以独立于模型存储和重用,从而实现跨任务泛化。LoRA 的参数数量显著少于全参数微调,这使得其在内存和计算需求方面具有显著优势,并且在预训练和持续训练阶段也同样有用。

🤔 **参数效率与内存使用:** LoRA 通过仅更新模型参数的一个小子集来实现参数效率,显著降低了微调大型语言模型(LLMs)时的内存使用量,从而在内存和计算需求方面具有显著优势。例如,在特定硬件配置下,使用批量大小为1的LLaMA2-7B模型进行全参数微调和LoRA微调,研究表明,全参数微调需要大约60GB的内存,超过了单个NVIDIA RTX4090 GPU的容量;而LoRA微调仅需要大约23GB的内存。

💪 **提升下游任务的能力:** 尽管 LoRA 在一些下游任务上实现适当的自适应性能,但与许多下游任务,诸如数学推理、编程等知识密集型任务上,与全参数微调相比,LoRA 的性能仍存在差距。为了解决这个问题,研究者提出了多种改进方案,包括打破低秩瓶颈、动态秩分配、优化学习过程以及与其他学习范式结合。

🌐 **跨任务学习:** LoRA 作为一种参数高效的微调方法,可以通过在 LLMs 中插入低秩矩阵来增强模型对特定任务的适应性。而跨任务泛化允许模型在面对新任务时能够快速适应,提高了模型的实用性。通过共享和重用在不同任务上学到的知识,减少了对标注数据的需求,提高了学习效率。

🚀 **提升效率:** 随着下游任务越来越多,LoRA 插件的数量也会随之增加,要进一步提高其效率成为了一个关键问题。因此,可以从参数缩减、参数量化以及并行 LoRA 计算框架这三个方面进行改进。

💡 **应用场景:** LoRA 广泛应用于各种自然语言处理任务、代码任务、模型对齐任务和特定领域任务,展现出其灵活性和有效性。例如,LoRA 被用于扩展大型语言模型的上下文窗口大小、解决持续训练中的灾难性遗忘问题、以及在预训练阶段训练高秩网络。

🔑 **未来方向:** LoRA 的研究方向包括探索新的低秩矩阵结构、开发更有效的优化算法、以及将 LoRA 与其他学习范式相结合,以进一步提高其性能和效率。

AI小先锋 2024-07-21 17:53 湖北

前言 LoRA是一种通过在模型的密集层中插入低秩矩阵来更新模型参数的技术。低秩矩阵(LoRA插件)可以独立于

前言

LoRA是一种通过在模型的密集层中插入低秩矩阵来更新模型参数的技术。低秩矩阵(LoRA插件)可以独立于模型存储和重用,从而实现跨任务泛化。而且LoRA的参数数量显著少于全参数微调,这使得其在内存和计算需求方面具有显著优势。

1. Low-Rank Adaptation (LoRA)

1.1 Lora在实际应用中的效率优势

1.2 Lora在Pre-training和Continual training阶段也非常有用

2. 提升下游任务的能力(Downstream Adaptation Improving )

虽然LoRA可以在一些下游任务上实现适当的自适应性能,但与许多下游任务,诸如数学推理、编程等知识密集型任务上,与全参数微调相比,LoRA的性能仍存在差距。

因此提出了以下4种改进方案:

2.1 打破低秩瓶颈(Breaking the Low-rank Bottleneck):

LoRA通过使用低秩矩阵来更新模型参数,虽然这有助于参数效率,但同时也限制了模型在某些知识密集型任务上的表示能力。

如何解决这个问题呢?

2.1.1 Stacking LoRAs along Fine-tuning

通过堆叠多个LoRA模块来增加整体的秩,即两个矩阵相加的秩不会超过各自秩的和,可以通过在微调过程中聚合多个 LoRA 模块来增加整体的秩,从而打破低秩限制。例如:

2.1.2 Updating as Gradient Compressor

除了在参数空间中打破低秩限制外,将lora作为梯度压缩器,通过重新采样随机投影来克服LoRA在梯度空间中的低秩限制。

2.1.3 Co-updating LLM and LoRA:

微调过程中更新高秩的LLM,以获得比单独更新LoRA更好的表示能力。

2.2 动态秩分配(Dynamic Rank Allocation):

动态秩分配是根据模型不同层的重要性来分配不同数量的秩,以此来优化性能和效率。

2.2.1 基于奇异值分解(SVD)的方法(SVD-based Methods)

根据LoRA模块的实际需要动态地分配秩,而不是为所有模块分配相同的秩,从而提高模型的适应性和效率。通过SVD分解和选择性地丢弃奇异值,可以在保持参数效率的同时,减少计算成本

2.2.2 基于单一秩分解(SRD)的方法(SRD-based Methods)

将矩阵分解为单个秩分量,可以用来控制LoRA参数矩阵的秩,并动态地为不同的LoRA模块分配秩。通过省略SVD中的正交性要求,SRD方法减少了LoRA的计算成本,同时保持了参数效率。SRD方法允许根据不同任务的需求灵活地分配秩,而不是采用一种固定的秩分配策略。

2.2.3 基于秩采样的方法(Rank Sampling-based Methods)

确定每个模块的秩是一个关键问题,基于SVD或SRD的方法需要通过迭代或正交性约束来确定秩,这可能带来额外的计算负担。秩抽样方法避免了额外的秩搜索计算成本,使得秩分配过程更加高效。通过随机抽样可以灵活地适应不同的训练条件和任务需求,并且抽样过程简单直观,易于实现和集成到现有的LoRA框架中。

2.3 优化学习过程(Optimizing the Learning Procedure):

为了提高LoRA的收敛速度和减少对超参数的敏感性。这方面的改进包括:初始化方法的改进以加速收敛;优化梯度更新以提高训练的稳定性和可靠性;减少过拟合现象。

2.3.1 初始化改进(Initialization Improvement)

在LoRA中,参数矩阵A和B的初始化通常使用高斯噪声和零,但这种方法可能导致初始梯度较小,从而减慢学习过程。如果这些低秩矩阵的初始化不当,可能会导致微调过程效率低下,甚至影响模型的下游任务适应性。

通过与预训练权重矩阵的重要方向对齐,改进的初始化方法可以加速LoRA的收敛速度。好的初始化有助于在微调过程中保持模型的稳定性和性能,尤其是在处理新任务时

2.3.2 梯度更新优化(Gradient Update Optimization)

LoRA的参数更新可能面临收敛速度慢和对超参数敏感的问题,这会影响模型在下游任务上的适应性。通过优化梯度更新可以加快LoRA的收敛速度,使其更接近全参数微调的性能。特别是在处理复杂任务时,改进的梯度更新有助于提高模型在下游任务上的性能,通过引入预条件或残差连接,减少了对超参数选择的敏感性。

2.3.3 过拟合缓解(Overfitting Mitigation)

LoRA可能遭受过拟合的问题,导致模型在训练数据上表现良好,但在未见过的测试数据上表现差。所以需要提出一些策略来缓解过拟合的问题。

    BiLoRA:BiLoRA采用了双层优化策略,通过在不同的训练数据子集上交替训练低秩增量矩阵的奇异向量和奇异值,避免了在单一数据集上同时优化所有参数,从而缓解过拟合。

    LoRA Dropout:一些方法将dropout技术应用于LoRA参数,以减少过拟合。例如,对LoRA参数应用dropout或对注意力层采用列dropout,对前馈层采用元素级dropout。

2.4 与其他学习范式结合(Combining with other Learning Paradigms):

LoRA可以与贝叶斯学习、上下文学习和主动学习等其他学习范式结合,以解决特定问题并提升下游任务的适应性。

3. 跨任务学习(Cross-task Generalization)

LoRA作为一种参数高效的微调方法,可以通过在LLMs中插入低秩矩阵来增强模型对特定任务的适应性。而跨任务泛化允许模型在面对新任务时能够快速适应,提高了模型的实用性.通过共享和重用在不同任务上学到的知识,减少了对标注数据的需求,提高了学习效率。

主要有以下三种跨任务泛化的方法方法:

    手动设计的权重混合:早期的方法尝试通过手动设计权重来线性组合不同的LoRA插件,以实现跨任务泛化。

    学习得到的权重混合:为了找到最优的混合权重,研究者提出了在任务级别、实例级别和词符级别学习权重的方法。

    LoRA专家的混合:当LoRA插件是可训练的,可以联合学习混合权重和LoRA插件,这可以通过LoRA专家混合(LoRA MoE)框架实现,其中每个LoRA插件作为一个专家,路由网络分配混合权重。

3.1 手动设计权重的混合(Mixture with Manually Designed Weights)

不同任务可以训练不同的lora,通过混合它们来实现在不同任务间的知识和技能迁移。

尽管手动设计权重的方法具有简单和计算效率高的优点,但它可能无法找到最优的权重组合,导致性能不稳定和泛化能力受限。因此,在使用该方案时需谨慎些。具体的方法有:

3.2 学习得到的权重混合(Mixture with Learnt Weights)

手动设计的权重虽然简单,但可能无法达到最优的跨任务泛化效果。自动学习混合权重可以为LoRA插件的组合提供更精确和适应性强的方法。具体的方案有:

3.3 LoRA专家的混合(Mixture of LoRA Experts)

在多任务学习和持续学习等场景中,需要模型能够同时处理多种不同的任务。LoRA专家的混合提供了一种机制,允许模型利用在不同任务上学到的知识,通过专家系统的方式进行有效的集成和泛化。

尽管LoRA专家的混合提供了强大的模型集成能力,但设计有效的路由网络和平衡不同专家的贡献可能具有挑战性,并且可能需要额外的调整和训练。

4 提升效率(Efficiency Improving )

随着下游任务越来越多,lora插件的数量也会随之增加,要进一步提高其效率成为了一个关键问题。因此,可以从以下三个方面来改进:

4.1 参数缩减(Parameter Reduction)

通过缩减参数数量,减少了模型在微调期间的内存占用。减少了需要更新的参数数量,从而加快了训练和推理的速度。

4.1.1 参数冻结(Parameter Freezing)

通过在微调过程中冻结一部分LoRA参数,只更新其余的参数。

4.1.2 参数剪枝(Parameter Pruning)

在训练和推理过程中,通过评估参数的重要性来移除不重要的LoRA参数。

4.1.3 参数共享(Parameter Sharing):

通过在不同的层或模块之间共享参数来减少参数总数。

4.2 参数量化(Parameter Quantization)

大型语言模型(LLMs)通常需要大量的计算资源,部署到资源受限的环境中时,参数量化通过减少参数的精度,使得模型可以用更少的比特来表示,从而减少内存占用和计算复杂性。

4.2.1 后训练量化(Post-Training Quantization, PTQ)

在模型训练完成后对模型的权重和偏差等参数进行量化处理。通过减少参数的位宽来降低模型的内存占用,使得模型更小,更易于部署,复杂性降低了加速模型的推理速度。

具体实施方法如下:

4.2.2 量化感知训练方法(QAT-based methods)

PTQ后训练量化会引入误差,影响模型的精度。量化感知在模型的微调阶段就引入量化操作,允许模型在学习过程中适应量化带来的变化。通过在训练中逐步应用量化,QAT方法可以减少量化误差的累积,提高量化模型的性能,从而减少部署后的精度损失。使模型对于量化带来的噪声和变化更加鲁棒。具体方法有:

4.3 并行LoRA计算框架(Parallel LoRA Computing Frameworks)

通过在多个处理器或GPU上同时执行多个任务来提高效率。这对于多租户环境或需要同时处理多个模型的场景非常有用。

4.3.1 并行微调(Parallel Fine-tuning)

并行微调可以同时处理多个微调任务,提高了计算资源的利用率。在较短的时间内完成更多的微调任务。

4.3.2 并行推理(Parallel Inference)

通过在多个处理器或计算设备上同时执行多个推理任务来提高模型推理速度的技术。可以显著减少模型推理的响应时间,可以同时为更多的用户提供服务,提高了系统的服务能力。

5 LoRA在联邦学习中的应用(LoRA for Federated Learning)

联邦学习是一种分布式学习范式,允许多个参与方在保持数据本地化的同时共同训练模型。在这种设置中,数据不需要集中存储,每个参与方仅共享模型更新而不是原始数据。

在某些领域,如医疗保健和金融,数据往往是敏感的,并且分散在不同的客户端。联邦学习提供了一种在保护数据隐私的同时利用分散数据进行模型训练的方法。可以减少每个客户端的计算和通信成本。

lora在联邦学习中的应用如下:

    数据异质性:在联邦学习中,不同客户端的数据分布可能不同。研究者提出了如SLoRA等方法,通过数据驱动的初始化来适应每个客户端的数据分布。

    设备异质性:参与联邦学习的客户端可能具有不同的硬件能力。FedMS等方法通过动态调整激活的LoRA矩阵数量来适应客户端的计算资源。

    模型异质性:客户端可能使用不同结构的本地模型。pFedLoRA等方法使用LoRA作为全球和本地知识传递的载体,采用迭代训练策略来促进知识转移和整合。

    参数隐私:在联邦学习中,保护客户端特定的参数是至关重要的。PrivateLoRA等方法通过在客户端存储可训练矩阵来确保参数隐私。

5.1 数据异质性(Data Heterogeneity)

在联邦学习场景中,不同的客户端可能收集到的数据在特征、类别分布等方面存在显著差异。这种数据分布的不一致性可能导致模型在某些客户端上表现出色,而在其他客户端上性能不佳,从而影响模型的泛化能力。

通过适应不同客户端的数据特性,LoRA的初始化和更新策略有助于减少数据异质性对联邦学习过程的负面影响,提升模型在多样化数据上的泛化能力。

应对数据异质化的方法有:

5.2 设备异构性(Device Heterogeneity)

设备异构性指的是参与联邦学习的不同客户端在硬件性能和网络连接能力上的差异。这些差异可能会影响联邦学习系统的整体性能。

传统方法通常假设所有客户端的硬件能力相同,但实际上,客户端的硬件能力可能有很大差异。这会导致系统的整体性能受限于能力最弱的客户端,即“桶效应”。

可以通过动态调整和参数共享,减少每个客户端的计算成本和通信成本来提高联邦学习的整体效率和可扩展性,使其能够在联邦学习系统中实现参数隐私保护,这对于保护客户端特定的参数至关重要。

动态参数分配策略有:

5.3 模型异构性(Model Heterogeneity)

模型异构性指的是在联邦学习中,不同客户端可能使用具有不同架构的本地模型。由于个人需求的差异,客户端可能偏好独特的模型结构,并且通常不希望公开其模型细节。

以往的工作通过知识蒸馏、模型集成和互学习等方法来解决模型异构性问题。但这些方法存在局限性,例如依赖公共数据集、增加通信成本和本地模型性能不佳等。

pFedLoRA是一种为解决模型异构性而提出的方法。它使用LoRA作为全球知识与本地知识的载体,采用迭代训练策略,促进知识转移和整合,实现不同客户端之间异构模型的知识共享。允许在保持模型结构私密性的同时,进行有效的知识转移和整合。

5.4 参数隐私(Parameter Privacy)

在联邦学习中,保护客户端特定的参数是至关重要的,因为这些参数可能包含敏感信息。确保参数的隐私可以间接保护客户端数据的隐私。有两种保护措施:

6 Applications of LoRA

LoRA因其参数高效、可插拔、兼容性强以及易于实现跨任务泛化等特性,在深度学习领域,特别是在大型预训练模型的微调中,得到了广泛应用。

6.1 语言任务中的应用:

LoRA被用于微调预训练语言模型,以适应特定的下游任务,如情感识别、文本分类、角色识别等。这包括对传统NLP任务、代码任务、模型对齐任务和垂直领域任务的微调。

6.1.1 代码任务(Code Tasks)

将LoRA应用于代码生成和理解任务,如使用LoRA微调CodeT5和PLBART模型,以提高它们在代码摘要和代码克隆检测任务中的适应性。

6.1.2 模型对齐任务(Model Alignment Tasks)

使其行为和输出与人类的价值观、意图和偏好相一致。这通常涉及到使用如人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)等技术。

LoRA技术被用于微调奖励模型和策略模型,以减少RLHF的内存需求。通过微调这些模型,可以更好地反映人类的行为和偏好。

6.1.3 垂直领域任务(Vertical Domain Tasks)

6.2 视觉任务中的应用:

在计算机视觉领域,LoRA主要被应用于图像生成和图像分割任务,显著提高了训练效率并优化了模型性能。例如,在图像风格迁移、文本到图像生成、以及医学图像分割等任务中应用LoRA。

6.2.1 图像生成(Image Generation)

6.2.2 图像分割(Image Segmentation)

将图像划分为多个有意义的区域或对象。SAM(Segment Anything Model)作为图像分割的基础模型,展示了优越的泛化能力。许多研究利用LoRA对SAM进行微调,以提高其在特定垂直领域的性能。

6.3 多模态任务中的应用(Multimodal Tasks)

多模态大型语言模型(MLLMs)的目标,旨在整合文本与音频、图像和视频等多种模态,通过统一的嵌入空间实现跨模态理解和推理。

7 lora在未来可能的应用

https://arxiv.org/pdf/2407.11046

推荐阅读

欢迎关注我的公众号“一分钟Paper”, 每天阅读60秒,带你领略最前言的AI文章。


Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LoRA 大型语言模型 微调 参数效率 跨任务泛化 人工智能
相关文章