一文读懂:LoRA实现大模型LLM微调

简介: 一文读懂:LoRA实现大模型LLM微调

为什么要进行微调?


在快速发展的人工智能领域中,以高效和有效的方式使用大型语言模型变得越来越重要。

预训练的大型语言模型通常被称为优秀的基础模型,原因在于它们在各种任务上表现出色,


而大模型微调是将其适应到特定的目标任务或领域中。尽管预训练的大型语言模型在各种任务上表现出色,但它们并不是为特定任务而设计的。通过微调,我们可以根据目标任务的需求对模型进行调整,使其在该任务上的性能得到进一步提升。

微调使我们能够将模型调整到目标领域和目标任务。然而,它在计算上可能非常昂贵-模型越大,更新其层的成本就越高。作为更新所有层的替代方法,已经开发了参数高效的方法,例如前缀调整和适配器。


现在,又出现了一种更流行的参数高效微调技术:

低秩适应(LoRA)。LoRA是什么?它是如何工作的?与其他流行的微调方法相比如何?让我们在本文中回答所有这些问题!


LoRA思路


低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换。

什么是低秩转换呢?

整体的想法和概念与主成分分析(PCA)和奇异值分解(SVD)有关,我们通过一个较低维度的表示来近似表示一个高维矩阵或数据集。

换句话说,我们试图找到原始特征空间(或矩阵)中少数维度的(线性)组合,能够捕捉数据集中大部分的信息。

如下图所示:


313dd2eb5b7f42219233a72d588f8f76.png

提高权重更新效率


1687318371542.png

d53bcbb719064c9791ba59b5e6beefed.png

f7ef5d3baf8c45039dc7c85581f6fe1b.png


当我们训练神经网络中的全连接(即“稠密”)层时,如上图所示,权重矩阵通常具有完整秩(full rank)。完整秩是一个技术术语,意味着矩阵的行或列之间没有线性相关(即“冗余”)关系。相反,与完整秩相对应,低秩意味着矩阵具有冗余的行或列。详细理解如下图所示:


在深度学习中,权重矩阵通常具有完整秩,这意味着权重矩阵的行或列之间没有线性相关关系,也就是说,每个权重在模型中承担了不同的作用,没有冗余。这种情况下,权重矩阵能够充分表达模型的复杂性和丰富的特征表示能力。权重矩阵具有完整秩的好处是,模型可以通过学习到的权重进行准确的预测和分类。每个权重都对模型的输出产生影响,而且没有多余的冗余信息。

然而,在某些情况下,完整秩的权重矩阵可能会导致一些问题。例如,当训练数据量较少或数据噪声较多时,权重矩阵可能会过拟合,导致模型泛化能力下降。此外,权重矩阵中的大量参数可能会导致计算和存储的开销很大。

因此,在一些参数效率方面的研究中,人们开始关注如何利用低秩矩阵来表示权重矩阵。通过使用低秩矩阵,我们可以降低参数的数量,减少计算和存储的开销,并且仍然保留了大部分原始权重矩阵的关键信息。这样,我们可以在保持模型性能的同时,提高计算效率和模型的可解释性


因此,虽然预训练模型的权重在预训练任务中具有完整秩,但LoRA的作者指出,当预训练的大型语言模型适应新任务时,其固有维度很低,这是根据Aghajanyan等人的研究(2020)得出的。(换句话说:实际微调后的权重其实对比原始模型,能用到的权重其实很少)


低秩维度意味着数据可以通过较低维度的空间有效表示或近似,同时保留其大部分重要信息或结构。换句话说,这意味着我们可以将适应任务的新权重矩阵分解为较低维度(较小)的矩阵,而不会丢失太多重要信息。


1687318400745.png

选择低的秩


上图中的r rr是一个超参数,我们可以用它来指定适应过程中所使用的低秩矩阵的等级。较小的r rr会导致简化的低秩矩阵,从而减少适应过程中需要学习的参数数量。这可以加快训练速度,可能减少计算需求。

然而,较小的r rr会降低低秩矩阵捕捉特定任务信息的能力。这可能导致适应质量较低,模型在新任务上的表现可能不如较高的r rr好。

总结起来,在LoRA中选择较小的r rr存在模型复杂性、适应能力以及欠拟合或过拟合的风险之间的权衡。因此,重要的是尝试不同的r rr值,以找到适合新任务所需性能的合适平衡点。


实现LoRA


LoRA的实现相对简单。我们可以将其视为LLM中全连接层的修改后的前向传播。伪代码如下所示:


input_dim = 768 # 例如,预训练模型的隐藏大小
output_dim = 768 # 例如,层的输出大小
rank = 8 # 低秩适应的等级'r'
W = ... # 来自预训练网络的权重,形状为 input_dim x output_dim
W_A = nn.Parameter(torch.empty(input_dim, rank)) # LoRA权重A
W_B = nn.Parameter(torch.empty(rank, output_dim)) # LoRA权重B初始化LoRA权重
nn.init.kaiming_uniform_(W_A, a=math.sqrt(5))
nn.init.zeros_(W_B)
def regular_forward_matmul(x, W):
  h = x @ W
  return h
