A Survey on LoRA of Large Language Models阅读笔记

来来来,走过路过不要错过,这是一篇Lora有关的文献综述阅读笔记。最近忙着用Midjourney做图,太久没有看文章了,今天赶紧再来读一篇,是关于Lora有关模型的文献综述,已经看到有公众号写了这篇文章的解说,扫了一眼发现还是得自己好好看一遍原文撒,顺便也为了做一下讲解视频。

文章链接:https://arxiv.org/abs/2407.11046

首先介绍一下,什么是LoRA,全称Low-Rank Adaption,低Low秩rank适应Adaption,这里的低秩,可以直接想到低秩矩阵。这里先插播一些低秩的概念:

低秩矩阵:如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。

矩阵的秩:矩阵的秩,可以看作是矩阵的行列之间的相关性。通过矩阵初等变换把X化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那X的秩rank(X)就等于r。 如果矩阵的各行或列是线性无关的,矩阵就是满秩的。

矩阵分解:用A*B来近似矩阵X

关于秩,这里非常随便得举个🌰,x+y+z=4和2x+2y+2z=8和2x-y+3z=11,三个方程,前俩是一个意思,如果将方程组用矩阵描述,秩就表示了多少个方程是有用的,那这个🌰中的矩阵的秩就是2。

回归正题,LoRA是一种大语言模型微调的技术,最早的工作是Microsoft的研究员们整出来的。

Lora的GitHub项目链接:GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models"

Lora的原文链接:https://arxiv.org/abs/2106.09685

那Lora具体是怎么做的呢,那肯定是涉及到矩阵的秩啥的了,请看下图:

首先,图上的蓝色大方块,就是咱们的大语言模型,训练完了的那一大堆参数。为了让大语言模型能够更加的准确,而不是啥都跟你讲点但是又啥都不太对。于是乎,大家想到,那我用我自己的语料再去训练训练呗。

目前几种再训练大语言模型的技术有这么两种:full parameter tuning和parameter efficient fine-tuning。这里的parameter efficient fine-tuning简称PEFT,大家看这个是不是觉得有一丝丝熟悉的感觉,Hugging face已经出了一个GitHub - huggingface/peft: 🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.的function了,Lora早已经收录其中。

相比于full parameter tuning,PEFT的方法是将预训练模型中绝大部分的参数都冻结🧊🧊🧊了,就是咱不碰大语言模型里的参数,而是通过比如prompt tuning,Low-rank Adapation或者其他的adapters来进行微调。那来看看Lora是怎么做的,就是咱们在蓝色🧊🧊🧊大方块不变,而是在原始权重矩阵大W旁边再来一个w,这个w可以分解为两个低秩矩阵B*A。假设W是一个d*k的矩阵,B是d*r,A是r*k,此时r远小于d和k。在训练的时候,咱们就更新B和A里的参数,不更新W的参数。然后有了input以后这个input不仅和W相乘,也和咱们的w相乘,即咱们B*A。得到的俩结果加一下,作为这一层layer的output。具体可以看文章写的,如下图,还是很清楚的。

好的,差不多知道了咱们Lora的机制,再来看今天的这篇关于Lora的综述,文章摘要讲了,主要从五个方面来讲一下Lora系列模型相关的进展:

  1. 为了改进Lora模型在下游任务的效果,如何进行downstream adaption。
  2. 跨任务泛化(cross-task generalization),将多个lora混合起来以进行多任务泛化。
  3. 改进Lora计算效率的方法。
  4. 在联邦学习(federated learning)任务使用lora时候的数据隐私保护方法
  5. Lora的应用

其实刚刚看了摘要原文,我只能猜测,第三个方面应该是讲qlora吧,其他的都不是很明白在说些啥。嘿嘿嘿。

接下来,摘要一些文章里主要提出的几个文献总结的观点以及对应的模型名字,遇到相关的或者感兴趣的方向,大家可以去查阅资料看对应的研究工作:

