大语言模型 LoRA 技术综述:原理、应用与训练指南
LoRA(Low-Rank Adaptation)是一种参数高效微调技术,通过低秩矩阵更新密集神经网络层,在保持模型性能的同时大幅降低计算和存储成本。综述了 LoRA 的核心原理、训练方法及变体改进,涵盖其在下游任务适配、跨任务泛化及联邦学习中的应用。内容包含 LoRA 的数学机制解析、基于 Hugging Face 的代码实现示例,以及生成即服务、自主代理等前沿场景的未来发展方向。该技术已成为大语言模型落地的重要工具。

LoRA(Low-Rank Adaptation)是一种参数高效微调技术,通过低秩矩阵更新密集神经网络层,在保持模型性能的同时大幅降低计算和存储成本。综述了 LoRA 的核心原理、训练方法及变体改进,涵盖其在下游任务适配、跨任务泛化及联邦学习中的应用。内容包含 LoRA 的数学机制解析、基于 Hugging Face 的代码实现示例,以及生成即服务、自主代理等前沿场景的未来发展方向。该技术已成为大语言模型落地的重要工具。

低秩适应(Low-Rank Adaptation,LoRA)通过可插拔的低秩矩阵更新密集神经网络层,是当前参数高效微调范式中表现最佳的方法之一。它在跨任务泛化和隐私保护方面具有显著优势。随着预训练语言模型参数规模的迅速增加,全量微调的计算开销变得极其巨大。为了减少计算成本,LoRA 等参数高效微调(PEFT)方法应运而生。
近年来,预训练语言模型的参数规模增加了数千倍。然而,由于知识边界限制,它们在某些下游任务中的能力仍然有限。对 LLM 进行全参数微调计算开销极大,例如对 LLaMA2-7B 模型进行全量微调需要大约 60GB 的内存,超出了普通消费级 GPU 的容量。PEFT 方法通过只微调少量额外的模型参数来使 LLMs 适应下游任务。从是否涉及额外参数的角度来看,PEFT 方法可以分为两类:额外参数方法和内部参数方法。在无法修改模型架构的情况下,内部参数方法是理想的。
低维固有维度假说提出,过度参数化模型存在于低固有维度上。基于这一假说,LoRA 提出用低秩矩阵更新模型中的密集层。它可以同时实现参数和计算效率。
具体而言,对于预训练权重矩阵 $W_0 \in \mathbb{R}^{d \times k}$,LoRA 冻结 $W_0$,并约束权重的更新为低秩分解形式 $\Delta W = BA$,其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,且秩 $r \ll \min(d, k)$。前向传播时,输出为 $h = W_0x + \Delta W x = W_0x + BAx$。
在实践中,对于基于 Transformer 的大语言模型,密集层通常由两种类型的权重矩阵组成:注意力模块中的投影矩阵和前馈神经(FFN)模块。原始研究中,LoRA 应用于注意力层的权重矩阵。后续工作表明,在 FFN 层中使用它可以进一步提高模型性能。
使用 LoRA 进行微调通常不需要修改底层模型架构,只需加载预训练模型并添加 LoRA 适配器即可。以下是一个基于 Hugging Face transformers 和 peft 库的训练流程示例:
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer
# 1. 加载预训练模型和分词器
model_name = "meta-llama/Llama-2-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 2. 配置 LoRA 参数
lora_config = LoraConfig(
r=8, # 低秩秩数
lora_alpha=32, # 缩放系数
target_modules=["q_proj", "v_proj"], # 目标模块
lora_dropout=0.1, # Dropout 率
bias="none", # 偏置项处理
task_type="CAUSAL_LM" # 任务类型
)
# 3. 应用 LoRA 适配器
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
训练完成后,LoRA 插件可以独立保存并在其他相关下游任务中重用。当拥有多个任务的 LoRA 插件时,可以组合这些插件,期望获得适当的跨任务泛化性能。
尽管 LoRA 在某些下游任务上可以实现适当的适应性能,但在许多下游任务上(如数学推理),LoRA 与全量微调之间仍存在性能差距。为填补这一差距,许多方法被提出以进一步提高 LoRA 在下游任务中的适应性能:
在生成即服务中,基于云的平台为用户提供生成性人工智能服务。由于用户的需求多样化,提供各种功能的 GaaS 是必要的。为了实现这些各种功能,我们可以为每个功能构建一个 LoRA 插件。LoRA 的参数效率和可插拔性可以促进高效的功能构建和执行。此外,GaaS 平台上的服务会随时间迅速变化。为了跟上这些变化,我们可以通过组合先前的插件来初始化新的 LoRA 插件。
在某些情况下,训练数据由多个客户端私有且无法集中。为了使用分布式训练数据使 LLMs 适应,我们可以采用联邦学习来保护每个客户端的数据隐私。联邦学习会产生高昂的通信和计算成本。为了降低成本,LoRA 是一个自然的选择。其参数高效特性有助于降低每个客户端的计算成本和跨客户端共享参数的通信成本。此外,LoRA 的可插拔特性有助于在联邦学习中保留每个客户端的参数隐私。
在基于 LLM 的自主代理中,代理被赋予特定角色。通过从与角色相关的数据中训练 LoRA 插件来分配角色可能是更好的选择。此外,代理的工具也可以是 LoRA 插件。我们可以使用基于 LoRA 的持续学习来构建内存插件,从而解决检索增强生成(RAG)中因输入令牌限制导致的支持效果不佳的问题。
在本综述中,我们系统地回顾了 LoRA 在下游适应性改进、跨任务泛化、效率提升、联邦学习和应用等方面的最新进展。LoRA 在参数效率、可插拔性、兼容性和实现跨任务泛化的简便性方面具有显著优势。未来的研究方向包括:
总之,LoRA 在生成即服务、持续预训练和自主代理等领域展现出巨大的潜力,未来的研究将进一步挖掘和扩展 LoRA 的应用,使其在越来越多的实际场景中发挥重要作用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online