首页 > 其他分享 >一文读懂:LoRA实现大模型LLM微调

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

时间:2023-06-17 14:03:25浏览次数:52  
标签:训练 权重 模型 微调 矩阵 读懂 LLM LoRA



LoRA大模型LLM微调

  • 为什么要进行微调?
  • LoRA思路
  • 提高权重更新效率
  • 选择低的秩
  • 实现LoRA
  • LoRA在LLaMA实现


为什么要进行微调?

在快速发展的人工智能领域中,以高效和有效的方式使用大型语言模型变得越来越重要。
预训练的大型语言模型通常被称为优秀的基础模型,原因在于它们在各种任务上表现出色,

而大模型微调是将其适应到特定的目标任务或领域中。尽管预训练的大型语言模型在各种任务上表现出色,但它们并不是为特定任务而设计的。通过微调,我们可以根据目标任务的需求对模型进行调整,使其在该任务上的性能得到进一步提升。
微调使我们能够将模型调整到目标领域和目标任务。然而,它在计算上可能非常昂贵-模型越大,更新其层的成本就越高。作为更新所有层的替代方法,已经开发了参数高效的方法,例如前缀调整和适配器。

现在,又出现了一种更流行的参数高效微调技术:
低秩适应(LoRA)。LoRA是什么?它是如何工作的?与其他流行的微调方法相比如何?让我们在本文中回答所有这些问题!

LoRA思路

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

什么是低秩转换呢?

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

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

如下图所示:

一文读懂:LoRA实现大模型LLM微调_低秩矩阵

提高权重更新效率

LoRA: Low-Rank Adaptation of Large Language Models 这篇论文提出了将权重变化一文读懂:LoRA实现大模型LLM微调_算法_02

在我们深入了解 LoRA 之前,先简要解释一下正常微调期间的训练过程。权重 一文读懂:LoRA实现大模型LLM微调_算法_02

假设 一文读懂:LoRA实现大模型LLM微调_低秩矩阵_04表 示神经网络层中的权重矩阵。
使用常规的反向传播,我们可以得到权重更新 一文读懂:LoRA实现大模型LLM微调_算法_02
通常计算为损失的负梯度乘以学习率:
一文读懂:LoRA实现大模型LLM微调_机器学习_06

然后,当我们有了一文读懂:LoRA实现大模型LLM微调_算法_02之后,我们可以按照以下方式更新原始权重:
一文读懂:LoRA实现大模型LLM微调_机器学习_08

下图中展示了这个过程,为了方便理解LoRA的思想,我们将权重更新矩阵一文读懂:LoRA实现大模型LLM微调_算法_09和原始一文读懂:LoRA实现大模型LLM微调_低秩矩阵_04保持分开展示,并按照以下方式计算输出:

一文读懂:LoRA实现大模型LLM微调_机器学习_11

一文读懂:LoRA实现大模型LLM微调_权重_12

一文读懂:LoRA实现大模型LLM微调_低秩矩阵_13


一文读懂:LoRA实现大模型LLM微调_人工智能_14


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

在深度学习中,权重矩阵通常具有完整秩,这意味着权重矩阵的行或列之间没有线性相关关系,也就是说,每个权重在模型中承担了不同的作用,没有冗余。这种情况下,权重矩阵能够充分表达模型的复杂性和丰富的特征表示能力。权重矩阵具有完整秩的好处是,模型可以通过学习到的权重进行准确的预测和分类。每个权重都对模型的输出产生影响,而且没有多余的冗余信息。
然而,在某些情况下,完整秩的权重矩阵可能会导致一些问题。例如,当训练数据量较少或数据噪声较多时,权重矩阵可能会过拟合,导致模型泛化能力下降。此外,权重矩阵中的大量参数可能会导致计算和存储的开销很大。
因此,在一些参数效率方面的研究中,人们开始关注如何利用低秩矩阵来表示权重矩阵。通过使用低秩矩阵,我们可以降低参数的数量,减少计算和存储的开销,并且仍然保留了大部分原始权重矩阵的关键信息。这样,我们可以在保持模型性能的同时,提高计算效率和模型的可解释性

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

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

例如,假设一文读懂:LoRA实现大模型LLM微调_算法_02是权重矩阵一文读懂:LoRA实现大模型LLM微调_算法_16的权重更新。然后,我们可以将权重更新矩阵分解为两个较小的矩阵:一文读懂:LoRA实现大模型LLM微调_低秩矩阵_17,其中一文读懂:LoRA实现大模型LLM微调_人工智能_18一文读懂:LoRA实现大模型LLM微调_权重_19

在这里,我们保持原始权重一文读懂:LoRA实现大模型LLM微调_低秩矩阵_04不变,只训练新的矩阵一文读懂:LoRA实现大模型LLM微调_算法_21一文读懂:LoRA实现大模型LLM微调_人工智能_22。简言之,这就是LoRA方法的核心思想,如下图所示。

一文读懂:LoRA实现大模型LLM微调_权重_23

选择低的秩

上图中的一文读懂:LoRA实现大模型LLM微调_人工智能_24是一个超参数,我们可以用它来指定适应过程中所使用的低秩矩阵的等级。较小的一文读懂:LoRA实现大模型LLM微调_人工智能_24会导致简化的低秩矩阵,从而减少适应过程中需要学习的参数数量。这可以加快训练速度,可能减少计算需求。
然而,较小的一文读懂:LoRA实现大模型LLM微调_人工智能_24会降低低秩矩阵捕捉特定任务信息的能力。这可能导致适应质量较低,模型在新任务上的表现可能不如较高的一文读懂:LoRA实现大模型LLM微调_人工智能_24好。
总结起来,在LoRA中选择较小的一文读懂:LoRA实现大模型LLM微调_人工智能_24存在模型复杂性、适应能力以及欠拟合或过拟合的风险之间的权衡。因此,重要的是尝试不同的一文读懂:LoRA实现大模型LLM微调_人工智能_24值,以找到适合新任务所需性能的合适平衡点。