除了用于微调,Lora这种训练模式也可以用在预训练以及持续训练(Continual training)。

  • 预训练:相关工作可以看看ReLoRA、MoRA、LTE(LoRA the Explorer)
  • 持续训练:InfLoRA、GS-LoRA、I-LoRA

Lora可以用来解决大语言模型上下文窗口有限这个问题

LongLoRA以及优化计算后的SinkLoRA,把Lora用在了注意力矩阵上。

LongLoRA的示意图

SinkLoRA的示意图

Low-rank的这个rank一直low对下游任务不友好,为了优化下游任务的表现,rank值需要进行一定的调整。

Breaking the Low-rank Bottleneck

  • Stacking LoRAs along Fine-tuning,ReLoRA、COLA、MELoRA
  • Updating as Gradient Compressor,FLoRA
  • Co-updating LLM and LoRA,Delta-LoRA

Dynamic Rank Allocation

  • 基于奇异值分解SVD,AdaLoRA、SaLoRA、IncreLoRA
  • 基于单秩分量SRD,DoRA、AutoLoRA、SoRA、ALoRA
  • 基于rank sampling,DyLoRA

学习过程优化

  • 优化初始化B和A俩矩阵的初始化,PiSSA、MiLoRA
  • 梯度更新优化,LoRA+、ResLoRA、SIBO、DoRA
  • 缓解过拟合,BiLoRA、HiddenKey

将LoRA和其他范式的学习任务结合

  • Laplace-LoRA、PILLOW(prompt matching via reinforcement learning in resource-constrained environments)、STAR(conStrainT LoRA with dynamic Active leaRning)

在多任务的框架里使用Lora的策略

作者画的这个示意图就非常的好理解,比如我在一个多任务的学习框架中,每个任务都配置一个lora,那我怎么去结合这几个任务lora出来的结果呢?

  • 手动指定权重,ControlPE、Token- level Adaptation、BYOM
  • 让网络去学习权重,LoRAHub、ComPEFT、L-LoRA、MixLoRA、X-LoRA
  • 在最开始的时候就让lora学习权重(Mixture of LoRA Experts),Mixture-of-LoRAs、MultiLoRA、MTLoRA、MoLA、LLaVA- MoLE、SiRA、Octavius、Fast LoRA

改进Lora结构的计算效率

  • 减少参数(把LoRA里的一些参数冻结起来、不重要的参数修剪掉、共享一些参数以减少计算成本),LoRA-SP、LoRA-FA、AFLoRA、DropBP、LoRA-XS、BYOM-LoRA,balablablabloooorrrrra(嘿嘿嘿,不想列了,大家看论文吧)
  • 量化参数,这个咱可太熟悉了,最熟悉的就是QLoRA,目前已经有各种Q了,LoftQ、ApiQ、L4Q...
  • 平行计算框架,在单个GPU上并行微调多个LoRA或者并行inference,提高计算效率

将LoRA应用在联邦学习的任务上

啥是联邦学习吧,就是因为数据不出库啥的,要保证数据隐私,于是乎搞出了一种分布式机器学习方法,让大家在不共享原始数据的情况下共同训练一个全局模型。核心思想是将模型训练过程分布在各个本地设备或服务器上,而不是集中在一个中央服务器上,从而保护数据隐私和安全。具体我就不展开了,看个图。

最后呢,作者展开讲了一下目前LoRA应用的场景,比如传统NLP,写代码,垂直领域任务,图片分割、多模态等等,不展开了不展开了。

最后的最后,作者还在一些目前比较热门的主题上进行展望,比如Generative-as-a-Service (GaaS)(基于大模型的这些生成式模型如何在不占用用户资源的情况下提供给用户)、Continued Pre-training(垂直领域上进一步训练已有的大模型)和Autonomous Agents(基于大语言模型执行特定任务的自动代理),这三个方向。

最后的最后,不知道为什么,看到这篇文献综述,一边觉得有意思,一边又觉得生活挺没意思的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值