lora微调/(sft、lora、p-tuning、freeze四种典型微调方法)

本文详细介绍了大语言模型微调的四种主要技术:SFT(监督微调)、LoRA(半监督学习)、P-tuningv2(元学习)和Freeze(轻量级微调)。这些方法旨在解决大模型在特定任务上的性能提升,以及如何根据数据和任务选择最合适的微调策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考

微调LLM中的魔鬼细节|大型语言模型lora调教指南_哔哩哔哩_bilibili

GitHub - EvilPsyCHo/Play-with-LLMs: Train your custom LLMs like Llama, baichuan-7b, GPT

LORA大模型微调算法原理解析_哔哩哔哩_bilibili

LORA:大模型轻量级微调

lora微调

一、数据处理

1.单轮对话场景

按照方案(3)的思路,我们可以构建数据处理函数:

 

2.多轮问答场景
 

 3.一些额外添加的信息和提问部分不需要loss,可以屏蔽掉

二、模型

 

1.量化加载

 

用8bit去加载 ,线性层发生改变

用4bit去加载,线性层发生改变

 

 2.模型准备

(1)冻结参数,因为原有的参数是不需要训练的

(2)输出层调整更高的精度,会让loss更合理

(3)使lora部分拿到梯度,需要打开enable_input_require_grads

3.lora配置

(1)找到哪些层需要使用lora     手动配置或者自动化的找到 

 1)已经进行了量化加载,可以自动化找到,精度为4bit的那些线性层

2)手动配置,把名字传进去。使用target_modules传给配置文件

 3)总结

4.标签移动和loss计算

因为是根据上一个输入预测下一个输出,所以label和input是错了一位

三、训练

 

四、测试

 

 有两种模型权重,一种是原本的模型权重,一种是lora部分的权重

数据按照之前的方式包装起来 

五、完整代码

 

sh文件

六、(sft、lora、p-tuning、freeze四种典型微调方法)

随着人工智能技术的不断发展,大语言模型在自然语言处理领域的应用越来越广泛。然而,预训练模型在通用领域的知识和特定领域的任务之间存在一定的鸿沟,因此需要对其进行微调以适应特定任务。本文将介绍四种用于微调大语言模型的技术:SFT、LoRA、P-tuning v2 和 Freeze。

  1. SFT(Supervised Fine-tuning)监督微调

SFT(Supervised Fine-Tuning)监督微调是指在源数据集上预训练一个神经网络模型,即源模型。然后创建一个新的神经网络模型,即目标模型。目标模型复制了源模型上除了输出层外的所有模型设计及其参数。这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到。

SFT 是最常见的微调方法之一,通过使用带有标签的下游任务数据来微调预训练模型。在 SFT 中,预训练模型在训练时将下游任务的标签作为输入,从而学习特定任务的表示。这种方法简单有效,但需要大量的标注数据。

也因为需要标注数据,随着技术的发展,涌现出越来越多的大语言模型,且模型参数越来越多,比如 GPT3 已经达到 1750 亿的参数量,传统的监督微调方法已经不再能适用现阶段的大语言模型。为了解决微调参数量太多的问题,同时也要保证微调效果,急需研发出参数高效的微调方法(Parameter Efficient Fine Tuning, PEFT)

     2.LoRA(Learning from Latent Representations)微调方法

LoRA 是一种半监督学习的方法,通过从未标记的数据中学习潜在表示来扩展预训练模型。LoRA 使用潜在表示来指导预训练模型学习特定任务的表示,从而减少了对大量标注数据的需求。这种方法在某些场景下可以有效地扩展预训练模型的泛化能力。

  1. 预训练模型参数可以被共享,用于为不同的任务构建许多小的 LoRA 模块。冻结共享模型,并通过替换矩阵 A 和 B 可以有效地切换任务,从而显著降低存储需求和多个任务切换的成本。
  2. 当使用自适应优化器时,由于不需要计算梯度以及保存太多模型参数,LoRA 使得微调效果更好,并将微调的硬件门槛降低了 3 倍。
  3. 低秩分解采用线性设计的方式使得在部署时能够将可训练的参数矩阵与冻结的参数矩阵合并,与完全微调的方法相比,不引入推理延迟。
  4. LoRA 与其它多种微调方法不冲突,可以与其它微调方法相结合,比如下节实训将要介绍的前缀调优方法等。

     3.P-tuning v2 微调方法

P-tuning v2 是一种元学习的方法,通过在多个任务上微调预训练模型来学习任务的表示。P-tuning v2 使用任务嵌入来表示任务,并使用元学习算法来更新预训练模型的权重以适应新任务。这种方法可以在不同的任务之间共享知识,从而提高模型的泛化能力。

     4.Freeze 监督微调方法

Freeze 是一种轻量级的微调方法,通过在微调过程中冻结预训练模型的某些层来减少过拟合的风险。Freeze 通过保留预训练模型的高级表示,同时学习低级表示来适应特定任务。这种方法可以在不牺牲模型性能的情况下减少过拟合的风险,从而提高模型的泛化能力。

在实际应用中,根据具体任务和数据情况选择合适的微调方法可以提高模型的性能。例如,对于拥有大量标注数据的任务,SFT 可能是更好的选择;对于半监督学习场景,LoRA 可能更适合;对于元学习场景,P-tuning v2 可能更有优势;而对于防止过拟合和轻量级微调场景,Freeze 可能更合适。

人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法-腾讯云开发者社区-腾讯云

5.