实现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

在上述伪代码中,alpha是一个缩放因子,用于调整组合结果(原始模型输出加上低秩适应)的幅度。这样可以平衡预训练模型的知识和新任务特定的适应性——默认情况下,alpha通常设置为1。还要注意,

虽然一文读懂:LoRA实现大模型LLM微调_算法_21被初始化为小的随机权重,但一文读懂:LoRA实现大模型LLM微调_人工智能_22被初始化为0,以便在训练开始时一文读懂:LoRA实现大模型LLM微调_权重_32,这意味着我们从原始权重开始进行训练。

LoRA在LLaMA实现

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


标签:训练,权重,模型,微调,矩阵,读懂,LLM,LoRA
From: https://blog.51cto.com/u_15668366/6504793

相关文章

  • 开源大型语言模型(llm)总结
    大型语言模型(LLM)是人工智能领域中的一个重要研究方向,在ChatGPT之后,它经历了快速的发展。这些发展主要涉及以下几个方面:模型规模的增长:LLM的规模越来越大,参数数量显著增加。这种扩展使得模型能够处理更复杂、更长的输入序列,并生成更准确、更具连贯性的输出。同时,更大规模的模型还......
  • LLM技术在自然语言处理中的实践与改进
    目录《LLM技术在自然语言处理中的实践与改进》引言自然语言处理(NLP)是人工智能领域的一个重要分支,它研究如何将计算机程序与人类语言进行交互,从而理解、分析、生成和翻译文本。近年来,随着深度学习算法的不断优化,NLP技术在语音识别、文本分类、情感分析、机器翻译等方面取得......
  • SX130芯片的LoRa网关吞吐量是SX127芯片的多少倍?
    1.吞吐量,LoRa网关的重要性能从广义上讲,网关是连接2个不同网络的设备。如果一个设备,它能将LoRa无线网络和Internet连接起来,它就是一个LoRa网关。目前,大部分的LoRa网关采用SX1301基带芯片,也有部分使用SX1276/8单信道芯片。那么,SX1301芯片的数据吞吐量是SX1276/8芯片的多少倍呢?我们......
  • 一文读懂火山引擎A/B测试的实验类型(1)——编程实验
    一.概述编程实验:指的是通过代码编程进行AB实验,广泛使用于前端优化、策略优化和后端算法优化多种实验场景,包含客户端和服务端实验。前置条件:接入客户端SDK或者服务端SDK,详见:应用接入二.应用场景如何选择实验类型?适用场景是什么?服务端实验:指通过服务端获取实验分组信息并......
  • 一文读懂火山引擎A/B测试的实验类型(1)——编程实验
    一.概述编程实验:指的是通过代码编程进行AB实验,广泛使用于前端优化、策略优化和后端算法优化多种实验场景,包含客户端和服务端实验。前置条件:接入客户端SDK或者服务端SDK,详见:应用接入二.应用场景如何选择实验类型?适用场景是什么?服务端实验:指通过服务端获取实验分组信息并控制配置......
  • 一文读懂物联网平台如何搞定80%以上的物联网项目
    太卷了!一套物联网平台就能搞定80%以上的项目?! 在刚刚结束的AIRIOT4.0物联网平台发布会上,航天科技控股集团股份有限公司智慧物联事业部总经理田淼给出答案。  在主题演讲环节,田总以【80%的物联网项目服务商都会面临的需求】作为切入点,表达了AIRIOT4.0作......
  • 硬件设计LLM:AI辅助创建微处理芯片
    编辑|绿萝通常,开发任何类型的硬件(包括芯片,作为电子设备大脑的微小电子元件),都是从用正常语言描述硬件应该做什么开始的。然后,经过专门训练的工程师将该描述翻译成硬件描述语言(HDL),例如Verilog,以创建允许硬件执行其任务的实际电路元件。自动化此翻译可以减少工程过程中的人为错......
  • 你真的读懂了Java源码?Collections源码初探
    最近重温Java知识,遇到不懂的问题搜索互联网/博客很难直接找到答案,还好如今有了chatGPT,比大多数CV复读机/纯文档翻译的内容更有用。很多文章总结冠以“深入理解xxx”,“万字长文详解xxx”的文章,也不过是演示一遍调用代码,让你知道了怎么用,在什么情况下用。但至于为什么这么用,以及Java......
  • 一文读懂华为全屋智能一文读懂华为全屋智能
     因此,这篇文章主要回答一个问题:什么是全屋智能?它和智能家居的区别到底在哪?我会以简单的逻辑,小白化的语言,辅以图片来进行描述,保证一定的可读性,带大家了解华为的全屋智能到底在做什么,全屋智能对我们的生活起居有多大影响。我们先回顾华为全屋智能的基本定义:具备智能的「中央控制模块......
  • 【了解LLM】——LoRA
    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17470327.html论文链接:linkcode:github什么是LoRALoRA,英文全称Low-Rank AdaptationofLargeLanguageModels,直译为大语言模型的低阶适应,是一种PEFT(参数高效性微调方法),这是微软的研究人员为了解决大语言模型微调而开发的......