大模型学习路线(4)——大模型微调

本文详细探讨了大模型微调的各种分类,包括按参数规模、训练流程和训练方式区分的不同方法,如全参微调、低参微调(如Adapter、LoRA、QLoRA等)、上下文学习、有监督和强化学习。以LoRA为例,介绍了微调实践的关键步骤。这些技术有助于定制化模型、提高资源效率和性能,以及优化数据利用。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言​

一、微调分类

1. 按微调参数规模划分

1.1. 全参微调(Full Parameter Fine-Tuning,FPFT)

1.2. 低参微调(Parameter Efficient Fine-Tuning,PEFT)

1.2.1. Adapter

1.2.2. LoRA

1.2.3. QLoRA

1.2.4. Prefix Tuning

1.2.5. Prompt Tuning

1.2.6. P-Tuning

1.2.7. P-Tuning v2

2. 按训练流程划分

2.1. 上下文学习(In-Context learning,ICL)

2.2. 有监督微调(Supervised Fine-Tuning,SFT)

2.3. 基于人类反馈的强化学习(Reinforcement,RLHF)

3. 按训练方式划分

3.1. 有监督微调(Supervised Fine-Tuning,SFT)

3.2. 指令微调(Instruction Tuning,IT)

4. 微调优势

4.1. 定制化模型

4.2. 提高资源利用率

4.3. 性能提升

4.4. 数据优化

二、微调实践(以LoRA为例)

总结

参考说明


前言

图1. 大模型微调技术分类


一、微调分类

1. 按微调参数规模划分

1.1. 全参微调(Full Parameter Fine-Tuning,FPFT)

        用预训练权重作为初始化权重,在特定数据集上继续训练,全部参数都更新。

1.2. 低参微调(Parameter Efficient Fine-Tuning,PEFT)

        用更少的计算资源完成参数的更新,只更新部分参数,或者通过对参数进行某种结构化约束,例如稀疏化或低秩近似解来降低微调的参数量。最小化微调网络模型中的参数数量和降低计算复杂度来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。使得即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习 Transfer Learning。

------------------------------------------------------------------ 分界线 ------------------------------------------------------------------

        经典的低参微调方法:Adapter(谷歌2019)、LoRA(微软2021)、QLoRA(微软2023)、Prefix Tuning(斯坦福2021)、Prompt Tuning(谷歌2021)、P-Tuning(清华2022)、P-Tuning v2(清华2022)。以下将对如上多种低参微调技术进行整理(LLM岗必考题!!!)

1.2.1. Adapter

        Adapter微调方法涉及向预训练模型中添加小型、任务特定的模块(适配器)。这些适配器被插入到原始模型的层之间,并使用任务特定的数据进行训练。原始模型保持相对不变,使其具有高效性并保留其通用知识,同时适应特定任务。

​图2. Adapter微调原理

paper: https://arxiv.org/pdf/1902.00751v2.pdf

github: https://github.com/google-research/adapter-bert

1.2.2. LoRA

        LoRA是一种基于低秩矩阵分解的微调策略。它通过向模型权重添加低秩矩阵来调整预训练模型的行为,而不是直接更新所有参数。这样可以显著减少需要训练的参数数量,并保持原始模型结构不变,以较小的成本实现对下游任务的良好适应。

​图3. LoRA微调原理

paper: https://arxiv.org/abs/2106.09685

github: https://github.com/microsoft/LoRA

1.2.3. QLoRA

        LoRA方法的一种变体,特别针对量化场景设计。QLoRA同样采用低秩矩阵分解,但在此基础上结合了权重量化技术,进一步压缩模型大小并降低计算成本,使得模型能在资源受限的环境下高效地进行微调。

​图4. QLoRA微调原理

paper: https://arxiv.org/pdf/2305.14314v1.pdf

github: https://github.com/artidoro/qlora

1.2.4. Prefix Tuning

        该方法为预训练语言模型引入一个可学习的“前缀”向量序列,在生成过程中将其与输入文本拼接作为模型的额外

### 使用LoRA方法进行模型微调 #### 背景介绍 为了提升特定任务的表现,可以采用低秩适应(Low-Rank Adaptation, LoRA)来调整大型预训练模型。这种方法特别适用于Transformer架构下的自注意力机制部分[^1]。 #### 实现细节 具体来说,在应用LoRA时会集中于transformer结构里的query、key以及value投影层。这些位置被选作插入额外学习组件的地方。通过这种方式,可以在不改变原有网络参数的情况下增强其性能表现[^2]。 #### 微调过程概述 当利用LoRA对像Qwen这样的大规模语言模型实施精细化调节时,主要操作如下: - **初始化**:加载预先训练好的基础模型作为起点; - **配置LoRA模块**:针对选定的目标子网创建并连接相应的低秩分解矩阵; - **冻结原生权重**:除了新增加的部分外,其余所有先前已有的权值都将固定不动; - **定义优化器与损失函数**:指定用于指导新加入变量迭代更新规则及其评判标准; - **执行反向传播算法**:依据给定数据集反复修正那些专门设计用来改进特定制约条件下效能的新参量; - **保存最终版本**:完成整个流程之后存储经过改良后的整体体系以便后续部署或进一步研究使用。 ```python from peft import LoraConfig, get_peft_model import transformers model_name_or_path = "Qwen" tokenizer = transformers.AutoTokenizer.from_pretrained(model_name_or_path) lora_config = LoraConfig( r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", ) peft_model = get_peft_model(transformers.AutoModelForCausalLM.from_pretrained(model_name_or_path), lora_config) # 假设已经准备好了一个PyTorch DataLoader对象train_dataloader for epoch in range(num_epochs): for batch in train_dataloader: outputs = peft_model(**batch) loss = outputs.loss optimizer.zero_grad() loss.backward() optimizer.step() peft_model.save_pretrained("./fine-tuned-qwen-lora") ``` 此代码片段展示了如何基于Hugging Face Transformers库和PEFT工具包快速设置一个带有LoRA支持的大规模语言模型实例,并对其进行简单训练的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值