Linear probing和end2end端到端微调都不直接属于sft、lora、p-tuning、freeze这四种典型的微调方法

  • Linear probing是一种在适配下游任务时,冻住预训练模型,仅对模型最后一层的线性层进行参数更新的方法。它并不直接对应于sft、lora、p-tuning、freeze中的任何一种。
  • End2end端到端微调则是一种在整个处理流程中对模型进行统一的优化的方法。它强调的是对整个处理流程的优化,而不是仅对模型的某一部分进行微调。因此,它也不直接对应于这四种典型的微调方法

"end-to-end"(端到端)微调是一种微调策略,它涉及对整个模型的所有层进行微调,而不是只微调部分层次。与 SFT、LoRA、P-tuning 和 Freeze 不同,端到端微调是一种更通用的微调方法,它并不局限于特定的调整策略或技术

 

 

<think>好的,我现在需要回答用户关于LoRA微调技术缺点和局限性的问题。首先,我得回顾一下LoRA的基本原理,然后再结合已有的引用信息和自己的知识,找出它的不足之处。 首先,LoRA(Low-Rank Adaptation)通过在预训练模型的权重矩阵上添加低秩矩阵来进行微调,这样可以减少需要训练的参数数量,从而节省计算资源。根据引用[1]和[2],LoRA不会增加推理延迟,因为微调后的权重可以合并回原模型,而且切换任务时只需替换相应的低秩矩阵,操作简便。 不过,用户现在问的是缺点,所以我要从多个方面考虑。首先,低秩分解虽然有效,但可能限制了模型的表达能力。因为低秩矩阵的秩决定了参数的数量,如果秩太小,可能无法捕捉到足够的任务特定信息,影响微调效果。这点在引用[2]中提到LoRA模拟全参数微调,但实际应用中如果秩设置不当,效果可能会打折扣。 其次,任务冲突的问题。当多个任务共享同一组权重时,可能会出现干扰。例如,引用[1]提到切换任务时需要替换不同的LoRA矩阵,但如果同时应用多个任务的低秩矩阵,可能产生冲突,导致性能下降。需要设计更复杂的机制来管理多个任务,这可能增加复杂性。 第三,适配层选择的问题。引用[3]的代码示例中,LoRA应用在特定的注意力投影层(如"c_attn", "c_proj")。但如果选择的层不合适,可能影响微调效果。不同的模型结构可能需要不同的适配层配置,这需要经验和实验来确定,增加了调参的难度。 第四,模型规模的影响。虽然LoRA适合大模型,但对于小模型来说,低秩分解可能反而限制了其能力。小模型本身的参数较少,进一步减少可调参数可能导致无法充分适应新任务,效果不如全参数微调。 此外,还有内存和存储的问题。虽然训练时参数减少,但如果需要为每个任务保存不同的低秩矩阵,存储多个矩阵也会占用空间。特别是任务数量多的时候,存储成本可能增加,尽管比保存整个模型要小,但也不能完全忽视。 最后,依赖预训练模型的质量。如果预训练模型本身在目标任务上表现不好,LoRA可能无法显著改善,因为它依赖于原有模型的结构和参数。这点可能和其他微调方法一样,但LoRA的限制可能更大,因为它调整的参数较少。 总结一下,可能的缺点包括:表达能力受限、任务冲突、适配层选择困难、对小模型效果有限、存储多个任务的参数、依赖预训练模型质量等。接下来需要组织这些点,确保引用相关文献支持,比如引用[2]提到的低秩调整模拟全参数微调,但实际可能存在的效果损失。引用[3]中的代码示例说明适配层的选择,间接指出需要正确配置的问题。</think>### LoRA微调技术的缺点与局限性分析 LoRA(低秩自适应)虽然在大模型微调中具有显著优势,但其技术特点也带来以下主要局限性: #### 1. **低秩假设的固有局限性** - **表达能力受限**:通过低秩分解$W = W_0 + BA$(其中$B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$)模拟全参数微调,当秩$r$选择过小时,可能无法充分捕捉任务特定特征,导致微调效果劣于全参数微调[^2]。 - **秩选择敏感性**:最优秩$r$需通过实验确定,不同任务和模型结构对秩的敏感度差异显著,增加了调参成本。 #### 2. **多任务管理的复杂性** - **权重干扰风险**:当同时部署多个任务的LoRA适配器时,直接叠加不同任务的$BA$矩阵可能引发参数冲突,需设计复杂的权重隔离机制(如任务专属适配器标识)[^1]。 - **存储成本增长**:每个任务需保存独立的$B$和$A$矩阵,任务数量$n$较大时,存储空间需求呈$O(nr(d+k))$增长,虽远小于全模型存储,但仍需额外管理。 #### 3. **适配层选择的经验依赖** - **结构敏感性问题**:如引用[3]所示,LoRA需手动选择目标层(如Transformer的`c_attn`、`c_proj`等),不同模型架构的最优适配层分布差异显著。错误选择可能导致关键参数未被调整,影响微调效果。 #### 4. **小模型适配效果下降** - **参数压缩瓶颈**:对于参数量小于10亿的小模型,低秩分解可能过度压缩可调参数空间,导致模型无法充分适应新任务,此时传统微调方法可能更有效。 #### 5. **预训练质量依赖增强** - **基础模型缺陷放大**:若预训练模型在目标任务领域表现较差,LoRA有限的参数调整能力可能难以弥补模型固有缺陷,而全参数微调通过更大范围的参数更新可能表现更好。 #### 6. **动态任务切换开销** - 虽然引用[1]指出切换任务仅需矩阵加减操作,但实际部署中频繁切换需要实时加载不同$B$、$A$矩阵,可能引发I/O瓶颈,影响实时性要求极高的场景。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值