大模型高效微调-LoRA原理详解和训练过程深入分析

一、LoRA原理

LoRA(Low-Rank Adaptation of LLMs),即LLMs的低秩适应,是参数高效微调最常用的方法。

LoRA的本质就是用更少的训练参数来近似LLM全参数微调所得的增量参数,从而达到使用更少显存占用的高效微调。

1.1 问题定义

LoRA与训练目标是解耦的,但本文设定就是语言模型建模。

以下将给出语言建模(可自然推广到序列建模)的基本符号定义,即最大化给定提示的条件概率(本质是极大似然估计)。

The maximization of conditional probabilities given a task-specific prompt

给定一个参数为\(\mathbf{\Phi}\)预训练的自回归语言模型$ P_{\Phi}(y|x)$。

\(x\)为输入,\(y\)为输出

note: 为与原文符号一致,下文\(\mathbf{\Phi}\)、\(\mathbf{\Theta}\)、\(\mathbf{W}\)均表示模型参数

全参数微调

每次full fine-tuning训练,学一个 \(\Delta \mathbf{\Phi}\),\(|\Delta \mathbf{\Phi}|\) 参数量大hold不住

image
语言模型的条件概率分布建模目标

高效微调

$ \Delta \mathbf{\Phi}$ 是特定于下游任务的增量参数

LoRA将 $ \Delta \mathbf{\Phi}=\Delta \mathbf{\Phi}(\Theta)$ ,用参数量更少的$ \mathbf{\Theta}$来编码(低秩降维表示来近似), \(|\mathbf{\Phi}| << | \mathbf{\Theta}|\)

image
LoRA训练目标

Transformer架构参数

Transformer层的输入和输出维度大小 \(d_{model}\)

\(\mathbf{W_q}\)、\(\mathbf{W_k}\)、\(\mathbf{W_v}\),和\(\mathbf{W_o}\)分别代表自注意力的query、key、value和output投影矩阵

\(\mathbf{W}\)或\(\mathbf{W}_0\)代表预训练的权重矩阵

\(∆\mathbf{W}\)是微调后得到的增量参数矩阵(训练后,优化算法在参数上的累计更新量)

\(r\)代表LoRA模块的秩

1.2 LoRA简介

LoRA的核心思想是,在冻结预训练模型权重后,将可训练的低秩分解矩阵注入到的Transformer架构的每一层中,从而大大减少了在下游任务上的可训练参数量。

image
LoRA结构

We propose Low-Rank Adaptation(LoRA), which freezes the pre trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks.

在推理时,对于使用LoRA的模型来说,可直接将原预训练模型权重与训练好的LoRA权重合并,因此在推理时不存在额外开销。

1.3 为什么要LoRA

背景

通常,冻结预训练模型权重,再额外插入可训练的权重是常规做法,例如Adapter。可训练的权重学习的就是微调数据的知识。

但它们的问题在于,不仅额外增加了参数,而且还改变了模型结构。

这会导致模型训练、推理的计算成本和内存占用急剧增加,尤其在模型参数需在多GPU上分布式推理时(这越来越常见)。
在这里插入图片描述

推理性能比较

动机

深度网络由大量Dense层构成,这些参数矩阵通常是满秩的。

相关工作表明,When adapting to a specific task, 训练学到的过度参数化的模型实际上存在于一个较低的内在维度上(高维数据实际是在低维子空间中)

We take inspiration from Li et al. (2018a); Aghajanyan et al. (2020) which show that the learned over-parametrized models in fact reside on a low intrinsic dimension.

### 使用LoRA进行文档处理中的最佳实践 #### 准备环境与工具 为了有效地利用LoRA对DeepSeek R1或其他大型预训练模型进行微调,需先安装必要的库框架。Hugging Face提供了丰富的支持来简化这个流程[^1]。 ```bash pip install transformers peft datasets torch ``` #### 数据集准备 对于文档处理任务而言,高质量的数据集至关重要。应收集并清理适合特定应用场景的语料库,比如合同解析、法律文件摘要等。确保数据标注清晰准确,有助于提升最终模型性能。 #### 配置模型与应用LoRA 采用LoRA技术可以极大程度上减少所需调整参数的数量,在不影响整体架构的前提下实现高效的迁移学习。具体来说,只需修改少量新增加的小型矩阵\( A \) \( B \),而不改变原有庞大的权重矩阵\( W \)[^4]。 ```python from transformers import AutoModelForSequenceClassification, LoraConfig model_name_or_path = "deepseek-r1" lora_config = LoraConfig( r=8, lora_alpha=32, target_modules=["query", "value"], ) model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path) model.enable_lora(lora_config=lora_config) ``` #### 训练过程优化 考虑到实际部署时可能面临的硬件限制,建议采取混合精度训练等方式加速收敛速度;同时合理设置批量大小(batch size)以及梯度累积(grad accumulation steps),平衡GPU内存占用率与迭代效率之间的关系。 ```python training_args = TrainingArguments( output_dir="./results", evaluation_strategy="epoch", learning_rate=5e-5, per_device_train_batch_size=8, gradient_accumulation_steps=4, weight_decay=0.01, num_train_epochs=3, fp16=True, ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset, tokenizer=tokenizer, ) ``` #### 测试与验证 完成上述步骤之后,务必进行全面的功能测试以确认新版本模型能否稳定工作,并对比基线指标衡量改进幅度。如果有必要的话还可以持续迭代优化直至满足业务需求为止[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值