def lora_forward_matmul(x, W, W_A, W_B):
  h = x @ W # 常规矩阵乘法
  h += x @ (W_A @ W_B) * alpha # 使用缩放的LoRA权重
  return h

1687318444225.png

LoRA在LLaMA实现


现在,让我们使用LoRA对Meta的流行LLaMA模型进行微调的实现。除了用于训练和运行LLaMA本身(使用原始的Meta LLaMA权重)的代码外,它还包含使用LLaMA-Adapter和LoRA对LLaMA进行微调的代码。推荐阅读以下教程文件:


下载预训练权重 [ download_weights.md ]

使用LoRA进行微调 [ finetune_lora.md ]

使用Adapter进行微调 [finetune_adapter.md ](可选,用于比较研究)

相关文章
|
26天前
|
机器学习/深度学习 自然语言处理 PyTorch
LLM-Mixer: 融合多尺度时间序列分解与预训练模型,可以精准捕捉短期波动与长期趋势
近年来,大型语言模型(LLMs)在自然语言处理领域取得显著进展,研究人员开始探索将其应用于时间序列预测。Jin等人提出了LLM-Mixer框架,通过多尺度时间序列分解和预训练的LLMs,有效捕捉时间序列数据中的短期波动和长期趋势,提高了预测精度。实验结果显示,LLM-Mixer在多个基准数据集上优于现有方法,展示了其在时间序列预测任务中的巨大潜力。
54 3
LLM-Mixer: 融合多尺度时间序列分解与预训练模型,可以精准捕捉短期波动与长期趋势
|
24天前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
54 2
|
28天前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG 让AI大模型更懂业务 —— 阿里云LLM知识库解决方案评测
随着数字化转型的深入,企业对文档管理和知识提取的需求日益增长。阿里云推出的文档智能 & RAG(Retrieval-Augmented Generation)解决方案,通过高效的内容清洗、向量化处理、精准的问答召回和灵活的Prompt设计,帮助企业构建强大的LLM知识库,显著提升企业级文档管理的效率和准确性。
|
7天前
|
自然语言处理 开发者
多模态大模型LLM、MLLM性能评估方法
针对多模态大模型(LLM)和多语言大模型(MLLM)的性能评估,本文介绍了多种关键方法和标准,包括模态融合率(MIR)、多模态大语言模型综合评估基准(MME)、CheckList评估方法、多模态增益(MG)和多模态泄露(ML),以及LLaVA Bench。这些方法为评估模型的多模态和多语言能力提供了全面的框架,有助于研究者和开发者优化和改进模型。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
大模型强崩溃!Meta新作:合成数据有剧毒,1%即成LLM杀手
在人工智能领域,大型语言模型(LLMs)的快速发展令人瞩目,但递归生成数据可能导致“模型崩溃”。Meta的研究揭示,模型在训练过程中会逐渐遗忘低概率事件,导致数据分布偏差。即使少量合成数据(如1%)也会显著影响模型性能,最终导致崩溃。研究强调保留原始数据的重要性,并提出社区合作和技术手段来区分合成数据和真实数据。论文地址:https://www.nature.com/articles/s41586-024-07566-y
23 2
|
11天前
|
人工智能 自然语言处理 算法
政务培训|LLM大模型在政府/公共卫生系统的应用
本课程是TsingtaoAI公司面向某卫生统计部门的政府职员设计的大模型技术应用课程,旨在系统讲解大语言模型(LLM)的前沿应用及其在政府业务中的实践落地。课程涵盖从LLM基础知识到智能化办公、数据处理、报告生成、智能问答系统构建等多个模块,全面解析大模型在卫生统计数据分析、报告撰写和决策支持等环节中的赋能价值。
34 2
|
20天前
|
机器学习/深度学习 自然语言处理 数据格式
社区供稿 |【8卡从零训练Steel-LLM】微调探索与评估
本篇文章主要介绍下微调上的探索以及评估。另外,还特意试了试训练CMMLU数据集,能在榜单上提多少分
|
30天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
29天前
|
人工智能 前端开发
大模型体验体验报告:OpenAI-O1内置思维链和多个llm组合出的COT有啥区别?传统道家理论+中学生物理奥赛题测试,名不虚传还是名副其实?
一个月前,o1发布时,虽然让人提前体验,但自己并未进行测试。近期终于有机会使用,却仍忘记第一时间测试。本文通过两个测试案例展示了o1的强大能力:一是关于丹田及练气的详细解答,二是解决一道复杂的中学生物理奥赛题。o1的知识面广泛、推理迅速,令人印象深刻。未来,或许可以通过赋予o1更多能力,使其在更多领域发挥作用。如果你有好的测试题,欢迎留言,一起探索o1的潜力。
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
前端大模型入门(三):编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入
本文介绍了大规模语言模型(LLM)中的两个核心概念:Tokenizer和Embedding。Tokenizer将文本转换为模型可处理的数字ID,而Embedding则将这些ID转化为能捕捉语义关系的稠密向量。文章通过具体示例和代码展示了两者的实现方法,帮助读者理解其基本原理和应用场景。
178 1

热门文章

最新文章